Simplified profile prep-execution slightly in guided.py. The code can be improved further but it's now more easily read what's going on.

This commit is contained in:
Anton Hvornum 2021-02-17 14:21:46 +01:00
parent 758b12e674
commit ad4733bbd0
3 changed files with 27 additions and 26 deletions

View File

@ -157,6 +157,23 @@ class Profile(Script):
def install(self):
return self.execute()
def has_prep_function(self):
with open(self.path, 'r') as source:
source_data = source.read()
# Some crude safety checks, make sure the imported profile has
# a __name__ check and if so, check if it's got a _prep_function()
# we can call to ask for more user input.
#
# If the requirements are met, import with .py in the namespace to not
# trigger a traditional:
# if __name__ == 'moduleName'
if '__name__' in source_data and '_prep_function' in source_data:
with profile.load_instructions(namespace=f"{selected_profile}.py") as imported:
if hasattr(imported, '_prep_function'):
return True
return False
class Application(Profile):
def __repr__(self, *args, **kwargs):
return f'Application({os.path.basename(self.profile)})'

View File

@ -174,23 +174,7 @@ def select_profile(options):
else:
RequirementError("Selected profile does not exist.")
profile = Profile(None, selected_profile)
with open(profile.path, 'r') as source:
source_data = source.read()
# Some crude safety checks, make sure the imported profile has
# a __name__ check and if so, check if it's got a _prep_function()
# we can call to ask for more user input.
#
# If the requirements are met, import with .py in the namespace to not
# trigger a traditional:
# if __name__ == 'moduleName'
if '__name__' in source_data and '_prep_function' in source_data:
with profile.load_instructions(namespace=f"{selected_profile}.py") as imported:
if hasattr(imported, '_prep_function'):
return imported
return profile
return Profile(None, selected_profile)
raise RequirementError("Selecting profiles require a least one profile to be given as an option.")

View File

@ -185,15 +185,15 @@ else:
archinstall.arguments['profile'] = archinstall.list_profiles()[archinstall.arguments['profile']]
# Check the potentially selected profiles preperations to get early checks if some additional questions are needed.
print(archinstall.arguments['profile'])
if archinstall.arguments['profile']:
if not archinstall.arguments['profile']._prep_function():
archinstall.log(
' * Profile\'s preparation requirements was not fulfilled.',
bg='black',
fg='red'
)
exit(1)
if archinstall.arguments['profile'] and archinstall.arguments['profile'].has_prep_function():
with archinstall.arguments['profile'].load_instructions(namespace=f"{archinstall.arguments['profile'].namespace}.py") as imported:
if not imported._prep_function():
archinstall.log(
' * Profile\'s preparation requirements was not fulfilled.',
bg='black',
fg='red'
)
exit(1)
# Additional packages (with some light weight error handling for invalid package names)
if not archinstall.arguments.get('packages', None):