Run a specified command (by default, the nose test discovery and execution tool) whenever a source file is changed.
Run the nose test discovery and execution tool whenever a source file is changed.
An elaborated version of Jeff Winkler’s nosy tool that runs nose whenever a source file is changed. This version has a command line parser added, and the capability to use a configuration file to control what files are watched, and how nose runs.
$ nosy -h
Usage: nosy [options]
Automatically run nose whenever source files change.
-h, --help show this help message and exit -c CONFIG_FILE, --config=CONFIG_FILE configuration file path and name; defaults to setup.cfg
Configuration file section contents example:
[nosy] # Paths to check for changed files; changes cause nose to be run base_path = ./ glob_patterns = *.py exclude_patterns = *_flymake.* extra_paths = sample.cfg # Command line options to pass to nose options = -x # Command line arguments to pass to nose; e.g. part of test suite to run tests = tests/unit_tests.py
Configuration file is read by a Python standard library ConfigParser object, so:
- Lines beginning with “#” or “;” are ignored and may be used to provide comments.
- Entries can be in the form “name: value” or “name=value”, with continuations in the style of RFC 822.
- Leading whitespace is removed from values.
- Format string substitution in values is supported.
Within the [nosy] section 6 options may be specified:
- base_path - The directory in which to start walking the tree to check for changed files. Defaults to ..
- glob_patterns - A whitespace separated list of shell glob patterns to check for changes. Defaults to *.py.
- exclude_patterns - A whitespace separated list of shell glob patterns to exclude when checking for changes. Defaults to ‘’.
- extra_paths - A whitespace separated list of shell glob patterns to add to the paths that are checked for changes. Defaults to ‘’.
- options - A string of options to be passed through to nose when it is executed.
- tests - A string of command line arguments to be passed through to nose when it is executed. Useful for specifying part of the test suite to run.
Including the configuration file in the watched paths allows you to change nose’s behaviour on the fly.
The source code and bug tracker for this package is available on Bitbucket.
- Change exception handling to preserve backward compatibility with Python 2.5.
- Add Vagrant and tox configurations for automation of testing against multiple Python versions.
- Add support for Python 3.2, 3.3, 3.4, and 3.5. Thanks to @ronnix and @StefanWiechula for pull requests, and to @jacebrowning for in-use testing.
- Fix test suite issues re: multiple Python versions.
- Add test_runner option in the config file to specify the test runner command to use; defaults to nosetests.
- Fix packaging errors. CHANGELOG was missing from MANIFEST.in, and setup.py failed under Python 2.5 due to the use of context managers.
- Refactored checksum calculations to flatten nested loops and improve testability.
- Added test suite.
- Fixed a bug that caused nose not to run when exclude_patterns was empty. Thanks to Greg Haskins for the patch, and an anonymous issue reporter on Bitbucket.
- Fixed a bug that caused files in the base_path not to be monitored. Thanks to Greg Haskins for the patch.
- Configuration file now defaults to setup.cfg.
- New configuration options to make it easier to use nosy in projects with deep directory structures. The checksum calculator now uses os.walk() starting from base_path, including files given by a list of glob_patterns, excluding those given by a list of exclude_patterns. Files given by the extra_paths list are also glob-ed in to handle anything that the first 3 options don’t easily catch. Thanks to Jussi Rasinmäki for the suggestion.
- The paths configuration option is retained for backward compatibility only.
- Changed from setuptools to distribute for packaging.
- Source code and issue tracker now on bitbucket.org: https://bitbucket.org/douglatornell/nosy
- Released under New BSD License.
- Released on PyPI: http://pypi.python.org/pypi/nosy
- Original release.