{ "info": { "author": "Gary Poster", "author_email": "gary.poster@canonical.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Framework :: Buildout", "Intended Audience :: Developers", "License :: OSI Approved :: Zope Public License", "Topic :: Software Development :: Build Tools", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "********************************\nBuildout Script Recipe\n********************************\n\n.. contents::\n\nThe script recipe installs eggs into a buildout eggs directory, exactly\nlike zc.recipe.egg, and then generates scripts in a buildout bin\ndirectory with egg paths baked into them.\n\n\nChange History\n**************\n\n1.0.1 (2010-08-27)\n==================\n\nFixes\n-----\n\n- If a section extends another one, it should be able to override it.\n\n- The allowed-eggs-from-site-packages should be looked for in the buildout\n section if it is not found locally.\n\n1.0.0 (2010-08-23)\n==================\n\n(no significant changes)\n\n1.0.0b1 (2010-04-29)\n====================\n\nInitial public version.\n\nDetailed Documentation\n**********************\n\nScript and interpreter generation\n=================================\n\nThis recipe is very similar to zc.recipe.egg, and if you are familiar with its\noptions, you will be able to use this one easily.\n\nThe script and interpreter generation in this recipe are improved from\nthose provided by zc.recipe.egg in two basic ways.\n\n- The interpreter generated by the script supports all interpreter\n options, as opposed to the subset provided by zc.recipe.egg.\n\n- Both scripts and interpreters from this recipe can optionally choose\n to include site-packages, and even sitecustomize.\n\nThe recipe takes several options. First, here's the list of the options\nthat overlap from the standard zc.recipe.eggs scripts recipe. After\nthis, we'll list the new options and describe them.\n\n* eggs\n* find-links\n* index\n* python\n* extra-paths\n* entry-points\n* scripts\n* dependent-scripts\n* interpreter\n* arguments\n* initialization\n* relative-paths\n\nIn addition to these, the recipe offers these new options. They are\nintroduced here, and described more in depth below.\n\ninclude-site-packages\n You can choose to have the site-packages of the underlying Python\n available to your script or interpreter, in addition to the packages\n from your eggs. See the section on this option for motivations and\n warnings.\n\nallowed-eggs-from-site-packages\n Sometimes you need or want to control what eggs from site-packages are\n used. The allowed-eggs-from-site-packages option allows you to specify a\n whitelist of project names that may be included from site-packages. You\n can use globs to specify the value. It defaults to a single value of '*',\n indicating that any package may come from site-packages.\n\n Here's a usage example::\n\n [buildout]\n ...\n\n allowed-eggs-from-site-packages =\n demo\n bigdemo\n zope.*\n\n This option interacts with the ``include-site-packages`` option in the\n following ways.\n\n If ``include-site-packages`` is true, then\n ``allowed-eggs-from-site-packages`` filters what eggs from site-packages\n may be chosen. Therefore, if ``allowed-eggs-from-site-packages`` is an\n empty list, then no eggs from site-packages are chosen, but site-packages\n will still be included at the end of path lists.\n\n If ``include-site-packages`` is false, the value of\n ``allowed-eggs-from-site-packages`` is irrelevant.\n\nextends\n You can extend another section using this value. It is intended to be\n used by extending a section that uses this package's scripts recipe.\n In this manner, you can avoid repeating yourself.\n\nexec-sitecustomize\n Normally the Python's real sitecustomize module is not processed.\n If you want it to be processed, set this value to 'true'. This will\n be honored irrespective of the setting for include-site-packages.\n\nscript-initialization\n The standard initialization code affects both an interpreter and scripts.\n The code in script-initialization is used only for the generated scripts.\n\nFinally, the \"interpreter\" entry point ignores ``script-initialization``,\n``scripts``, and ``arguments``, and provides yet another additional option.\n\nname\n While, by default, the interpreter recipe takes the name of the\n section to be the desired interpreter name, you can specify the\n interpreter name here instead.\n\nScript generation\n-----------------\n\nGenerating a basic script looks virtually identical to using zc.recipe.egg.\n\n(Note that the find-links and index values are typically not needed; they\nare included to help make this document run as a test successfully.)\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = demo\n ...\n ... [demo]\n ... recipe = z3c.recipe.scripts\n ... eggs = demo<0.3\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... \"\"\" % dict(server=link_server))\n\n >>> print system(buildout),\n Installing demo.\n Getting distribution for 'demo<0.3'.\n Got demo 0.2.\n Getting distribution for 'demoneeded'.\n Got demoneeded 1.2c1.\n Generated script '/sample-buildout/bin/demo'.\n\n >>> print system(join(sample_buildout, 'bin', 'demo')),\n 2 2\n\nInterpreter generation\n----------------------\n\nAs with zc.recipe.egg, you can generate an interpreter with the default\nscript recipe shown above by supplying the \"interpreter\" option.\nThis example will create both an entry point script and an interpreter.\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = demo\n ...\n ... [demo]\n ... recipe = z3c.recipe.scripts\n ... eggs = demo<0.3\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... interpreter = py\n ... \"\"\" % dict(server=link_server))\n\n >>> print system(buildout),\n Uninstalling demo.\n Installing demo.\n Generated script '/sample-buildout/bin/demo'.\n Generated interpreter '/sample-buildout/bin/py'.\n\nYou can also generate an interpreter alone with the ``interpreter`` recipe.\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = py\n ...\n ... [py]\n ... recipe = z3c.recipe.scripts:interpreter\n ... eggs = demo<0.3\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... \"\"\" % dict(server=link_server))\n\n >>> print system(buildout),\n Uninstalling demo.\n Installing py.\n Generated interpreter '/sample-buildout/bin/py'.\n\nIn both cases, the bin/py script works by restarting Python after\nspecifying a special path in PYTHONPATH. This example shows the UNIX version;\nthe Windows version actually uses subprocess instead.\n\n >>> cat(sample_buildout, 'bin', 'py') # doctest: +NORMALIZE_WHITESPACE\n #!/usr/bin/python2.4 -S\n \n import os\n import sys\n \n argv = [sys.executable] + sys.argv[1:]\n environ = os.environ.copy()\n path = '/sample-buildout/parts/py'\n if environ.get('PYTHONPATH'):\n path = os.pathsep.join([path, environ['PYTHONPATH']])\n environ['PYTHONPATH'] = path\n os.execve(sys.executable, argv, environ)\n\nThe path is a directory that contains two files: our own site.py and\nsitecustomize.py. The site.py is modified from the underlying Python's\nsite.py, and is responsible for setting up our paths. The\nsitecustomize.py is responsible for running the initialization code\nprovided.\n\n >>> ls(sample_buildout, 'parts', 'py')\n - site.py\n - sitecustomize.py\n\nHere's an example of using the generated interpreter.\n\n >>> print system(join(sample_buildout, 'bin', 'py') +\n ... ' -c \"import sys, pprint; pprint.pprint(sys.path[-2:])\"')\n ['/sample-buildout/eggs/demo-0.2-pyN.N.egg',\n '/sample-buildout/eggs/demoneeded-1.2c1-pyN.N.egg']\n \n\nIncluding site-packages and sitecustomize\n-----------------------------------------\n\nAs introduced above, this recipe supports including site packages. This has\nsome advantages and some serious dangers.\n\nA typical reason to include site-packages is that it is easier to\ninstall one or more dependencies in your Python than it is with\nbuildout. Some packages, such as lxml or Python PostgreSQL integration,\nhave dependencies that can be much easier to build and/or install using\nother mechanisms, such as your operating system's package manager. By\ninstalling some core packages into your Python's site-packages, this can\nsignificantly simplify some application installations.\n\nHowever, doing this has a significant danger. One of the primary goals\nof buildout is to provide repeatability. Some packages (one of the\nbetter known Python openid packages, for instance) change their behavior\ndepending on what packages are available. If Python curl bindings are\navailable, these may be preferred by the library. If a certain XML\npackage is installed, it may be preferred by the library. These hidden\nchoices may cause small or large behavior differences. The fact that\nthey can be rarely encountered can actually make it worse: you forget\nthat this might be a problem, and debugging the differences can be\ndifficult. If you allow site-packages to be included in your buildout,\nand the Python you use is not managed precisely by your application (for\ninstance, it is a system Python), you open yourself up to these\npossibilities. Don't be unaware of the dangers.\n\nTo show off these features, we need to use buildout with a Python\nexecutable with some extra paths to show ``include-site-packages``; and one\nguaranteed to have a sitecustomize module to show\n``exec-sitecustomize``. We'll make one using a test fixture called\n``make_py``. The os.environ change below will go into the sitecustomize,\nand the site_packages_path will be in the Python's path.\n\n >>> py_path, site_packages_path = make_py(initialization='''\\\n ... import os\n ... os.environ['zc.buildout'] = 'foo bar baz shazam'\n ... ''')\n >>> print site_packages_path\n /executable_buildout/site-packages\n\nNow let's take a look at include-site-packages. The default is false,\nso we will set it to true.\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = py\n ... executable = %(py_path)s\n ...\n ... [py]\n ... recipe = z3c.recipe.scripts:interpreter\n ... include-site-packages = true\n ... eggs = demo<0.3\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... \"\"\" % dict(server=link_server, py_path=py_path))\n\n >>> print system(buildout),\n Uninstalling py.\n Installing py.\n Generated interpreter '/sample-buildout/bin/py'.\n\nNow executable_buildout/site-packages is included in sys.path.\n\n >>> print system(join(sample_buildout, 'bin', 'py') +\n ... ''' -c \"import sys, pprint; pprint.pprint(sys.path)\"''')\n ... # doctest: +ELLIPSIS\n ['',\n '/sample-buildout/parts/py',\n ...,\n '/sample-buildout/eggs/demo-0.2-pyN.N.egg',\n '/sample-buildout/eggs/demoneeded-1.2c1-pyN.N.egg',\n '/executable_buildout/eggs/setuptools-X-pyN.N.egg',\n '/executable_buildout/site-packages']\n \n\nAs described above, the allowed-eggs-from-site-packages option lets us\ncontrol what site-packages eggs zc.buildout will allow to fulfill\ndependencies. The behavior was described above with an example (and the\nimplementation is tested elsewhere), so we'll only look at some simple and\ncommon use cases here.\n\nSometimes you may want to allow site-packages to be available but you don't\nwant your package to depend on it using setup.py. For instance, perhaps you\nare writing an application, and you want to depend on your system's packaging\nof the PostgreSQL code, but the system Python does not use eggs to\npackage it, so you need to manage the two separately. In this case, you\nmight not want to use any eggs from site-packages, but you want it available.\nIn this case, you can use allowed-eggs-from-site-packages with an empty value\nto keep any egg from being used from site-packages.\n\nHere's an example. Let's say we have a Python with demo and demoneeded\ninstalled as eggs in the system Python. Normally, they will be used to\nfulfill dependencies, because allowed-eggs-from-site-packages defaults to\nthe value \"*\" (allow any package). (We use an empty find-links value to say\nthat buildout may not look elsewhere for the package. We use a different\neggs-directory for isolation, so that eggs obtained other parts of the\ndocument do not affect this example.)\n\n >>> from zc.buildout.tests import create_sample_sys_install\n >>> create_sample_sys_install(site_packages_path)\n >>> import zc.buildout.easy_install\n >>> zc.buildout.easy_install.clear_index_cache()\n\n >>> write('buildout.cfg',\n ... '''\n ... [buildout]\n ... parts = eggs\n ... eggs-directory = tmpeggs\n ... find-links =\n ...\n ... [primed_python]\n ... executable = %(py_path)s\n ...\n ... [eggs]\n ... recipe = z3c.recipe.scripts\n ... include-site-packages = true\n ... python = primed_python\n ... eggs = demoneeded\n ... ''' % globals())\n\n >>> print system(buildout),\n Creating directory '/sample-buildout/tmpeggs'.\n Uninstalling py.\n Installing eggs.\n\nThat succeeds fine, getting demoneeded from the Python site-packages.\n\nHowever, when allowed-eggs-from-site-packages is an empty value, demoneeded\nis not allowed to come from site-packages, and the buildout fails.\n\n >>> zc.buildout.easy_install.clear_index_cache()\n >>> rmdir('tmpeggs')\n >>> write('buildout.cfg',\n ... '''\n ... [buildout]\n ... parts = eggs\n ... eggs-directory = tmpeggs\n ... find-links =\n ...\n ... [primed_python]\n ... executable = %(py_path)s\n ...\n ... [eggs]\n ... recipe = z3c.recipe.scripts\n ... include-site-packages = true\n ... python = primed_python\n ... allowed-eggs-from-site-packages =\n ... eggs = demoneeded\n ... ''' % globals())\n >>> print system(buildout),\n Creating directory '/sample-buildout/tmpeggs'.\n Uninstalling eggs.\n Installing eggs.\n Couldn't find index page for 'demoneeded' (maybe misspelled?)\n Getting distribution for 'demoneeded'.\n While:\n Installing eggs.\n Getting distribution for 'demoneeded'.\n Error: Couldn't find a distribution for 'demoneeded'.\n\nThe include-sitepackages and allowed-eggs-from-site-packages options both\ncan be obtained from the buildout section if they are not set locally.\n\n.. ReST comment: PyPI readers don't need the demonstration, but here it is.\n\n This succeeds:\n\n >>> from zc.buildout.tests import create_sample_sys_install\n >>> create_sample_sys_install(site_packages_path)\n >>> import zc.buildout.easy_install\n >>> zc.buildout.easy_install.clear_index_cache()\n\n >>> write('buildout.cfg',\n ... '''\n ... [buildout]\n ... parts = eggs\n ... eggs-directory = tmpeggs\n ... include-site-packages = true\n ... find-links =\n ...\n ... [primed_python]\n ... executable = %(py_path)s\n ...\n ... [eggs]\n ... recipe = z3c.recipe.scripts\n ... python = primed_python\n ... eggs = demoneeded\n ... ''' % globals())\n\n >>> print system(buildout),\n Installing eggs.\n\n This fails:\n\n >>> zc.buildout.easy_install.clear_index_cache()\n >>> rmdir('tmpeggs')\n >>> write('buildout.cfg',\n ... '''\n ... [buildout]\n ... parts = eggs\n ... eggs-directory = tmpeggs\n ... include-site-packages = true\n ... allowed-eggs-from-site-packages =\n ... find-links =\n ...\n ... [primed_python]\n ... executable = %(py_path)s\n ...\n ... [eggs]\n ... recipe = z3c.recipe.scripts\n ... python = primed_python\n ... eggs = demoneeded\n ... ''' % globals())\n >>> print system(buildout),\n Creating directory '/sample-buildout/tmpeggs'.\n Uninstalling eggs.\n Installing eggs.\n Couldn't find index page for 'demoneeded' (maybe misspelled?)\n Getting distribution for 'demoneeded'.\n While:\n Installing eggs.\n Getting distribution for 'demoneeded'.\n Error: Couldn't find a distribution for 'demoneeded'.\n\nRemember that you can provide multiple lines to the\nallowed-eggs-from-site-packages option, each specifying a whitelist of\nallowed packages. Globs (* and ?) are allowed.\n\nNext we will use the exec-sitecustomize option. It simply copies\nPython's underlying sitecustomize module, if it exists, to the local\nversion. The os.environ change shown above in the make_py call will go\ninto the sitecustomize.\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = py\n ... executable = %(py_path)s\n ...\n ... [py]\n ... recipe = z3c.recipe.scripts:interpreter\n ... exec-sitecustomize = true\n ... eggs = demo<0.3\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... \"\"\" % dict(server=link_server, py_path=py_path))\n\n >>> print system(buildout),\n Installing py.\n Generated interpreter '/sample-buildout/bin/py'.\n\n >>> cat(sample_buildout, 'parts', 'py', 'sitecustomize.py')\n ... # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS\n \n # The following is from\n # /executable_buildout/parts/py/sitecustomize.py\n ...\n import os\n os.environ['zc.buildout'] = 'foo bar baz shazam'\n\n >>> print system(join(sample_buildout, 'bin', 'py') +\n ... ''' -c \"import os; print os.environ['zc.buildout']\"''')\n foo bar baz shazam\n \n\nIt also will be honored in the buildout section if it is not set locally.\n\n.. ReST comment: PyPI users don't need to see this test. This verifies that\n exec-sitecustomize is honored if it is in the buildout section.\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = py\n ... executable = %(py_path)s\n ... exec-sitecustomize = true\n ...\n ... [py]\n ... recipe = z3c.recipe.scripts:interpreter\n ... eggs = demo<0.3\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... \"\"\" % dict(server=link_server, py_path=py_path))\n\n >>> print system(buildout),\n Updating py.\n\n >>> cat(sample_buildout, 'parts', 'py', 'sitecustomize.py')\n ... # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS\n \n # The following is from\n # /executable_buildout/parts/py/sitecustomize.py\n ...\n import os\n os.environ['zc.buildout'] = 'foo bar baz shazam'\n\n >>> print system(join(sample_buildout, 'bin', 'py') +\n ... ''' -c \"import os; print os.environ['zc.buildout']\"''')\n foo bar baz shazam\n \n\nOptions\n-------\n\nWe'll focus now on the remaining options that are different than\nzc.recipe.egg.\n\nLet's look at the ``extends`` option first.\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = demo python\n ...\n ... [demo]\n ... recipe = z3c.recipe.scripts\n ... eggs = demo<0.3\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... initialization =\n ... import os\n ... os.environ['zc.buildout'] = 'sha boo bop bazoodle'\n ...\n ... [python]\n ... recipe = z3c.recipe.scripts:interpreter\n ... extends = demo\n ... initialization =\n ... import os\n ... os.environ['zc.buildout'] = 'foo bar baz shazam'\n ... \"\"\" % dict(server=link_server))\n\nThat makes it easier to specify some initialization for the interpreter\nthat is different than a script, while duplicating other configuration.\n\nNow let's put it in action.\n\n >>> print system(buildout),\n Uninstalling py.\n Installing demo.\n Generated script '/sample-buildout/bin/demo'.\n Installing python.\n Generated interpreter '/sample-buildout/bin/python'.\n\n >>> print system(join(sample_buildout, 'bin', 'python') +\n ... ' -c \"import sys, pprint; pprint.pprint(sys.path[-2:])\"')\n ['/sample-buildout/eggs/demo-0.2-pyN.N.egg',\n '/sample-buildout/eggs/demoneeded-1.2c1-pyN.N.egg']\n \n >>> print system(join(sample_buildout, 'bin', 'python') +\n ... ''' -c \"import os; print os.environ['zc.buildout']\"'''),\n foo bar baz shazam\n\nNote that the parts/py directory has been cleaned up, and parts/python has\nbeen created.\n\n >>> ls(sample_buildout, 'parts')\n d buildout\n d demo\n d python\n\nIf you want to have initialization that only affects scripts, not the\ninterpreter, you can use script-initialization. Here's a demonstration.\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = demo\n ...\n ... [demo]\n ... recipe = z3c.recipe.scripts\n ... eggs = demo<0.3\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... interpreter = py\n ... script-initialization =\n ... print \"Hi from the script\"\n ... \"\"\" % dict(server=link_server))\n\n >>> print system(buildout),\n Uninstalling python.\n Uninstalling demo.\n Installing demo.\n Generated script '/sample-buildout/bin/demo'.\n Generated interpreter '/sample-buildout/bin/py'.\n\n >>> print system(join(sample_buildout, 'bin', 'py') +\n ... ''' -c \"print 'Hi from the interpreter'\"'''),\n Hi from the interpreter\n\n >>> print system(join(sample_buildout, 'bin', 'demo')),\n Hi from the script\n 2 2\n\nThe last new option is ``name``. This simply changes the name of the\ninterpreter, so that you are not forced to use the name of the section.\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = interpreter\n ...\n ... [interpreter]\n ... name = python2\n ... recipe = z3c.recipe.scripts:interpreter\n ... eggs = demo<0.3\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... \"\"\" % dict(server=link_server))\n\n >>> print system(buildout),\n Uninstalling demo.\n Installing interpreter.\n Generated interpreter '/sample-buildout/bin/python2'.\n\n >>> print system(join(sample_buildout, 'bin', 'python2') +\n ... ' -c \"print 42\"')\n 42\n \n\nThe other options all identical to zc.recipe.egg.\n\nDownload\n*********", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://cheeseshop.python.org/pypi/z3c.recipe.scripts", "keywords": "development build", "license": "ZPL 2.1", "maintainer": null, "maintainer_email": null, "name": "z3c.recipe.scripts", "package_url": "https://pypi.org/project/z3c.recipe.scripts/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/z3c.recipe.scripts/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://cheeseshop.python.org/pypi/z3c.recipe.scripts" }, "release_url": "https://pypi.org/project/z3c.recipe.scripts/1.0.1/", "requires_dist": null, "requires_python": null, "summary": "Recipe for installing Python scripts", "version": "1.0.1" }, "last_serial": 802085, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "2c60b90422ce5fe3af6fe929bed1e337", "sha256": "6f2ac0f9f2ae7ba24e954b8b716762838d9321b68252a7aef18235883e7822c2" }, "downloads": -1, "filename": "z3c.recipe.scripts-1.0.0.tar.gz", "has_sig": false, "md5_digest": "2c60b90422ce5fe3af6fe929bed1e337", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14677, "upload_time": "2010-08-23T17:37:27", "url": "https://files.pythonhosted.org/packages/fb/c0/3753db268f55a6ed2a4bc78f046ecb1554d0dfbbe3133e6aa554fb95307a/z3c.recipe.scripts-1.0.0.tar.gz" } ], "1.0.0b1": [ { "comment_text": "", "digests": { "md5": "4e62d539e7ca570f979305fe07ba3ba6", "sha256": "d37d197c4b339a1a76b4282ac0bcbe9af977f979725f8b4384238bebc306a75f" }, "downloads": -1, "filename": "z3c.recipe.scripts-1.0.0b1.tar.gz", "has_sig": false, "md5_digest": "4e62d539e7ca570f979305fe07ba3ba6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14683, "upload_time": "2010-04-30T04:07:10", "url": "https://files.pythonhosted.org/packages/42/57/dfce4c6205f3c440d9f3d7c4b3ab7b8539d5fb50c2bd8363a6a78b20395b/z3c.recipe.scripts-1.0.0b1.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "06f14b844047e053e709b7b8d03d131f", "sha256": "4471df7162ef4bb201bef7464eadca95ccbff9bf5579a2e6da4adf317081eda9" }, "downloads": -1, "filename": "z3c.recipe.scripts-1.0.1.tar.gz", "has_sig": false, "md5_digest": "06f14b844047e053e709b7b8d03d131f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19588, "upload_time": "2010-08-28T04:19:51", "url": "https://files.pythonhosted.org/packages/ce/bd/f181d7b69c7af94911c52da9ec1348c3f9643cd3bd5cd432359b941105a9/z3c.recipe.scripts-1.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "06f14b844047e053e709b7b8d03d131f", "sha256": "4471df7162ef4bb201bef7464eadca95ccbff9bf5579a2e6da4adf317081eda9" }, "downloads": -1, "filename": "z3c.recipe.scripts-1.0.1.tar.gz", "has_sig": false, "md5_digest": "06f14b844047e053e709b7b8d03d131f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19588, "upload_time": "2010-08-28T04:19:51", "url": "https://files.pythonhosted.org/packages/ce/bd/f181d7b69c7af94911c52da9ec1348c3f9643cd3bd5cd432359b941105a9/z3c.recipe.scripts-1.0.1.tar.gz" } ] }