{ "info": { "author": "Zope Corporation and Contributors", "author_email": "zope-dev@zope.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Zope :: 3", "Intended Audience :: Developers", "License :: OSI Approved :: Zope Public License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP" ], "description": "zope.app.appsetup README\n========================\n\nThis package provides application setup helpers for the Zope3 appserver.\n\n\n.. contents::\n\nBootstrap helpers\n=================\n\nThe bootstrap helpers provide a number of functions that help with\nbootstrapping.\n\nThe bootStrapSubscriber function makes sure that there is a root\nobject. It subscribes to DatabaseOpened events:\n\n >>> from zope.app.appsetup import bootstrap\n >>> import zope.processlifetime\n\n >>> from ZODB.MappingStorage import DB\n >>> db = DB()\n >>> bootstrap.bootStrapSubscriber(zope.processlifetime.DatabaseOpened(db))\n\nThe subscriber makes sure that there is a root folder:\n\n >>> from zope.app.publication.zopepublication import ZopePublication\n >>> conn = db.open()\n >>> root = conn.root()[ZopePublication.root_name]\n >>> sm = root.getSiteManager()\n >>> conn.close()\n\nA DatabaseOpenedWithRoot is generated with the database.\n\n >>> from zope.component.eventtesting import getEvents\n >>> [event] = getEvents(zope.processlifetime.IDatabaseOpenedWithRoot)\n >>> event.database is db\n True\n\nGenerally, startup code that expects the root object and site to have\nbeen created will want to subscribe to this event, not\nIDataBaseOpenedEvent.\n\nThe subscriber generates the event whether or not the root had to be\nset up:\n\n >>> bootstrap.bootStrapSubscriber(zope.processlifetime.DatabaseOpened(db))\n >>> [e, event] = getEvents(zope.processlifetime.IDatabaseOpenedWithRoot)\n >>> event.database is db\n True\n\n\nCheck the Security Policy\n-------------------------\n\nWhen the security policy got refactored to be really pluggable, the\ninclusion of the security policy configuration was moved to the very\ntop level, to site.zcml. This happened in r24770, after ZopeX3 3.0\nwas released, but before 3.1.\n\nNow the maintainers of existing 3.0 sites need to manually update\ntheir site.zcml to include securitypolicy.zcml while upgrading to 3.1.\nSee also http://www.zope.org/Collectors/Zope3-dev/381 .\n\n >>> from __future__ import print_function\n >>> from zope.testing.loggingsupport import InstalledHandler\n >>> handler = InstalledHandler('zope.app.appsetup')\n\nIf the security policy is unset from the default\nParanoidSecurityPolicy, we get a warning:\n\n >>> from zope.app.appsetup.bootstrap import checkSecurityPolicy\n >>> event = object()\n >>> checkSecurityPolicy(event)\n >>> print(handler)\n zope.app.appsetup WARNING\n Security policy is not configured.\n Please make sure that securitypolicy.zcml is included in site.zcml immediately\n before principals.zcml\n\nHowever, if any non-default security policy is installed, no warning\nis emitted:\n\n >>> from zope.security.management import setSecurityPolicy\n >>> defaultPolicy = setSecurityPolicy(object())\n >>> handler.clear()\n >>> checkSecurityPolicy(event)\n >>> print(handler)\n \n\nClean up:\n\n >>> handler.uninstall()\n\n\nDebug console\n=============\n\nThe debug console lets you have a Python prompt with the full Zope\nenvironment loaded (which includes the ZCML configuration, as well as an open\ndatabase connection).\n\nLet's define a helper to run the debug script and trap SystemExit exceptions\nthat would otherwise hide the output\n\n >>> from __future__ import print_function\n >>> import sys\n >>> from zope.app.appsetup import debug\n >>> def run(*args):\n ... sys.argv[0] = 'debug'\n ... sys.stderr = sys.stdout\n ... try:\n ... debug.main(args)\n ... except SystemExit as e:\n ... print(\"(exited with status %d)\" % e.code)\n\nIf you call the script with no arguments, it displays a brief error message\non stderr\n\n >>> run()\n Error: please specify a configuration file\n For help, use debug -h\n (exited with status 2)\n\nWe need to pass a ZConfig configuration file as an argument\n\n >>> run('-C', 'test.conf')\n The application root is known as `root`.\n\nNow you have the root object from the open database available as a global\nvariable named 'root' in the __main__ module:\n\n >>> main_module = sys.modules['__main__']\n >>> main_module.root # doctest: +ELLIPSIS\n \n\nand we have asked Python to enter interactive mode by setting the\nPYTHONINSPECT environment variable\n\n >>> import os\n >>> os.environ.get('PYTHONINSPECT')\n 'true'\n\nWe have to do extra work to honor the PYTHONSTARTUP environment variable:\n\n >>> pythonstartup = os.path.join(os.path.dirname(debug.__file__),\n ... 'testdata', 'pythonstartup')\n >>> os.environ['PYTHONSTARTUP'] = pythonstartup\n >>> run('-C', 'test.conf')\n The application root is known as `root`.\n\nYou can see that our pythonstartup file was executed because it changed\nthe prompt\n\n >>> sys.ps1\n 'debug> '\n\n\n\nProduct-specific configuration\n==============================\n\nThe ``product`` module of this package provides a very simple way to deal with\nwhat has traditionally been called \"product configuration\", where \"product\"\nrefers to the classic Zope 2 notion of a product.\n\nThe configuration schema for the application server allows named\n sections to be added to the configuration file, and product\ncode can use the API provided by the module to retrieve configuration sections\nfor given names.\n\nThere are two public functions in the module that should be used in normal\noperations, and additional functions and a class that can be used to help with\ntesting:\n\n >>> from __future__ import print_function\n >>> from zope.app.appsetup import product\n\nLet's look at the helper class first, since we'll use it in describing the\npublic (application) interface. We'll follow that with the functions for\nnormal operation, then the remaining test-support functions.\n\n\nFaux configuration object\n-------------------------\n\nThe ``FauxConfiguration`` class constructs objects that behave like the\nZConfig section objects to the extent needed for the product configuration\nAPI. These will be used here, and may also be used to create configurations\nfor testing components that consume such configuration.\n\nThe constructor requires two arguments: the name of the section, and a mapping\nof keys to values that the section should provide. Let's create a simple\nexample:\n\n >>> one = product.FauxConfiguration(\"one\", {})\n >>> one.getSectionName()\n 'one'\n >>> one.mapping\n {}\n\nProviding a non-empty set of key/value pairs trivially behaves as expected:\n\n >>> two = product.FauxConfiguration(\"two\", {\"abc\": \"def\"})\n >>> two.getSectionName()\n 'two'\n >>> two.mapping\n {'abc': 'def'}\n\n\nApplication API\n---------------\n\nThere are two functions in the application interface for this module. One is\nused by the configuration provider, and the other is used by the consumer.\n\nThe provider's API takes a sequence of configuration objects that conform to\nthe behaviors exhibited by the default ZConfig section objects. Since the\n``FauxConfiguration`` class provides these behaviors, we can easily see how\nthis can be used:\n\n >>> product.setProductConfigurations([one, two])\n\nNow that we've established some configuration, we want to be able to use it.\nWe do this using the ``getProductConfiguration()`` function. This function\ntakes a name and returns a matching configuration section if there is one, of\nNone if not:\n\n >>> product.getProductConfiguration(\"one\")\n {}\n\n >>> product.getProductConfiguration(\"not-there\") is None\n True\n\nNote that for a section that exists, only the internal mapping is provided,\nnot the containing section object. This is a historical wart; we'll just need\nto live with it until new APIs are introduced.\n\nSetting the configuration a second time will overwrite the prior\nconfiguration; sections previously available will no longer be:\n\n >>> product.setProductConfigurations([two])\n >>> product.getProductConfiguration(\"one\") is None\n True\n\nThe new sections are available, as expected:\n\n >>> product.getProductConfiguration(\"two\")\n {'abc': 'def'}\n\n\nTest support functions\n----------------------\n\nAdditional functions are provided that make it easier to manage configuration\nstate in testing.\n\nThe first can be used to provide configuration for a single name. The\nfunction takes a name and either a configuration mapping or ``None`` as\narguments. If ``None`` is provided as the second argument, any configuration\nsettings for the name are removed, if present. If the second argument is not\n``None``, it will be used as the return value for ``getProductConfiguration``\nfor the given name.\n\n >>> product.setProductConfiguration(\"first\", None)\n >>> print(product.getProductConfiguration(\"first\"))\n None\n\n >>> product.setProductConfiguration(\"first\", {\"key\": \"value1\"})\n >>> product.getProductConfiguration(\"first\")\n {'key': 'value1'}\n\n >>> product.setProductConfiguration(\"first\", {\"key\": \"value2\"})\n >>> product.getProductConfiguration(\"first\")\n {'key': 'value2'}\n\n >>> product.setProductConfiguration(\"first\", {\"alt\": \"another\"})\n >>> product.getProductConfiguration(\"first\")\n {'alt': 'another'}\n\n >>> product.setProductConfiguration(\"second\", {\"you\": \"there\"})\n >>> product.getProductConfiguration(\"first\")\n {'alt': 'another'}\n >>> product.getProductConfiguration(\"second\")\n {'you': 'there'}\n\n >>> product.setProductConfiguration(\"first\", None)\n >>> print(product.getProductConfiguration(\"first\"))\n None\n\nThe other two functions work in concert, saving and restoring the entirety of\nthe configuration state.\n\nOur current configuration includes data for the \"second\" key, and none for the\n\"first\" key:\n\n >>> print(product.getProductConfiguration(\"first\"))\n None\n >>> print(product.getProductConfiguration(\"second\"))\n {'you': 'there'}\n\nLet's save this state:\n\n >>> state = product.saveConfiguration()\n\nNow let's replace the kitchen sink:\n\n >>> product.setProductConfigurations([\n ... product.FauxConfiguration(\"x\", {\"a\": \"b\"}),\n ... product.FauxConfiguration(\"y\", {\"c\": \"d\"}),\n ... ])\n\n >>> print(product.getProductConfiguration(\"first\"))\n None\n >>> print(product.getProductConfiguration(\"second\"))\n None\n\n >>> product.getProductConfiguration(\"x\")\n {'a': 'b'}\n >>> product.getProductConfiguration(\"y\")\n {'c': 'd'}\n\nThe saved configuration state can be restored:\n\n >>> product.restoreConfiguration(state)\n\n >>> print(product.getProductConfiguration(\"x\"))\n None\n >>> print(product.getProductConfiguration(\"y\"))\n None\n\n >>> print(product.getProductConfiguration(\"first\"))\n None\n >>> print(product.getProductConfiguration(\"second\"))\n {'you': 'there'}\n\nThere's an additional function that can be used to load product configuration\nfrom a file object; only product configuration components are accepted. The\nfunction returns a mapping of names to configuration objects suitable for\npassing to ``setProductConfiguration``. Using this with\n``setProductConfigurations`` would require constructing ``FauxConfiguration``\nobjects.\n\nLet's create some sample configuration text:\n\n >>> product_config = u'''\n ... \n ... key1 product1-value1\n ... key2 product1-value2\n ... \n ...\n ... \n ... key1 product2-value1\n ... key3 product2-value2\n ... \n ... '''\n\nWe can now load the configuration using the ``loadConfiguration`` function:\n\n >>> import io\n >>> import pprint\n\n >>> sio = io.StringIO(product_config)\n >>> config = product.loadConfiguration(sio)\n\n >>> pprint.pprint(config, width=1)\n {u'product1': {'key1': 'product1-value1',\n 'key2': 'product1-value2'},\n u'product2': {'key1': 'product2-value1',\n 'key3': 'product2-value2'}}\n\nExtensions that provide product configurations can be used as well:\n\n >>> product_config = u'''\n ... %import zope.app.appsetup.testproduct\n ...\n ... \n ... \n ...\n ... \n ... key1 value1\n ... key2 value2\n ... \n ... '''\n\n >>> sio = io.StringIO(product_config)\n >>> config = product.loadConfiguration(sio)\n\n >>> pprint.pprint(config, width=1)\n {u'barfoo': {'key1': 'value1',\n 'key2': 'value2',\n 'product-name': u'barfoo'},\n u'foobar': {'product-name': u'foobar'}}\n\n\nChangelog\n=========\n\n4.1.0 (2018-12-15)\n------------------\n\n- Add support for Python 3.6, 3.7 and PyPy3.\n\n- Drop support for Python 3.3.\n\n\n4.0.0 (2016-08-08)\n------------------\n\n- Add dependency on ``zdaemon`` (split off from ``ZODB``).\n\n- Claim support for Python 3.4, 3.5 and PyPy which requires\n ``zope.app.publication`` >= 4.0.\n\n- Drop Python 2.6 support.\n\n4.0.0a1 (2013-03-03)\n--------------------\n\n- Added support for Python 3.3.\n\n- Replaced deprecated ``zope.interface.implements`` usage with equivalent\n ``zope.interface.implementer`` decorator.\n\n- Dropped support for Python 2.4 and 2.5.\n\n\n3.16.0 (2011-01-27)\n-------------------\n\n- Added stacking of storages for layer/test level setup separation in derived\n ZODBLayers.\n\n\n3.15.0 (2010-09-25)\n-------------------\n\n- Updated tests to run with `zope.testing >= 3.10`, requiring at least this\n version and `zope.testrunner`.\n\n- Switch ``IErrorReportingUtility copy_to_zlog`` field to ``True``.\n\n- Using Python's `doctest` module instead of depreacted\n `zope.testing.doctest`.\n\n\n3.14.0 (2010-04-13)\n-------------------\n\n- Made `zope.testing` an optional (test) dependency.\n\n- Removed test dependency on `zope.app.testing`.\n\n\n3.13.0 (2009-12-24)\n-------------------\n\n- Import hooks functionality from zope.component after it was moved there from\n zope.site.\n\n- Import ISite from zope.component after it was moved there from\n zope.location. This lifts the dependency on zope.location.\n\n- Added missing install dependency on `zope.testing`.\n\n\n3.12.0 (2009-06-20)\n-------------------\n\n- Using ``zope.processlifetime`` interfaces and implementations\n directly instead of BBB imports from ``zope.app.appsetup``.\n\n- Got rid of depencency on ``zope.app.component``.\n\n- Got rid of test dependency on ``zope.app.security``.\n\n\n3.11 (2009-05-13)\n-----------------\n\n- Event interfaces / implementations moved to ``zope.processlifetime``,\n version 1.0. Depend on this package, and add BBB imports.\n\n\n3.10.1 (2009-03-31)\n-------------------\n\n- Fixed a ``DeprecationWarning`` introduced in 3.10.0.\n\n- Added doctests to long description to show up at pypi.\n\n\n3.10.0 (2009-03-19)\n-------------------\n\n- Finally deprecate the \"asObject\" argument of helper functions in the\n ``zope.app.appsetup.bootstrap`` module. If your code uses any of these\n functions, please remove the \"asObject=True\" argument passing anywhere,\n because the support for that argument will be dropped soon.\n\n- Move session utility bootstrapping logic from ``zope.session`` into this\n package. This removes a dependency from zope.session to this package.\n\n- Remove one more deprecated function.\n\n\n3.9.0 (2009-01-31)\n------------------\n\n- Use ``zope.site`` instead of ``zope.app.folder`` and\n ``zope.app.component``.\n\n- Use ``zope.container`` instead of ``zope.app.container``.\n\n- Move error log bootstrapping logic from ``zope.error`` into this\n package. This removes a dependency from zope.error to this\n package. Also added a test for bootstrapping the error log here,\n which was missing in ``zope.error``.\n\n\n3.8.0 (2008-08-25)\n------------------\n\n- Feature: Developed an entry point that allows you to quickly bring up an\n application instance for debugging purposes. (Implemented by Marius Gedminas\n and Stephan Richter.)\n\n\n3.7.0 (2008-08-19)\n------------------\n\n- Added ``.product.loadConfiguration`` test-support function; loads product\n configuration (only) from a file object, allowing test code (including\n setup) to make use of the same configuration schema support used by normal\n startup.\n\n\n3.6.0 (2008-07-23)\n------------------\n\n- Added additional test support functions to set the configuration for a\n single section, and save/restore the entire configuration.\n\n\n3.5.0 (2008-06-17)\n------------------\n\n- Added helper class for supporting product configuration tests.\n\n- Added documentation for the product configuration API, with tests.\n\n\n3.4.1 (2007-09-27)\n------------------\n\n- Egg was faulty, re-released.\n\n\n3.4.0 (2007-09-25)\n------------------\n\n- Initial documented release.\n\n- Reflect changes form zope.app.error refactoring.", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/zopefoundation/zope.app.appsetup", "keywords": "zope3 app setup", "license": "ZPL 2.1", "maintainer": "", "maintainer_email": "", "name": "zope.app.appsetup", "package_url": "https://pypi.org/project/zope.app.appsetup/", "platform": "", "project_url": "https://pypi.org/project/zope.app.appsetup/", "project_urls": { "Homepage": "https://github.com/zopefoundation/zope.app.appsetup" }, "release_url": "https://pypi.org/project/zope.app.appsetup/4.1.0/", "requires_dist": null, "requires_python": "", "summary": "Zope app setup helper", "version": "4.1.0" }, "last_serial": 4602498, "releases": { "3.10.0": [ { "comment_text": "", "digests": { "md5": "0e050989aa0b0c7145c136d582ef8332", "sha256": "60f90e746062759644d816d0439968bbae0b1f0d3aee1b16f1dfadd3d4e75a8a" }, "downloads": -1, "filename": "zope.app.appsetup-3.10.0.tar.gz", "has_sig": false, "md5_digest": "0e050989aa0b0c7145c136d582ef8332", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17908, "upload_time": "2009-03-19T10:22:06", "url": "https://files.pythonhosted.org/packages/b8/28/a11677362cf34e3149468cf46ea2cc2f84a037fb7ada5d5375d958759460/zope.app.appsetup-3.10.0.tar.gz" } ], "3.10.1": [ { "comment_text": "", "digests": { "md5": "c5eabc54749ca7cd6c42e63bc2658c23", "sha256": "24326ae7a31bcac4fc165c81e4a7ee68d448d8a0a52c06bf4725dfa7e9a4318e" }, "downloads": -1, "filename": "zope.app.appsetup-3.10.1.tar.gz", "has_sig": false, "md5_digest": "c5eabc54749ca7cd6c42e63bc2658c23", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25432, "upload_time": "2009-03-31T20:26:00", "url": "https://files.pythonhosted.org/packages/46/67/f8ce7eea8af3ccc4beb5997ee2a7fa8427af887f4ebf9ac960ac2d43ec5c/zope.app.appsetup-3.10.1.tar.gz" } ], "3.11": [ { "comment_text": "", "digests": { "md5": "1320acee021b0f74d5f306b45fa9fde0", "sha256": "50191fe289e668e60c363abb4b50d1755c50f36967fdf4da84ef789743c5ad26" }, "downloads": -1, "filename": "zope.app.appsetup-3.11.tar.gz", "has_sig": false, "md5_digest": "1320acee021b0f74d5f306b45fa9fde0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22088, "upload_time": "2009-05-13T21:28:41", "url": "https://files.pythonhosted.org/packages/84/b4/639158a94321897ccc8ef95cb0c946260872e7ef885f39c3b98c42d0eb7b/zope.app.appsetup-3.11.tar.gz" } ], "3.12.0": [ { "comment_text": "", "digests": { "md5": "62f312eb9d6a31ff3864e8b53649ae91", "sha256": "795f70cd62256c47d308ef68df421928c05140e376d88108732487a7faa2bc22" }, "downloads": -1, "filename": "zope.app.appsetup-3.12.0.tar.gz", "has_sig": false, "md5_digest": "62f312eb9d6a31ff3864e8b53649ae91", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25745, "upload_time": "2009-06-20T21:08:35", "url": "https://files.pythonhosted.org/packages/b9/22/8ecb5b3fbd985bdb110e0e669268004b42b9d7a6b467b0235128fccdf17c/zope.app.appsetup-3.12.0.tar.gz" } ], "3.13.0": [ { "comment_text": "", "digests": { "md5": "91d683f0e6daeb6e709bda6423ea4126", "sha256": "0d167ac0dc1fdd574274175741bc4eb74f384da1ebaadb48e48721f092a347a0" }, "downloads": -1, "filename": "zope.app.appsetup-3.13.0.tar.gz", "has_sig": false, "md5_digest": "91d683f0e6daeb6e709bda6423ea4126", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21620, "upload_time": "2009-12-24T07:57:45", "url": "https://files.pythonhosted.org/packages/8e/72/f18e138ec94fa1cd956ac78ca2a16659ffea776d91bbf0f78ad897aa6e66/zope.app.appsetup-3.13.0.tar.gz" } ], "3.14.0": [ { "comment_text": "", "digests": { "md5": "2c3da1f514e6793e2bf612cb06ad9076", "sha256": "078702cbb6d00f6177fa5b500bbb105e85e4dab1de8cc7c0f5244dc1d4ffd22d" }, "downloads": -1, "filename": "zope.app.appsetup-3.14.0.tar.gz", "has_sig": false, "md5_digest": "2c3da1f514e6793e2bf612cb06ad9076", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22854, "upload_time": "2010-04-13T18:50:49", "url": "https://files.pythonhosted.org/packages/f9/ee/1fda795cbeaad7ac6dfba98045a1e4a5fc4dd595fd87d21032ded039f5a2/zope.app.appsetup-3.14.0.tar.gz" } ], "3.15.0": [ { "comment_text": "", "digests": { "md5": "c3e0847ab06490dd0584547a6ebb1dff", "sha256": "28485bb562b367280557ca1a864e7b2c9ac2573374848305e66a39eef21352dc" }, "downloads": -1, "filename": "zope.app.appsetup-3.15.0.tar.gz", "has_sig": false, "md5_digest": "c3e0847ab06490dd0584547a6ebb1dff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24403, "upload_time": "2010-09-25T15:13:55", "url": "https://files.pythonhosted.org/packages/5c/5a/e09bfc264e5a981e2e41050f75c6c52f8f0f1c643baf612aae45bc124527/zope.app.appsetup-3.15.0.tar.gz" } ], "3.16.0": [ { "comment_text": "", "digests": { "md5": "d1ead450a0eb707505bd8d8cbbc7d7b8", "sha256": "c668a3901e00283512500010f9a65a563450a337c4b824580d3bab53139e9ad3" }, "downloads": -1, "filename": "zope.app.appsetup-3.16.0.tar.gz", "has_sig": false, "md5_digest": "d1ead450a0eb707505bd8d8cbbc7d7b8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29668, "upload_time": "2011-01-27T15:14:13", "url": "https://files.pythonhosted.org/packages/3a/b5/2320380d2cdce5c1a34eae5c39e54e282fe17d036869e19ed87619d0e57b/zope.app.appsetup-3.16.0.tar.gz" } ], "3.4.0": [ { "comment_text": "", "digests": { "md5": "a7b2d6f890efb9ebbb28f37541adf467", "sha256": "a5ff266018f1470ba2f1e63fdeb82fc1bce52c8202a480d8b179a7c91c951cf7" }, "downloads": -1, "filename": "zope.app.appsetup-3.4.0.zip", "has_sig": false, "md5_digest": "a7b2d6f890efb9ebbb28f37541adf467", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20201, "upload_time": "2007-09-25T15:10:40", "url": "https://files.pythonhosted.org/packages/a8/e0/82d4aa463aa1b0c0043d57e4bb644988e358f1cc04c2ab6da92299cc1a0b/zope.app.appsetup-3.4.0.zip" } ], "3.4.0a1": [ { "comment_text": "", "digests": { "md5": "03d1624e1c43388fb433ab92c1ee1134", "sha256": "f113b547c206694922e0b43e9ce058cce2bfacc61ec18c35ab7576afefe3267f" }, "downloads": -1, "filename": "zope.app.appsetup-3.4.0a1.tar.gz", "has_sig": false, "md5_digest": "03d1624e1c43388fb433ab92c1ee1134", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10697, "upload_time": "2007-04-23T13:27:00", "url": "https://files.pythonhosted.org/packages/43/28/724d75a4ebb2263b68029bb5614ac44450a2169af17c69e88c9076931618/zope.app.appsetup-3.4.0a1.tar.gz" } ], "3.4.1": [ { "comment_text": "", "digests": { "md5": "233373ff372b3b36045155fe3dbe607f", "sha256": "ae35a3a190df7badeeabafa33786c0cf63a25667fa5b8f9c47acd8c99015b280" }, "downloads": -1, "filename": "zope.app.appsetup-3.4.1-py2.4.egg", "has_sig": false, "md5_digest": "233373ff372b3b36045155fe3dbe607f", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 27996, "upload_time": "2007-09-27T08:22:34", "url": "https://files.pythonhosted.org/packages/44/e3/025dca065b25531629199b80838afebf2739dca075736313860977ad45b1/zope.app.appsetup-3.4.1-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "e5a2e7c0477de4f290bc6cfc41d84e1c", "sha256": "ce22c929109b61d968dca873e1bfcf5e5f34d09282d04df23d108f11658d6a65" }, "downloads": -1, "filename": "zope.app.appsetup-3.4.1.tar.gz", "has_sig": false, "md5_digest": "e5a2e7c0477de4f290bc6cfc41d84e1c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11752, "upload_time": "2007-09-27T08:22:33", "url": "https://files.pythonhosted.org/packages/13/cd/7592c798977b93a0afdc73cd472ed240ebe6542537812969c4a6d02e5c54/zope.app.appsetup-3.4.1.tar.gz" } ], "3.5.0": [ { "comment_text": "", "digests": { "md5": "931b116e36c5898208ef142a322ef1b5", "sha256": "203b4a16d4baf38269fe2600f33bfe9a485cfde7b691b807a55849867c5a0918" }, "downloads": -1, "filename": "zope.app.appsetup-3.5.0.tar.gz", "has_sig": false, "md5_digest": "931b116e36c5898208ef142a322ef1b5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12893, "upload_time": "2008-06-18T01:03:37", "url": "https://files.pythonhosted.org/packages/14/99/d4859af490f1400791fe5ba67dc77c0912e4a9e0399c76200a7a7b88ce84/zope.app.appsetup-3.5.0.tar.gz" } ], "3.6.0": [ { "comment_text": "", "digests": { "md5": "3e44424acdb3dad369d3bafc79e39d11", "sha256": "c7332aeb5151129d48e13ca54014f65f14c8168f363f5a1346b7dd71da6aa52b" }, "downloads": -1, "filename": "zope.app.appsetup-3.6.0.tar.gz", "has_sig": false, "md5_digest": "3e44424acdb3dad369d3bafc79e39d11", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13690, "upload_time": "2008-07-23T23:15:13", "url": "https://files.pythonhosted.org/packages/15/71/bc5b2a05e4008d0d89c88cd8e461055a19562ec882fb8f3b612694c3637a/zope.app.appsetup-3.6.0.tar.gz" } ], "3.7.0": [ { "comment_text": "", "digests": { "md5": "5e529c5069112cdcbd3c5028653c93d0", "sha256": "01f87c5460d4f1df9f323b2b190220f9267538230b7239194545abf708f68444" }, "downloads": -1, "filename": "zope.app.appsetup-3.7.0.tar.gz", "has_sig": false, "md5_digest": "5e529c5069112cdcbd3c5028653c93d0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15100, "upload_time": "2008-08-19T16:52:41", "url": "https://files.pythonhosted.org/packages/ed/64/571734b26bf833bf2339eb5d8741836443ff8428e9422dc48dc16eba168c/zope.app.appsetup-3.7.0.tar.gz" } ], "3.8.0": [ { "comment_text": "", "digests": { "md5": "22c022a8b3a2364aae08292e3cddfc08", "sha256": "9df3098f4edfd130a414fc203195abc56b51f6dcd7fede165c9ca865351f5120" }, "downloads": -1, "filename": "zope.app.appsetup-3.8.0.tar.gz", "has_sig": false, "md5_digest": "22c022a8b3a2364aae08292e3cddfc08", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16106, "upload_time": "2008-08-25T22:43:42", "url": "https://files.pythonhosted.org/packages/d2/43/77ba2a286ea9dd2d7d828521ac02e0f730cdf9f1c1180cdb1520eab2a802/zope.app.appsetup-3.8.0.tar.gz" } ], "3.9.0": [ { "comment_text": "", "digests": { "md5": "e9d3ecce0f88235c1bfc01fc8d6e5b1d", "sha256": "d95574db84d569c9a0e414b228440872c23619d50c9ad3e75680a3bc2f55f1fd" }, "downloads": -1, "filename": "zope.app.appsetup-3.9.0.tar.gz", "has_sig": false, "md5_digest": "e9d3ecce0f88235c1bfc01fc8d6e5b1d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17678, "upload_time": "2009-01-31T13:54:30", "url": "https://files.pythonhosted.org/packages/fd/06/1e0b5ec7d0a69615fe8acdba170de0f04cd533604b96def7b97545f6c46a/zope.app.appsetup-3.9.0.tar.gz" } ], "4.0.0": [ { "comment_text": "", "digests": { "md5": "db0374aa1c32eddeb4cb53f1f5e77f25", "sha256": "35cf381d1e3638d6b6298fff02c563dabbd5ff1c8b04fcca2c064c5ad383b442" }, "downloads": -1, "filename": "zope.app.appsetup-4.0.0.tar.gz", "has_sig": false, "md5_digest": "db0374aa1c32eddeb4cb53f1f5e77f25", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33252, "upload_time": "2016-08-08T12:23:31", "url": "https://files.pythonhosted.org/packages/eb/c9/be10fad73f9f2e9fe2f60aefb7e0ed26d762defdca12295bf19012c5197d/zope.app.appsetup-4.0.0.tar.gz" } ], "4.0.0a1": [ { "comment_text": "", "digests": { "md5": "2545c53b94eb80e3071c37207d64d8a3", "sha256": "910818089e61da262b34ec84dffd5c8d397e2af0f8bf98116ad29eb527de5652" }, "downloads": -1, "filename": "zope.app.appsetup-4.0.0a1.zip", "has_sig": false, "md5_digest": "2545c53b94eb80e3071c37207d64d8a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50114, "upload_time": "2013-03-03T10:03:45", "url": "https://files.pythonhosted.org/packages/d4/e6/7c9b2fdd2708130c8ad193d8ee3ac197aba0efa77ba32a3f7b53d2b1bc7e/zope.app.appsetup-4.0.0a1.zip" } ], "4.0.0a1.dev": [ { "comment_text": "", "digests": { "md5": "40d86ff3a4625d40170575c0d05ab5c7", "sha256": "9c3a6deedab7ece735d36f236ec3151d39609fb1fe643584b8a7b60668ea4da2" }, "downloads": -1, "filename": "zope.app.appsetup-4.0.0a1.dev.tar.gz", "has_sig": false, "md5_digest": "40d86ff3a4625d40170575c0d05ab5c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31032, "upload_time": "2013-02-27T15:18:24", "url": "https://files.pythonhosted.org/packages/0f/b2/72b7b4c33a96947e6bfa4f24600e42273c0f204c73f66ebaaf96096ec521/zope.app.appsetup-4.0.0a1.dev.tar.gz" } ], "4.1.0": [ { "comment_text": "", "digests": { "md5": "03b69961ab17861f56333665273f6364", "sha256": "3cb80b5046d04907cf7b1608da8ea6f9961d48dbc43935bce4d8af201d06c229" }, "downloads": -1, "filename": "zope.app.appsetup-4.1.0.tar.gz", "has_sig": false, "md5_digest": "03b69961ab17861f56333665273f6364", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33709, "upload_time": "2018-12-15T12:30:19", "url": "https://files.pythonhosted.org/packages/c5/a0/a51a40040f2b330c2a0aa02233371911ae56b52a5695954f847b6c62c399/zope.app.appsetup-4.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "03b69961ab17861f56333665273f6364", "sha256": "3cb80b5046d04907cf7b1608da8ea6f9961d48dbc43935bce4d8af201d06c229" }, "downloads": -1, "filename": "zope.app.appsetup-4.1.0.tar.gz", "has_sig": false, "md5_digest": "03b69961ab17861f56333665273f6364", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33709, "upload_time": "2018-12-15T12:30:19", "url": "https://files.pythonhosted.org/packages/c5/a0/a51a40040f2b330c2a0aa02233371911ae56b52a5695954f847b6c62c399/zope.app.appsetup-4.1.0.tar.gz" } ] }