Add filtration on top level profile
This commit is contained in:
parent
ea81759e40
commit
4059d62e55
|
|
@ -177,6 +177,7 @@ class Profile(Script):
|
||||||
if hasattr(imported, '_prep_function'):
|
if hasattr(imported, '_prep_function'):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def has_post_install(self):
|
def has_post_install(self):
|
||||||
with open(self.path, 'r') as source:
|
with open(self.path, 'r') as source:
|
||||||
source_data = source.read()
|
source_data = source.read()
|
||||||
|
|
@ -193,6 +194,35 @@ class Profile(Script):
|
||||||
if hasattr(imported, '_post_install'):
|
if hasattr(imported, '_post_install'):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def is_top_level_profile(self):
|
||||||
|
with open(self.path, 'r') as source:
|
||||||
|
source_data = source.read()
|
||||||
|
|
||||||
|
# TODO: I imagine that there is probably a better way to write this.
|
||||||
|
return 'top_level_profile = True' in source_data
|
||||||
|
|
||||||
|
@property
|
||||||
|
def packages(self) -> list:
|
||||||
|
"""
|
||||||
|
Returns a list of packages baked into the profile definition.
|
||||||
|
If no package definition has been done, .packages() will return None.
|
||||||
|
"""
|
||||||
|
with open(self.path, 'r') as source:
|
||||||
|
source_data = source.read()
|
||||||
|
|
||||||
|
# Some crude safety checks, make sure the imported profile has
|
||||||
|
# a __name__ check before importing.
|
||||||
|
#
|
||||||
|
# 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 '__packages__' in source_data:
|
||||||
|
with self.load_instructions(namespace=f"{self.namespace}.py") as imported:
|
||||||
|
if hasattr(imported, '__packages__'):
|
||||||
|
return imported.__packages__
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
class Application(Profile):
|
class Application(Profile):
|
||||||
def __repr__(self, *args, **kwargs):
|
def __repr__(self, *args, **kwargs):
|
||||||
return f'Application({os.path.basename(self.profile)})'
|
return f'Application({os.path.basename(self.profile)})'
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
import getpass, time, json, sys, signal, os
|
import getpass, time, json, sys, signal, os
|
||||||
import archinstall
|
import archinstall
|
||||||
|
from archinstall.lib.hardware import hasUEFI
|
||||||
|
from archinstall.lib.profiles import Profile
|
||||||
|
|
||||||
"""
|
"""
|
||||||
This signal-handler chain (and global variable)
|
This signal-handler chain (and global variable)
|
||||||
|
|
@ -166,7 +168,7 @@ def ask_user_questions():
|
||||||
|
|
||||||
# Ask for archinstall-specific profiles (such as desktop environments etc)
|
# Ask for archinstall-specific profiles (such as desktop environments etc)
|
||||||
if not archinstall.arguments.get('profile', None):
|
if not archinstall.arguments.get('profile', None):
|
||||||
archinstall.arguments['profile'] = archinstall.select_profile(archinstall.list_profiles())
|
archinstall.arguments['profile'] = archinstall.select_profile(filter(lambda profile: (Profile(None, profile).is_top_level_profile()), archinstall.list_profiles()))
|
||||||
else:
|
else:
|
||||||
archinstall.arguments['profile'] = archinstall.list_profiles()[archinstall.arguments['profile']]
|
archinstall.arguments['profile'] = archinstall.list_profiles()[archinstall.arguments['profile']]
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue