Package: eea.cache
IntroductionThis package combines the features from lovely.memcached and plone.memoize.ram.
It provides a decorator and utility for Memcaches at EEA.
The decorator allows you set dependencies known by eea.cacheNoteThis add-on doesn’t do anything by itself. It needs to be integrated by a
developer within your own products. For reference you can check
theeea.app.visualizationpackage.ContentsContentsIntroductionContentsMain featuresInstallDependenciesSource codeCache decoratorCache lifetimeCache lifetime override per keyInvalidate cachememcache.invalidatevarnish.invalidatecache.invalidatecache.settingsCopyright and licenseFunding and project managementChangelog9.5 - (2021-12-16)9.4 - (2020-03-10)9.3 - (2020-03-04)9.2 - (2019-12-13)9.1 - (2019-11-21)9.0 - (2019-06-06)8.5 - (2019-01-28)8.4 - (2018-06-13)8.3 - (2018-06-06)8.2 - (2018-05-24)8.1 - (2017-12-12)8.0 - (2017-11-07)7.9 - (2017-05-22)7.8 - (2017-05-15)7.7 - (2017-04-24)7.6 - (2016-05-19)7.5 - (2015-08-18)7.4 - (2015-03-17)7.3 - (2014-12-23)7.2 - (2014-11-20)7.1 - (2014-10-01)7.0 - (2014-08-27)6.3 - (2014-01-21)6.2 - (2013-10-04)6.1 - (2013-06-17)6.0 - (2013-05-20)5.1 - (2013-02-04)5.0 - (2012-10-08)4.3 - (2012-07-13)4.2 - (2012-02-06)4.0 - (2011-11-07)0.3 - (2010-11-22)0.2 - (2010-11-10)0.1 - (2009-11-10)Main featuresExtends and overrides plone.memoize cache adapters to work with memcacheProvides an extended @cache decorator that supports:cache lifetime override per methoddependencies string in order to bulk invalidate cacheauto-invalidation of cache when ObjectModifiedEvent is triggeredPossibility to manually invalidate cache via URL.InstallAdd eea.cache to your eggs and zcml section in your buildout and re-run buildout:eggs =
  ...
  eea.cache

zcml =
  ...
  eea.cache
  eea.cache-overridesYou can download a sample buildout fromhttps://github.com/eea/eea.cache/tree/master/buildouts/plone4Install eea.cache within Site Setup > Add-onsStart memcache:$ bin/memcached startDependenciespython-memcachedpylibmc(optional, for better performance)plone.memoizeplone.uuidSource codeLatest source code (Zope 2 compatible):Plone Collective on GithubEEA on GithubCache decorator>>> def key(method, self):
...     return method.__name__

>>> from eea.cache import cache
>>> @cache(key, dependencies=["frontpage"])
... def myMethod(num):
...     return num*numLets clear any running memcache:>>> from eea.cache.event import InvalidateMemCacheEvent
>>> from zope.event import notify
>>> notify(InvalidateMemCacheEvent(raw=True, dependencies=['frontpage']))Our myMethod will now be cached with the key returned from the method ‘key’ and
with dependency ‘frontpage’:>>> myMethod(2)
4
>>> myMethod(3)
4

>>> notify(InvalidateMemCacheEvent(raw=True, dependencies=['frontpage']))
>>> myMethod(3)
9Cache lifetimeBy default your content is cached in memcache for one hour (3600 seconds). You
can change this by adding anintproperty within: ZMI > portal_properties >
site_properties calledmemcached_defaultLifetimeand set it’s value to86400(one day) for example.Cache lifetime override per keyStarting with eea.cache 5.1 you can also pass a lifetime key with the duration
in seconds which will override the defaultLifetime either given from the
portal property or the default one from lovely.memcached of 3600 seconds:ex: in order to cache the result only for 4 minutes
>>> @cache(key, dependencies=["frontpage"], lifetime=240)
... def myMethod(num):
...     return num*numInvalidate cacheIf you use cache decorator for BrowserView methods or directly on Zope objects
methods cache will beautomatically invalidatedwhen object is modified
(ObjectModifiedEvent is triggered):>>> from Products.Five.browser import BrowserView

>>> class XXX(BrowserView):
...     @cache(key)
...     def title(self):
...         return self.context.title_or_id()You can disable auto invalidation by providing the auto_invalidate param to @cache
decorator:>>> @cache(key, auto_invalidate=False)
... def title(self):
...     return self.context.title_or_id()memcache.invalidateIn order to manually invalidate memcached cache per object this package
provides a browser view calledmemcache.invalidate.
It will invalidate all memcached methods associated with current object’s UID:http://localhost:2020/Plone/front-page/memcache.invalidateYou can also manually invalidate related items and back references:http://localhost:2020/Plone/front-page/memcache.invalidate/relatedItems

