{ "info": { "author": "European Environment Agency: IDM2 A-Team", "author_email": "eea-edw-a-team-alerts@googlegroups.com", "bugtrack_url": null, "classifiers": [ "Framework :: Plone", "Framework :: Plone :: 4.0", "Framework :: Plone :: 4.1", "Framework :: Plone :: 4.2", "Framework :: Plone :: 4.3", "Framework :: Zope2", "License :: OSI Approved :: GNU General Public License (GPL)", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Zope", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "=========\nEEA Cache\n=========\n.. image:: https://ci.eionet.europa.eu/buildStatus/icon?job=eea/eea.cache/develop\n :target: https://ci.eionet.europa.eu/job/eea/job/eea.cache/job/develop/display/redirect\n :alt: Develop\n.. image:: https://ci.eionet.europa.eu/buildStatus/icon?job=eea/eea.cache/master\n :target: https://ci.eionet.europa.eu/job/eea/job/eea.cache/job/master/display/redirect\n :alt: Master\n\nIntroduction\n============\n\nThis package combines the features from lovely.memcached and plone.memoize.ram.\nIt provides a decorator and utility for Memcaches at EEA.\nThe decorator allows you set dependencies known by eea.cache\n\n.. note ::\n\n This add-on doesn't do anything by itself. It needs to be integrated by a\n developer within your own products. For reference you can check\n the `eea.app.visualization`_ package.\n\nContents\n========\n\n.. contents::\n\nMain features\n=============\n\n1. Extends and overrides plone.memoize cache adapters to work with memcache\n2. Provides an extended @cache decorator that supports:\n\n * cache lifetime override per method\n * dependencies string in order to bulk invalidate cache\n * auto-invalidation of cache when ObjectModifiedEvent is triggered\n\n3. Possibility to manually invalidate cache via URL.\n\nInstall\n=======\n\n* Add eea.cache to your eggs and zcml section in your buildout and re-run buildout::\n\n eggs =\n ...\n eea.cache\n\n zcml =\n ...\n eea.cache\n eea.cache-overrides\n\n* You can download a sample buildout from https://github.com/eea/eea.cache/tree/master/buildouts/plone4\n* Install eea.cache within Site Setup > Add-ons\n* Start memcache::\n\n $ bin/memcached start\n\nDependencies\n============\n\n* `python-memcached`_\n* `pylibmc`_ (optional, for better performance)\n* `plone.memoize`_\n* `plone.uuid`_\n\n\nSource code\n===========\n\nLatest source code (Zope 2 compatible):\n * `Plone Collective on Github `_\n * `EEA on Github `_\n\n\nCache decorator\n===============\n\n::\n\n >>> def key(method, self):\n ... return method.__name__\n\n >>> from eea.cache import cache\n >>> @cache(key, dependencies=[\"frontpage\"])\n ... def myMethod(num):\n ... return num*num\n\nLets clear any running memcache::\n\n >>> from eea.cache.event import InvalidateMemCacheEvent\n >>> from zope.event import notify\n >>> notify(InvalidateMemCacheEvent(raw=True, dependencies=['frontpage']))\n\nOur myMethod will now be cached with the key returned from the method 'key' and\nwith dependency 'frontpage'::\n\n >>> myMethod(2)\n 4\n >>> myMethod(3)\n 4\n\n >>> notify(InvalidateMemCacheEvent(raw=True, dependencies=['frontpage']))\n >>> myMethod(3)\n 9\n\nCache lifetime\n==============\nBy default your content is cached in memcache for one hour (3600 seconds). You\ncan change this by adding an **int** property within: ZMI > portal_properties >\nsite_properties called **memcached_defaultLifetime** and set it's value to\n**86400** (one day) for example.\n\n\nCache lifetime override per key\n-------------------------------\n\nStarting with eea.cache 5.1 you can also pass a lifetime key with the duration\nin seconds which will override the defaultLifetime either given from the\nportal property or the default one from lovely.memcached of 3600 seconds::\n\n ex: in order to cache the result only for 4 minutes\n >>> @cache(key, dependencies=[\"frontpage\"], lifetime=240)\n ... def myMethod(num):\n ... return num*num\n\n\nInvalidate cache\n================\nIf you use cache decorator for BrowserView methods or directly on Zope objects\nmethods cache will be **automatically invalidated** when object is modified\n(ObjectModifiedEvent is triggered)::\n\n >>> from Products.Five.browser import BrowserView\n\n >>> class XXX(BrowserView):\n ... @cache(key)\n ... def title(self):\n ... return self.context.title_or_id()\n\nYou can disable auto invalidation by providing the auto_invalidate param to @cache\ndecorator::\n\n >>> @cache(key, auto_invalidate=False)\n ... def title(self):\n ... return self.context.title_or_id()\n\nmemcache.invalidate\n-------------------\nIn order to manually invalidate memcached cache per object this package\nprovides a browser view called **memcache.invalidate**.\nIt will invalidate all memcached methods associated with current object's UID::\n\n http://localhost:2020/Plone/front-page/memcache.invalidate\n\nYou can also manually invalidate related items and back references::\n\n http://localhost:2020/Plone/front-page/memcache.invalidate/relatedItems\n\n http://localhost:2020/Plone/front-page/memcache.invalidate/backRefs\n\nBy default this method can be called by users with these roles:\n\n* Editor\n* CommonEditor\n* Owner\n* Manager\n\nvarnish.invalidate\n-------------------\nIn order to manually invalidate memcached cache per object this package\nprovides a browser view called **varnish.invalidate**.\nIt will invalidate all memcached methods associated with current object's UID::\n\n http://localhost:2020/Plone/front-page/varnish.invalidate\n\nYou can also manually invalidate related items and back references::\n\n http://localhost:2020/Plone/front-page/varnish.invalidate/relatedItems\n\n http://localhost:2020/Plone/front-page/varnish.invalidate/backRefs\n\nBy default this method can be called by users with these roles:\n\n* Editor\n* CommonEditor\n* Owner\n* Manager\n\ncache.invalidate\n----------------\nIn order to manually invalidate cache (memcached and varnish) per object this\npackage provides a browser view called **cache.invalidate**.\nIt will call memcache.invalidate and varnish.invalidate::\n\n http://localhost:2020/Plone/front-page/cache.invalidate\n\nYou can also manually invalidate related items and back references::\n\n http://localhost:2020/Plone/front-page/cache.invalidate/relatedItems\n\n http://localhost:2020/Plone/front-page/cache.invalidate/backRefs\n\nBy default this method can be called by users with these roles:\n\n* Editor\n* CommonEditor\n* Owner\n* Manager\n\ncache.settings\n--------------\nThere is also a Cache Tab per object where you can manually select which cache\nto invalidate. By default, you can invalidate memcache and varnish. You also\nhave the possibility to invalidate memcache and/or varnish for related items\nand also fo back references.\n\nThis form can be extended with more options. For a more detailed\nexample see `eea.pdf`_\n\n**configure.zcml**::\n\n \n\n \n\n**behavior.py**::\n\n # Model\n class IExtraSettings(model.Schema):\n \"\"\" Extra settings\n \"\"\"\n pdf = schema.Bool(\n title=_(u\"PDF\"),\n description=_(u\"Invalidate latest generated PDF file\"),\n required=False,\n default=False\n )\n\n\n # Behaviour\n class ExtraBehavior(object):\n implements(IExtraSettings)\n adapts(IPDFAware)\n\n def __init__(self, context):\n self.context = context\n\n @property\n def pdf(self):\n \"\"\" PDF\n \"\"\"\n return False\n\n @pdf.setter\n def pdf(self, value):\n \"\"\" Invalidate last generated PDF?\n \"\"\"\n if not value:\n return\n\n removePdfFiles()\n\n # Form\n class ExtraSettings(extensible.FormExtender):\n adapts(IPDFAware, ILayer, SettingsForm)\n\n def __init__(self, context, request, form):\n self.context = context\n self.request = request\n self.form = form\n\n def update(self):\n \"\"\" Extend form\n \"\"\"\n self.add(IExtraSettings, prefix=\"extra\")\n self.move('pdf', after='varnish', prefix='extra')\n\n\nCopyright and license\n=====================\nThe Initial Owner of the Original Code is European Environment Agency (EEA).\nAll Rights Reserved.\n\nThe eea.cache (the Original Code) is free software;\nyou can redistribute it and/or modify it under the terms of the GNU\nGeneral Public License as published by the Free Software Foundation;\neither version 2 of the License, or (at your option) any later\nversion.\n\nMore details under docs/License.txt\n\n\nFunding and project management\n==============================\n\nEEA_ - European Environment Agency (EU)\n\n.. _EEA: https://www.eea.europa.eu/\n.. _`EEA Cache`: https://eea.github.io/docs/eea.cache\n.. _`plone.recipe.zope2instance`: https://pypi.python.org/pypi/plone.recipe.zope2instance\n.. _`eea.app.visualization`: https://eea.github.io/docs/eea.app.visualization\n.. _`plone.memoize`: https://pypi.python.org/pypi/plone.memoize\n.. _`pylibmc`: https://pypi.python.org/pypi/pylibmc\n.. _`plone.uuid`: https://pypi.python.org/pypi/plone.uuid\n.. _`python-memcached`: https://pypi.python.org/pypi/python-memcached\n.. _`eea.pdf`: https://eea.github.io/docs/eea.pdf\n\nChangelog\n=========\n\n9.0 - (2019-06-06)\n---------------------\n* Change: cache decorator no longer caches empty results\n [ichim-david refs #104467]\n* Feature: cache decorator now has cache_empty parameter if it's set will\n still cache empty results\n [ichim-david refs #104467]\n\n8.5 - (2019-01-28)\n---------------------\n* Jenkins: Add sonarqube step\n [avoinea refs #101552]\n* Change: updated URLs pointing to eea.europa.eu with https://\n [alecghica refs #95849]\n\n8.4 - (2018-06-13)\n---------------------\n* Bug fix: lambda takes no arguments (1 given)\n [avoinea]\n\n8.3 - (2018-06-06)\n---------------------\n* Bug fix: Fix relatedItems cache invalidation\n [avoinea refs #95891]\n\n8.2 - (2018-05-24)\n-----------------------\n* Bug fix: Speed-up cache invalidation for backward-references\n [avoinea refs #95020]\n* Feature: replaced invalidate_cache method with a method that use eea.cache\n [alecghica refs #95020]\n* Feature: \"Refresh this page\" method redirect you back to the original context\n [alecghica refs #95020]\n* Feature: cache.settings if called in a context of a default view it will\n also invalidate its parent\n [alecghica refs #95020]\n* Bug fix: fixed case under all invalidate methods when a broken relations\n is present and None is found instead of an object\n [alecghica refs #95020]\n\n8.1 - (2017-12-12)\n------------------\n* Change: Replace eeacms/zptlint with eeacms/plone-test:4 zptlint\n [avoinea refs #90415]\n\n8.0 - (2017-11-07)\n------------------\n* Change: Remove Sphinx generated documentation\n [petchesi-iulian refs #88212]\n\n7.9 - (2017-05-22)\n------------------\n* Change: fixed PyLint warnings and errors\n [valipod refs #84949]\n\n7.8 - (2017-05-15)\n------------------\n* Change: fixed PyLint warnings and errors\n [eduard-fironda refs #84949]\n\n7.7 - (2017-04-24)\n------------------\n* Change: updated package information\n [eduard-fironda]\n\n7.6 - (2016-05-19)\n------------------\n* Bug fix: Fix pylint warnings\n [chiridra refs #71940]\n\n7.5 - (2015-08-18)\n------------------\n* Change: Auto-include zcml within plone context in order to make this package\n work without having to add it within buildout zcml directive.\n [avoinea]\n* Feature: Implemented support for pylibmc\n [razvanchitu refs #27571]\n\n7.4 - (2015-03-17)\n------------------\n* Change: Switched to curl in the jenkins build install script\n [olimpiurob refs #22402]\n* Change: Changed fetch url for jenkins build install script to the install\n script from the main EEA CPB repository\n [olimpiurob refs #22402]\n\n7.3 - (2014-12-23)\n------------------\n* Bug fix: fixed libevent download made by the buildout\n [ghicaale refs #21453]\n\n7.2 - (2014-11-20)\n------------------\n* Change: Added InvalidateEverything event to be able to invalidate memcache and\n varnish instead of adding subscribers on ObjectModifiedEvent\n [voineali refs #21852, #21850, #21851]\n* Change: Migrate cache invalidation form to plone.z3cform in order to easily\n extend it outside this package\n [voineali refs #21630]\n\n7.1 - (2014-10-01)\n------------------\n* Feature: invalidate Memcache now appear on cache form as one of the options.\n [ghicaale refs #21143]\n* Feature: created handler to invalidate only Varnish.\n [ghicaale refs #21143]\n* Feature: improved result messages.\n [ghicaale refs #21143]\n\n7.0 - (2014-08-27)\n------------------\n* Upgrade step: Within \"Plone > Site setup > Add-ons\" install EEA Cache\n [voineali refs #20678]\n* Pre-upgrade step: Also add eea.cache within buildout zcml directive before\n eea.cache-overrides\n [voineali refs #20678]\n* Feature: Added a browser view called **cache.invalidate** that allows\n editors to manually invalidate cache (including varnish and memcache). It\n also supports invalidation for related-items and back-references\n [voineali refs #20678]\n* Feature: Added a browser view called **memcache.invalidate** that allows\n users to manually invalidate memcache. It also supports\n invalidation of relatedItems and back-references memcache\n [voineali refs #20678]\n* Change: Auto-invalidate all cache associated with current object's UID when\n ObjectModifiedEvent is triggered\n [voineali refs #20678]\n\n6.3 - (2014-01-21)\n------------------\n* Bug fix: removed wrongly added blockquotes within README.rst\n [ichim-david refs #18064]\n* Feature: adding Sphinx-generated documentation in Page Template format\n [batradav refs #9502]\n\n6.2 - (2013-10-04)\n------------------\n* Change: updated zope imports with the versions that require minimum Plone 4.1\n for eea.cache\n [ichimdav refs #15651]\n\n6.1 - (2013-06-17)\n------------------\n* Cleanup: Use logger.debug instead of logger.info for debug messages\n [avoinea]\n\n6.0 - (2013-05-20)\n------------------\n* Feature: Removed lovely.memcached dependency\n [voineali refs #14343]\n\n5.1 - (2013-02-04)\n------------------\n* Feature: added information for contributors\n [ciobabog refs #13892]\n* Feature: added ability to pass a lifetime key to the cache decorator in\n order to cache it for a determined period different from the default lifetime\n [ichimdav #13677]\n* Upgrade step: (optional)\n Within ZMI > portal_properties > site_properties add an **int** property\n called **memcached_defaultLifetime** and set it's value to\n **86400** (one day) or any value that fits your needs.\n* Feature: Ability to set memcached default lifetime, which by now was hardcoded\n to one hour (3600 seconds)\n [voineali refs #13677]\n\n5.0 - (2012-10-08)\n------------------\n* Change: Updated README and egg's metadata\n [voineali refs #5434]\n\n4.3 - (2012-07-13)\n------------------\n* Bug fix: fixed markup of HISTORY.txt file\n [ciobabog refs #5231]\n\n4.2 - (2012-02-06)\n------------------\n * no changes\n\n4.0 - (2011-11-07)\n------------------\n* Feature: Plone 4.x compatible release\n [ghicaale #4309]\n\n0.3 - (2010-11-22)\n------------------\n* Bug fix: fixed tests namespace in order to be used within hudson\n [voineali #3821]\n\n0.2 - (2010-11-10)\n------------------\n* Bug fix: added fake memcache client in order to fix broken doctests\n [voineali]\n\n0.1 - (2009-11-10)\n------------------\n* Initial release\n", "description_content_type": "", "docs_url": null, "download_url": "https://pypi.python.org/pypi/eea.cache", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/collective/eea.cache", "keywords": "EEA cache memcache Add-ons Plone Zope", "license": "GPL", "maintainer": "", "maintainer_email": "", "name": "eea.cache", "package_url": "https://pypi.org/project/eea.cache/", "platform": "", "project_url": "https://pypi.org/project/eea.cache/", "project_urls": { "Download": "https://pypi.python.org/pypi/eea.cache", "Homepage": "https://github.com/collective/eea.cache" }, "release_url": "https://pypi.org/project/eea.cache/9.0/", "requires_dist": null, "requires_python": "", "summary": "Tools and config for memcache related caching", "version": "9.0" }, "last_serial": 5368147, "releases": { "4.0": [ { "comment_text": "", "digests": { "md5": "50890d137fb22b1a164f2b71c4cc8990", "sha256": "91ce7c23ede820753f3e5858c780a2e14a95a3d6fcb6a6c6487c4dab361f21c8" }, "downloads": -1, "filename": "eea.cache-4.0.zip", "has_sig": false, "md5_digest": "50890d137fb22b1a164f2b71c4cc8990", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15378, "upload_time": "2011-11-08T01:36:08", "url": "https://files.pythonhosted.org/packages/61/8a/255bf329ef2cb95ddebebed7ac85ea78e1fe570fea43c962c0c417c36c25/eea.cache-4.0.zip" } ], "4.2": [ { "comment_text": "", "digests": { "md5": "2ec8d2fc8a6668089faef7e74076f1f4", "sha256": "1d5168902f4ddb639da296a6eb45c45cbf5424e6a532b54a3788c15d69e26628" }, "downloads": -1, "filename": "eea.cache-4.2.zip", "has_sig": false, "md5_digest": "2ec8d2fc8a6668089faef7e74076f1f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15434, "upload_time": "2012-02-08T13:59:43", "url": "https://files.pythonhosted.org/packages/b1/93/baa4e004ae702d30f364da285ac35978cb843a51f4cfc82c12303ea5d25b/eea.cache-4.2.zip" } ], "4.3": [ { "comment_text": "", "digests": { "md5": "c231dfa93a2c2edc41a3b906ec64ff17", "sha256": "8fb6dc854a74b48340474a10f8f1feaeac4848b0c844ddc85fd3ba56c793eab7" }, "downloads": -1, "filename": "eea.cache-4.3.zip", "has_sig": false, "md5_digest": "c231dfa93a2c2edc41a3b906ec64ff17", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15609, "upload_time": "2012-07-16T10:47:35", "url": "https://files.pythonhosted.org/packages/93/95/ca95e2801437b20c2a39b0f06441cf8b5324617519da754058107211b762/eea.cache-4.3.zip" } ], "5.0": [ { "comment_text": "", "digests": { "md5": "9f620e3e5ae2e55e709db77983ea62be", "sha256": "a19baaa8175ed70db1be217e1cd0922e7d8d19b1ba99cae44aa9b2015773ac98" }, "downloads": -1, "filename": "eea.cache-5.0.zip", "has_sig": false, "md5_digest": "9f620e3e5ae2e55e709db77983ea62be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22450, "upload_time": "2012-10-08T14:31:05", "url": "https://files.pythonhosted.org/packages/36/1e/3f13cace4dc78c1496ed4507fca6d321f840904e010c683bd86c9d29a4c1/eea.cache-5.0.zip" } ], "5.1": [ { "comment_text": "", "digests": { "md5": "3fb30fc64050f3ab52c6bd158968e153", "sha256": "a723fc4bc979b9b633e081a0b0f0bc8bab7b1081bd06a1b9d2aa47db3db6b45c" }, "downloads": -1, "filename": "eea.cache-5.1.zip", "has_sig": false, "md5_digest": "3fb30fc64050f3ab52c6bd158968e153", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25036, "upload_time": "2013-02-05T09:30:07", "url": "https://files.pythonhosted.org/packages/f2/73/b2c6b2008923aaf6ed464c5418d2ed7aaf305ff32097a7727a48f07b4b68/eea.cache-5.1.zip" } ], "6.0": [ { "comment_text": "", "digests": { "md5": "78fc39cab38764169ab6dd82c0beeb31", "sha256": "e8441dbdafa2d774b34e9dc6a0bfc8f3d2a088080cc43cbf9c76b8793d1a2fd2" }, "downloads": -1, "filename": "eea.cache-6.0.zip", "has_sig": false, "md5_digest": "78fc39cab38764169ab6dd82c0beeb31", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30964, "upload_time": "2013-05-21T10:10:35", "url": "https://files.pythonhosted.org/packages/b4/b3/3a1c0cc01fbe7e8c9fb024bfd761125236695ca97df07f87061c165f07f4/eea.cache-6.0.zip" } ], "6.1": [ { "comment_text": "", "digests": { "md5": "ba5012a75062cf6c141a7a18a61d62ad", "sha256": "c50e3e7749077ada2a57f10d3d029217d04397b8bf2844260b5a4f5591cb23dd" }, "downloads": -1, "filename": "eea.cache-6.1.zip", "has_sig": false, "md5_digest": "ba5012a75062cf6c141a7a18a61d62ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31103, "upload_time": "2013-06-25T14:25:59", "url": "https://files.pythonhosted.org/packages/92/59/d2f901445e99c88e5831bff2aeefc7492f6c52cc09dc96464dfe48921107/eea.cache-6.1.zip" } ], "6.2": [ { "comment_text": "", "digests": { "md5": "260a7fc7ce9cc3558bd215ee977d351b", "sha256": "7e5c83315a0e7e832d4a1fdb23cf39618dcd342b781bc609f18cd6720abd18a1" }, "downloads": -1, "filename": "eea.cache-6.2.zip", "has_sig": false, "md5_digest": "260a7fc7ce9cc3558bd215ee977d351b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31252, "upload_time": "2013-10-07T13:27:10", "url": "https://files.pythonhosted.org/packages/dc/4b/40fa620a3123ec583fad4b2d29adbf2e9983c3fce105955e80a9d8f903ce/eea.cache-6.2.zip" } ], "6.3": [ { "comment_text": "", "digests": { "md5": "f1b982e6a698471b621682f97d0667eb", "sha256": "8943923ff22a63a8887ee61682a82b5bc38bf2e342ec1ea75e28c97dd8a3b69b" }, "downloads": -1, "filename": "eea.cache-6.3.zip", "has_sig": false, "md5_digest": "f1b982e6a698471b621682f97d0667eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 115946, "upload_time": "2014-01-23T08:58:45", "url": "https://files.pythonhosted.org/packages/88/a3/22a307f0521f53d19599937dc943cd6293aba2dfe0143ef98333f752cf5d/eea.cache-6.3.zip" } ], "7.0": [ { "comment_text": "", "digests": { "md5": "d42d6e385733d1f9ee07fcce2a8172de", "sha256": "cf4764a06a9a0f81dad7275665e8e9181201d81cfb8fd20b9977334b0cb27b7e" }, "downloads": -1, "filename": "eea.cache-7.0.zip", "has_sig": false, "md5_digest": "d42d6e385733d1f9ee07fcce2a8172de", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 121182, "upload_time": "2014-08-28T12:41:36", "url": "https://files.pythonhosted.org/packages/81/f1/d7392c586c0817480804d082a6dcbac3cea033db9a2c0e66527aa4716b91/eea.cache-7.0.zip" } ], "7.1": [ { "comment_text": "", "digests": { "md5": "554f332d30f56f0cb6298bb856f15cc8", "sha256": "bbcb78709855445cb2c3b50adbec8eab0a9fdf1fb3f0492daef41b9b5ba28b28" }, "downloads": -1, "filename": "eea.cache-7.1.zip", "has_sig": false, "md5_digest": "554f332d30f56f0cb6298bb856f15cc8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 121627, "upload_time": "2014-10-02T12:19:25", "url": "https://files.pythonhosted.org/packages/8f/50/23c0d54e5a7f12b7708afb18c10df652b04cfbc671f13c6e18b6cd8109b3/eea.cache-7.1.zip" } ], "7.2": [ { "comment_text": "", "digests": { "md5": "3e4b6da8f9c47a59ddbbca8e398d01bf", "sha256": "e5b615996cae63b770aaeb2a61c8b47fb8328d7731fcf7a05f8fbee50fa498f0" }, "downloads": -1, "filename": "eea.cache-7.2.zip", "has_sig": false, "md5_digest": "3e4b6da8f9c47a59ddbbca8e398d01bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 136730, "upload_time": "2014-11-21T15:43:30", "url": "https://files.pythonhosted.org/packages/d3/93/66998f7f8b5769996f69a7e4907cc2eb6f0fb9833cc7ab66b31bc50127e3/eea.cache-7.2.zip" } ], "7.3": [ { "comment_text": "", "digests": { "md5": "d048a85ece622a5ba3c6dbed757325e9", "sha256": "f0d83fc5c204bf9da39f8cd7306cbc26869890beb45aaacf1bef6cb9b1da085b" }, "downloads": -1, "filename": "eea.cache-7.3.zip", "has_sig": false, "md5_digest": "d048a85ece622a5ba3c6dbed757325e9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 136842, "upload_time": "2014-12-23T15:11:08", "url": "https://files.pythonhosted.org/packages/b3/32/7c79c3add5e1366df66fed5be40b28365f58bb61d7c043ab88e5f584a3c5/eea.cache-7.3.zip" } ], "7.4": [ { "comment_text": "", "digests": { "md5": "be08ded612d5c752cd731628a186a863", "sha256": "db8f4157014fe52d08bd7adbef6d35915f18f60d53068b50cce264982ade014e" }, "downloads": -1, "filename": "eea.cache-7.4.zip", "has_sig": false, "md5_digest": "be08ded612d5c752cd731628a186a863", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 137120, "upload_time": "2015-03-19T07:49:16", "url": "https://files.pythonhosted.org/packages/4b/86/dc72696216c7562b87da567c307bea44c34002f6ed0eef61133098174dfa/eea.cache-7.4.zip" } ], "7.5": [ { "comment_text": "", "digests": { "md5": "a6117726b6d98eab4f2abbddd9980b5e", "sha256": "d75fe413b8bc3dabac21db204fb7e7ab2c15e17a91da45cfb132d70986524bde" }, "downloads": -1, "filename": "eea.cache-7.5.zip", "has_sig": false, "md5_digest": "a6117726b6d98eab4f2abbddd9980b5e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 137745, "upload_time": "2015-08-31T14:59:00", "url": "https://files.pythonhosted.org/packages/fb/48/766a6d1684e8bf48f10e0b00d127ffc8266bbc93cd8f4f48b7481d976087/eea.cache-7.5.zip" } ], "7.6": [ { "comment_text": "", "digests": { "md5": "793c2e3ea19850c2807960bbdb5ff9e3", "sha256": "3128d96273b542c8ea4578fe945335827feca4d34489ba8f5dc7db8d782c246e" }, "downloads": -1, "filename": "eea.cache-7.6.zip", "has_sig": false, "md5_digest": "793c2e3ea19850c2807960bbdb5ff9e3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 137984, "upload_time": "2016-05-23T13:53:48", "url": "https://files.pythonhosted.org/packages/27/37/c7e5109025c3f35082dc8f9be5d53bc4b20eb54283b85e554e8d6b4cc2f5/eea.cache-7.6.zip" } ], "7.7": [ { "comment_text": "", "digests": { "md5": "cbd21d3845eb9326864c4c2c20b7fb8a", "sha256": "97ee85956ef57ce85d58d0a9e0d2d174d96f7a4826aaeb96ca59e1b2776d3298" }, "downloads": -1, "filename": "eea.cache-7.7.zip", "has_sig": false, "md5_digest": "cbd21d3845eb9326864c4c2c20b7fb8a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 138095, "upload_time": "2017-05-02T08:04:44", "url": "https://files.pythonhosted.org/packages/57/7a/e453c986e8ee0f2d797a54cb5bdfc422a10f30af51322596f0e4c40d8286/eea.cache-7.7.zip" } ], "7.8": [ { "comment_text": "", "digests": { "md5": "42d8a353f8123b89e2a21eb6f88ae28d", "sha256": "7cf3e4c7a37bfae1c2185f31b0d8ea72fc03cd5e859b39f4ba1213121847692d" }, "downloads": -1, "filename": "eea.cache-7.8.zip", "has_sig": false, "md5_digest": "42d8a353f8123b89e2a21eb6f88ae28d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 138182, "upload_time": "2017-05-22T13:20:21", "url": "https://files.pythonhosted.org/packages/4c/16/e686358032abb3239fb57162e2670c710e99b569fc78f99c06a842dec994/eea.cache-7.8.zip" } ], "7.9": [ { "comment_text": "", "digests": { "md5": "8e491622ab51852ff49380a56c9943d5", "sha256": "8bfc4c3ffabac268e9a69202ca1685e07e26d556fd4d3cd3e2f4dbb754b20c0e" }, "downloads": -1, "filename": "eea.cache-7.9.zip", "has_sig": false, "md5_digest": "8e491622ab51852ff49380a56c9943d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 138233, "upload_time": "2017-05-22T14:40:39", "url": "https://files.pythonhosted.org/packages/5c/b6/e9b15afbd9e5a5987b3cd5f4c886cbd728092cbcb8267e56b9a93793859b/eea.cache-7.9.zip" } ], "8.0": [ { "comment_text": "", "digests": { "md5": "670d96f71a66a93a5135a1e1c86e3d99", "sha256": "8a405fcb6a3f8b60d04a216dfd7b94e20f7b66e91262ab1daf7ae8a4ab619304" }, "downloads": -1, "filename": "eea.cache-8.0.zip", "has_sig": false, "md5_digest": "670d96f71a66a93a5135a1e1c86e3d99", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45899, "upload_time": "2017-11-08T13:01:08", "url": "https://files.pythonhosted.org/packages/1a/98/4c2f419ffc0a6169ef700026a72fb050a53260d171473e6d86a0fd577f93/eea.cache-8.0.zip" } ], "8.1": [ { "comment_text": "", "digests": { "md5": "99fbe5c4d201482b0a2a1a3647a5cb8d", "sha256": "0268b8e6703c9a8c52d57f4e4248d1209b25b679769a1ad11655a0b1f1387c6e" }, "downloads": -1, "filename": "eea.cache-8.1.zip", "has_sig": false, "md5_digest": "99fbe5c4d201482b0a2a1a3647a5cb8d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45755, "upload_time": "2018-02-23T15:54:07", "url": "https://files.pythonhosted.org/packages/ca/9f/4c64260953c3da8319806ac252dbb0ff63924b0652a1083a26af2f7c987f/eea.cache-8.1.zip" } ], "8.2": [ { "comment_text": "", "digests": { "md5": "22f8857ad5b812b31373be6b6b017363", "sha256": "f838279bbfc2a4dd9ba081186b3e3b8305d499a990321261a3c408e82f769496" }, "downloads": -1, "filename": "eea.cache-8.2.zip", "has_sig": false, "md5_digest": "22f8857ad5b812b31373be6b6b017363", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47737, "upload_time": "2018-05-25T14:22:39", "url": "https://files.pythonhosted.org/packages/9c/40/ced56f30114211594c7b2639eaa0128a603d2fcad302c4207c8b2cf9fb1a/eea.cache-8.2.zip" } ], "8.3": [ { "comment_text": "", "digests": { "md5": "25bde978d844b9f8ecf480901cfb5597", "sha256": "c8cbdc2d542444ae7cabaa6402ecb4a2e63e53e40313351646dcddb12571821d" }, "downloads": -1, "filename": "eea.cache-8.3.zip", "has_sig": false, "md5_digest": "25bde978d844b9f8ecf480901cfb5597", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47802, "upload_time": "2018-06-06T18:34:20", "url": "https://files.pythonhosted.org/packages/74/56/b221cf8c34522b6874663e08443b0a82d5ce0b0cfae6d309780706330013/eea.cache-8.3.zip" } ], "8.4": [ { "comment_text": "", "digests": { "md5": "43f28fbee9b4439e450f8430a02b2afb", "sha256": "a377c3c4fc925887d5e84e35db91b215d4a8aaba8a54332afcb40f152af8cb18" }, "downloads": -1, "filename": "eea.cache-8.4.zip", "has_sig": false, "md5_digest": "43f28fbee9b4439e450f8430a02b2afb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47916, "upload_time": "2018-06-13T08:58:17", "url": "https://files.pythonhosted.org/packages/6e/bb/7be45f05ca9c8c20434a4debde082ef51765d1887d4665719535e7209056/eea.cache-8.4.zip" } ], "8.5": [ { "comment_text": "", "digests": { "md5": "94cc9428c925f8c8c66cffbf6e17db15", "sha256": "bb2d4c89367d3cc05a56fa2e4887625ef6fca43d6ea3143c1f6782c3b41828d2" }, "downloads": -1, "filename": "eea.cache-8.5.zip", "has_sig": false, "md5_digest": "94cc9428c925f8c8c66cffbf6e17db15", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48700, "upload_time": "2019-01-29T14:23:50", "url": "https://files.pythonhosted.org/packages/b1/3f/3762b2f1fd40f64297622057d3be55326f350f10e730f86b8abab35e1586/eea.cache-8.5.zip" } ], "9.0": [ { "comment_text": "", "digests": { "md5": "404f220f2c951da13be5f5f6916bbe89", "sha256": "6c756dde23f251b152d2d55299c1bec819b54610413766776be6fa228e74bc08" }, "downloads": -1, "filename": "eea.cache-9.0.zip", "has_sig": false, "md5_digest": "404f220f2c951da13be5f5f6916bbe89", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51049, "upload_time": "2019-06-06T16:43:07", "url": "https://files.pythonhosted.org/packages/1e/ed/d05dfeda4b8908d7981cc444e1a77c89e1f660825bff9587657e299cd947/eea.cache-9.0.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "404f220f2c951da13be5f5f6916bbe89", "sha256": "6c756dde23f251b152d2d55299c1bec819b54610413766776be6fa228e74bc08" }, "downloads": -1, "filename": "eea.cache-9.0.zip", "has_sig": false, "md5_digest": "404f220f2c951da13be5f5f6916bbe89", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51049, "upload_time": "2019-06-06T16:43:07", "url": "https://files.pythonhosted.org/packages/1e/ed/d05dfeda4b8908d7981cc444e1a77c89e1f660825bff9587657e299cd947/eea.cache-9.0.zip" } ] }