index : archinstall32 | |
Archlinux32 installer | gitolite user |
summaryrefslogtreecommitdiff |
author | Anton Hvornum <anton.feeds+github@gmail.com> | 2020-09-30 09:11:36 +0000 |
---|---|---|
committer | Anton Hvornum <anton.feeds+github@gmail.com> | 2020-09-30 09:11:36 +0000 |
commit | 85fd06fa8a20a1861c9ec0d8e15da954fe5cdd43 (patch) | |
tree | 9bcb45341bd95a225800c5c7680c632e4ebff5cd /archinstall | |
parent | 5a4d68e617ba4e76137db96542ebaeb08acd70cb (diff) |
-rw-r--r-- | archinstall/lib/profiles.py | 5 | ||||
-rw-r--r-- | archinstall/lib/user_interaction.py | 13 |
diff --git a/archinstall/lib/profiles.py b/archinstall/lib/profiles.py index 45d82531..f63fb96d 100644 --- a/archinstall/lib/profiles.py +++ b/archinstall/lib/profiles.py @@ -88,9 +88,10 @@ class Profile(): def load_instructions(self): if (absolute_path := self.path): if os.path.splitext(absolute_path)[1] == '.py': - spec = importlib.util.spec_from_file_location(absolute_path, absolute_path) + namespace = os.path.splitext(os.path.basename(absolute_path))[0] + spec = importlib.util.spec_from_file_location(namespace, absolute_path) imported = importlib.util.module_from_spec(spec) - sys.modules[os.path.basename(absolute_path)] = imported + sys.modules[namespace] = imported return Imported(spec, imported) else: raise ProfileError(f'Extension {os.path.splitext(absolute_path)[1]} is not a supported profile model. Only .py is supported.') diff --git a/archinstall/lib/user_interaction.py b/archinstall/lib/user_interaction.py index 2a797490..4fc6c8d9 100644 --- a/archinstall/lib/user_interaction.py +++ b/archinstall/lib/user_interaction.py @@ -1,4 +1,5 @@ from .exceptions import * +from .profiles import Profile from .locale_helpers import search_keyboard_layout ## TODO: Some inconsistencies between the selection processes. @@ -43,6 +44,18 @@ def select_profile(options): selected_profile = options[options.index(selected_profile)] 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 '__name__' in source_data and '_prep_function' in source_data + with profile.load_instructions() as imported: + if hasattr(imported, '_prep_function'): + return profile, imported return selected_profile raise RequirementError("Selecting profiles require a least one profile to be given as an option.") |