Metadata-Version: 1.2
Name: boot.py
Version: 0.15
Summary: Boot.py is an small set of tools to build simple scripts. Python3 only, and really small: 2Kb!
Home-page: https://github.com/mariocesar/boot.py
Author: Mario César Señoranis Ayala
Author-email: mariocesar.c50@gmail.com
License: UNKNOWN
Description-Content-Type: UNKNOWN
Description: 
        .. image:: https://badge.fury.io/py/boot.py.svg
            :target: https://pypi.python.org/pypi/boot.py/
        
        .. image:: https://travis-ci.org/mariocesar/boot.py.svg?branch=master
            :target: https://travis-ci.org/mariocesar/boot.py
        
        Install and Use
        ---------------
        
        Install with pip.
        
        .. code-block:: console
        
            pip install boot.py
        
        
        Create a file and import `boot`. For example this will install a virtual
        environment, install requirements, and create some files.
        
        .. code-block:: python
        
            #!/usr/bin/env python3
            import os
            import venv
        
            from boot import step, run
            from pathlib import Path
        
            root_path = Path(__file__).parent.resolve()
            venv_dir = root_path / '.venv'
        
            with step(f'Creating virtualenv in {venv_dir.name}'):
                if not venv_dir.exists():
                    venv.create(venv_dir, with_pip=True)
        
            with step('Installing requirements'):
                run(f'{venv_dir / "bin/pip"} install -r requirements.txt')
        
            with step('Creating directories'):
                run(f'mkdir -p public/media')
                run(f'mkdir -p public/static')
        
            with step('Environment file'):
                envfile = root_path / '.env'
        
                if not envfile.exists():
                    with open(envfile, 'w') as handle:
                        os.chmod(envfile, 0o600)
                        handle.write('')
        
        This will output.
        
        .. code-block:: console
        
            $ ./script.py
            Creating virtualenv in .venv ... [Ok]
            Installing requirements ... [Ok]
            Installing project ... [Ok]
            Creating directories ... [Ok]
            Environment file ... [Ok]
        
        Simple!
        
        You can also compose tasks to decide what to execute and what order.
        
        .. code-block:: python
        
            #!/usr/bin/env python3
            import os
            import venv
        
            from boot import step, run, task
            from pathlib import Path
        
            root_path = Path(__file__).parent.resolve()
            venv_dir = root_path / '.venv'
        
        
            @task
            def build(this)
                with step(f'Creating virtualenv in {venv_dir.name}'):
                    if not venv_dir.exists():
                        venv.create(venv_dir, with_pip=True)
        
                with step('Creating directories'):
                    run(f'mkdir -p public/media')
                    run(f'mkdir -p public/static')
        
                with step('Environment file'):
                    envfile = root_path / '.env'
        
                    if not envfile.exists():
                        with open(envfile, 'w') as handle:
                            os.chmod(envfile, 0o600)
                            handle.write('')
        
        
            @task
            def requirements(this)
                with step('Installing requirements'):
                    run(f'{venv_dir / "bin/pip"} install -r requirements.txt')
        
        
            @task
            def backup(this)
                with step(f'Backup db'):
                    run('pg_dump -d database -f output.sql')
        
        
            if __name__ == '__main__':
                tasks = {
                    'default': build >> requirements,
                    'build': build,
                    'requirements': requirements,
                }
        
                if len(sys.argv) == 1:
                    if sys.argv[0] in tasks:
                        tasks[sys.argv[0]]()
                    else:
                        print(f'Unknown task: {sys.argv[0]}')
                        print(f'Available tasks are: {tasks.keys()}')
                else:
                    default()
        
        There are helpers to build scripts with less code, for example
        we can replace in the code above the main call with a
        a simple task argument parser:
        
        
        .. code-block:: python
        
            from boot.cli import ActionsCommand
        
            if __name__ == '__main__':
                ActionsCommand.main(
                    default=build >> requirements,
                    build=build,
                    requirements=requirements,
                }
        
        This parse `--help` 
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: License :: OSI Approved :: MIT License
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.6
