Skip to main content

Boot.py is an small set of tools to build simple scripts. Python3 only, and really small: 2Kb!

Project description

https://badge.fury.io/py/boot.py.svg https://travis-ci.org/mariocesar/boot.py.svg?branch=master

Install and Use

Install with pip.

pip install boot.py

Create a file and import boot. For example this will install a virtual environment, install requirements, and create some files.

#!/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.

$ ./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.

#!/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:

from boot.cli import ActionsCommand

if __name__ == '__main__':
    ActionsCommand.main(
        default=build >> requirements,
        build=build,
        requirements=requirements,
    }

This parse –help

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

boot.py-0.13.tar.gz (5.5 kB view details)

Uploaded Source

Built Distribution

boot.py-0.13-py2.py3-none-any.whl (8.4 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file boot.py-0.13.tar.gz.

File metadata

  • Download URL: boot.py-0.13.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for boot.py-0.13.tar.gz
Algorithm Hash digest
SHA256 0eebbf0ded4eeaaa3a9281f92427c3e2a3a2a6f489208e68cdc6cc438341be14
MD5 bda8df4127d2f1ddda59a87dfec0ee7a
BLAKE2b-256 ec882f54eee6a846922c8b5add68eac96a941e793ac74892d92ccd66b6bab115

See more details on using hashes here.

File details

Details for the file boot.py-0.13-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for boot.py-0.13-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 f1dfafdf84ecce09e6ccc8188dab7303af9e3bd6d6ef7ed2123f2e389ab617b3
MD5 7f92d2a56f83b7cc03164eba2b82bc6a
BLAKE2b-256 471ab87e5d5407d4115568d3e8fbbbb6f78482c3e04f56fdef1028911a830dbc

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page