{ "info": { "author": "Chris McDonough, Agendaless Consulting", "author_email": "pylons-devel@googlegroups.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy" ], "description": "venusian\n========\n\nVenusian is a library which allows framework authors to defer\ndecorator actions. Instead of taking actions when a function (or\nclass) decorator is executed at import time, you can defer the action\nusually taken by the decorator until a separate \"scan\" phase.\n\nSee the \"docs\" directory of the package or the online documentation at\nhttp://docs.pylonsproject.org/projects/venusian/en/latest/\n\n\n2.0a3 (2016-01-27)\n------------------\n\n- Do an additional check to avoid scanning modules inserted by ``six``\n for Python 3 compatibility. ``six`` assumes these modules exist in\n Python but some of them, like ``gdbm``, cannot always be compiled,\n so don't scan these. This hack may actually not be strictly proper\n as it is possible for an outer module to be ignored while an inner\n module is allowed by an ``ignore`` function, but we'll not worry\n about that case for now.\n\n2.0a2 (2014-07-07)\n------------------\n\n- **NOTE** This will hopefully be in Venusian proper in Version 1.1; this\n fork is just so I can make progress with the new recursive option.\n\n- Add a ``recursive`` option to the ``.scan()`` method to allow the\n scanning of packages non-recursively (scan ``__init__.py`` only).\n\n- Some refactoring of internals from nested functions into separate\n methods.\n\n1.0 (2014-06-30)\n----------------\n\n- Fix an issue under PyPy > 2.0 where attached decorators may not be found.\n\n- Drop support of Python 2.4 / 2.5 / Jython.\n\n- Add ``lift`` and ``onlyliftedfrom`` class decorators to allow for inheritance\n of venusian decorators attached to superclass methods. See the API\n documentation for more information.\n\n- Fix bug where otherwise undecorated subclass of a superclass that had\n venusian decorators on it would inherit its superclass' decorations.\n Venusian decorators should have never been inherited implicitly. See\n https://github.com/Pylons/venusian/issues/11#issuecomment-4977352\n\n1.0a8 (2013-04-15)\n------------------\n\n- Pass ``ignore`` argument along recursively to ``walk_packages`` so custom\n ignore functions will ignore things recursively. See\n https://github.com/Pylons/venusian/pull/16\n\n- Don't run tox tests under Python 2.4 anymore (tox no longer supports 2.4).\n\n1.0a7 (2012-08-25)\n------------------\n\n- Venusian now works on Python 3.3b2+ (importlib-based).\n\n- Use nose-exclude instead of relying on fragile module-scope code to ensure\n we don't get errors resulting from import of fixture code during\n \"nosetests\".\n\n- Bug fix: no longer suppress ``ImportError`` while scanning by default. If\n you want to suppress ``ImportError`` while scanning, you'll now need use an\n ``onerror`` callback as described in the documentation.\n\n1.0a6 (2012-04-23)\n------------------\n\n- Don't ignore decorated objects within their original locations if they\n happen to be imported into another module (remove ``seen`` set from invoke\n in venusian scanning). See https://github.com/Pylons/venusian/pull/13 .\n\n1.0a5 (2012-04-21)\n------------------\n\n- Slightly less sucky way to ignore objects during scanning that are only\n imported into a module but not actually defined there. See 1.0a4 change\n notes for rationale. Now instead of checking whether the module of the\n *scanned object* matches the module being scanned, we check whether the\n module of the *Venusian attachment* matches the module being scanned. This\n allows some genuine uses of imported objects as Venusian scan targets while\n preventing inappropriate double-scanning of objects that have a venusian\n attachment which just happen to be imported into other scanned modules.\n\n- Add ``dev`` and ``docs`` setup.py commands (ala Pyramid).\n\n1.0a4 (2012-04-16)\n------------------\n\n- Attempt to ignore objects during scanning that are only imported into a\n module but not actually defined there. This is a semantics change, but\n it's the right thing to do, because I found myself facing a situation like\n this::\n\n # in a module named \"one\"\n\n from two import anotheradecoratedthing\n @adecorator\n def adecoratedthing(): pass\n\n # and scanning both modules\n scan('one')\n scan('two')\n\n In this case you'd wind up with two repeated registrations for\n \"anotherdecoratedthing\", which isn't what anyone expects.\n\n1.0a3 (2012-02-08)\n------------------\n\n- Add an ``ignore`` argument to the ``scan`` method of a ``Scanner``. This\n argument allows a user to ignore packages, modules, and global objects by\n name during a ``scan``. See the \"ignore Scan Argument\" in the narrative\n documentation for more details.\n\n1.0a2 (2011-09-02)\n------------------\n\n- Close ImpLoader file handle to avoid resource warnings on Python 3.\n\n1.0a1 (2011-08-27)\n------------------\n\n- Python 3 compatibility.\n\n- Allow an ``onerror`` callback to be passed to ``Scanner.scan()``.\n\n0.9 (2011-06-18)\n----------------\n\n- Prevent corner case scan-time exception when trying to introspect insane\n module-scope objects. See https://github.com/Pylons/venusian/issues/5 .\n\n0.8 (2011-04-30)\n----------------\n\n- Normal \"setup.py test\" can't support running the venusian tests under py\n 2.4 or 2.5; when it scans the 'classdecorators' fixture, it barfs. To get\n around this, we used to depend on ``nose`` in ``setup_requires`` and tell\n \"setup.py test\" to use nose by setting test_suite to \"nose.collector\" but\n we can't anymore because folks use Venusian in systems which install from\n pip bundles; pip bundles do not support setup_requires. So, sorry, we're\n painted into a corner; at this point you just have to know to install nose\n and run \"setup.py nosetests\" rather than \"setup.py test\". Or just run\n \"tox\" which tests it under all Pythons.\n\n0.7 (2011-03-16)\n----------------\n\n- Use Pylons theme in documentation.\n\n- Fix orphaned pyc test on pypy.\n\n- Fix GitHub Issue #1: subclasses of decorated classes that do not\n have any decorations should not inherit the decorations of their\n parent classes. \n\n- Fix GitHub Issue #2: scans should only \"find\" each object once per\n scan, regardless of how many modules that object is imported into.\n\n0.6 (2011-01-09)\n----------------\n\n- Some metaclasses (Elixir's) don't raise an AttributeError when asked for a\n nonexistent attribute during a scan. We now catch all exceptions when\n interrogating an object for ``__venusian_callbacks__`` rather than just\n AttributeError.\n\n0.5 (2010-12-19)\n----------------\n\n- Make ``codeinfo`` attribute available as an attribute of the AttachInfo\n object. It will be a tuple in the form ``(filename, lineno, function,\n sourceline)`` representing the context of the venusian decorator. Eg.\n ``('/home/chrism/projects/venusian/tests/test_advice.py', 81,\n 'testCallInfo', 'add_handler(foo, bar)')``\n\n0.4 (2010-09-03)\n----------------\n\n- Bug fix: when a venusian decorator used as a class decorator was\n used against both a class *and* a subclass of that class, the\n superclass and subclass would effectively share the same set of\n callbacks. This was not the intent: each class declaration should\n have its own local set of callbacks; callbacks added via decorations\n should not be inherited, and a superclass should not receive its\n subclass' decorations.\n\n- Arrange test fixtures into a single directory.\n\n0.3 (2010-06-24)\n----------------\n\n- Ignore orphaned modules (``.pyc`` or ``.pyo`` files without a\n corresponding ``.py`` file) during a scan.\n\n0.2 (2010-04-18)\n----------------\n\n- Add the concept of scan categories (see the \"Scan Categories\"\n section of the documentation) to allow an application to make use of\n more than one Venusian-using framework simultaneously.\n\n0.1 (2010-02-15)\n----------------\n\n- Initial release.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://pylonsproject.org", "keywords": "web wsgi zope pylons pyramid morepath", "license": "BSD-derived (http://www.repoze.org/LICENSE.txt)", "maintainer": null, "maintainer_email": null, "name": "venusifork", "package_url": "https://pypi.org/project/venusifork/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/venusifork/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://pylonsproject.org" }, "release_url": "https://pypi.org/project/venusifork/2.0a3/", "requires_dist": null, "requires_python": null, "summary": "A library for deferring decorator actions", "version": "2.0a3" }, "last_serial": 1925342, "releases": { "2.0a1": [ { "comment_text": "", "digests": { "md5": "ed23ed0524e4649b92b4f54d460fb15c", "sha256": "ae66ad9707adeed41b4d1f87c31c8567a359c07770df1a8ccf71a92c6616ab8b" }, "downloads": -1, "filename": "venusifork-2.0a1.zip", "has_sig": false, "md5_digest": "ed23ed0524e4649b92b4f54d460fb15c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 65414, "upload_time": "2014-06-30T12:20:49", "url": "https://files.pythonhosted.org/packages/af/2d/2a15748909bb4f3c4b4d4457ca795b8264662461083a38d6a3365a16c93f/venusifork-2.0a1.zip" } ], "2.0a2": [ { "comment_text": "", "digests": { "md5": "584b1bdd0138219ae1786444da713493", "sha256": "6735683b03fb687e6b0fd2e3628faba29b7620afc9af5ed7d47702fe27aa8f51" }, "downloads": -1, "filename": "venusifork-2.0a2.zip", "has_sig": false, "md5_digest": "584b1bdd0138219ae1786444da713493", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43166, "upload_time": "2014-07-07T11:18:48", "url": "https://files.pythonhosted.org/packages/3a/a7/1b9a6c757295e3b5685442ff647f76e580f313700905ab099e98de6c0cd6/venusifork-2.0a2.zip" } ], "2.0a3": [ { "comment_text": "", "digests": { "md5": "1b8554298fa283e02c45b48cc8ed2f22", "sha256": "6271ecc9e360aae9503c17a9a8ec2acad368f26f357e384fd0186b34dfbde270" }, "downloads": -1, "filename": "venusifork-2.0a3.tar.gz", "has_sig": false, "md5_digest": "1b8554298fa283e02c45b48cc8ed2f22", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34486, "upload_time": "2016-01-27T11:33:46", "url": "https://files.pythonhosted.org/packages/56/d7/6a5ba45fc805a90d1fd61b22d2f940ecb153ba208eda69cbea0f9c8afd35/venusifork-2.0a3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1b8554298fa283e02c45b48cc8ed2f22", "sha256": "6271ecc9e360aae9503c17a9a8ec2acad368f26f357e384fd0186b34dfbde270" }, "downloads": -1, "filename": "venusifork-2.0a3.tar.gz", "has_sig": false, "md5_digest": "1b8554298fa283e02c45b48cc8ed2f22", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34486, "upload_time": "2016-01-27T11:33:46", "url": "https://files.pythonhosted.org/packages/56/d7/6a5ba45fc805a90d1fd61b22d2f940ecb153ba208eda69cbea0f9c8afd35/venusifork-2.0a3.tar.gz" } ] }