History

1.1.0 - unreleased

  • Support KeyDB as an protocol-compatible alternative to Redis (no code change i.e. previous versions also worked)

1.0.0 - 2024-03-10

  • Support Python 3.11 and 3.12, drop Python 3.7 support

  • Support PyPy 3.9 (moving from 3.7)

  • Separate API reference from other content in documentation

  • Promote asyncio support to “provisional” status

  • Integrate asv for performance testing and run it in CI

0.10.0 - 2022-01-03

  • Experimental asyncio coroutine function caching support

  • Use own error type, HermesError

  • Turn cachedcls keyword-only argument for a custom Cached classes into cachedfactory for a custom factory function returning a sublcass of Cached depending on the wrapped callable

  • Simplify hermes.backend.AbstractBackend.save to only accept a mapping as the positional argument

  • Rename hermes.backend.dict to hermes.backend.inprocess

  • Switch to supported Memcached client, pymemcache, drop python3-memcached and pylibmc. Because of that servers keyword argument passed to the client has become singular server

  • Support Python 3.10

  • Drop support for Python 3.6 implementations

0.9.0 - 2021-05-09

  • Add Heptapod/Gitlab CI/CD

  • Support Python 3.9

  • Support PyPy 3.6 and 3.7

  • Break down README.rst into multi-page Sphinx documentation

  • API documentation improvement

  • Change of arguments of dunder init of Hermes:

    • positional backendClass is renamed to backend. Actual argument can be a (sub)class or an instance of hermes.backend.AbstractBackend.

    • keyword manglerClass is renamed to mangler. It can only be an instance of Mangler.

    • keyword cachedClass is renamed to cachedcls.

  • Change of arguments of dunder init of hermes.backend.redis.Backend and hermes.backend.memcached.Backend. Lock options are passed as lockconf dictionary at once.

  • Serialisation and compression delegates, Serialiser and Compressor as the attributes of Mangler.

  • Cache is compressed by default (zlib auto-level -1 which currently corresponds to level 6). Opt out by cache.mangler.compressor = None.

  • Replace default hash function, Mangler.hash, with base64-encoded MD5.

0.8.0 - 2020-06-30

  • Implement dict backend key expiration

  • More strict argument passing

  • Pass **kwargs to backends to be able to configure extra options

  • Cache-point instances depend on Hermes frontend to access backend and mangler to be able to change backend in runtime

  • Allow class-level cache-point object access

  • Drop support for Python 2 and also 3.4, 3.5

  • Support Python 3.7 and 3.8

  • Integrate Flake8

  • Drop deprecated setuptools test_suite, use unittest load_tests protocol for test module discovery

  • Flee to Heptapod from BitBucket

0.7.2 - 2018-01-09

  • Improve Mangler.nameEntry to support non-function callables with __name__

  • Include module name by default in cache key sequence

0.7.1 - 2017-12-25

  • Support caching descriptors e.g. classmethod and staticmethod

  • Drop Python 3.3 support

0.6.1 - 2017-02-18

  • Backends connect lazily

  • Support and test on Python 3.4, 3.5, 3.6

  • Test improvement

  • Integrate BitBucket Pipelines

0.6.0 - 2015-12-06

  • Use atomic Redis SET lock value NX EX 900 in place of two SETNX and EXPIRE

  • Make cache-point class overridable without monkeypatching

0.5.2 - 2015-06-09

  • Test and documentation improvement

0.5.1 - 2015-03-13

  • Migrate to BitBucket

0.5.0 - 2014-07-25

  • Fix class-level cache-point instance sharing

  • Use unambiguous spdx.org license code: LGPL-2.1+

  • Configure setuptools to allow python setup.py test

  • Integrate Tox

0.4.0 - 2014-04-10

  • Support Python 3.3

0.3.0 - 2014-03-31

  • Improve cache-point descriptor protocol implementation

  • Cache-point key function now doesn’t receive self directly, but through fn.__self__

0.2.0 - 2013-10-31

  • Use own Redis lock implementation because the client’s is broken

  • Test improvement

0.1.5 - 2013-07-19

  • Initial release