http://localhost:2020/Plone/front-page/memcache.invalidate/backRefsBy default this method can be called by users with these roles:EditorCommonEditorOwnerManagervarnish.invalidateIn order to manually invalidate memcached cache per object this package
provides a browser view calledvarnish.invalidate.
It will invalidate all memcached methods associated with current object’s UID:http://localhost:2020/Plone/front-page/varnish.invalidateYou can also manually invalidate related items and back references:http://localhost:2020/Plone/front-page/varnish.invalidate/relatedItems

http://localhost:2020/Plone/front-page/varnish.invalidate/backRefsBy default this method can be called by users with these roles:EditorCommonEditorOwnerManagercache.invalidateIn order to manually invalidate cache (memcached and varnish) per object this
package provides a browser view calledcache.invalidate.
It will call memcache.invalidate and varnish.invalidate:http://localhost:2020/Plone/front-page/cache.invalidateYou can also manually invalidate related items and back references:http://localhost:2020/Plone/front-page/cache.invalidate/relatedItems

http://localhost:2020/Plone/front-page/cache.invalidate/backRefsBy default this method can be called by users with these roles:EditorCommonEditorOwnerManagercache.settingsThere is also a Cache Tab per object where you can manually select which cache
to invalidate. By default, you can invalidate memcache and varnish. You also
have the possibility to invalidate memcache and/or varnish for related items
and also fo back references.This form can be extended with more options. For a more detailed
example seeeea.pdfconfigure.zcml:<adapter
  zcml:condition="installed eea.cache"
  factory=".behavior.ExtraBehavior"
  />

<adapter
  zcml:condition="installed eea.cache"
  factory=".behavior.ExtraSettings"
  name="eea.pdf.cache.extender"
  />behavior.py:# Model
class IExtraSettings(model.Schema):
    """ Extra settings
    """
    pdf = schema.Bool(
        title=_(u"PDF"),
        description=_(u"Invalidate latest generated PDF file"),
        required=False,
        default=False
    )


# Behaviour
class ExtraBehavior(object):
    implements(IExtraSettings)
    adapts(IPDFAware)

    def __init__(self, context):
        self.context = context

    @property
    def pdf(self):
        """ PDF
        """
        return False

    @pdf.setter
    def pdf(self, value):
        """ Invalidate last generated PDF?
        """
        if not value:
            return

        removePdfFiles()

# Form
class ExtraSettings(extensible.FormExtender):
    adapts(IPDFAware, ILayer, SettingsForm)

    def __init__(self, context, request, form):
        self.context = context
        self.request = request
        self.form = form

    def update(self):
        """ Extend form
        """
        self.add(IExtraSettings, prefix="extra")
        self.move('pdf', after='varnish', prefix='extra')Copyright and licenseThe Initial Owner of the Original Code is European Environment Agency (EEA).
