From 06f8c46b3daaf0730a094c4cca26bd1fab6822af Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Tue, 21 Jul 2020 11:01:48 +0000 Subject: Added some more documentation. Also added a __init__.py in the git repo so that cloning enables importing as well. This should enable both git clone to work as well as pypi. --- __init__.py | 1 + archinstall/__main__.py | 23 +++++++++++++++++++---- archinstall/lib/installer.py | 23 +++++++++++++++++++++++ 3 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 __init__.py diff --git a/__init__.py b/__init__.py new file mode 100644 index 00000000..eaa33d02 --- /dev/null +++ b/__init__.py @@ -0,0 +1 @@ +from .archinstall import * diff --git a/archinstall/__main__.py b/archinstall/__main__.py index d5869020..fd536258 100644 --- a/archinstall/__main__.py +++ b/archinstall/__main__.py @@ -1,19 +1,30 @@ import archinstall, sys, os, glob import importlib.util -class ProfileNotFound(BaseException): - pass - # TODO: Learn the dark arts of argparse... # (I summon thee dark spawn of cPython) +class ProfileNotFound(BaseException): + pass + def find_examples(): + """ + Used to locate the examples, bundled with the module or executable. + + :return: {'guided.py' : './examples/guided.py', '' : ''} + :rtype: dict + """ cwd = os.path.abspath(f'{os.path.dirname(__file__)}') examples = f"{cwd}/examples" return {os.path.basename(path): path for path in glob.glob(f'{examples}/*.py')} -if __name__ == '__main__': +def run_as_a_module(): + """ + Ssince we're running this as a 'python -m archinstall' module OR + a nuitka3 compiled version of the project. + This function and the file __main__ acts as a entry point. + """ if len(sys.argv) == 1: sys.argv.append('guided') profile = sys.argv[1] @@ -22,7 +33,11 @@ if __name__ == '__main__': if not f'{profile}.py' in library: raise ProfileNotFound(f'Could not locate {profile}.py among the example files.') + # Import and execute the chosen `.py`: spec = importlib.util.spec_from_file_location(library[f'{profile}.py'], library[f'{profile}.py']) imported_path = importlib.util.module_from_spec(spec) spec.loader.exec_module(imported_path) sys.modules[library[f'{profile}.py']] = imported_path + +if __name__ == '__main__': + run_as_a_module() \ No newline at end of file diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index d53cc961..7f9aba71 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -7,6 +7,29 @@ from .user_interaction import * from .profiles import Profile class Installer(): + """ + `Installer()` is the wrapper for most basic installation steps. + It also wraps :py:func:`~archinstall.Installer.pacstrap` among other things. + + :param partition: Requires a partition as the first argument, this is + so that the installer can mount to `mountpoint` and strap packages there. + :type partition: class:`archinstall.Partition` + + :param boot_partition: There's two reasons for needing a boot partition argument, + The first being so that `mkinitcpio` can place the `vmlinuz` kernel at the right place + during the `pacstrap` or `linux` and the base packages for a minimal installation. + The second being when :py:func:`~archinstall.Installer.add_bootloader` is called, + A `boot_partition` must be known to the installer before this is called. + :type boot_partition: class:`archinstall.Partition` + + :param profile: A profile to install, this is optional and can be called later manually. + This just simplifies the process by not having to call :py:func:`~archinstall.Installer.install_profile` later on. + :type profile: str, optional + + :param hostname: The given /etc/hostname for the machine. + :type hostname: str, optional + + """ def __init__(self, partition, boot_partition, *, profile=None, mountpoint='/mnt', hostname='ArchInstalled'): self.profile = profile self.hostname = hostname -- cgit v1.2.3-70-g09d2