Changelog
=========

1.0.4 (2008-03-31)
------------------

    - Documentation and release notes cleanup.
      [hannosch]

1.0.3 (2007-11-09)
------------------

    - Remove features from Plone 3.0 branch.
      [nouri]

    - Maintenance branch for Plone 3.0.
      [nouri]

    - Get rid of sys.modules hack, which according to this changeset:
      http://dev.plone.org/plone/changeset/15030
      was added because I advised it generally.  With help from Kapil for
      the PloneGetPaid project I figured out a better way.
      [maurits]

    - Revise docs and project description.
      [nouri]

    - Merge patch from Gael Le Mignot:

        - Do not use hash anymore when making cache keys. This is to
          avoid cache collisions, and to avoid a potential security
          problem where an attacker could manually craft collisions.
          Also, stop recommending the use of hash() in tests.

        - Add support for using Pilot System's GenericCache as a backend
          for 'plone.memoize.volatile.cache'.

        - Add an arguments marshaller that gives you a more convenient
          way to declare that your cache is dependent on arguments.
          See 'plone.memoize.marshallers'.

      [nouri, gael]


1.0.1 (2007-09-10)
------------------

    - Simplify forever by reuse of stuff from plone.memoize.volatile.
      [nouri]

1.0 (2007-08-17)
----------------

    - Add a forever memo - lives until Zope restart.
      [optilude]

    - hash((1, 2)) returns something different on ree's 64-bit Python :)
      [nouri]

    - Don't treat None in a special way. Avoid one dict lookup.
      [nouri]

    - Extended the xhtml_compress method to use a utility lookup for
      IXHTMLCompressor utilities instead. Now you can turn the slimmer based
      compression on via a simple utility registration. See compress.py.
      [hannosch, fschulze]

1.0rc2 (2007-07-27)
-------------------

    - Added simple xhtml_compress method which can be used to plug in
      whitespace removal libraries. Peter Bengtsson's slimmer library is
      configured but not enabled by default.
      [hannosch]

1.0b4 (2007-07-09)
------------------

    - Use a md5 hash of the provided key in RAMCacheAdapter, reducing the
      memory footprint and speeding up lookup time.
      [hannosch]

    - Reword the volatile section a bit to indicate why the example does not
      use anything from the volatile module.
      [wichert]

    - Use an exception `DontCache` instead of the DONT_CACHE marker return
      value. Allow for no `ICacheChooser` to be registered.
      [nouri]

    - Add cache decorator for request (which can in fact be used for all
      sorts of annotatable objects).
      [nouri]

    - Added decorator for storing cache values on the request as annotations.
      [nouri]

    - Always include the function's dotted name in the key.
      [nouri]

    - Added a new cache decorator which can memoize a the result of a method
      call on the request and lets you specify which argument on the function
      is the request.
      [hannosch]

    - Add MemcacheAdapter as an alternative to RAMCacheAdapter.
      [nouri]

    - Generalize `IRAMCacheChooser` to `ICacheChooser`, which doesn't return
      an IRAMCache but a simple dict.
      [nouri]

    - Use a more sensible default for the maxAge of the new RAMCache.
      [hannosch]

    - Add cache storage for `plone.memoize.volatile` for use with
      `zope.app.cache.ram.RAMCache`.
      [nouri]

    - Rolled in changes from memojito to fix recursively memoized
      methods(fix by Rob Miller and Whit Morriss)
      [whit]

    - Made plone.memoize backwardly compatible with zope2.9 and remain
      usable w/out zope.annotation. Minor wording changes to some docs.
      [whit]

    - Per default, use a volatile dict that cleans up after itself.
      [nouri]

    - This 'volatile' module defines a versatile caching decorator that
      gives you total control of how the cache key is calculated and where
      it is stored.
      [nouri]

1.0b3 (2007-05-05)
------------------

    - Initial package structure and implementation.
      [hannosch, nouri, optilude, whit, zopeskel]