All Rights Reserved.The eea.cache (the Original Code) is free software;
you can redistribute it and/or modify it under the terms of the GNU
General Public License as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later
version.More details under docs/License.txtFunding and project managementEEA- European Environment Agency (EU)Changelog9.5 - (2021-12-16)Change: Plone 6 / pip install ready. Drop includeDependencies
[avoinea]9.4 - (2020-03-10)Bug fix: avoid error when cache key contains utf-8 characters
[ichim-dvaid refs #113458]9.3 - (2020-03-04)Bug fix: Removed hard dependency on plone.app.caching: missing VARNISH.__name__
[avoinea]9.2 - (2019-12-13)Bug fix: Fix the uninstall profile
[avoinea]9.1 - (2019-11-21)Feature: Made all Dexterity content cache aware
[avoinea refs #110155]Feature: Added support for Python 3 and Plone 5.2
[alecghica refs #110155]9.0 - (2019-06-06)Change: Cache decorator no longer caches empty results
[ichim-david refs #104467]Feature: Cache decorator now has cache_empty parameter if it’s set will
still cache empty results
[ichim-david refs #104467]8.5 - (2019-01-28)Jenkins: Add sonarqube step
[avoinea refs #101552]Change: updated URLs pointing to eea.europa.eu withhttps://[alecghica refs #95849]8.4 - (2018-06-13)Bug fix: lambda takes no arguments (1 given)
[avoinea]8.3 - (2018-06-06)Bug fix: Fix relatedItems cache invalidation
[avoinea refs #95891]8.2 - (2018-05-24)Bug fix: Speed-up cache invalidation for backward-references
[avoinea refs #95020]Feature: replaced invalidate_cache method with a method that use eea.cache
[alecghica refs #95020]Feature: “Refresh this page” method redirect you back to the original context
[alecghica refs #95020]Feature: cache.settings if called in a context of a default view it will
also invalidate its parent
[alecghica refs #95020]Bug fix: fixed case under all invalidate methods when a broken relations
is present and None is found instead of an object
[alecghica refs #95020]8.1 - (2017-12-12)Change: Replace eeacms/zptlint with eeacms/plone-test:4 zptlint
[avoinea refs #90415]8.0 - (2017-11-07)Change: Remove Sphinx generated documentation
[petchesi-iulian refs #88212]7.9 - (2017-05-22)Change: fixed PyLint warnings and errors
[valipod refs #84949]7.8 - (2017-05-15)Change: fixed PyLint warnings and errors
[eduard-fironda refs #84949]7.7 - (2017-04-24)Change: updated package information
[eduard-fironda]7.6 - (2016-05-19)Bug fix: Fix pylint warnings
[chiridra refs #71940]7.5 - (2015-08-18)Change: Auto-include zcml within plone context in order to make this package
work without having to add it within buildout zcml directive.
[avoinea]Feature: Implemented support for pylibmc
[razvanchitu refs #27571]7.4 - (2015-03-17)Change: Switched to curl in the jenkins build install script
[olimpiurob refs #22402]Change: Changed fetch url for jenkins build install script to the install
script from the main EEA CPB repository
[olimpiurob refs #22402]7.3 - (2014-12-23)Bug fix: fixed libevent download made by the buildout
[ghicaale refs #21453]7.2 - (2014-11-20)Change: Added InvalidateEverything event to be able to invalidate memcache and
varnish instead of adding subscribers on ObjectModifiedEvent
[voineali refs #21852, #21850, #21851]Change: Migrate cache invalidation form to plone.z3cform in order to easily
extend it outside this package
[voineali refs #21630]7.1 - (2014-10-01)Feature: invalidate Memcache now appear on cache form as one of the options.
[ghicaale refs #21143]Feature: created handler to invalidate only Varnish.
[ghicaale refs #21143]Feature: improved result messages.
[ghicaale refs #21143]7.0 - (2014-08-27)Upgrade step: Within “Plone > Site setup > Add-ons” install EEA Cache
[voineali refs #20678]Pre-upgrade step: Also add eea.cache within buildout zcml directive before
eea.cache-overrides
[voineali refs #20678]Feature: Added a browser view calledcache.invalidatethat allows
editors to manually invalidate cache (including varnish and memcache). It
also supports invalidation for related-items and back-references
[voineali refs #20678]Feature: Added a browser view calledmemcache.invalidatethat allows
users to manually invalidate memcache. It also supports
invalidation of relatedItems and back-references memcache
[voineali refs #20678]Change: Auto-invalidate all cache associated with current object’s UID when
ObjectModifiedEvent is triggered
[voineali refs #20678]6.3 - (2014-01-21)Bug fix: removed wrongly added blockquotes within README.rst
[ichim-david refs #18064]Feature: adding Sphinx-generated documentation in Page Template format
[batradav refs #9502]6.2 - (2013-10-04)Change: updated zope imports with the versions that require minimum Plone 4.1
for eea.cache
[ichimdav refs #15651]6.1 - (2013-06-17)Cleanup: Use logger.debug instead of logger.info for debug messages
[avoinea]6.0 - (2013-05-20)Feature: Removed lovely.memcached dependency
[voineali refs #14343]5.1 - (2013-02-04)Feature: added information for contributors
[ciobabog refs #13892]Feature: added ability to pass a lifetime key to the cache decorator in
order to cache it for a determined period different from the default lifetime
[ichimdav #13677]Upgrade step: (optional)
Within ZMI > portal_properties > site_properties add anintproperty
calledmemcached_defaultLifetimeand set it’s value to86400(one day) or any value that fits your needs.Feature: Ability to set memcached default lifetime, which by now was hardcoded
to one hour (3600 seconds)
[voineali refs #13677]5.0 - (2012-10-08)Change: Updated README and egg’s metadata
[voineali refs #5434]4.3 - (2012-07-13)Bug fix: fixed markup of HISTORY.txt file
[ciobabog refs #5231]4.2 - (2012-02-06)no changes4.0 - (2011-11-07)Feature: Plone 4.x compatible release
[ghicaale #4309]0.3 - (2010-11-22)Bug fix: fixed tests namespace in order to be used within hudson
[voineali #3821]0.2 - (2010-11-10)Bug fix: added fake memcache client in order to fix broken doctests
[voineali]0.1 - (2009-11-10)Initial release