Skip to main content

Handle a list of commands that should be executed easily and with undo support.

Project description

pycommands

CircleCI Codecov

Handle a list of commands that should be executed easily and with undo support.

How to use

Install

pycommands is available on PyPI

pip install pycommands

Basic usage

Definition of commands

from commands.base import BaseCommand
from commands.exceptions import CommandException
from commands.invoker import Invoker


class Command1(BaseCommand):
    def build(self):
        return "touch content.txt"

    def build_undo(self):
        return "rm content.txt"


class Command2(BaseCommand):
    def build(self):
        return "mv content.txt content-replaced.txt"

    def build_undo(self):
        return "mv content-replaced.txt content.txt"


class InvalidCommand(BaseCommand):
    def build(self):
        raise CommandException()

Simple default execution with success commands

from commands.invoker import Invoker


invoker = Invoker()

invoker.execute([
    Command1(),
    Command2(),
], run_undo=False)

# output
running command: touch content.txt
running command: mv content.txt content-replaced.txt


# If a invoker.undo() is called then all commands undo operation will be done in the LIFO order.

invoker.undo()

# output
running undo command: mv content-replaced.txt content.txt
running undo command: rm content.txt


# If a invoker.execute() is called with run_undo as True, then the undo operation will be done always
# that a command raise CommandException

invoker = Invoker()

invoker.execute([
    Command1(),
    Command2(),
    InvalidCommand(),
], run_undo=True)

# output
running command: touch content.txt
running command: mv content.txt content-replaced.txt
running command: touch content.txt
running command: mv content.txt content-replaced.txt
running undo command: mv content-replaced.txt content.txt
running undo command: rm content.txt

How to contribute

We welcome contributions of many forms, for example:

  • Code (by submitting pull requests)
  • Documentation improvements
  • Bug reports and feature requests

Setting up for local development

We use pipenv to manage dependencies, so make sure you have it installed.

Creating environment

/<project-path>/pipenv install --python=3

Activing environment

/<project-path>/pipenv shell

Install pre-commit hooks:

pre-commit install

Run tests by evoking pytest:

pytest

That's it! You're ready from development

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

pycommands-0.1.0.tar.gz (4.0 kB view details)

Uploaded Source

Built Distribution

pycommands-0.1.0-py3-none-any.whl (6.8 kB view details)

Uploaded Python 3

File details

Details for the file pycommands-0.1.0.tar.gz.

File metadata

  • Download URL: pycommands-0.1.0.tar.gz
  • Upload date:
  • Size: 4.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.37.0 CPython/3.7.4

File hashes

Hashes for pycommands-0.1.0.tar.gz
Algorithm Hash digest
SHA256 07e6c6e8a02dffb4414470654c5811df1daace75eaf06ff659af9840ff300d61
MD5 b40c7dc32dbbfbea47fc88099eeda127
BLAKE2b-256 cc80e0552c5cd413fb37f8c1e7ddfd0bbfcef06a89f24b043b0afc95f5401a58

See more details on using hashes here.

File details

Details for the file pycommands-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: pycommands-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 6.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.37.0 CPython/3.7.4

File hashes

Hashes for pycommands-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3822c15a7dea8179e7a273d0d2250f1e64c5b49dd4d8ea6ef4b8a6cc9c553c4c
MD5 b1cb380e1fc637a9b9b85ba840544cab
BLAKE2b-256 945b729ec06f3d8284f4c00852cc250d5a687384a64b7b1fb653f88aba6ac618

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