{ "info": { "author": "Michael Howitz", "author_email": "icemac@gmx.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Environment :: MacOS X", "Framework :: Buildout :: Recipe", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: MacOS :: MacOS X", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 2 :: Only", "Topic :: Software Development :: Testing", "Topic :: Utilities" ], "description": "icemac.callonchange calls a specific command when a directory or\nsomething in it has changed. It was developed to ease test driven\ndevelopment (TDD): it can call the test case under development each\ntime the test case or the developed code changes.\n\n.. contents::\n\n\nChangelog\n=========\n\n0.8 (2018-08-03)\n----------------\n\n- Fixed tests to run with `zc.buildout >=1.7`.\n\n- Moved source code to https://bitbucket.org/icemac/icemac.callonchange.\n\n- Dropped support for Python < 2.7.\n\n- Changed license from ZPL to MIT.\n\n\n0.7.0 (2011-01-18)\n------------------\n\n- Added new option to run the utility immediately after invoking\n callonchange. This option was also added to the default options when using\n the recipe.\n\n\n0.6.1 (2010-12-11)\n------------------\n\n- Made tests more robust.\n\n- Added more similar tools to the list.\n\n\n0.6 (2010-07-28)\n----------------\n\n- Added compatibility with Python 2.4.\n\n- Now officially supporting Python 2.6 and 2.7, too.\n\n\nOlder changes\n-------------\n\n- See `OLD_CHANGES.rst` inside the package.\n\n\n\nRequirements\n============\n\n* Mac OS X 10.5+ (Leopard)\n* Python 2.7\n\nGeneral usage\n=============\n\nUsage: callonchange [options] path utility [utility arguments]\n\ncallonchange invokes *utility* with its *utility arguments* when\n*path* or something in it changes.\n\nOptions:\n --version show program's version number and exit\n -h, --help show this help message and exit\n -e EXTENSION only call utility on changes of a file with this extension\n (option might be used multiple times)\n -i Run utility immediately after callonchange has been started.\n (By default the utility is only run when something changed.)\n -q Do not display any output of callonchange. (Still displays the\n output of the utility.)\n\n\n*EXTENSION* might be specified with or without a leading dot:\n\n ``-e .py`` is equal to ``-e py`` is equal to ``-epy``\n\n**Caution:** optional arguments must be specified *before* the\npositional arguments (path and utility). Arguments specified after the\npositional arguments are taken as arguments of the utility.\n\n\nUsage as script\n===============\n\nInstallation\n------------\n\nTo install callonchange as script call::\n\n $ python setup.py install\n\nor install it using a package manager like easy_install or pip.\n\nCall as script\n--------------\n\nTo call it as a script add the path to the directory to be observed\nand the command (script or program) to be called when the directory or\nsomething in it has changed.\n\nExample to call ``xeyes`` when a file with the extension `log` has\nchanged in `/var/log` enter::\n\n $ callonchange -e log /var/log xeyes\n\n**Caution:** In this example `xeyes` is called on every new entry in\nthe log file.\n\n\nIn buildout\n===========\n\nThere is a recipe in the package which eases installation using\nbuildout.\n\nInstallation with default arguments\n-----------------------------------\n\nAdd a section to your buildout to generate a script for callonchange\n(don't forget to add it to the parts!)::\n\n [coc]\n recipe = icemac.callonchange\n\nThis creates a callonchange script with default arguments. These are::\n\n '-i', '-e', 'py', '-e', 'zcml', '-e', 'pt', '-e', 'txt', 'src', 'bin/test', '-cv'\n\nWhich means: observe in the `src` directory files with the extensions\npy, zcml, pt and txt. Call ``bin/test`` with the arguments ``cv`` (verbose\nand color) when callonchange has been invoked and later on when something\nhas changed.\n\nInstallation with customized arguments\n--------------------------------------\n\nTo override the default arguments add an `arguments` parameter to the\nbuildout section::\n\n [coc]\n recipe = icemac.callonchange\n name = coc\n arguments = 'Products', 'bin/ztest'\n\nThis means: The created script will be named `coc`. When called it\nwill observe the `Products` directory and call ``bin/ztest`` on\nchanges.\n\n\nUsage as buildout script\n------------------------\n\nYou can add additional parameters when you call the generated script::\n\n $ bin/callonchange -t testObserver\n\nWhen you use the default arguments in the buildout section, this\ncommand line calls ``bin/test -cv -t testObserver`` on each change of\npy, zcml, pt or txt files in the `src` directory.\n\nStopping callonchange\n=====================\n\nTo stop a running callonchange instance hit ^C (Control-C).\n\nThanks\n======\n\nThanks to Malte Borch for the great MacFSEvents_ which\nicemac.callonchange is based on.\n\n.. _MacFSEvents: http://pypi.python.org/pypi/MacFSEvents\n\nSimilar tools\n=============\n\n(Sorted by the time I got to know them.)\n\n* pest_: \"Auto tester for python\" Seems to be designed to run tests\n and nothing else. Has growl integration. Current version (1.0.3) has\n no automatic tests.\n\n* sniffer_: \"An automatic test runner. Supports nose out of the box.\"\n Supports Linux, Windows and Mac OS X. Current version (0.2.2) has no\n automatic tests.\n\n* autonose_: \"continuous test tracker / runner for nosetests\" Seems to\n focus on nose tests. Version 0.2 only acts on changes of python\n files.\n\n* PyZen_: \"Continuous testing for paranoid developers.\" Seems to be tightly\n integrated into python's `unittest` framework and Django. Detects file\n changes using comparison of file modification time stamps. So it is slow\n on larger code bases. Version 0.1 has no automatic tests.\n\n* Flask-Zen_: \"Flask-Script commands to integrate with PyZen.\" Light layer\n around PyZen to integrate it into Flask. Version 0.1 has no automatic\n tests.\n\n* nosier_: \"Monitors paths and upon detecting changes runs the specified\n command\" It is however limited to Linux 2.6 since it depends on the\n inotify facility. Uses black lists and white lists for files thos changes\n sould be tracked and has some other nice features. Version 1.1 has no\n automatic tests.\n\n* supcut_: \"Simple unobtrusive Python continuous unit testing\" It is limited\n to Linux as it depends on inotify. Expects some of its template files are\n installed in `/usr/share/doc/python-supcut/examples`. Although it always\n talks about running nose tests, it might be used for arbitrary calls,\n too. Can send e-mails about test run. Version 0.5.1 has no automatic\n tests.\n\n* rerun_: \"Command-line executable Python script to re-run the given command\n every time files are modified in the current directory or its\n subdirectories.\" Runs OS independent but polls the change times of\n files. Version 1.0.16 has no automatic tests.\n\n\n.. _pest: http://pypi.python.org/pypi/pest\n.. _sniffer: http://pypi.python.org/pypi/sniffer\n.. _autonose: http://pypi.python.org/pypi/autonose\n.. _PyZen: http://pypi.python.org/pypi/PyZen\n.. _Flask-Zen: http://pypi.python.org/pypi/Flask-Zen\n.. _nosier: http://pypi.python.org/pypi/nosier\n.. _supcut: http://pypi.python.org/pypi/supcut\n.. _rerun: http://pypi.python.org/pypi/rerun\n\n\nIdeas\n=====\n\n- It would be nice to have predefined argument lines (profiles) even\n when not using buildout. They could be stored in the home directory\n of the user. (Should support profiles which reverence other\n profiles.)\n\n- In buildout recipe: default script name should be section name.\n\n- A minimal time between calls (delay) might be nice, so a change does not\n result in a call of the utility when it occurred during the delay time.\n\n- The options of callonchange should have long variants, too.\n\n- White list/black list approach of nosier seems to be nice.\n\n- When observing large trees for changes of files with a specific extension,\n starting up the script can take while as the whole tree has to to be\n scanned once. During this start up period changes are not yet handled, so\n a message would be nice when start up is done.\n\n- http://pypi.python.org/pypi/watchdog could be a way to get callonchange\n running on Linux and Windows, too.\n\nHacking\n=======\n\nSource code\n-----------\n\nGet the source code::\n\n $ hg clone https://bitbucket.org/icemac/icemac.callonchange\n\nor fork me on: https://bitbucket.org/icemac/icemac.callonchange\n\nRunning Tests\n-------------\n\n(Currently not running successfully on Travis-CI until Mac OS X gets\nsupported there.)\n\n.. image:: https://secure.travis-ci.org/icemac/icemac.callonchange.png\n :target: https://travis-ci.org/icemac/icemac.callonchange\n\nTo run the tests of `icemac.callonchange` call::\n\n $ python setup.py test\n\nor use `zc.buildout`::\n\n $ python bootstrap.py\n $ bin/buildout\n $ bin/test\n\nor use `callonchange` itself::\n\n $ python bootstrap.py\n $ bin/buildout\n $ bin/callonchange\n\nIn the last version you have to change something inside the `src`\ndirectory of the package so the observer lets the tests run.", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://pypi.python.org/icemac.callonchange", "keywords": "mac os event fs filesystem call change command tdd test driven development", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "icemac.callonchange", "package_url": "https://pypi.org/project/icemac.callonchange/", "platform": "", "project_url": "https://pypi.org/project/icemac.callonchange/", "project_urls": { "Homepage": "http://pypi.python.org/icemac.callonchange" }, "release_url": "https://pypi.org/project/icemac.callonchange/0.8/", "requires_dist": null, "requires_python": "", "summary": "Call a command when a directory or file has changed. (Mac OS only)", "version": "0.8" }, "last_serial": 4131551, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "28f4180e206574c6bb5269bb5dd42da2", "sha256": "a07d41ed4b0b0d03da6864585450c1b4a835d4f54c2ade8e71660ace08661364" }, "downloads": -1, "filename": "icemac.callonchange-0.1.tar.gz", "has_sig": false, "md5_digest": "28f4180e206574c6bb5269bb5dd42da2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6581, "upload_time": "2010-07-02T18:39:45", "url": "https://files.pythonhosted.org/packages/2a/1c/b0b0e77732820a52bd6f3905083bd6826d47ed1ea31f7cd8bf418d77b6b4/icemac.callonchange-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "2cfa434cb695236af7a4500591f69ae1", "sha256": "afdc2fe03a642b0c78f5b6efb75d0b1956abaafb787745b2c23fe700faac3488" }, "downloads": -1, "filename": "icemac.callonchange-0.2.tar.gz", "has_sig": false, "md5_digest": "2cfa434cb695236af7a4500591f69ae1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8454, "upload_time": "2010-07-04T18:16:47", "url": "https://files.pythonhosted.org/packages/07/93/52050dd8d96005eeda8ce0b12438aea6e5a62e820868c9d36e3e5d14ce34/icemac.callonchange-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "30af43cb4edba68ff96aada1524b44a2", "sha256": "9025e8e0179c667f65d9cc8df5632d6e2583978748a83dcbb0982c159d25dff1" }, "downloads": -1, "filename": "icemac.callonchange-0.3.tar.gz", "has_sig": false, "md5_digest": "30af43cb4edba68ff96aada1524b44a2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10772, "upload_time": "2010-07-07T22:25:22", "url": "https://files.pythonhosted.org/packages/1e/14/66e1e4c4122dd23d6c71a2b22acfe0b9866862984e58a191e47646fda64e/icemac.callonchange-0.3.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "ef52ab37ad573bfb302e19e8dba26c3a", "sha256": "9702b54046343133539f5444b734d5c4748f541aecb9c04214a51ab2af5f6cd7" }, "downloads": -1, "filename": "icemac.callonchange-0.3.1.tar.gz", "has_sig": false, "md5_digest": "ef52ab37ad573bfb302e19e8dba26c3a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11028, "upload_time": "2010-07-10T16:23:33", "url": "https://files.pythonhosted.org/packages/74/43/9a8832040660b9a72b19e05b64764f3b82ca8ec61c4199e971ee3fda7c69/icemac.callonchange-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "00d8e5792e0b9cd673e57671d9d941b3", "sha256": "a18c358aecf5548ce3a602ad013cff0e4873a87b933873297e5abb5dd70b8214" }, "downloads": -1, "filename": "icemac.callonchange-0.3.2.tar.gz", "has_sig": false, "md5_digest": "00d8e5792e0b9cd673e57671d9d941b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11309, "upload_time": "2010-07-14T08:22:15", "url": "https://files.pythonhosted.org/packages/74/78/bd370022d82701cc8e10cea73113ef62c17372b4c4284727f54d59299c00/icemac.callonchange-0.3.2.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "c6e1ec242d7544c3629583559307c773", "sha256": "bab8bc6a5e36132c94aa8af2e5e73a49f271563346c75e5f5da201c647228b79" }, "downloads": -1, "filename": "icemac.callonchange-0.4.0.tar.gz", "has_sig": false, "md5_digest": "c6e1ec242d7544c3629583559307c773", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13073, "upload_time": "2010-07-16T22:29:00", "url": "https://files.pythonhosted.org/packages/44/65/4c23c4a508b1b045573c8ebb67403118aa8db0357d97c9f3c6c077fa664d/icemac.callonchange-0.4.0.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "a950800350fd64ef465893bfd6398cc5", "sha256": "87817c2a9a740d0c4dad19e4697fc7b1dd36176532739cd2ffd97151aa2fdc49" }, "downloads": -1, "filename": "icemac.callonchange-0.5.tar.gz", "has_sig": false, "md5_digest": "a950800350fd64ef465893bfd6398cc5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13319, "upload_time": "2010-07-21T08:24:51", "url": "https://files.pythonhosted.org/packages/35/c8/25cd36a65c73364ce55b21b84b359847b759f8a1890d5cf3c9a16e35cab5/icemac.callonchange-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "b83225bcb54837845ebbd5c0bf5e66c7", "sha256": "2ec5d1a1da763aa2cef675ab5c86c6dc0e2ef2961d81a856d6d86789b1eb9da1" }, "downloads": -1, "filename": "icemac.callonchange-0.6.tar.gz", "has_sig": false, "md5_digest": "b83225bcb54837845ebbd5c0bf5e66c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13416, "upload_time": "2010-07-28T07:58:18", "url": "https://files.pythonhosted.org/packages/dd/42/498692b2ceded79abbf84ac618c15d43820b80bca5f6aa0717b22ad08d46/icemac.callonchange-0.6.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "986393b457848b52554b3930d81af8f8", "sha256": "9fccba26f08871732db292c022aba540fceefce6fb9e0cd9ae26262fe0d52447" }, "downloads": -1, "filename": "icemac.callonchange-0.6.1.tar.gz", "has_sig": false, "md5_digest": "986393b457848b52554b3930d81af8f8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14463, "upload_time": "2010-12-11T15:37:16", "url": "https://files.pythonhosted.org/packages/94/d8/8c4777984c977088a247d02e440129886cd5f6a29b0154d07ead646beb7a/icemac.callonchange-0.6.1.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "fb83b5fbc18773a8eee1c8773c8bf414", "sha256": "c34e9a2d5b8a8a10fada241f482c8d21e1c72eb0793f3f4954667ed6b73a769e" }, "downloads": -1, "filename": "icemac.callonchange-0.7.0.tar.gz", "has_sig": false, "md5_digest": "fb83b5fbc18773a8eee1c8773c8bf414", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14777, "upload_time": "2011-01-18T19:26:18", "url": "https://files.pythonhosted.org/packages/f7/98/28879f2f589eeff42040fc4672317ad88b67d0eb9746ba0a7e6ca86c99b9/icemac.callonchange-0.7.0.tar.gz" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "73fcecf8e83e789bcb84790a2d37c016", "sha256": "592ce190ce6e6767f7b23505bc24b352e5bfdb55dcbfdc4a5cff214a859b3037" }, "downloads": -1, "filename": "icemac.callonchange-0.8.tar.gz", "has_sig": false, "md5_digest": "73fcecf8e83e789bcb84790a2d37c016", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17954, "upload_time": "2018-08-03T08:07:14", "url": "https://files.pythonhosted.org/packages/e2/0e/f9f7f057eccb590231e6010563b2068ae761ed3cab51f5cb8c2aca7aa2ae/icemac.callonchange-0.8.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "73fcecf8e83e789bcb84790a2d37c016", "sha256": "592ce190ce6e6767f7b23505bc24b352e5bfdb55dcbfdc4a5cff214a859b3037" }, "downloads": -1, "filename": "icemac.callonchange-0.8.tar.gz", "has_sig": false, "md5_digest": "73fcecf8e83e789bcb84790a2d37c016", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17954, "upload_time": "2018-08-03T08:07:14", "url": "https://files.pythonhosted.org/packages/e2/0e/f9f7f057eccb590231e6010563b2068ae761ed3cab51f5cb8c2aca7aa2ae/icemac.callonchange-0.8.tar.gz" } ] }