pyguard

Python auto test runner


License
Other
Install
pip install pyguard==0.0.4

Documentation

https://travis-ci.org/benemery/pyguard.svg?branch=master https://coveralls.io/repos/benemery/pyguard/badge.svg?branch=master&foo=bar

PyGuard

A python auto test runner inspired by the guard project.

A simple example that runs all the tests when a file is modified would look something like this:

from filewatch import file_updated_subject, Watcher

from pyguard import guardian, GuardianObserver, RegexRule, RuleManager

manager = RuleManager(cmd='py.test pyguard')
manager.register_rules(
        RegexRule(regex=r'.*/pyguard/.*'),
    )

guardian.register_manager(manager)

# Set up our file observer
file_updated_subject.register_observer(GuardianObserver())

# Get our watcher going
watcher = Watcher()
watcher.run()

Any RuleManager that you create will execute the given command whenever a registered rule matches a supplied file path.

To make things a little more granular, we can register a different set of rules. i.e.

...

manager = RuleManager(cmd='py.test pyguard/tests/test_{test_name}.py')
manager.register_rules(
        RegexRule(regex=r'.*/rules.py', cmd_augmentation={'test_name' : 'rules'}),
        RegexRule(regex=r'.*/core.py', cmd_augmentation={'test_name' : 'guardian'}),
    )

guardian.register_manager(manager)

...

To enforce a particular naming convention we can take things even further using named groups within the regex itself. If we have say a views.py and we know that the tests for said views exist in test_views.py, then we can simple use:

...

manager = RuleManager(cmd='py.test pyguard/tests/test_{test_name}.py')
manager.register_rules(
        RegexRule(regex=r'.*/(?P<test_name>views).py'),
    )

guardian.register_manager(manager)

...