{ "info": { "author": "David Glick", "author_email": "davidglick@onenw.org", "bugtrack_url": null, "classifiers": [ "Framework :: Buildout", "Framework :: Zope2", "Intended Audience :: Developers", "License :: OSI Approved :: Zope Public License", "Topic :: Software Development :: Build Tools", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "Detailed Documentation\n**********************\n\nIntroduction\n============\n\nThis recipe adds additional filestorage and zodb_db stanzas to the zope.conf\nand zeo.conf files generated by the plone.recipe.zope2instance and\nplone.recipe.[zope2]zeoserver recipes. It also creates the directories in which\nthe extra filestorage data files will be created. This makes it easy to add\nadditional filestorages and mountpoints to a Zope 2 instance.\n\n\nSupported options\n=================\n\nparts\n A list of filestorage sub-parts to be generated, one per line. (This is\n different from buildout parts.)\nzeo\n The name of a plone.recipe.zope2zeoserver or plone.recipe.zeoserver part to\n which we want to add the extra filestorage. Defaults to the first such part\n in the buildout, if any.\nzopes\n A list of names of plone.recipe.zope2instance parts to which we want to add\n the extra filestorage. Defaults to all plone.recipe.zope2instance parts\n connected to the associated zeoserver part, if any, or all\n plone.recipe.zope2instance parts, if no ZEO is found.\n \nThe following options affect the generated zope.conf and zeo.conf. Each may be\nspecified for all filestorage subparts in the collective.recipe.filestorage\nbuildout part, or for one particular filestorage subpart by placing the option\nin a new buildout part called 'filestorage_subpart', where subpart is the name\nof the subpart listed in the 'parts' option of this recipe. The name of the\nsubpart may be interpolated by using '%(fs_part_name)s' in the option.\n\nlocation\n The location of the Data.fs file, relative to the buildout root directory.\n Defaults to var/filestorage/%(fs_part_name)s/Data.fs\nzodb-name\n The name of the ZODB. Defaults to '%(fs_part_name)s'.\nzodb-cache-size\n Set the ZODB cache size, i.e. the number of objects which the ZODB cache\n will try to hold. Inherits from the associated zope part. Defaults to\n 5000.\nzodb-mountpoint\n Set the path to the mountpoint. Defaults to '/%(fs_part_name)s'.\nzodb-container-class\n Set the class of the object being mounted. Defaults to not being set.\nzeo-address\n Set the port of the associated ZEO server. Inherits from the associated\n Zope and ZEO parts. Defaults to 8100.\nzeo-client-cache-size\n Set the size of the ZEO client cache. Inherits from the associated Zope\n part. Defaults to '30MB'.\nzeo-storage\n Set the id of the ZEO storage. Defaults to '%(fs_part_name)s'.\nzeo-client-name\n Set the name of the ZEO client. Defaults to '%(fs_part_name)s_zeostorage'.\nzeo-client-client\n Set the persistent cache name that is used to construct the cache\n filenames. Persistent cache files are disabled by default.\nblob-storage\n Set the directory to be used to store blobs for a standalone Zope instance\n or a ZEO server. Optional. Required if you're going to store blobs, though.\n Recommended value: var/blobstorage-%(fs_part_name)s\nzeo-blob-storage\n Set the directory to be used to store blobs for a ZEO client. Defaults to\n using the same value as `blob-storage`.\nzeo-shared-blob-dir\n Boolean that should be 'on' if the blob dir is being shared by the ZEO\n server and client. Defaults to 'on'.\n\n\nExample usage\n=============\n\nLet's create and run a minimal buildout that adds an extra filestorage::\n\n >>> write('buildout.cfg',\n ... '''\n ... [buildout]\n ... extends = base.cfg\n ... parts =\n ... filestorage\n ... instance\n ...\n ... [instance]\n ... recipe = plone.recipe.zope2instance\n ... zope2-location = %(zope2_location)s\n ... user = me\n ...\n ... [filestorage]\n ... recipe = collective.recipe.filestorage\n ... parts =\n ... my-fs\n ... ''' % globals())\n >>> print system(join('bin', 'buildout') + ' -q')\n\nOur zope.conf should get the extra filestorage stanza automatically injected into it::\n\n >>> instance = os.path.join(sample_buildout, 'parts', 'instance')\n >>> print open(os.path.join(instance, 'etc', 'zope.conf')).read()\n %define INSTANCEHOME...instance\n ...\n \n \n cache-size 5000\n \n path .../var/filestorage/my-fs/my-fs.fs\n \n mount-point /my-fs\n \n \n \nThe recipe will also create a directory for the new filestorage::\n\n >>> 'my-fs' in os.listdir(os.path.join(sample_buildout, 'var', 'filestorage'))\n True\n \nLet's make sure that the conf files will be regenerated whenever we make a change to a filestorage part,\neven if the direct configuration for the zope/zeo parts hasn't changed::\n\n >>> open('buildout.cfg', 'a').write(\" my-fs-2\\n\")\n >>> print system(join('bin', 'buildout') + ' -q')\n >>> 'my-fs-2' in open('parts/instance/etc/zope.conf').read()\n True\n\nLet's make sure that the filestorage directory is not clobbered even if the filestorage part is removed\nfrom the buildout::\n\n >>> write('buildout.cfg',\n ... '''\n ... [buildout]\n ... extends = base.cfg\n ... parts =\n ... instance\n ...\n ... [instance]\n ... recipe = plone.recipe.zope2instance\n ... zope2-location = %(zope2_location)s\n ... user = me\n ... ''' % globals())\n >>> print system(join('bin', 'buildout') + ' -q') \n >>> 'my-fs' in os.listdir(os.path.join(sample_buildout, 'var', 'filestorage'))\n True\n \nWe can override the defaults for a number of settings::\n\n >>> write('buildout.cfg',\n ... '''\n ... [buildout]\n ... extends = base.cfg\n ... parts =\n ... filestorage\n ... instance\n ...\n ... [instance]\n ... recipe = plone.recipe.zope2instance\n ... zope2-location = %(zope2_location)s\n ... user = me\n ...\n ... [filestorage]\n ... recipe = collective.recipe.filestorage\n ... location = var/filestorage/%(fs_part_name)s/Data.fs\n ... blob-storage = var/blobstorage-%(fs_part_name)s\n ... zodb-name = %(fs_part_name)s_db\n ... zodb-cache-size = 1000\n ... zodb-mountpoint = /%(fs_part_name)s_mountpoint\n ... zodb-container-class = Products.ATContentTypes.content.folder.ATFolder\n ... parts =\n ... my-fs\n ... '''.replace('%(zope2_location)s', zope2_location))\n >>> print system(join('bin', 'buildout') + ' -q')\n >>> instance = os.path.join(sample_buildout, 'parts', 'instance')\n >>> print open(os.path.join(instance, 'etc', 'zope.conf')).read()\n %define INSTANCEHOME...instance\n ...\n \n \n cache-size 1000\n \n blob-dir .../var/blobstorage-my-fs\n \n path .../var/filestorage/my-fs/Data.fs\n \n \n mount-point /my-fs_mountpoint\n container-class Products.ATContentTypes.content.folder.ATFolder\n \n \n\nA setting can also be modified just for one particular filestorage, by creating a new part with\nthe ``filestorage_`` prefix, like so::\n\n >>> write('buildout.cfg',\n ... '''\n ... [buildout]\n ... extends = base.cfg\n ... parts =\n ... filestorage\n ... instance\n ...\n ... [instance]\n ... recipe = plone.recipe.zope2instance\n ... zope2-location = %(zope2_location)s\n ... user = me\n ...\n ... [filestorage]\n ... recipe = collective.recipe.filestorage\n ... parts =\n ... my-fs\n ...\n ... [filestorage_my-fs]\n ... zodb-cache-size = 1000\n ... ''' % globals())\n >>> print system(join('bin', 'buildout') + ' -q')\n >>> instance = os.path.join(sample_buildout, 'parts', 'instance')\n >>> print open(os.path.join(instance, 'etc', 'zope.conf')).read()\n %define INSTANCEHOME...instance\n ...\n \n \n cache-size 1000\n \n path .../var/filestorage/my-fs/my-fs.fs\n \n mount-point /my-fs\n \n \n\n\nBy default, the recipe adds the extra filestorages to each plone.recipe.zope2instance part in the buildout,\nbut you can tell it to only add it to certain parts::\n\n >>> write('buildout.cfg',\n ... '''\n ... [buildout]\n ... extends = base.cfg\n ... parts =\n ... filestorage\n ... instance1\n ... instance2\n ...\n ... [instance1]\n ... recipe = plone.recipe.zope2instance\n ... zope2-location = %(zope2_location)s\n ... user = me\n ...\n ... [instance2]\n ... recipe = plone.recipe.zope2instance\n ... zope2-location = %(zope2_location)s\n ... user = me\n ...\n ... [filestorage]\n ... recipe = collective.recipe.filestorage\n ... zopes = instance1\n ... parts =\n ... my-fs\n ... ''' % globals())\n >>> print system(join('bin', 'buildout') + ' -q')\n >>> 'my-fs' in open('parts/instance1/etc/zope.conf').read()\n True\n >>> 'my-fs' in open('parts/instance2/etc/zope.conf').read()\n False\n\nExample Usage with ZEO\n======================\n\nHere is a minimal buildout including a ZEO server and two ZODB clients::\n\n >>> write('buildout.cfg',\n ... '''\n ... [buildout]\n ... extends = base.cfg\n ... parts =\n ... filestorage\n ... zeoserver\n ... primary\n ... secondary\n ...\n ... [zeoserver]\n ... recipe = plone.recipe.zope2zeoserver\n ... zope2-location = %(zope2_location)s\n ...\n ... [primary]\n ... recipe = plone.recipe.zope2instance\n ... zope2-location = %(zope2_location)s\n ... user = me\n ... zeo-client = 1\n ...\n ... [secondary]\n ... recipe = plone.recipe.zope2instance\n ... zope2-location = %(zope2_location)s\n ... user = me\n ... zeo-client = 1\n ...\n ... [filestorage]\n ... recipe = collective.recipe.filestorage\n ... parts =\n ... my-fs\n ... ''' % globals())\n >>> print system(join('bin', 'buildout') + ' -q')\n\nThis should result in the appropriate additions to zeo.conf and both zope.conf's::\n\n >>> zeoserver = os.path.join(sample_buildout, 'parts', 'zeoserver')\n >>> print open(os.path.join(zeoserver, 'etc', 'zeo.conf')).read()\n %define INSTANCE /sample-buildout/parts/zeoserver\n ...\n \n \n path /sample-buildout/var/filestorage/my-fs/my-fs.fs\n \n \n \n >>> primary = os.path.join(sample_buildout, 'parts', 'primary')\n >>> print open(os.path.join(primary, 'etc', 'zope.conf')).read()\n %define INSTANCEHOME /sample-buildout/parts/primary\n ...\n \n \n cache-size 5000\n \n server 8100\n storage my-fs\n name my-fs_zeostorage\n var /sample-buildout/parts/primary/var\n cache-size 30MB\n \n \n mount-point /my-fs\n \n \n\n >>> secondary = os.path.join(sample_buildout, 'parts', 'secondary')\n >>> print open(os.path.join(secondary, 'etc', 'zope.conf')).read()\n %define INSTANCEHOME /sample-buildout/parts/secondary\n ...\n \n \n cache-size 5000\n \n server 8100\n storage my-fs\n name my-fs_zeostorage\n var /sample-buildout/parts/secondary/var\n cache-size 30MB\n \n \n mount-point /my-fs\n \n \n\nAs above, we can override a number of the default parameters::\n\n >>> write('buildout.cfg',\n ... '''\n ... [buildout]\n ... extends = base.cfg\n ... parts =\n ... filestorage\n ... zeoserver\n ... primary\n ... secondary\n ...\n ... [zeoserver]\n ... recipe = plone.recipe.zope2zeoserver\n ... zope2-location = %(zope2_location)s\n ...\n ... [primary]\n ... recipe = plone.recipe.zope2instance\n ... zope2-location = %(zope2_location)s\n ... user = me\n ... zeo-client = 1\n ...\n ... [secondary]\n ... recipe = plone.recipe.zope2instance\n ... zope2-location = %(zope2_location)s\n ... user = me\n ... zeo-client = 1\n ...\n ... [filestorage]\n ... recipe = collective.recipe.filestorage\n ... location = var/filestorage/%(fs_part_name)s/Data.fs\n ... blob-storage = var/blobstorage-%(fs_part_name)s\n ... zodb-cache-size = 1000\n ... zodb-name = %(fs_part_name)s_db\n ... zodb-mountpoint = /%(fs_part_name)s_mountpoint\n ... zeo-address = 8101\n ... zeo-client-cache-size = 50MB\n ... zeo-storage = %(fs_part_name)s_storage\n ... zeo-client-name = %(fs_part_name)s_zeostorage_name\n ... parts =\n ... my-fs\n ... '''.replace('%(zope2_location)s', zope2_location))\n >>> print system(join('bin', 'buildout') + ' -q')\n >>> zeoserver = os.path.join(sample_buildout, 'parts', 'zeoserver')\n >>> print open(os.path.join(zeoserver, 'etc', 'zeo.conf')).read()\n %define INSTANCE /sample-buildout/parts/zeoserver\n ...\n \n \n blob-dir /sample-buildout/var/blobstorage-my-fs\n \n path /sample-buildout/var/filestorage/my-fs/Data.fs\n \n \n \n >>> primary = os.path.join(sample_buildout, 'parts', 'primary')\n >>> print open(os.path.join(primary, 'etc', 'zope.conf')).read()\n %define INSTANCEHOME /sample-buildout/parts/primary\n ...\n \n \n cache-size 1000\n \n blob-dir /sample-buildout/var/blobstorage-my-fs\n shared-blob-dir on\n server 8101\n storage my-fs_storage\n name my-fs_zeostorage_name\n var /sample-buildout/parts/primary/var\n cache-size 50MB\n \n \n mount-point /my-fs_mountpoint\n \n \n >>> secondary = os.path.join(sample_buildout, 'parts', 'secondary')\n >>> print open(os.path.join(secondary, 'etc', 'zope.conf')).read()\n %define INSTANCEHOME /sample-buildout/parts/secondary\n ...\n \n \n cache-size 1000\n \n blob-dir /sample-buildout/var/blobstorage-my-fs\n shared-blob-dir on\n server 8101\n storage my-fs_storage\n name my-fs_zeostorage_name\n var /sample-buildout/parts/secondary/var\n cache-size 50MB\n \n \n mount-point /my-fs_mountpoint\n \n \n\nBy default, the recipe adds the extra filestorages to the first\nplone.recipe.zope2zeoserver part in the buildout, and will throw an error if\nthere is more than one part using this recipe. However, you can override this\nbehavior by specifying a particular ZEO part. In this case, the filestorages\nwill only be added to the Zopes using that ZEO, by default::\n\n >>> write('buildout.cfg',\n ... '''\n ... [buildout]\n ... extends = base.cfg\n ... parts =\n ... filestorage\n ... zeoserver1\n ... zeoserver2\n ... primary\n ... secondary\n ... other-zope\n ...\n ... [zeoserver1]\n ... recipe = plone.recipe.zope2zeoserver\n ... zope2-location = %(zope2_location)s\n ... zeo-address = 8100\n ...\n ... [zeoserver2]\n ... recipe = plone.recipe.zope2zeoserver\n ... zope2-location = %(zope2_location)s\n ... zeo-address = 8101\n ...\n ... [primary]\n ... recipe = plone.recipe.zope2instance\n ... zope2-location = %(zope2_location)s\n ... user = me\n ... zeo-client = 1\n ... zeo-address = 8101\n ...\n ... [secondary]\n ... recipe = plone.recipe.zope2instance\n ... zope2-location = %(zope2_location)s\n ... user = me\n ... zeo-client = 1\n ... zeo-address = 8101\n ...\n ... [other-zope]\n ... recipe = plone.recipe.zope2instance\n ... zope2-location = %(zope2_location)s\n ... user = me\n ... zeo-client = 1\n ... zeo-address = 8100\n ...\n ... [filestorage]\n ... recipe = collective.recipe.filestorage\n ... zeo = zeoserver2\n ... parts =\n ... my-fs\n ... ''' % globals())\n >>> print system(join('bin', 'buildout') + ' -q')\n >>> 'my-fs' in open('parts/zeoserver2/etc/zeo.conf').read()\n True\n >>> 'my-fs' in open('parts/zeoserver1/etc/zeo.conf').read()\n False\n >>> 'my-fs' in open('parts/primary/etc/zope.conf').read()\n True\n >>> 'my-fs' in open('parts/other-zope/etc/zope.conf').read()\n False\n\n \nError conditions\n================\n \nImportant note: You must place all parts using the\ncollective.recipe.filestorage recipe before the part for the instances and\nzeoservers that you are adding the filestorage to. Otherwise you'll get an\nerror::\n\n >>> write('buildout.cfg',\n ... '''\n ... [buildout]\n ... extends = base.cfg\n ... parts =\n ... instance\n ... filestorage\n ...\n ... [instance]\n ... recipe = plone.recipe.zope2instance\n ... zope2-location = %(zope2_location)s\n ...\n ... [filestorage]\n ... recipe = collective.recipe.filestorage\n ... parts =\n ... my-fs\n ... ''' % globals())\n >>> print system(join('bin', 'buildout') + ' -q')\n While:\n ...\n Error: [collective.recipe.filestorage] The \"filestorage\" part must be listed before the following parts in ${buildout:parts}: instance\n \n\n\nBuildouts with multiple zeoserver parts will result in an\nerror if the desired ZEO to associate with is not explicitly specified::\n\n >>> write('buildout.cfg',\n ... '''\n ... [buildout]\n ... extends = base.cfg\n ... parts =\n ... filestorage\n ... zeoserver1\n ... zeoserver2\n ... primary\n ... secondary\n ...\n ... [zeoserver1]\n ... recipe = plone.recipe.zope2zeoserver\n ... zope2-location = %(zope2_location)s\n ...\n ... [zeoserver2]\n ... recipe = plone.recipe.zope2zeoserver\n ... zope2-location = %(zope2_location)s\n ...\n ... [primary]\n ... recipe = plone.recipe.zope2instance\n ... zope2-location = %(zope2_location)s\n ... user = me\n ... zeo-client = 1\n ...\n ... [secondary]\n ... recipe = plone.recipe.zope2instance\n ... zope2-location = %(zope2_location)s\n ... user = me\n ... zeo-client = 1\n ...\n ... [filestorage]\n ... recipe = collective.recipe.filestorage\n ... parts =\n ... my-fs\n ... ''' % globals())\n >>> print system(join('bin', 'buildout') + ' -q')\n While:\n ...\n Error: [collective.recipe.filestorage] \"filestorage\" part found multiple zeoserver parts; please specify which one to use with the \"zeo\" option.\n\nSpecifying a nonexistent zeo should result in an error::\n\n >>> write('buildout.cfg',\n ... '''\n ... [buildout]\n ... extends = base.cfg\n ... parts =\n ... filestorage\n ... zeoserver\n ... primary\n ...\n ... [zeoserver]\n ... recipe = plone.recipe.zope2zeoserver\n ... zope2-location = %(zope2_location)s\n ...\n ... [primary]\n ... recipe = plone.recipe.zope2instance\n ... zope2-location = %(zope2_location)s\n ... user = me\n ... zeo-client = 1\n ...\n ... [filestorage]\n ... recipe = collective.recipe.filestorage\n ... zeo = foobar\n ... parts =\n ... my-fs\n ... ''' % globals())\n >>> print system(join('bin', 'buildout') + ' -q')\n While:\n ...\n Error: [collective.recipe.filestorage] \"filestorage\" part specifies nonexistant zeo part \"foobar\".\n\nSo should specifying a nonexistent zope part::\n\n >>> write('buildout.cfg',\n ... '''\n ... [buildout]\n ... extends = base.cfg\n ... parts =\n ... filestorage\n ... zeoserver\n ... primary\n ...\n ... [zeoserver]\n ... recipe = plone.recipe.zope2zeoserver\n ... zope2-location = %(zope2_location)s\n ...\n ... [primary]\n ... recipe = plone.recipe.zope2instance\n ... zope2-location = %(zope2_location)s\n ... user = me\n ... zeo-client = 1\n ...\n ... [filestorage]\n ... recipe = collective.recipe.filestorage\n ... zopes = foobar\n ... parts =\n ... my-fs\n ... ''' % globals())\n >>> print system(join('bin', 'buildout') + ' -q')\n While:\n ...\n Error: [collective.recipe.filestorage] The \"filestorage\" part expected but failed to find the following parts in ${buildout:parts}: foobar\n\nIf the Zope/ZEO parts are being automatically identified, let's make sure\nthat we don't accidentally \"wake up\" parts that would not otherwise be\nincluded in the buildout::\n\n >>> write('buildout.cfg',\n ... '''\n ... [buildout]\n ... extends = base.cfg\n ... parts =\n ... filestorage\n ... instance\n ...\n ... [instance]\n ... recipe = plone.recipe.zope2instance\n ... zope2-location = %(zope2_location)s\n ... user = me\n ...\n ... [filestorage]\n ... recipe = collective.recipe.filestorage\n ... parts =\n ... my-fs\n ...\n ... [foobar]\n ... recipe = plone.recipe.distros\n ... urls =\n ... ''' % globals())\n >>> print system(join('bin', 'buildout') + ' -q')\n >>> 'foobar' in os.listdir(os.path.join(sample_buildout, 'parts'))\n False\n\nMake sure that instance parts are found correctly in buildouts using 'extends'\nand the += or -= options::\n\n >>> write('buildout.cfg',\n ... '''\n ... [buildout]\n ... extends = base.cfg\n ... parts =\n ... filestorage\n ... instance\n ...\n ... [instance]\n ... recipe = plone.recipe.zope2instance\n ... zope2-location = %(zope2_location)s\n ... user = me\n ...\n ... [filestorage]\n ... recipe = collective.recipe.filestorage\n ... parts =\n ... extendstest\n ... ''' % globals())\n >>> write('prod.cfg',\n ... '''\n ... [buildout]\n ... extends = buildout.cfg\n ... parts +=\n ... foobar\n ...\n ... [foobar]\n ... recipe = plone.recipe.distros\n ... urls =\n ... ''' % globals())\n >>> print system(join('bin', 'buildout') + ' -q -c prod.cfg')\n >>> 'extendstest' in open(os.path.join(instance, 'etc', 'zope.conf')).read()\n True\n\nRunning the tests\n=================\n\nThe subversion checkout of collective.recipe.filestorage includes a buildout\nwhich installs a script for running the tests.\n\nJust run::\n\n python2.4 bootstrap.py\n bin/buildout\n bin/test\n\nKnown issue: The tests run buildout in a separate process, so it's currently\nimpossible to put a pdb breakpoint in the recipe and debug during the test.\nIf you need to do this, set up another buildout which uses collective.recipe.filestorage\nas a development egg.\n\n\nReporting bugs or asking questions\n==================================\n\nThere is a shared bugtracker and help desk on Launchpad:\nhttps://bugs.launchpad.net/collective.buildout/\n\nChange history\n**************\n\n0.6 (2010-08-13)\n================\n\n - Support use of the recipe when the ZEO server and client are in different\n buildouts.\n [ramon]\n\n0.5 (2010-02-03)\n================\n\n - Support plone.recipe.zeoserver in addition to plone.recipe.zope2zeoserver.\n [davisagli]\n\n0.4 (2009-12-30)\n================\n\n - Add support for creating blob storages associated with the created\n filestorage parts.\n [davisagli]\n\n - Fixed message indicating which parts the filestorage part must be installed\n before. This fixes https://bugs.launchpad.net/bugs/433877 (Thanks, Jean\n Jordaan)\n [davisagli]\n\n0.3 (2009-03-19)\n================\n\n - Avoid causing the installation of all parts, even those not listed in the\n [buildout] parts variable. Thanks to Dylan Jay for the diagnosis and fix.\n [davisagli]\n\n - Fixed restructured text of long description (README.txt).\n [maurits]\n\n0.2 (2008-04-30)\n================\n\n - Added zodb_container_class option.\n [davisagli]\n\n0.1 (2008-04-22)\n================\n\n - Happy Earth Day!\n [davisagli]\n\n - Created recipe with ZopeSkel. Initial implementation.\n [davisagli]\n\nContributors\n************\n\n - David Glick [davisagli], Author\n\nThanks to:\n\n - Dylan Jay\n - Ramon Navarro Bosch", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://svn.plone.org/svn/collective/buildout/collective.recipe.filestorage/trunk", "keywords": "buildout zope zeo zodb mountpoint filestorage", "license": "ZPL", "maintainer": null, "maintainer_email": null, "name": "collective.recipe.filestorage", "package_url": "https://pypi.org/project/collective.recipe.filestorage/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/collective.recipe.filestorage/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://svn.plone.org/svn/collective/buildout/collective.recipe.filestorage/trunk" }, "release_url": "https://pypi.org/project/collective.recipe.filestorage/0.6/", "requires_dist": null, "requires_python": null, "summary": "This recipe aids the creation and management of multiple Zope 2 filestorages.", "version": "0.6" }, "last_serial": 788133, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "ae4ece2013e01971b8e234b6d3a63f89", "sha256": "f7f081e8f249d38084f30aaf45d075d7f12837007d91834f2bb11612a2cd39a8" }, "downloads": -1, "filename": "collective.recipe.filestorage-0.1-py2.4.egg", "has_sig": false, "md5_digest": "ae4ece2013e01971b8e234b6d3a63f89", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 21357, "upload_time": "2008-04-22T23:03:19", "url": "https://files.pythonhosted.org/packages/7e/0a/ed2fe2e5115828663df5088db68509ccf96422e666e8e638c360ad489018/collective.recipe.filestorage-0.1-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "f8d552faccd5d5206fef29d2331f9652", "sha256": "fb50d740aa6a08dc3ff6183b7df04c949a6b2afd1af10789ab5880bbe9f16d5e" }, "downloads": -1, "filename": "collective.recipe.filestorage-0.1-py2.5.egg", "has_sig": false, "md5_digest": "f8d552faccd5d5206fef29d2331f9652", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 21268, "upload_time": "2008-04-22T20:12:22", "url": "https://files.pythonhosted.org/packages/1f/f5/3f3dbb022fe2ce362279739c51be5be958346e627b151893fab857d094a3/collective.recipe.filestorage-0.1-py2.5.egg" }, { "comment_text": "", "digests": { "md5": "39f72556283ae029ea5e65bb94e38b7b", "sha256": "b2bec55dac3ef7be4186eea3a9f37928b000b9db37cb1442f3d8e32338939bae" }, "downloads": -1, "filename": "collective.recipe.filestorage-0.1.tar.gz", "has_sig": false, "md5_digest": "39f72556283ae029ea5e65bb94e38b7b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12994, "upload_time": "2008-04-22T20:12:19", "url": "https://files.pythonhosted.org/packages/b9/e5/e216a941efb31383548211ec71153a714b89c1fe5f75f2be8593e4d2b2f3/collective.recipe.filestorage-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "676fc9fa87bc332c5a26c74201112c38", "sha256": "336a8c3d458f6f8c0fdec2c37c3baf27ac98c55407fed78c74bd6fcc1d8c0eb9" }, "downloads": -1, "filename": "collective.recipe.filestorage-0.2-py2.4.egg", "has_sig": false, "md5_digest": "676fc9fa87bc332c5a26c74201112c38", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 21663, "upload_time": "2008-04-30T20:12:37", "url": "https://files.pythonhosted.org/packages/bc/93/2641263a0f39026add9355fa0a9daecb05437e516038e5655ddcb6812efa/collective.recipe.filestorage-0.2-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "c2c9dbee06d0beab0bed726e4596d33c", "sha256": "b690f7135dbefe5653f3579973c7fc142ea0c8712df3b208db4cb2b3b5edad8f" }, "downloads": -1, "filename": "collective.recipe.filestorage-0.2.tar.gz", "has_sig": false, "md5_digest": "c2c9dbee06d0beab0bed726e4596d33c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13301, "upload_time": "2008-04-30T20:12:35", "url": "https://files.pythonhosted.org/packages/79/4b/836bcefab7e2cfc1a18986afa74cfb66e3fcc59fe5304ae257e86420fc0d/collective.recipe.filestorage-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "6474c73b2176afdb1eaadd63b589e1e6", "sha256": "5f8d4f84cf57658290cbd0ff95f96c82f5ed0e4a1eb7bbb7293011573a9ef311" }, "downloads": -1, "filename": "collective.recipe.filestorage-0.3.tar.gz", "has_sig": false, "md5_digest": "6474c73b2176afdb1eaadd63b589e1e6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13899, "upload_time": "2009-03-19T07:44:06", "url": "https://files.pythonhosted.org/packages/3e/c5/e1ab8812c5298668c12e89f0f7b4bc176c13277ac81cf5bfe2cda948c28c/collective.recipe.filestorage-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "5dda75e5bcf50d367cd91b6aa91da027", "sha256": "8345c70ee09e7b952885590243ad0efaaa5df042c77ddb8382403cb268b3d325" }, "downloads": -1, "filename": "collective.recipe.filestorage-0.4.zip", "has_sig": false, "md5_digest": "5dda75e5bcf50d367cd91b6aa91da027", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26096, "upload_time": "2009-12-30T06:54:44", "url": "https://files.pythonhosted.org/packages/c3/13/d31bb6acb4dc2f7831b0fbb54877effcc2d224837e4725876e7d9b1cf5fa/collective.recipe.filestorage-0.4.zip" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "bdc3635d785947676dd911ffba0c516a", "sha256": "6e3c294217e5ce961fe9be4019c693538ba938f0e362b2c7ac5cf19e703b02ef" }, "downloads": -1, "filename": "collective.recipe.filestorage-0.5.zip", "has_sig": true, "md5_digest": "bdc3635d785947676dd911ffba0c516a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26359, "upload_time": "2010-02-04T06:03:42", "url": "https://files.pythonhosted.org/packages/53/0d/81d20e79992bc65ab4820c09ce7d67421a741d25e2ef6943ebbb48a53354/collective.recipe.filestorage-0.5.zip" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "c0d85a82a858a860dc665dd38303fedd", "sha256": "30bb817f8fd572f127044dd8e6bd8f352461ed108cd8c6e3230ff301a5275593" }, "downloads": -1, "filename": "collective.recipe.filestorage-0.6.zip", "has_sig": true, "md5_digest": "c0d85a82a858a860dc665dd38303fedd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26760, "upload_time": "2010-08-13T22:48:58", "url": "https://files.pythonhosted.org/packages/d1/eb/79f486e3ea2dc797e3b1efeaabd3c557a13ef8546f391f2a15152cfcb791/collective.recipe.filestorage-0.6.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c0d85a82a858a860dc665dd38303fedd", "sha256": "30bb817f8fd572f127044dd8e6bd8f352461ed108cd8c6e3230ff301a5275593" }, "downloads": -1, "filename": "collective.recipe.filestorage-0.6.zip", "has_sig": true, "md5_digest": "c0d85a82a858a860dc665dd38303fedd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26760, "upload_time": "2010-08-13T22:48:58", "url": "https://files.pythonhosted.org/packages/d1/eb/79f486e3ea2dc797e3b1efeaabd3c557a13ef8546f391f2a15152cfcb791/collective.recipe.filestorage-0.6.zip" } ] }