{
"info": {
"author": "Grok Team",
"author_email": "grok-dev@zope.org",
"bugtrack_url": null,
"classifiers": [
"Environment :: Web Environment",
"Framework :: Zope3",
"Intended Audience :: Developers",
"License :: OSI Approved :: Zope Public License",
"Programming Language :: Python",
"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 :: Implementation",
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: Implementation :: PyPy"
],
"description": "grokcore.startup\n****************\n\nThis package provides elements for starting a `Grok`_ project with\n`paster`_ and `WSGI`_.\n\n.. contents::\n\nSetting up ``grokcore.startup``\n===============================\n\nThere is nothing special to setup this package.\n\nAll you have to do is, to make this package available during runtime.\n\nWith `zc.buildout`_ or other `setuptools`_-related setups this can be\ndone by simply adding the package name ``grokcore.startup`` to the\nrequired packages of your project in ``setup.py``.\n\n\nDetailed Description\n********************\n\nSetting up Grok projects as ``paster`` served WSGI applications\n===============================================================\n\nThe main target of this package is to provide support for enabling\n`Grok`_ applications to be run as `paster`_ served `WSGI`_\napplications. To make this working some configuration files have to be\nset up.\n\nSetting up a project with ``grokproject``\n-----------------------------------------\n\nThe most convenient way to setup a `Grok`_ project is using\n`grokproject`_. Once installed, you can a project like this::\n\n $ grokproject Sample\n\nwhich will generate all configuration files for you.\n\n.. note:: Older versions of `grokproject`_ need an update\n\n As older versions of `grokproject`_ do not support\n `grokcore.startup`, you might want to update your existing\n `grokproject`_ installation by running::\n\n $ easy_install -U grokproject\n\n\nSetting up a project manually\n-----------------------------\n\nBefore we can make use of ``grokcore.startup``, we have to setup\nseveral configuration files in the project root:\n\n* ``setup.py``\n\n* ``buildout.cfg`` (optional)\n\n* ``zope.conf`` (normally found in the ``parts/etc/`` subdirectory of your\n `Grok`_ project)\n\n* ``site.zcml`` (normally found in the ``parts/etc/`` subdirectory of your\n `Grok`_ project)\n\n* ``deploy.ini`` (or any other .ini-file; normally found in the\n ``parts/etc/`` subdirectory of your `Grok`_ project)\n\n\nWhen we want to setup a Zope instance as `paster`_ served `WSGI`_\napplication, then we have to set a ``paste.app_factory`` entry point\nin ``setup.py``. A minimal setup could look like this::\n\n # setup.py\n from setuptools import setup, find_packages\n\n setup(name='sampleproject',\n version='0.1dev',\n description=\"A sample project\",\n long_description=\"\"\"Without a long description.\"\"\",\n classifiers=[],\n keywords=\"\",\n author=\"U.N.Owen\",\n author_email=\"\",\n url=\"\",\n license=\"\",\n package_dir={'': 'src'},\n packages=find_packages('src'),\n include_package_data=True,\n zip_safe=False,\n install_requires=['setuptools',],\n entry_points = \"\"\"\n [paste.app_factory]\n main = grokcore.startup:application_factory\n \"\"\",\n )\n\nHere the `paste.app_factory` entry point pointing to\n`grokcore.startup:application_factory` is important.\n\nFurthermore we need at least a minimal ``buildout.cfg`` which enables\n`zc.buildout`_ to create the control scripts for our instance::\n\n [buildout]\n develop = .\n parts = app\n\n [app]\n recipe = zc.recipe.egg\n eggs = sampleproject\n grokcore.startup\n Paste\n PasteScript\n PasteDeploy\n\nHere an egg-entry for ``grokcore.startup`` **might** be important, if\nit is not required otherwise by your application. Projects generated\nby `grokproject`_ will automatically include such a dependency and\nupcoming versions of `Grok`_ will pull in ``grokcore.startup`` anyway,\nso that ``grokcore.startup`` would not be required in this list of\neggs any more.\n\nNext we need ``site.zcml`` and ``zope.conf`` files to define the\nZope instance. These configurations are completely independent from\nbeing served by `Paste`_ or not. If you are upgrading an old `Grok`_\nproject, you can use ``site.zcml`` and ``zope.conf`` of those project\nas-is. You only have to take care of the maybe changed\n``site-definition`` entry in ``zope.conf`` (see below).\n\nThe file ``site.zcml`` can be quite\nshort, but for real projects you certainly want to have some useful\ncontent in here::\n\n \n\nA short ``zope.conf`` file for use in tests could look like this::\n\n site-definition site.zcml\n\n \n \n \n\n \n \n path STDOUT\n \n \n\nwhere the ``site-definition`` entry should point to the location of\nthe file ``site.zcml``. In regular Grok projects those files are put\ninto the ``etc/`` subdirectory of your project root.\n\nFinally we have to provide a ``deploy.ini`` (or another .ini-file),\nwhich tells paster where to find the pieces. This is also put into the\n``etc/`` subdirectory of your project root in regular Grok projects\ncreated by `grokproject`_::\n\n [app:main]\n use = egg:sampleproject\n\n [server:main]\n use = egg:Paste#http\n host = 127.0.0.1\n port = 8080\n\n [DEFAULT]\n zope_conf = %(here)s/zope.conf\n\n\n\nAPI Documentation\n=================\n\n``application_factory(global_conf, **local_conf)``\n--------------------------------------------------\n\n ``grokcore.startup`` provides a function ``application_factory``\n which delivers a `WSGIPublisherApplication`_ instance when called\n with an appropriate configuration. See the `zope.app.wsgi\n documentation\n `_\n to learn more about Zope objects supporting `WSGI`_.\n\n A call to this function is normally required as entry point in\n `setuptools`_-driven `paster`_ environments (see\n http://pythonpaste.org/deploy/#paste-app-factory).\n\n We have to create our own site definition file -- which will simply\n be empty -- to provide a minimal test::\n\n >>> import os, tempfile\n >>> temp_dir = tempfile.mkdtemp()\n >>> sitezcml = os.path.join(temp_dir, 'site.zcml')\n >>> out = open(sitezcml, 'w')\n >>> _ = out.write('')\n >>> out.close()\n\n Furthermore we create a Zope configuration file, which is also quite\n plain::\n\n >>> zope_conf = os.path.join(temp_dir, 'zope.conf')\n >>> out = open(zope_conf, 'w')\n >>> _ = out.write('''\n ... site-definition %s\n ...\n ... \n ... \n ... \n ...\n ... \n ... \n ... path STDOUT\n ... \n ... \n ... ''' % sitezcml)\n >>> out.close()\n\n Now we can call ``application_factory`` to get a WSGI application::\n\n >>> from grokcore.startup import application_factory\n >>> app_factory = application_factory({'zope_conf': zope_conf})\n >>> app_factory\n \n\n``debug_application_factory(global_conf, **local_conf)``\n--------------------------------------------------------\n\n There's a second application factory that can be used when debugging\n the application, especially when using the ``z3c.evalexception`` middleware.\n\n When debugging zope is instructed not to handle any raised exceptions\n itself. The ``z3c.evalexception`` middleware then catches the exceptions\n and provides an user interfaces for debugging in the webbrowser.\n\n As a result also the IUnauthorized execption would not be handled by zope\n and the authentication mechanisms of zope are not triggered. As a result,\n when debugging one cannot login.\n\n The ``debug_application_factory`` function accepts the \"exempt-exceptions\"\n configuration option. The value for this option should be a comma seperated\n list of dotted names for each of the execptions that should *still* be\n handled by zope and not re-raised to be catched by the middleware.\n\n >>> from grokcore.startup import debug_application_factory\n >>> app_factory = debug_application_factory({'zope_conf': zope_conf})\n >>> app_factory\n \n\n >>> from zope.interface import implementer\n >>> from zope.security.interfaces import IUnauthorized\n >>> @implementer(IUnauthorized)\n ... class UnauthorizedException(object):\n ... pass\n >>>\n >>> from zope.component import queryAdapter\n >>> from zope.publisher.interfaces import IReRaiseException\n\n Since the ``exempt-execptions`` configuration option was not passed,\n there's no IReRaiseException adapter registered for any type of exceptions\n including IUnauthorized:\n\n >>> error = UnauthorizedException()\n >>> reraise = queryAdapter(error, IReRaiseException, default=None)\n >>> reraise is None\n True\n\n When the option is passed, the adapter will be registered. Calling this\n adapter yields ``False``, telling zope not to reraise this particular\n exception.\n\n >>> app_factory = debug_application_factory(\n ... {'zope_conf': zope_conf},\n ... **{'exempt-exceptions': 'zope.security.interfaces.IUnauthorized'})\n >>>\n >>> reraise = queryAdapter(error, IReRaiseException, default=None)\n >>> reraise is None\n False\n >>> reraise()\n False\n\n Clean up the temp_dir\n\n >>> import shutil\n >>> shutil.rmtree(temp_dir)\n\n``interactive_debug_prompt(zope_conf_path)``\n--------------------------------------------\n\n Get an interactive console with a debugging shell started.\n\n `grokcore.startup` provides two different debuggers currently: a\n plain one based on `zope.app.debug` and a more powerful `IPython`_\n debugger. The IPython debugger is automatically enabled if you have\n IPython available in the environment.\n\n You can explicitly enable the IPython_ debugger by stating::\n\n grokcore.startup [debug]\n\n in the install requirements of your `setup.py`, probably adding only\n ``[debug]`` to an already existing entry for\n `grokcore.startup`. Don't forget to rerun `buildout` afterwards.\n\n You can explicitly require one or the other debugger by calling::\n\n grokcore.startup.startup.interactive_debug_prompt(zope_conf)\n\n or::\n\n grokcore.startup.debug.ipython_debug_prompt(zope_conf)\n\n in the ``[interactive_debugger]`` section of your ``buildout.cfg``.\n\n >>> import zope.app.appsetup.appsetup\n >>> zope.app.appsetup.appsetup._configured = False\n\n >>> temp_dir = tempfile.mkdtemp()\n\n >>> sitezcml = os.path.join(temp_dir, 'site.zcml')\n >>> out = open(sitezcml, 'w')\n >>> _ = out.write(\n ... \"\"\"\n ... \n ... \n ... \n ... \n ... \n ... \n ... \n ... \n ... \"\"\")\n >>> out.close()\n >>>\n >>> zopeconf = os.path.join(temp_dir, 'zope.conf')\n >>> out = open(zopeconf, 'w')\n >>> _ = out.write(\"\"\"\n ... site-definition %s\n ... \n ... \n ... path %s\n ... \n ... \n ... \n ... \n ... path STDOUT\n ... formatter zope.exceptions.log.Formatter\n ... \n ... \n ... \"\"\" % (sitezcml, os.path.join(temp_dir, 'Data.fs')))\n >>> out.close()\n >>>\n >>> import sys\n >>> old_argv = sys.argv[:]\n >>>\n >>> script = os.path.join(temp_dir, 'script.py')\n >>> out = open(script, 'w')\n >>> _ = out.write(\n ... \"\"\"import sys\n ... from pprint import pprint\n ... pprint(debugger)\n ... pprint(app)\n ... pprint(root)\n ... pprint(sys.argv)\n ... pprint(__file__)\n ... pprint(__name__)\"\"\")\n >>>\n >>> out.close()\n >>>\n >>> sys.argv = ['interactive_debugger', script]\n >>> from grokcore.startup import interactive_debug_prompt\n >>> try:\n ... interactive_debug_prompt(zopeconf)\n ... except SystemExit:\n ... # Catch the exit from the interactive prompt as it would\n ... # exit this test as well.\n ... pass\n ------\n ...WARNING zope.app.appsetup Security policy is not configured.\n Please make sure that securitypolicy.zcml is included in site.zcml\n immediately before principals.zcml\n ...\n \n \n \n ['...script.py']\n '...script.py'\n '__main__'\n\n Clean up the temp_dir\n\n >>> sys.argv = old_argv\n >>> import shutil\n >>> shutil.rmtree(temp_dir)\n\n.. _grok: http://pypi.python.org/pypi/grok\n.. _grokproject: http://pypi.python.org/pypi/grokproject\n.. _Paste: http://pythonpaste.org/\n.. _paster: Paste_\n.. _setuptools: http://pypi.python.org/pypi/setuptools\n.. _WSGI: http://www.wsgi.org/wsgi/\n.. _WSGIPublisherApplication: http://apidoc.zope.org/++apidoc++/Code/zope/app/wsgi/WSGIPublisherApplication/index.html\n.. _zc.buildout: http://pypi.python.org/pypi/zc.buildout\n.. _ipython: http://ipython.org/\n\nChanges\n*******\n\n3.0.1 (2018-01-12)\n==================\n\n- Rearrange tests such that Travis CI can pick up all functional tests too.\n\n3.0.0 (2018-01-10)\n==================\n\n- Python 3 compatibility.\n\n1.2.1 (2016-02-15)\n==================\n\n- Update tests.\n\n1.2 (2012-05-02)\n================\n\n- Added new IPython-based interactive debugger which is used\n automatically when IPython is available. Otherwise the gdb-style\n debugger is provided.\n\n1.1 (2010-10-26)\n================\n\n- Drop zdaemon support.\n\n- Close the database explicitely when execing a script through the\n ``interactive_debug_prompt``. This came to light in tests on Windows, as the\n tests would try to delete the temp directory it created with the still\n unclosed database file in there.\n\n1.0.2 (2010-10-05)\n==================\n\n- Somehow the intended fix in 1.0.1 did not actually get included in that\n release. We make the fix again.\n\n1.0.1 (2010-08-18)\n==================\n\n- When passing a script to the interactive_debug_prompt command, one would\n expect to be able to do: `if __name__ == '__main__':`, however __name__ would\n be \"__builtin__\". This is fixed.\n\n1.0 (2010-05-20)\n================\n\n- Amend the interactive_debug_prompt function to behave more or less like the\n \"old\" zopectl command. Whenever there's commandline arguments passed to the\n command, the first one is assumed to be a python script that is 'execfile'd.\n This allows ad hoc scripts to run against the setup application.\n\n- Make package comply to zope.org repository policy.\n\n- The upgrade notes will be moved to the Grok upgrade notes.\n\n- Define entry points for main and debug application factories in\n grokcore.startup.\n\n- Use the groktoolkit.\n\n0.4 (2009-10-06)\n================\n\n- Fix documentation bugs.\n\n0.3 (2009-10-02)\n================\n\n* Add a ``debug_application_factory`` function that allows for the\n ``exempt-exceptions`` configuration option. The value for this option\n should be a comma seperated list of dotted names for each of the exceptions\n that should not be re-raised during debugging.\n\n This for one allow the IUnauthorized exception to still be handled by zope\n and thus have the normal authentication mechanisms still work.\n\n* Bring versions.cfg in line with current grok versions.cfg.\n\n0.2 (2009-02-21)\n================\n\n* Made main functions available package wide.\n\n0.1 (2009-01-15)\n================\n\n* Added support for local ``zope_conf`` parameter.\n Fix bug https://bugs.launchpad.net/grok/+bug/320644\n\n* Created ``grokcore.startup`` in January 2009 by factoring paster\n related application code out of grokcore templates.",
"description_content_type": null,
"docs_url": null,
"download_url": "http://pypi.python.org/pypi/grokcore.startup",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "http://grok.zope.org",
"keywords": "zope zope3 grok grokproject WSGI Paste paster",
"license": "ZPL",
"maintainer": "",
"maintainer_email": "",
"name": "grokcore.startup",
"package_url": "https://pypi.org/project/grokcore.startup/",
"platform": "",
"project_url": "https://pypi.org/project/grokcore.startup/",
"project_urls": {
"Download": "http://pypi.python.org/pypi/grokcore.startup",
"Homepage": "http://grok.zope.org"
},
"release_url": "https://pypi.org/project/grokcore.startup/3.0.1/",
"requires_dist": null,
"requires_python": "",
"summary": "Paster support for Grok projects.",
"version": "3.0.1"
},
"last_serial": 3484026,
"releases": {
"0.1": [
{
"comment_text": "",
"digests": {
"md5": "a0e4aa0b6f10586eb5352a930d44b3ed",
"sha256": "8080e7de6033631a89a9663a8403b266bf1252dec75b56556df7690a0d04bb00"
},
"downloads": -1,
"filename": "grokcore.startup-0.1.tar.gz",
"has_sig": false,
"md5_digest": "a0e4aa0b6f10586eb5352a930d44b3ed",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 12944,
"upload_time": "2009-02-15T12:11:19",
"url": "https://files.pythonhosted.org/packages/ab/01/47b11e4346869f314abc19be81cb6c4a9d83f3a16f73b322bbc9e5cd422a/grokcore.startup-0.1.tar.gz"
}
],
"0.2": [
{
"comment_text": "",
"digests": {
"md5": "5b595056e259aab1897c3ad0b50c1f0e",
"sha256": "8167b14a00292b97e3fe425e275dacb75925b023775484a2a8f623e01545c1b9"
},
"downloads": -1,
"filename": "grokcore.startup-0.2.tar.gz",
"has_sig": false,
"md5_digest": "5b595056e259aab1897c3ad0b50c1f0e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 13555,
"upload_time": "2009-02-21T14:24:50",
"url": "https://files.pythonhosted.org/packages/82/3a/f0ce5f1d9b9741cd007951fda51401d0661b01c7a0d2a2545692b30996e3/grokcore.startup-0.2.tar.gz"
}
],
"0.4": [
{
"comment_text": "",
"digests": {
"md5": "d40aaebef89d2f2e483410951c562f70",
"sha256": "c7eee8548f4befc1b3d1fbb7e3c66a346473335f292c943234f188833d8ee288"
},
"downloads": -1,
"filename": "grokcore.startup-0.4.tar.gz",
"has_sig": false,
"md5_digest": "d40aaebef89d2f2e483410951c562f70",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 13164,
"upload_time": "2009-10-06T21:39:20",
"url": "https://files.pythonhosted.org/packages/9a/1e/3d075607a30ba3283f55473d1bf957576c95c3972f2813fb5290fcb317a1/grokcore.startup-0.4.tar.gz"
}
],
"1.0": [
{
"comment_text": "",
"digests": {
"md5": "dead61b51b0539db2f599418a53d72f3",
"sha256": "7d0b1662ee4f3ddf1a26d5520d4c4587d19b6a073ed27cd9826d09b69e734d5e"
},
"downloads": -1,
"filename": "grokcore.startup-1.0.tar.gz",
"has_sig": false,
"md5_digest": "dead61b51b0539db2f599418a53d72f3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 15981,
"upload_time": "2010-05-20T13:10:01",
"url": "https://files.pythonhosted.org/packages/c1/67/7db6945109f81401264763219ffabe7037301e09409faacebf485ef6e848/grokcore.startup-1.0.tar.gz"
}
],
"1.0.1": [
{
"comment_text": "",
"digests": {
"md5": "0c4888a24ff4df88a691ac02a19a6415",
"sha256": "cdff98122c61b5c0562803bb2cb1c1d0be7d69cbe9c9cab21ea5ac003a75f21c"
},
"downloads": -1,
"filename": "grokcore.startup-1.0.1.tar.gz",
"has_sig": false,
"md5_digest": "0c4888a24ff4df88a691ac02a19a6415",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 16117,
"upload_time": "2010-08-18T17:50:36",
"url": "https://files.pythonhosted.org/packages/c2/af/3324a5be5e0ee93bda9e03d2e87e3a76ce63c4bdb44e4166fedacf67dea2/grokcore.startup-1.0.1.tar.gz"
}
],
"1.0.2": [
{
"comment_text": "",
"digests": {
"md5": "7ff4b2781c439d1b32c978ad74f78d5c",
"sha256": "01b6bb76c15853cebc48c236dc7b0856b575b07f8f326f820e124a992dd3e5cf"
},
"downloads": -1,
"filename": "grokcore.startup-1.0.2.tar.gz",
"has_sig": false,
"md5_digest": "7ff4b2781c439d1b32c978ad74f78d5c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 15258,
"upload_time": "2010-10-05T10:56:10",
"url": "https://files.pythonhosted.org/packages/15/d7/88308f4aad6bb3381055dc31b7389377db34e6a5f7a251ac71580eb26222/grokcore.startup-1.0.2.tar.gz"
}
],
"1.1": [
{
"comment_text": "",
"digests": {
"md5": "15b63056170d61b628353cc94cbd359f",
"sha256": "c3cafa25eb2a1a66f0ad0bb98a10bbb7b3efb114e765bf7e63e5c8a2c2c53b35"
},
"downloads": -1,
"filename": "grokcore.startup-1.1.tar.gz",
"has_sig": false,
"md5_digest": "15b63056170d61b628353cc94cbd359f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 14860,
"upload_time": "2010-10-26T16:38:51",
"url": "https://files.pythonhosted.org/packages/9f/a5/4b6575bfef540301e37b3e78e24b943fd5f332953f9937ab810416a47b5f/grokcore.startup-1.1.tar.gz"
}
],
"1.2": [
{
"comment_text": "",
"digests": {
"md5": "5e59d14dc5473ad88cdb4779d6549261",
"sha256": "f12bb02c49d7c074927ba5872486325b3eaf3c58bb11fc82506d22cee6faf843"
},
"downloads": -1,
"filename": "grokcore.startup-1.2.tar.gz",
"has_sig": false,
"md5_digest": "5e59d14dc5473ad88cdb4779d6549261",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 23544,
"upload_time": "2012-05-02T10:42:16",
"url": "https://files.pythonhosted.org/packages/80/98/c4c40a6250a9c3fa5875118f67681faa09c808808dee32deccffce195924/grokcore.startup-1.2.tar.gz"
}
],
"1.2.1": [
{
"comment_text": "",
"digests": {
"md5": "e2a0d030c55c23c81b6fa74c58d33417",
"sha256": "da81475b9792835d4332ff6f14c27ff444b7635d57f4a88b63dca462f60c43ee"
},
"downloads": -1,
"filename": "grokcore.startup-1.2.1.tar.gz",
"has_sig": false,
"md5_digest": "e2a0d030c55c23c81b6fa74c58d33417",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 19579,
"upload_time": "2016-02-15T15:18:42",
"url": "https://files.pythonhosted.org/packages/10/7e/f252b812071deed22920844a8a942c9e1db96364fdc0ff74f57605c08de0/grokcore.startup-1.2.1.tar.gz"
}
],
"3.0.0": [
{
"comment_text": "",
"digests": {
"md5": "98209ca98a5bd32fc6b2455d1aabeed2",
"sha256": "e3f96b6429baf18972e578b324e3e0e91b1ca87e050217d3cc2cba30606c8c3d"
},
"downloads": -1,
"filename": "grokcore.startup-3.0.0.tar.gz",
"has_sig": false,
"md5_digest": "98209ca98a5bd32fc6b2455d1aabeed2",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 20192,
"upload_time": "2018-01-10T16:01:34",
"url": "https://files.pythonhosted.org/packages/be/da/46b6598d5383d399d904ea26499b69d4b6e68f0c8ee17f5eafbf79c9e257/grokcore.startup-3.0.0.tar.gz"
}
],
"3.0.1": [
{
"comment_text": "",
"digests": {
"md5": "6cffde35bb1920f08beb70ee86dff179",
"sha256": "6d7a363e26b8fa701bc30539368d4a95330aa5164c19c4cb012a19e3119b33c3"
},
"downloads": -1,
"filename": "grokcore.startup-3.0.1.tar.gz",
"has_sig": false,
"md5_digest": "6cffde35bb1920f08beb70ee86dff179",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 20420,
"upload_time": "2018-01-12T13:28:28",
"url": "https://files.pythonhosted.org/packages/2b/df/8ae3268d323f4950f4cc956fb2ba71d2ef752ac5404fdf596653b181c272/grokcore.startup-3.0.1.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "6cffde35bb1920f08beb70ee86dff179",
"sha256": "6d7a363e26b8fa701bc30539368d4a95330aa5164c19c4cb012a19e3119b33c3"
},
"downloads": -1,
"filename": "grokcore.startup-3.0.1.tar.gz",
"has_sig": false,
"md5_digest": "6cffde35bb1920f08beb70ee86dff179",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 20420,
"upload_time": "2018-01-12T13:28:28",
"url": "https://files.pythonhosted.org/packages/2b/df/8ae3268d323f4950f4cc956fb2ba71d2ef752ac5404fdf596653b181c272/grokcore.startup-3.0.1.tar.gz"
}
]
}