![](https://seccdn.libravatar.org/avatar/e2145bc5cf53dda95c308a3c75e8fef3.jpg?s=120&d=mm&r=g)
Hello community, here is the log from the commit of package python-dogpile.cache for openSUSE:Factory checked in at 2019-03-10 09:40:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-dogpile.cache (Old) and /work/SRC/openSUSE:Factory/.python-dogpile.cache.new.28833 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "python-dogpile.cache" Sun Mar 10 09:40:38 2019 rev:21 rq:682880 version:0.7.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-dogpile.cache/python-dogpile.cache.changes 2018-12-13 19:47:30.988773046 +0100 +++ /work/SRC/openSUSE:Factory/.python-dogpile.cache.new.28833/python-dogpile.cache.changes 2019-03-10 09:40:40.924099993 +0100 @@ -1,0 +2,12 @@ +Fri Mar 8 14:37:22 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com> + +- Update to 0.7.1: + * fix python3 deprecation warnings + * Restore the API for async_creation_runner in all cases + +------------------------------------------------------------------- +Thu Mar 7 10:53:24 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com> + +- Fix fdupes call + +------------------------------------------------------------------- Old: ---- dogpile.cache-0.6.8.tar.gz New: ---- dogpile.cache-0.7.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-dogpile.cache.spec ++++++ --- /var/tmp/diff_new_pack.jfNUrI/_old 2019-03-10 09:40:41.728099801 +0100 +++ /var/tmp/diff_new_pack.jfNUrI/_new 2019-03-10 09:40:41.732099800 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-dogpile.cache # -# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -19,32 +19,30 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define oldpython python Name: python-dogpile.cache -Version: 0.6.8 +Version: 0.7.1 Release: 0 Summary: A caching front-end based on the Dogpile lock License: BSD-3-Clause Group: Development/Languages/Python -Url: https://github.com/sqlalchemy/dogpile.cache -Source: https://pypi.io/packages/source/d/dogpile.cache/dogpile.cache-%{version}.tar.gz +URL: https://github.com/sqlalchemy/dogpile.cache +Source: https://files.pythonhosted.org/packages/source/d/dogpile.cache/dogpile.cache-%{version}.tar.gz BuildRequires: %{python_module Mako} +BuildRequires: %{python_module decorator} BuildRequires: %{python_module mock} -BuildRequires: %{python_module pytest-cov} BuildRequires: %{python_module pytest} BuildRequires: %{python_module setuptools} +Requires: python-decorator +BuildRequires: %{python_module six} +Requires: python-six BuildRequires: fdupes BuildRequires: python-rpm-macros -# NOTE(toabctl): upstream merged dogpile.core into dogpile.cache -# see https://gerrit.sqlalchemy.org/#/c/89/ +Provides: python-dogpile.core = %{version} +Obsoletes: python-dogpile.core < 0.4.1 +BuildArch: noarch %ifpython2 Obsoletes: %{oldpython}-dogpile.core < 0.4.1 Provides: %{oldpython}-dogpile.core = %{version} %endif -%ifpython3 -Provides: python3-dogpile.core = %{version} -Obsoletes: python3-dogpile.core < 0.4.1 -%endif -BuildRoot: %{_tmppath}/%{name}-%{version}-build -BuildArch: noarch %python_subpackages %description @@ -60,11 +58,10 @@ %install %python_install -%python_expand %fdupes -s %{buildroot}/%{python_sitelib} +%python_expand %fdupes %{buildroot}/%{$python_sitelib} %check -export RUNTESTS="-k 'not test_dbm_backend and not test_memcached_backend and not test_redis_backend'" -%python_exec -m pytest --ignore=tests/test_lock.py +%pytest %files %{python_files} %license LICENSE ++++++ dogpile.cache-0.6.8.tar.gz -> dogpile.cache-0.7.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/PKG-INFO new/dogpile.cache-0.7.1/PKG-INFO --- old/dogpile.cache-0.6.8/PKG-INFO 2018-11-25 03:24:28.000000000 +0100 +++ new/dogpile.cache-0.7.1/PKG-INFO 2018-12-12 03:33:55.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: dogpile.cache -Version: 0.6.8 +Version: 0.7.1 Summary: A caching front-end based on the Dogpile lock. Home-page: https://github.com/sqlalchemy/dogpile.cache Author: Mike Bayer diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/docs/_sources/changelog.rst.txt new/dogpile.cache-0.7.1/docs/_sources/changelog.rst.txt --- old/dogpile.cache-0.6.8/docs/_sources/changelog.rst.txt 2018-11-25 03:24:24.000000000 +0100 +++ new/dogpile.cache-0.7.1/docs/_sources/changelog.rst.txt 2018-12-12 03:33:50.000000000 +0100 @@ -3,6 +3,49 @@ ============== .. changelog:: + :version: 0.7.1 + :released: Tue Dec 11 2018 + + .. change:: + :tags: bug, region + :tickets: 139 + + Fixed regression in 0.7.0 caused by :ticket:`136` where the assumed + arguments for the :paramref:`.CacheRegion.async_creation_runner` expanded to + include the new :paramref:`.CacheRegion.get_or_create.creator_args` + parameter, as it was not tested that the async runner would be implicitly + called with these arguments when the :meth:`.CacheRegion.cache_on_arguments` + decorator was used. The exact signature of ``async_creation_runner`` is + now restored to have the same arguments in all cases. + + +.. changelog:: + :version: 0.7.0 + :released: Mon Dec 10 2018 + + .. change:: + :tags: bug + :tickets: 137 + + The ``decorator`` module is now used when creating function decorators + within :meth:`.CacheRegion.cache_on_arguments` and + :meth:`.CacheRegion.cache_multi_on_arguments` so that function signatures + are preserved. Pull request courtesy ankitpatel96. + + Additionally adds a small performance enhancement which is to avoid + internally creating a ``@wraps()`` decorator for the creator function on + every get operation, by allowing the arguments to the creator be passed + separately to :meth:`.CacheRegion.get_or_create`. + + + .. change:: + :tags: bug, py3k + :tickets: 129 + + Fixed all Python 3.x deprecation warnings including + ``inspect.getargspec()``. + +.. changelog:: :version: 0.6.8 :released: Sat Nov 24 2018 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/docs/_static/documentation_options.js new/dogpile.cache-0.7.1/docs/_static/documentation_options.js --- old/dogpile.cache-0.6.8/docs/_static/documentation_options.js 2018-11-25 03:24:27.000000000 +0100 +++ new/dogpile.cache-0.7.1/docs/_static/documentation_options.js 2018-12-12 03:33:55.000000000 +0100 @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '0.6.8', + VERSION: '0.7.1', LANGUAGE: 'None', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/docs/api.html new/dogpile.cache-0.7.1/docs/api.html --- old/dogpile.cache-0.6.8/docs/api.html 2018-11-25 03:24:27.000000000 +0100 +++ new/dogpile.cache-0.7.1/docs/api.html 2018-12-12 03:33:54.000000000 +0100 @@ -6,7 +6,7 @@ <head> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>API — dogpile.cache 0.6.8 documentation</title> + <title>API — dogpile.cache 0.7.1 documentation</title> <link rel="stylesheet" href="_static/nature_override.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="_static/changelog.css" /> @@ -35,7 +35,7 @@ <li class="right" > <a href="core_usage.html" title="dogpile Core" accesskey="P">previous</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.6.8 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.7.1 documentation</a> »</li> </ul> </div> @@ -725,7 +725,7 @@ <dl class="method"> <dt id="dogpile.cache.region.CacheRegion.get_or_create"> -<code class="descname">get_or_create</code><span class="sig-paren">(</span><em>key</em>, <em>creator</em>, <em>expiration_time=None</em>, <em>should_cache_fn=None</em><span class="sig-paren">)</span><a class="headerlink" href="#dogpile.cache.region.CacheRegion.get_or_create" title="Permalink to this definition">¶</a></dt> +<code class="descname">get_or_create</code><span class="sig-paren">(</span><em>key</em>, <em>creator</em>, <em>expiration_time=None</em>, <em>should_cache_fn=None</em>, <em>creator_args=None</em><span class="sig-paren">)</span><a class="headerlink" href="#dogpile.cache.region.CacheRegion.get_or_create" title="Permalink to this definition">¶</a></dt> <dd><p>Return a cached value based on the given key.</p> <p>If the value does not exist or is considered to be expired based on its creation time, the given @@ -760,6 +760,12 @@ be of any type recognized by the backend or by the key_mangler function, if present.</li> <li><span class="target" id="dogpile.cache.region.CacheRegion.get_or_create.params.creator"></span><strong>creator</strong><a class="paramlink headerlink reference internal" href="#dogpile.cache.region.CacheRegion.get_or_create.params.creator">¶</a> – function which creates a new value.</li> +<li><span class="target" id="dogpile.cache.region.CacheRegion.get_or_create.params.creator_args"></span><strong>creator_args</strong><a class="paramlink headerlink reference internal" href="#dogpile.cache.region.CacheRegion.get_or_create.params.creator_args">¶</a> – <p>optional tuple of (args, kwargs) that will be +passed to the creator function if present.</p> +<div class="versionadded"> +<p><span class="versionmodified">New in version 0.7.0.</span></p> +</div> +</li> <li><span class="target" id="dogpile.cache.region.CacheRegion.get_or_create.params.expiration_time"></span><strong>expiration_time</strong><a class="paramlink headerlink reference internal" href="#dogpile.cache.region.CacheRegion.get_or_create.params.expiration_time">¶</a> – optional expiration time which will overide the expiration time already configured on this <a class="reference internal" href="#dogpile.cache.region.CacheRegion" title="dogpile.cache.region.CacheRegion"><code class="xref py py-class docutils literal notranslate"><span class="pre">CacheRegion</span></code></a> if not None. To set no expiration, use the value -1.</li> @@ -3149,7 +3155,7 @@ <li class="right" > <a href="core_usage.html" title="dogpile Core" >previous</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.6.8 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.7.1 documentation</a> »</li> </ul> </div> <div class="footer" role="contentinfo"> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/docs/build/changelog.rst new/dogpile.cache-0.7.1/docs/build/changelog.rst --- old/dogpile.cache-0.6.8/docs/build/changelog.rst 2018-11-25 03:24:24.000000000 +0100 +++ new/dogpile.cache-0.7.1/docs/build/changelog.rst 2018-12-12 03:33:50.000000000 +0100 @@ -3,6 +3,49 @@ ============== .. changelog:: + :version: 0.7.1 + :released: Tue Dec 11 2018 + + .. change:: + :tags: bug, region + :tickets: 139 + + Fixed regression in 0.7.0 caused by :ticket:`136` where the assumed + arguments for the :paramref:`.CacheRegion.async_creation_runner` expanded to + include the new :paramref:`.CacheRegion.get_or_create.creator_args` + parameter, as it was not tested that the async runner would be implicitly + called with these arguments when the :meth:`.CacheRegion.cache_on_arguments` + decorator was used. The exact signature of ``async_creation_runner`` is + now restored to have the same arguments in all cases. + + +.. changelog:: + :version: 0.7.0 + :released: Mon Dec 10 2018 + + .. change:: + :tags: bug + :tickets: 137 + + The ``decorator`` module is now used when creating function decorators + within :meth:`.CacheRegion.cache_on_arguments` and + :meth:`.CacheRegion.cache_multi_on_arguments` so that function signatures + are preserved. Pull request courtesy ankitpatel96. + + Additionally adds a small performance enhancement which is to avoid + internally creating a ``@wraps()`` decorator for the creator function on + every get operation, by allowing the arguments to the creator be passed + separately to :meth:`.CacheRegion.get_or_create`. + + + .. change:: + :tags: bug, py3k + :tickets: 129 + + Fixed all Python 3.x deprecation warnings including + ``inspect.getargspec()``. + +.. changelog:: :version: 0.6.8 :released: Sat Nov 24 2018 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/docs/build/requirements.txt new/dogpile.cache-0.7.1/docs/build/requirements.txt --- old/dogpile.cache-0.6.8/docs/build/requirements.txt 2018-11-25 03:24:16.000000000 +0100 +++ new/dogpile.cache-0.7.1/docs/build/requirements.txt 2018-12-12 03:33:43.000000000 +0100 @@ -1,4 +1,5 @@ -git+https://bitbucket.org/zzzeek/changelog.git@HEAD#egg=changelog -git+https://bitbucket.org/zzzeek/sphinx-paramlinks.git@HEAD#egg=sphinx-paramlink... +git+https://github.com/sqlalchemyorg/changelog.git#egg=changelog +git+https://github.com/sqlalchemyorg/sphinx-paramlinks.git#egg=sphinx-paramlinks sphinx mako +decorator diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/docs/changelog.html new/dogpile.cache-0.7.1/docs/changelog.html --- old/dogpile.cache-0.6.8/docs/changelog.html 2018-11-25 03:24:27.000000000 +0100 +++ new/dogpile.cache-0.7.1/docs/changelog.html 2018-12-12 03:33:54.000000000 +0100 @@ -6,7 +6,7 @@ <head> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Changelog — dogpile.cache 0.6.8 documentation</title> + <title>Changelog — dogpile.cache 0.7.1 documentation</title> <link rel="stylesheet" href="_static/nature_override.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="_static/changelog.css" /> @@ -31,7 +31,7 @@ <li class="right" > <a href="api.html" title="API" accesskey="P">previous</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.6.8 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.7.1 documentation</a> »</li> </ul> </div> @@ -42,6 +42,45 @@ <div class="section" id="changelog"> <h1>Changelog<a class="headerlink" href="#changelog" title="Permalink to this headline">¶</a></h1> +<div class="section" id="change-0.7.1"> +<h2>0.7.1<a class="headerlink" href="#change-0.7.1" title="Permalink to this headline">¶</a></h2> +Released: Tue Dec 11 2018<div class="section" id="change-0.7.1-bug"> +<h3>bug<a class="headerlink" href="#change-0.7.1-bug" title="Permalink to this headline">¶</a></h3> +<ul class="simple"> +<li><p id="change-0.7.1-0"><span class="target" id="change-adf737934be9e364a66f48c9724e7ec8"><strong>[bug] [region] </strong></span>Fixed regression in 0.7.0 caused by <a class="reference external" href="https://github.com/sqlalchemy/dogpile.cache/issues/136">#136</a> where the assumed +arguments for the <a class="reference internal" href="api.html#dogpile.cache.region.CacheRegion.params.async_creation_runner" title="dogpile.cache.region.CacheRegion"><code class="xref py py-paramref docutils literal notranslate"><span class="pre">CacheRegion.async_creation_runner</span></code></a> expanded to +include the new <a class="reference internal" href="api.html#dogpile.cache.region.CacheRegion.get_or_create.params.creator_args" title="dogpile.cache.region.CacheRegion.get_or_create"><code class="xref py py-paramref docutils literal notranslate"><span class="pre">CacheRegion.get_or_create.creator_args</span></code></a> +parameter, as it was not tested that the async runner would be implicitly +called with these arguments when the <a class="reference internal" href="api.html#dogpile.cache.region.CacheRegion.cache_on_arguments" title="dogpile.cache.region.CacheRegion.cache_on_arguments"><code class="xref py py-meth docutils literal notranslate"><span class="pre">CacheRegion.cache_on_arguments()</span></code></a> +decorator was used. The exact signature of <code class="docutils literal notranslate"><span class="pre">async_creation_runner</span></code> is +now restored to have the same arguments in all cases.<a class="changeset-link headerlink reference internal" href="#change-adf737934be9e364a66f48c9724e7ec8">¶</a><p>References: <a class="reference external" href="https://github.com/sqlalchemy/dogpile.cache/issues/139">#139</a></p> +</p> +</li> +</ul> +</div> +</div> +<div class="section" id="change-0.7.0"> +<h2>0.7.0<a class="headerlink" href="#change-0.7.0" title="Permalink to this headline">¶</a></h2> +Released: Mon Dec 10 2018<div class="section" id="change-0.7.0-bug"> +<h3>bug<a class="headerlink" href="#change-0.7.0-bug" title="Permalink to this headline">¶</a></h3> +<ul class="simple"> +<li><p id="change-0.7.0-0"><span class="target" id="change-9a3359c7d4ed55a3ebb5dcca6d40e1e1"><strong>[bug] </strong></span>The <code class="docutils literal notranslate"><span class="pre">decorator</span></code> module is now used when creating function decorators +within <a class="reference internal" href="api.html#dogpile.cache.region.CacheRegion.cache_on_arguments" title="dogpile.cache.region.CacheRegion.cache_on_arguments"><code class="xref py py-meth docutils literal notranslate"><span class="pre">CacheRegion.cache_on_arguments()</span></code></a> and +<a class="reference internal" href="api.html#dogpile.cache.region.CacheRegion.cache_multi_on_arguments" title="dogpile.cache.region.CacheRegion.cache_multi_on_arguments"><code class="xref py py-meth docutils literal notranslate"><span class="pre">CacheRegion.cache_multi_on_arguments()</span></code></a> so that function signatures +are preserved. Pull request courtesy ankitpatel96.<p>Additionally adds a small performance enhancement which is to avoid +internally creating a <code class="docutils literal notranslate"><span class="pre">@wraps()</span></code> decorator for the creator function on +every get operation, by allowing the arguments to the creator be passed +separately to <a class="reference internal" href="api.html#dogpile.cache.region.CacheRegion.get_or_create" title="dogpile.cache.region.CacheRegion.get_or_create"><code class="xref py py-meth docutils literal notranslate"><span class="pre">CacheRegion.get_or_create()</span></code></a>.</p> +<a class="changeset-link headerlink reference internal" href="#change-9a3359c7d4ed55a3ebb5dcca6d40e1e1">¶</a><p>References: <a class="reference external" href="https://github.com/sqlalchemy/dogpile.cache/issues/137">#137</a></p> +</p> +</li> +<li><p id="change-0.7.0-1"><span class="target" id="change-fced77f26953f045d5a893bad9b324b2"><strong>[bug] [py3k] </strong></span>Fixed all Python 3.x deprecation warnings including +<code class="docutils literal notranslate"><span class="pre">inspect.getargspec()</span></code>.<a class="changeset-link headerlink reference internal" href="#change-fced77f26953f045d5a893bad9b324b2">¶</a><p>References: <a class="reference external" href="https://github.com/sqlalchemy/dogpile.cache/issues/129">#129</a></p> +</p> +</li> +</ul> +</div> +</div> <div class="section" id="change-0.6.8"> <h2>0.6.8<a class="headerlink" href="#change-0.6.8" title="Permalink to this headline">¶</a></h2> Released: Sat Nov 24 2018<ul class="simple"> @@ -828,6 +867,14 @@ <h3><a href="index.html">Table of Contents</a></h3> <ul> <li><a class="reference internal" href="#">Changelog</a><ul> +<li><a class="reference internal" href="#change-0.7.1">0.7.1</a><ul> +<li><a class="reference internal" href="#change-0.7.1-bug">bug</a></li> +</ul> +</li> +<li><a class="reference internal" href="#change-0.7.0">0.7.0</a><ul> +<li><a class="reference internal" href="#change-0.7.0-bug">bug</a></li> +</ul> +</li> <li><a class="reference internal" href="#change-0.6.8">0.6.8</a></li> <li><a class="reference internal" href="#change-0.6.7">0.6.7</a><ul> <li><a class="reference internal" href="#change-0.6.7-bug">bug</a></li> @@ -973,7 +1020,7 @@ <li class="right" > <a href="api.html" title="API" >previous</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.6.8 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.7.1 documentation</a> »</li> </ul> </div> <div class="footer" role="contentinfo"> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/docs/core_usage.html new/dogpile.cache-0.7.1/docs/core_usage.html --- old/dogpile.cache-0.6.8/docs/core_usage.html 2018-11-25 03:24:27.000000000 +0100 +++ new/dogpile.cache-0.7.1/docs/core_usage.html 2018-12-12 03:33:54.000000000 +0100 @@ -6,7 +6,7 @@ <head> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>dogpile Core — dogpile.cache 0.6.8 documentation</title> + <title>dogpile Core — dogpile.cache 0.7.1 documentation</title> <link rel="stylesheet" href="_static/nature_override.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="_static/changelog.css" /> @@ -35,7 +35,7 @@ <li class="right" > <a href="recipes.html" title="Recipes" accesskey="P">previous</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.6.8 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.7.1 documentation</a> »</li> </ul> </div> @@ -327,7 +327,7 @@ <li class="right" > <a href="recipes.html" title="Recipes" >previous</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.6.8 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.7.1 documentation</a> »</li> </ul> </div> <div class="footer" role="contentinfo"> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/docs/front.html new/dogpile.cache-0.7.1/docs/front.html --- old/dogpile.cache-0.6.8/docs/front.html 2018-11-25 03:24:27.000000000 +0100 +++ new/dogpile.cache-0.7.1/docs/front.html 2018-12-12 03:33:54.000000000 +0100 @@ -6,7 +6,7 @@ <head> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Front Matter — dogpile.cache 0.6.8 documentation</title> + <title>Front Matter — dogpile.cache 0.7.1 documentation</title> <link rel="stylesheet" href="_static/nature_override.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="_static/changelog.css" /> @@ -35,7 +35,7 @@ <li class="right" > <a href="index.html" title="Welcome to dogpile.cache’s documentation!" accesskey="P">previous</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.6.8 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.7.1 documentation</a> »</li> </ul> </div> @@ -120,7 +120,7 @@ <li class="right" > <a href="index.html" title="Welcome to dogpile.cache’s documentation!" >previous</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.6.8 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.7.1 documentation</a> »</li> </ul> </div> <div class="footer" role="contentinfo"> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/docs/genindex.html new/dogpile.cache-0.7.1/docs/genindex.html --- old/dogpile.cache-0.6.8/docs/genindex.html 2018-11-25 03:24:27.000000000 +0100 +++ new/dogpile.cache-0.7.1/docs/genindex.html 2018-12-12 03:33:54.000000000 +0100 @@ -7,7 +7,7 @@ <head> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Index — dogpile.cache 0.6.8 documentation</title> + <title>Index — dogpile.cache 0.7.1 documentation</title> <link rel="stylesheet" href="_static/nature_override.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="_static/changelog.css" /> @@ -28,7 +28,7 @@ <li class="right" > <a href="py-modindex.html" title="Python Module Index" >modules</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.6.8 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.7.1 documentation</a> »</li> </ul> </div> @@ -169,6 +169,8 @@ <li><a href="api.html#dogpile.util.NameRegistry.params.creator">(dogpile.util.NameRegistry parameter)</a> </li> </ul></li> + <li><a href="api.html#dogpile.cache.region.CacheRegion.get_or_create.params.creator_args">creator_args (dogpile.cache.region.CacheRegion.get_or_create parameter)</a>, <a href="usage.html#dogpile.cache.region.CacheRegion.get_or_create.params.creator_args">[1]</a> +</li> </ul></td> </tr></table> @@ -776,7 +778,7 @@ <li class="right" > <a href="py-modindex.html" title="Python Module Index" >modules</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.6.8 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.7.1 documentation</a> »</li> </ul> </div> <div class="footer" role="contentinfo"> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/docs/index.html new/dogpile.cache-0.7.1/docs/index.html --- old/dogpile.cache-0.6.8/docs/index.html 2018-11-25 03:24:27.000000000 +0100 +++ new/dogpile.cache-0.7.1/docs/index.html 2018-12-12 03:33:54.000000000 +0100 @@ -6,7 +6,7 @@ <head> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Welcome to dogpile.cache’s documentation! — dogpile.cache 0.6.8 documentation</title> + <title>Welcome to dogpile.cache’s documentation! — dogpile.cache 0.7.1 documentation</title> <link rel="stylesheet" href="_static/nature_override.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="_static/changelog.css" /> @@ -31,7 +31,7 @@ <li class="right" > <a href="front.html" title="Front Matter" accesskey="N">next</a> |</li> - <li class="nav-item nav-item-0"><a href="#">dogpile.cache 0.6.8 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="#">dogpile.cache 0.7.1 documentation</a> »</li> </ul> </div> @@ -96,6 +96,8 @@ </ul> </li> <li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog</a><ul> +<li class="toctree-l2"><a class="reference internal" href="changelog.html#change-0.7.1">0.7.1</a></li> +<li class="toctree-l2"><a class="reference internal" href="changelog.html#change-0.7.0">0.7.0</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#change-0.6.8">0.6.8</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#change-0.6.7">0.6.7</a></li> <li class="toctree-l2"><a class="reference internal" href="changelog.html#change-0.6.6">0.6.6</a></li> @@ -185,7 +187,7 @@ <li class="right" > <a href="front.html" title="Front Matter" >next</a> |</li> - <li class="nav-item nav-item-0"><a href="#">dogpile.cache 0.6.8 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="#">dogpile.cache 0.7.1 documentation</a> »</li> </ul> </div> <div class="footer" role="contentinfo"> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/docs/py-modindex.html new/dogpile.cache-0.7.1/docs/py-modindex.html --- old/dogpile.cache-0.6.8/docs/py-modindex.html 2018-11-25 03:24:27.000000000 +0100 +++ new/dogpile.cache-0.7.1/docs/py-modindex.html 2018-12-12 03:33:55.000000000 +0100 @@ -6,7 +6,7 @@ <head> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Python Module Index — dogpile.cache 0.6.8 documentation</title> + <title>Python Module Index — dogpile.cache 0.7.1 documentation</title> <link rel="stylesheet" href="_static/nature_override.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="_static/changelog.css" /> @@ -30,7 +30,7 @@ <li class="right" > <a href="#" title="Python Module Index" >modules</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.6.8 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.7.1 documentation</a> »</li> </ul> </div> @@ -139,7 +139,7 @@ <li class="right" > <a href="#" title="Python Module Index" >modules</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.6.8 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.7.1 documentation</a> »</li> </ul> </div> <div class="footer" role="contentinfo"> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/docs/recipes.html new/dogpile.cache-0.7.1/docs/recipes.html --- old/dogpile.cache-0.6.8/docs/recipes.html 2018-11-25 03:24:27.000000000 +0100 +++ new/dogpile.cache-0.7.1/docs/recipes.html 2018-12-12 03:33:54.000000000 +0100 @@ -6,7 +6,7 @@ <head> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Recipes — dogpile.cache 0.6.8 documentation</title> + <title>Recipes — dogpile.cache 0.7.1 documentation</title> <link rel="stylesheet" href="_static/nature_override.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="_static/changelog.css" /> @@ -35,7 +35,7 @@ <li class="right" > <a href="usage.html" title="Usage Guide" accesskey="P">previous</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.6.8 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.7.1 documentation</a> »</li> </ul> </div> @@ -341,7 +341,7 @@ <li class="right" > <a href="usage.html" title="Usage Guide" >previous</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.6.8 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.7.1 documentation</a> »</li> </ul> </div> <div class="footer" role="contentinfo"> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/docs/search.html new/dogpile.cache-0.7.1/docs/search.html --- old/dogpile.cache-0.6.8/docs/search.html 2018-11-25 03:24:27.000000000 +0100 +++ new/dogpile.cache-0.7.1/docs/search.html 2018-12-12 03:33:55.000000000 +0100 @@ -6,7 +6,7 @@ <head> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Search — dogpile.cache 0.6.8 documentation</title> + <title>Search — dogpile.cache 0.7.1 documentation</title> <link rel="stylesheet" href="_static/nature_override.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="_static/changelog.css" /> @@ -36,7 +36,7 @@ <li class="right" > <a href="py-modindex.html" title="Python Module Index" >modules</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.6.8 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.7.1 documentation</a> »</li> </ul> </div> @@ -87,7 +87,7 @@ <li class="right" > <a href="py-modindex.html" title="Python Module Index" >modules</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.6.8 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.7.1 documentation</a> »</li> </ul> </div> <div class="footer" role="contentinfo"> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/docs/searchindex.js new/dogpile.cache-0.7.1/docs/searchindex.js --- old/dogpile.cache-0.6.8/docs/searchindex.js 2018-11-25 03:24:27.000000000 +0100 +++ new/dogpile.cache-0.7.1/docs/searchindex.js 2018-12-12 03:33:55.000000000 +0100 @@ -1 +1 @@ -Search.setIndex({docnames:["api","changelog","core_usage","front","index","recipes","usage"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,sphinx:55},filenames:["api.rst","changelog.rst","core_usage.rst","front.rst","index.rst","recipes.rst","usage.rst"],objects:{"dogpile.Lock.params":{async_creator:[0,1,1,""],creator:[0,1,1,""],expiretime:[0,1,1,""],mutex:[0,1,1,""],value_and_created_fn:[0,1,1,""]},"dogpile.cache":{api:[0,2,0,"-"],exception:[0,2,0,"-"],proxy:[0,2,0,"-"],region:[0,2,0,"-"]},"dogpile.cache.api":{CacheBackend:[0,0,1,""],CachedValue:[0,0,1,""],NO_VALUE:[0,5,1,""],NoValue:[0,0,1,""]},"dogpile.cache.api.CacheBackend":{"delete":[0,3,1,""],delete_multi:[0,3,1,""],get:[0,3,1,""],get_multi:[0,3,1,""],get_mutex:[0,3,1,""],key_mangler:[0,4,1,""],set:[0,3,1,""],set_multi:[0,3,1,""]},"dogpile.cache.api.CachedValue":{metadata:[0,4,1,""],payload:[0,4,1,""]},"dogpile.cache.backends":{"null":[0,2,0,"-"],file:[0,2,0,"-"],memcached:[0,2,0,"-"],memory:[0,2,0,"-"],redis:[0,2,0,"-"]},"dogpile.cache.backends.file":{AbstractFileLock:[0,0,1,""],DBMBackend:[0,0,1,""],FileLock:[0,0,1,""]},"dogpile.cache.backends.file.AbstractFileLock":{acquire:[0,3,1,""],acquire_read_lock:[0,3,1,""],acquire_write_lock:[0,3,1,""],is_open:[0,4,1,""],read:[0,3,1,""],release:[0,3,1,""],release_read_lock:[0,3,1,""],release_write_lock:[0,3,1,""],write:[0,3,1,""]},"dogpile.cache.backends.file.DBMBackend":{"delete":[0,3,1,""],delete_multi:[0,3,1,""],get:[0,3,1,""],get_multi:[0,3,1,""],get_mutex:[0,3,1,""],set:[0,3,1,""],set_multi:[0,3,1,""]},"dogpile.cache.backends.file.DBMBackend.params":{dogpile_lockfile:[0,1,1,""],filename:[0,1,1,""],lock_factory:[0,1,1,""],rw_lockfile:[0,1,1,""]},"dogpile.cache.backends.file.FileLock":{acquire_read_lock:[0,3,1,""],acquire_write_lock:[0,3,1,""],is_open:[0,4,1,""],release_read_lock:[0,3,1,""],release_write_lock:[0,3,1,""]},"dogpile.cache.backends.memcached":{BMemcachedBackend:[0,0,1,""],GenericMemcachedBackend:[0,0,1,""],MemcachedBackend:[0,0,1,""],MemcachedLock:[0,0,1,""],PylibmcBackend:[0,0,1,""]},"dogpile.cache.backends.memcached.BMemcachedBackend":{delete_multi:[0,3,1,""]},"dogpile.cache.backends.memcached.BMemcachedBackend.params":{password:[0,1,1,""],username:[0,1,1,""]},"dogpile.cache.backends.memcached.GenericMemcachedBackend":{"delete":[0,3,1,""],client:[0,4,1,""],delete_multi:[0,3,1,""],get:[0,3,1,""],get_multi:[0,3,1,""],get_mutex:[0,3,1,""],set:[0,3,1,""],set_arguments:[0,4,1,""],set_multi:[0,3,1,""]},"dogpile.cache.backends.memcached.GenericMemcachedBackend.params":{distributed_lock:[0,1,1,""],lock_timeout:[0,1,1,""],memcached_expire_time:[0,1,1,""],url:[0,1,1,""]},"dogpile.cache.backends.memcached.PylibmcBackend.params":{behaviors:[0,1,1,""],binary:[0,1,1,""],min_compress_len:[0,1,1,""]},"dogpile.cache.backends.memory":{MemoryBackend:[0,0,1,""],MemoryPickleBackend:[0,0,1,""]},"dogpile.cache.backends.memory.MemoryBackend":{"delete":[0,3,1,""],delete_multi:[0,3,1,""],get:[0,3,1,""],get_multi:[0,3,1,""],set:[0,3,1,""],set_multi:[0,3,1,""]},"dogpile.cache.backends.null":{NullBackend:[0,0,1,""]},"dogpile.cache.backends.null.NullBackend":{"delete":[0,3,1,""],delete_multi:[0,3,1,""],get:[0,3,1,""],get_multi:[0,3,1,""],get_mutex:[0,3,1,""],set:[0,3,1,""],set_multi:[0,3,1,""]},"dogpile.cache.backends.redis":{RedisBackend:[0,0,1,""]},"dogpile.cache.backends.redis.RedisBackend":{"delete":[0,3,1,""],delete_multi:[0,3,1,""],get:[0,3,1,""],get_multi:[0,3,1,""],get_mutex:[0,3,1,""],set:[0,3,1,""],set_multi:[0,3,1,""]},"dogpile.cache.backends.redis.RedisBackend.params":{connection_pool:[0,1,1,""],db:[0,1,1,""],distributed_lock:[0,1,1,""],host:[0,1,1,""],lock_sleep:[0,1,1,""],lock_timeout:[0,1,1,""],password:[0,1,1,""],port:[0,1,1,""],redis_expiration_time:[0,1,1,""],socket_timeout:[0,1,1,""],url:[0,1,1,""]},"dogpile.cache.exception":{DogpileCacheException:[0,6,1,""],PluginNotFound:[0,6,1,""],RegionAlreadyConfigured:[0,6,1,""],RegionNotConfigured:[0,6,1,""],ValidationError:[0,6,1,""]},"dogpile.cache.plugins":{mako_cache:[0,2,0,"-"]},"dogpile.cache.plugins.mako_cache":{MakoPlugin:[0,0,1,""]},"dogpile.cache.plugins.mako_cache.MakoPlugin":{get:[0,3,1,""],get_or_create:[0,3,1,""],invalidate:[0,3,1,""]},"dogpile.cache.plugins.mako_cache.MakoPlugin.get.params":{"**kw":[0,1,1,""],key:[0,1,1,""]},"dogpile.cache.plugins.mako_cache.MakoPlugin.get_or_create.params":{"**kw":[0,1,1,""],creation_function:[0,1,1,""],key:[0,1,1,""]},"dogpile.cache.plugins.mako_cache.MakoPlugin.invalidate.params":{"**kw":[0,1,1,""],key:[0,1,1,""]},"dogpile.cache.proxy":{ProxyBackend:[0,0,1,""]},"dogpile.cache.proxy.ProxyBackend":{"delete":[0,3,1,""],delete_multi:[0,3,1,""],get:[0,3,1,""],get_multi:[0,3,1,""],get_mutex:[0,3,1,""],set:[0,3,1,""],set_multi:[0,3,1,""],wrap:[0,3,1,""]},"dogpile.cache.region":{CacheRegion:[0,0,1,""],DefaultInvalidationStrategy:[0,0,1,""],RegionInvalidationStrategy:[0,0,1,""],make_region:[0,7,1,""],value_version:[0,5,1,""]},"dogpile.cache.region.CacheRegion":{"delete":[0,3,1,""],actual_backend:[0,4,1,""],cache_multi_on_arguments:[0,3,1,""],cache_on_arguments:[0,3,1,""],configure:[0,3,1,""],configure_from_config:[0,3,1,""],delete_multi:[0,3,1,""],get:[0,3,1,""],get_multi:[0,3,1,""],get_or_create:[0,3,1,""],get_or_create_multi:[0,3,1,""],invalidate:[0,3,1,""],is_configured:[0,4,1,""],set:[0,3,1,""],set_multi:[0,3,1,""],wrap:[0,3,1,""]},"dogpile.cache.region.CacheRegion.cache_multi_on_arguments.params":{asdict:[0,1,1,""],expiration_time:[0,1,1,""],function_multi_key_generator:[0,1,1,""],namespace:[0,1,1,""],should_cache_fn:[0,1,1,""],to_str:[0,1,1,""]},"dogpile.cache.region.CacheRegion.cache_on_arguments.params":{expiration_time:[6,1,1,""],function_key_generator:[6,1,1,""],namespace:[6,1,1,""],should_cache_fn:[6,1,1,""],to_str:[6,1,1,""]},"dogpile.cache.region.CacheRegion.configure.params":{arguments:[6,1,1,""],backend:[6,1,1,""],expiration_time:[6,1,1,""],region_invalidator:[6,1,1,""],replace_existing_backend:[6,1,1,""],wrap:[6,1,1,""]},"dogpile.cache.region.CacheRegion.get.params":{expiration_time:[6,1,1,""],ignore_expiration:[6,1,1,""],key:[6,1,1,""]},"dogpile.cache.region.CacheRegion.get_or_create.params":{creator:[6,1,1,""],expiration_time:[6,1,1,""],key:[6,1,1,""],should_cache_fn:[6,1,1,""]},"dogpile.cache.region.CacheRegion.get_or_create_multi.params":{creator:[0,1,1,""],expiration_time:[0,1,1,""],keys:[0,1,1,""],should_cache_fn:[0,1,1,""]},"dogpile.cache.region.CacheRegion.invalidate.params":{hard:[0,1,1,""]},"dogpile.cache.region.CacheRegion.params":{async_creation_runner:[6,1,1,""],function_key_generator:[6,1,1,""],function_multi_key_generator:[6,1,1,""],key_mangler:[6,1,1,""],name:[6,1,1,""]},"dogpile.cache.region.DefaultInvalidationStrategy":{invalidate:[0,3,1,""],is_hard_invalidated:[0,3,1,""],is_invalidated:[0,3,1,""],is_soft_invalidated:[0,3,1,""],was_hard_invalidated:[0,3,1,""],was_soft_invalidated:[0,3,1,""]},"dogpile.cache.region.RegionInvalidationStrategy":{invalidate:[0,3,1,""],is_hard_invalidated:[0,3,1,""],is_invalidated:[0,3,1,""],is_soft_invalidated:[0,3,1,""],was_hard_invalidated:[0,3,1,""],was_soft_invalidated:[0,3,1,""]},"dogpile.cache.util":{function_key_generator:[0,7,1,""],kwarg_function_key_generator:[0,7,1,""],length_conditional_mangler:[0,7,1,""],sha1_mangle_key:[0,7,1,""]},"dogpile.util":{NameRegistry:[0,0,1,""],ReadWriteMutex:[0,0,1,""]},"dogpile.util.NameRegistry":{get:[0,3,1,""]},"dogpile.util.NameRegistry.get.params":{"**kw":[0,1,1,""],identifier:[0,1,1,""]},"dogpile.util.NameRegistry.params":{creator:[0,1,1,""]},"dogpile.util.ReadWriteMutex":{acquire_read_lock:[0,3,1,""],acquire_write_lock:[0,3,1,""],release_read_lock:[0,3,1,""],release_write_lock:[0,3,1,""]},dogpile:{Lock:[0,0,1,""],NeedRegenerationException:[0,0,1,""]}},objnames:{"0":["py","class","Python class"],"1":["py","parameter","Python parameter"],"2":["py","module","Python module"],"3":["py","method","Python method"],"4":["py","attribute","Python attribute"],"5":["py","data","Python data"],"6":["py","exception","Python exception"],"7":["py","function","Python function"]},objtypes:{"0":"py:class","1":"py:parameter","2":"py:module","3":"py:method","4":"py:attribute","5":"py:data","6":"py:exception","7":"py:function"},terms:{"2to3":1,"53def077a4264bd3183d4eb21b1f56f883e1b572":2,"\u0142ukasz":1,"abstract":1,"boolean":[0,1],"case":[0,1,2,5,6],"class":[0,1,2,5,6],"default":[0,1,5,6],"final":[0,6],"float":[0,1],"function":[0,1,2,5,6],"import":[0,1,2,5,6],"int":1,"long":[0,1,6],"menkevi\u010diu":1,"new":[0,1,2,4,5,6],"null":1,"return":[0,1,2,5,6],"short":2,"super":6,"true":[0,1,5,6],"try":[0,5,6],"while":[0,1,4,5,6],Added:[0,1,6],For:[0,2,6],NFS:2,One:[0,6],Such:[0,6],The:[0,1,2,3,5,6],Then:6,There:[0,2],These:6,Use:[0,1],Used:[0,6],Using:[1,4,5],With:[0,6],__future__:1,__init__:[0,6],__name__:[0,5,6],__repr__:1,_config_argument_dict:[0,6],_config_prefix:[0,6],_encodedproxi:5,_hard_invalid:0,_soft_invalid:0,abil:0,about:3,abov:[0,2,5,6],abstractfilelock:[0,1],accept:[0,1,6],access:[0,1,2,6],accessor:[0,1],accomplish:2,account:[0,1],acheiv:5,acquir:[0,1,6],acquire_read_lock:0,acquire_write_lock:0,across:[0,1,2],act:2,actual:[0,1,2,5,6],actual_backend:[0,1],adapt:[0,4],add:[1,5],add_new_data:5,added:[0,1,6],addit:[0,1,2,6],addition:[1,4],address:2,adjust:[1,4],advantag:0,adventag:6,affect:0,after:[0,1,5,6],after_commit:5,again:[0,2,6],against:[0,1,2,6],ahead:2,akkerman:1,alert:2,alexand:1,all:[0,1,2,4,6],allow:[0,1,2,4,6],along:[2,5],alphabet:0,alreadi:[0,1,6],also:[0,1,2,5,6],alter:[0,6],altern:[0,6],although:1,alwai:[0,6],amix:0,among:6,analogu:0,anderson:1,anentrop:1,ani:[0,2,4,6],anoth:[0,1,2,4,6],answer:2,anticip:2,antoin:1,anydbm:0,anyth:6,api:[1,4,5,6],app:1,appar:1,appear:0,append:[0,5],appli:[0,1,5,6],applic:[0,2,4,6],approach:[0,1,2,5,6],appropri:[0,6],approxim:2,apr:1,araujo:1,arbitrari:0,aren:0,arg:[0,5,6],argnam:0,argspec:0,argument:[0,1,2,5,6],argvalu:0,around:[0,2],ascii:[0,6],asdict:[0,1],ask:0,assembl:0,assert:5,associ:[0,5,6],assum:0,async:1,async_cr:[0,6],async_creation_runn:[0,1,5,6],asynchron:[0,1,4,6],attach:0,attempt:[0,6],attribut:[0,6],aug:1,augment:[0,1,6],authent:0,automat:0,avail:[0,1,3,4,5,6],avoid:5,awar:[0,5,6],azoff:1,back:[0,1],backend:[1,2,4,5],background:[0,5,6],backward:0,base:[0,1,2,5,6],basi:[0,1,6],basic:[0,6],baton:2,beaker:[0,2],bean:1,becom:[0,6],been:[0,1,2,5,6],befor:[0,1,2,6],behalf:6,behav:0,behavior:[0,1,4,5],behind:6,being:[0,1,5,6],beitei:1,below:[0,5,6],ben:1,bertin:1,besid:5,best:0,between:[0,6],beyond:1,binari:0,bit:6,block:[0,2,4,5,6],blog:0,bmemcach:[0,1],bmemcachedbackend:0,bookkeep:5,bool:0,both:[0,1],bother:6,brian:1,brown:1,bsddb:[0,6],bug:4,build:[0,1,2,4,5],built:[0,6],builtin:[0,6],bypass:[0,1,6],bytestr:[0,1,6],cach:[0,1,3,5,6],cache_arg:0,cache_dict:0,cache_impl:0,cache_multi_on_argu:[0,1,6],cache_on_argu:[0,1,5,6],cache_refresh:5,cache_region:0,cache_timeout:1,cachebackend:[0,6],cachedvalu:[0,5,6],cachefil:0,cacheimpl:0,cacheregion:[0,1,5,6],calcul:1,call:[0,1,2,5,6],callabl:[0,1,5,6],caller:0,can:[0,1,2,5,6],cannot:[0,1,6],categori:2,caus:1,caveat:[0,6],celeri:[0,6],certain:[0,6],chain:[0,6],chang:[0,1,2,4,5],changelog:4,check:[0,1,2,6],choos:0,christian:1,circumst:6,client:[0,1,2,5,6],client_fn:0,cls:[0,6],code:[0,2,5],coerc:[0,1,6],coerce_string_conf:1,coercion:1,collect:0,collis:5,com:[1,3],combin:[0,6],commit:5,common:[0,1,2,6],commun:1,compar:[0,6],compat:[0,1],complement:1,complet:[0,2],compon:6,comput:[0,6],concept:[0,2,4],concern:5,concret:0,concurr:[0,2,6],condit:[0,1],condition:[0,6],conf:1,config:[0,1,6],config_dict:[0,6],configur:[0,1,4,5],configure_from_config:[0,1,6],conjunct:[0,1,6],connect:[0,1],connection_pool:[0,1],connectionpool:[0,1],consid:[0,1,6],consist:[4,6],constant:1,construct:[0,1,6],constructor:[0,6],consult:[0,6],contain:[0,5,6],content:0,context:[0,2],continu:[0,1,2],contribut:1,control:4,conveni:[0,6],convert:[0,6],coordin:[0,2,6],copi:[0,1],core:[1,4,6],correct:[0,6],correctli:1,correspond:0,could:[0,1,5],count:5,counter:5,courtesi:1,cover:1,cpickl:0,creat:[0,1,2,4],create_some_resourc:2,create_valu:[0,6],createdtim:2,creation:[0,1,2,4,6],creation_funct:0,creation_tim:0,creationtim:2,creator:[0,1,4,6],critic:1,cross:2,current:[0,1,2,6],custom:[0,1,5,6],custominvalidationstrategi:0,customiz:1,cutom:0,d_arg1_arg2_arg3:5,daemon:5,dai:[0,6],dairiki:1,daniel:1,data:[0,4,6],databas:5,date:[0,1,6],datetim:[0,1,6],david:1,dbclass:5,dbm:[0,1,6],dbmbackend:[0,1],dbmfile:[0,6],deadlock:1,deal:0,debug:6,dec:1,declar:[0,6],decod:4,decor:[0,1,2,5,6],def:[0,2,5,6],defaultinvalidationstrategi:0,defer:[0,2,6],defin:[5,6],delai:5,deleg:0,delet:[0,1,5,6],delete_multi:[0,1],deliv:1,depend:[0,1,6],deprec:1,deriv:[0,6],describ:[0,2,6],descriptor:0,deseri:0,design:[2,6],desir:0,destruct:1,detail:[0,6],detect:0,determin:[0,1,6],develop:1,dict:[0,5],dictionari:[0,1,6],dictionarybackend:6,did:[1,6],didn:1,differ:[0,1,2,5,6],digest:2,direct:[0,1,5],directli:[0,1,4,6],directori:[0,1],disabl:[0,1,6],disambigu:[0,6],disappear:2,discard:0,distinguish:[0,6],distribut:[0,1,4],distributed_lock:[0,1,6],do_refresh:5,do_someth:2,doc:1,document:[0,1,3],doe:[0,1,5,6],doesn:[0,2],dogpil:[1,3,5,6],dogpile_lockfil:0,dogpilecach:3,dogpilecacheexcept:0,doing:0,don:[0,1],done:5,dont_cache_non:[0,6],down:[0,6],drop:[0,1],due:1,dump:1,dure:[0,1,2],dynam:[0,1,6],each:[0,1,2,5,6],easi:4,easier:6,easili:[5,6],edg:6,ef206ed4473fec3b639:1,effect:0,effici:2,effort:1,either:[0,1,5,6],elect:0,elimin:6,els:[0,2],emploi:1,empti:1,enabl:1,encapsul:2,encod:4,encourag:4,end:[0,1,2,6],enhanc:3,enough:0,ensur:[1,2],enter:5,entir:[0,1,6],entri:1,entry_point:6,entrypoint:[0,1,6],environ:[0,4],equival:[0,1,6],eric:1,errant:1,erron:1,error:[0,1],establish:[0,1,6],etc:[0,1],evalu:[0,6],even:[0,1],event:[4,6],everi:2,everyth:5,exampl:[0,1,4,5,6],excel:6,except:[1,4,5,6],exception:5,excess:1,execut:4,exist:[0,1,2,6],existing_valu:0,expect:2,expedi:5,expens:[0,2,6],expir:[0,1,2,6],expiration_tim:[0,1,2,5,6],expiretim:0,expiri:0,explicitli:0,expos:1,extend:[0,5,6],extra:[0,6],face:1,fact:[0,6],fail:[0,1],failur:1,fainberg:1,fall:2,fallback:1,fals:[0,1,5,6],far:2,faster:6,fcntl:0,featur:[0,3,6],feb:1,fedorov:1,fidosz:1,field:1,file:[1,4,6],filelock:[0,1,2],filenam:[0,2,6],filesystem:[0,2],filter:5,finish:[0,2,6],first:[0,1,2,6],fix:[0,1,6],flag:[0,1,6],flock:[0,1,2],flufl:2,fly:5,fname:[0,5,6],fname_:5,focus:6,follow:[0,2,6],foo1:0,foo:[0,6],forc:[0,1],foremost:6,form:[0,1,6],format:[0,1,4],former:0,found:[0,6],frequent:1,fri:1,frit:1,from:[0,1,2,3,5,6],from_url:[0,1],front:[0,2,4,6],full:1,function_key_gener:[0,1,5,6],function_multi_key_gener:[0,1,6],futur:[0,6],garbag:0,gdbm:1,gen:[0,6],gen_cach:2,gener:[0,1,2,4,5,6],generate_kei:[0,5,6],generate_my_expensive_valu:2,generate_someth:[0,6],genericmemachedbackend:0,genericmemcachedbackend:[0,1],get:[0,1,2,5,6],get_multi:[0,1,5],get_mutex:0,get_or_cr:[0,1,6],get_or_create_multi:[0,1,5,6],get_some_data:5,get_valu:2,getlogg:6,getter:[0,1],git:1,github:[1,3],given:[0,1,2,5,6],glitch:1,global:[0,2],goe:[0,2],good:[2,5],great:1,greater:0,group:4,guard:1,guid:4,had:1,hanchrow:1,hand:[0,6],handl:0,hanu:1,happen:5,hard:[0,1,5],has:[0,1,2,5,6],has_valu:0,hash:[0,6],hashlib:2,have:[0,1,2,5,6],hayden:1,hbccbh:1,held:0,help:[0,5,6],helper:6,henc:6,here:[0,2,6],hex:2,hexdigest:2,high:[4,6],highest_protocol:[0,1],hit:[0,5],hoc:[2,6],homepag:4,hongbin:1,honor:[0,1],hood:5,hook:[4,5],hope:5,host:[0,1,3],hour:0,how:[0,2,6],howev:[0,1,2,5,6],http:[0,1,3,5],idea:[2,5],idempot:[0,6],identifi:[0,6],ignor:[0,1,6],ignore_expir:[0,1,6],illustr:[0,2,6],immedi:[0,6],impact:0,implement:[0,1,5,6],impli:[0,2],improv:[0,5],includ:[0,1,6],incom:[0,6],incompat:[0,1],incur:0,index:[3,4],indic:[0,6],indirectli:2,individu:0,info:1,inform:[0,3,6],inher:0,inherit:[0,5],initi:[0,1,2,6],inject:0,insid:[0,6],instal:[1,4,6],instanc:[0,1,2,5,6],instant:6,instanti:[0,5,6],instead:[1,2,5],instruct:6,integ:[0,1,5,6],integr:4,intend:1,intent:0,interfac:[0,2,4,6],intern:[0,2,6],interpret:[0,6],invalid:[0,1,4,6],invalidate_user_id:5,invoc:[0,2],invok:[0,2,6],involv:0,is_configur:[0,1],is_hard_invalid:0,is_invalid:0,is_open:0,is_soft_invalid:0,is_unittest:1,isinst:5,isn:[0,1,6],issu:[1,2,3,6],item:0,iteritem:5,itertool:5,its:[0,1,2,4,6],itself:[0,1,2,6],jack:1,jami:1,jan:1,jeff:1,jimmei:1,job:0,john:1,join:[0,2,5,6],jon:1,jonathan:1,json:5,jul:1,jun:1,just:[0,2,5,6],justin:1,keep:[0,2],kei:[0,1,2,4,6],ketama:0,key1:0,key2:0,key3:0,key_mangl:[0,1,5,6],key_templ:5,keyerror:1,keyreentrantmutex:1,keyword:[0,1,6],kind:[0,6],klinger:1,know:5,kolak:1,krau:1,kwarg:[0,5],kwarg_function_key_gener:[0,1,6],lambda:5,larger:0,last:[0,6],lastli:[0,6],later:[0,6],latter:0,lead:[1,5],learn:4,least:[0,2,5],leav:5,left:0,length:[0,1,6],length_conditional_mangl:0,lennox:1,less:1,level:[0,2,6],lib:0,librari:[0,1,6],life:6,like:[0,1,2,5,6],link:[0,5],list:[0,1,6],listens_for:5,load:[0,1,6],load_user_info:6,local:[0,2,5,6],local_region:[0,6],localhost:[0,2],locat:[1,6],lock:[0,1,4,6],lock_factori:[0,1],lock_path:2,lock_sleep:[0,1],lock_timeout:[0,1],lockfil:[0,2],log:6,loggingproxi:6,logic:0,longer:1,look:6,lookup:[0,2],lookup_user_by_id:6,lose:1,lot:4,lutz:1,mabei:1,made:[0,1,2],mai:[0,1,2,5,6],main:5,maintain:1,makarov:1,make:[0,1,2,6],make_region:[0,5,6],mako:1,mako_cach:[0,1],mako_lookup:0,makoplugin:0,manag:[0,2,5,6],mangl:[0,1,5,6],mangler:[0,5,6],mani:[1,6],map:[0,1,5],mapping_set:5,mar:1,marco:1,markedli:6,masayuko:1,match:[0,1],matter:4,mc_pool:2,mean:[0,1,5,6],mechan:[0,1,4,6],memcach:[1,2,6],memcached_expire_tim:[0,1],memcached_region:[0,6],memcachedbackend:0,memcachedlock:0,memoized_properti:1,memori:[1,5],memory_pickl:0,memorybackend:[0,1],memorypickl:1,memorypicklebackend:[0,1],metadata:[0,5,6],method:[0,1,5,6],might:[0,6],min_compress_len:[0,1],mind:6,minim:5,minimum:[0,1],minu:2,miss:[0,1],moc:[0,6],mode:[0,6],model:6,modern:0,modifi:0,modul:[0,1,4,6],modulu:0,moment:5,mon:1,more:[0,1,2,6],morgan:1,most:[0,2,3],move:1,msgpack:5,msgpackproxi:5,much:5,multipl:[0,1,2,6],multithread:[0,6],multivalu:1,must:[0,1],mutex:[0,2,6],mutexlock:0,my_data:[0,6],my_dictionari:0,my_foo:0,my_funct:[0,6],my_key_gener:[0,5,6],my_multi_key_gener:[0,6],my_region:[0,6],myapp:[0,5,6],mybackend:6,myclass:[0,6],myconfig:[0,6],myfirstproxi:0,myfoo:0,myinvalid:0,myotherclass:[0,6],mypackag:6,myregion:6,mysecondproxi:0,mysect:0,name:[0,1,6],nameregistri:[0,1],namespac:[0,1,5,6],nativ:6,necessari:5,necessarili:[0,1,6],need:[0,1,4,5,6],needregenerationexcept:[0,2],neg:1,negat:5,nest:5,never:0,new_valu:0,newli:[0,1,2,6],newvalu:[0,6],next:[0,2,5],no_valu:[0,1,5,6],non:[0,1,2,6],none:[0,1,2,6],nor:1,normal:[0,2,6],note:[0,2,6],notimplementederror:[0,5],nov:1,novalu:0,now:[0,1,2,5,6],nullbackend:[0,1],nulllock:1,number:[0,2,6],object:[0,1,2,4,6],object_hook:5,occur:[0,1,6],oct:1,off:2,offer:6,offload:5,often:2,old:[0,1,5],older:[0,2,6],olli:1,omit:0,onc:[0,1,2],one:[0,1,2,4,5,6],ones:[0,5],onli:[0,1,2,5,6],oper:[0,1,2,5,6],optimist:5,option:[0,1,6],order:[0,1,2,5,6],ordinari:0,org:[3,5],organ:1,orient:0,origin:[0,1,6],orm:4,other:[0,1,2,4,5,6],otherwis:[0,1,5,6],our:[2,5,6],out:[1,5],output:[1,2],outsid:[0,2,6],over:0,overid:[0,6],overrid:[0,5,6],overridden:6,overview:4,own:[0,2,4,5],packag:[0,1,2,3],packb:5,page:4,pair:2,param:0,paramet:[0,1,6],paramt:0,parent:[0,6],pars:1,part:[0,1,6],parti:0,particular:[0,1,2,5,6],particularli:6,pass:[0,1,2,5,6],passthrough:0,password:[0,1],past:0,patch:1,path:[0,2,6],pattern:6,paul:1,payload:[0,5,6],per:[0,1,2,6],perform:[0,2,5,6],period:[0,2,6],persist:[0,5,6],pickl:[0,1,5,6],pickleabl:0,pileup:1,pip:3,place:[0,1,5,6],plain:[0,1],platform:[0,1],plu:1,pluck:[0,6],pluggabl:1,plugin:[1,4,6],pluginload:1,pluginnotfound:[0,1],point:[0,1,5,6],pool:0,pop:[1,6],popul:[0,6],popular:6,port:0,portalock:0,portion:6,posit:1,possibl:[0,5,6],post:0,potenti:[1,5,6],pre:5,prefix:[0,4,6],present:[0,1,5,6],preserv:5,prevent:[0,1,6],previou:[0,2,4,6],previous:[1,2],primari:2,print:5,prior:0,probabl:5,problem:1,problemat:0,proce:[0,1,2,4],process:[0,1,2,5,6],produc:[0,1,6],product:[1,6],project:[1,4],promptli:[0,6],propag:[0,1],properli:6,properti:0,protect:0,protocol:1,provid:[0,1,2,4,6],proxi:[5,6],proxybackend:[0,1,5,6],publish:3,pull:[0,1,5,6],pullreq:1,pure:0,purpos:[1,2,5],push:[0,5],put:[2,6],py2:1,py3k:1,pylibmc:[0,1,2,5],pylibmcbackend:0,pypi:3,pytest:1,python3:1,python:[0,1,2,3,5,6],queri:[0,5,6],queue:[0,6],rais:[0,1,2,5,6],ralph:1,rather:[0,2,6],raw:5,reach:[0,2,6],read:0,reader:[0,1],readi:[0,6],readwrite_lock:[0,1],readwritemutex:[0,1],real:6,receiv:[0,1,6],recent:3,recip:[1,2,4],recod:5,recogn:[0,1,6],recommend:[0,6],record:5,recreat:[0,6],redi:[1,4,6],redis_expiration_tim:0,redisbackend:[0,1],redundantli:6,reentrant:1,refer:[0,1,2,4],referenc:0,reflect:0,refresh:[0,1,5,6],regardless:[0,6],regen:0,regener:[0,1,2,6],region:[1,4,5],region_invalid:[0,6],regionalreadyconfigur:0,regioninvalidationstrategi:[0,1,6],regionnotconfigur:0,regist:[0,1,6],register_backend:6,registri:[0,5],regress:1,regular:0,rel:[0,6],relat:4,releas:[0,1,3,6],release_read_lock:0,release_write_lock:0,reli:[1,2],relianc:1,remain:[0,1],rememb:[0,6],remot:0,remov:[0,1,2,6],repair:1,replac:[0,1,5,6],replace_existing_backend:[0,1,6],report:[0,3,6],repositori:1,repres:[0,6],request:[0,1,6],requir:[0,1,2,4,6],reserv:2,resolv:[0,6],resourc:[2,4],respect:1,respons:[0,6],restor:1,result:[0,1,5,6],ret:0,retir:1,retri:6,retriev:[0,1,2,6],retrieve_resourc:2,retry_count:6,retry_proxi:6,retrydeleteproxi:6,roll:1,rosebaugh:1,rougher:6,round:2,routin:1,rudimentari:4,run:[0,1,6],runner:[0,6],runtim:6,rutherfurd:1,rw_lockfil:0,ryan:1,safe:[0,2,6],same:[0,1,2,6],sasl:0,sat:1,sauerwein:1,sauliu:1,scenario:1,scene:6,scheme:[1,2,5],scope:0,scoped_sess:5,scott:0,search:4,second:[0,1,2,6],section:[0,2,6],see:[0,1,2,6],select:[0,4],self:[0,5,6],semant:1,semaphor:0,send:1,sent:5,sep:1,separ:[0,1,2,6],sequenc:[0,5],seri:5,serial:[0,1,5,6],serializ:6,serv:1,server:[0,2,6],servic:2,session:5,sessionmak:5,set:[0,1,5,6],set_argu:0,set_multi:[0,1,5],setup:[0,1,2,6],setuptool:[1,6],sever:[0,1],sha1:[0,2,6],sha1_mangle_kei:[0,6],share:[1,2,6],sheldon:1,should:[0,3,6],should_cache_fn:[0,1,6],sign:1,signatur:0,similar:[0,1,3,6],simpl:[0,1,2,5,6],simpli:5,simultan:[0,6],sinc:[0,5,6],singl:[0,1,2,4,6],singleton:0,size:[0,5],skip:[0,6],sleep:0,slow_databas:2,small:6,smaller:5,sobrinho:1,socket:0,socket_timeout:[0,1],soft:[0,1],some:[0,1,2,4,5,6],some_creation_funct:2,some_databas:6,some_kei:2,somedatabas:[0,6],somekei:[0,6],somemethod:[0,6],someregion:[0,6],something_new:5,somevalu:6,somewher:0,sourc:[0,1,2,6],space:6,special:1,specif:[0,1,4,6],specifi:[0,1,5,6],sqlalchemi:[1,3,5],stack:0,stale:[0,2,6],standard:0,start:[0,5,6],state:[0,1],statu:3,stegmann:1,step:[0,6],still:[0,1,2,5,6],storag:[1,5,6],store:[0,1,2,5,6],str:[0,1,5,6],strategi:[0,1,2,6],strictredi:[0,1],string:[0,1,6],strongli:0,structur:[0,4,6],stuff:2,subclass:[0,1,6],submit:0,subsequ:[0,1,6],subset:0,subsitut:1,substitut:[0,6],subsystem:4,success:1,successfulli:2,suffix:0,suit:[0,1],suitabl:[0,6],sun:1,supersed:[0,6],suppli:[0,6],support:[0,1,6],suppos:[1,5],sure:[0,6],symbol:[1,2],symlink:2,synchron:[0,2],syncreaderdogpil:1,syntax:1,sys:6,system:[0,1,2,5,6],tag:0,take:[0,1,6],talk:[0,6],target:[0,5,6],task:[0,6],tcp_nodelai:0,techniqu:5,templat:[0,1,5],templatelookup:0,term:[0,6],test:[0,1,6],than:[0,2,5,6],thank:1,the_resourc:2,thei:[0,2,6],them:[0,1,5],therebi:1,therefor:[0,6],thi:[0,1,2,3,4,5,6],thing:[1,6],third:[0,5],those:[0,1,4,5,6],though:[0,1,6],thread:[0,1,2,4,5,6],threadmappedpool:2,threadsaf:[0,2],three:[0,5],threshold:0,throttl:0,through:[2,5],thrown:[0,1],thu:[0,1,2,6],tiger:0,tim:1,time:[0,1,2,6],timedelta:[0,1,6],timeout:[0,1],timestamp:[0,1,6],tmp:2,to_list:1,to_str:[0,1,6],tobia:1,togeth:[0,6],token:[0,6],tool:[0,3,6],top:4,total:0,total_second:1,toward:0,track:[0,2,5],tracker:3,transform:5,translat:5,trip:2,tue:1,tup:2,tupl:[0,2,6],turn:6,tweak:4,twice:2,two:[0,2,4,5,6],type:[0,6],typeerror:1,typic:[0,5,6],ultim:[0,1,2,6],unaffect:1,uncondition:[0,6],unconfigur:1,under:[0,1,5,6],underli:[0,6],underneath:[0,6],understood:0,undesir:0,unencod:5,unicod:[0,1,6],uninstanti:6,uniqu:[0,2,5],unit:1,unix:[0,1,2],unless:[0,2,6],unlik:[0,2],unlimit:0,unnecessari:[0,1],unnecessarili:1,unpackb:5,unsupport:1,until:[0,1,2,4,5,6],updat:4,upon:[0,1,2,6],upstream:0,url:[0,1,5,6],usabl:6,usag:[0,1,4],use:[0,1,2,4,5,6],use_bin_typ:5,used:[0,1,2,5,6],user:[1,2,4,5,6],user_fn_on:5,user_fn_one_:5,user_fn_thre:5,user_fn_three_:5,user_fn_two:5,user_fn_two_:5,user_id:[5,6],user_kei:5,usernam:0,uses:[0,1,2,5,6],using:[0,1,2,5,6],usual:[1,2,6],utf:5,util:[1,4],valid:0,validationerror:0,valu:[0,1,2,5,6],value1:0,value2:0,value3:0,value_and_created_fn:0,value_decod:5,value_encod:5,value_plus_tim:2,value_vers:0,vanasco:1,variabl:1,variant:[0,1,5],varieti:4,variou:[0,2],verbos:6,veri:4,version:[0,2,3,4,6],versu:[0,6],via:[0,1,2,5,6],volum:4,wai:[0,1,5,6],wait:[0,1,6],want:[0,2,5,6],was_hard_invalid:0,was_soft_invalid:0,wasn:1,wed:1,week:[0,6],well:[0,1,2,5,6],were:[0,1,6],what:[0,1,2],whatev:[0,6],when:[0,1,2,5,6],whenev:[0,6],where:[0,1,2,6],wherebi:1,whether:[0,1,6],which:[0,1,2,4,5,6],whole:1,whose:0,wichert:1,wide:1,window:[0,1],wish:0,with_stat:1,within:[0,1,5,6],without:[0,2,6],won:[0,2,6],work:[0,1,2,5],worker:6,would:[0,1,5,6],wrap:[0,1,5,6],write:[0,1,6],writer:[0,5,6],written:6,wrong:1,yank:1,yet:[0,1,6],you:[0,2,5,6],your:[0,2,5],zero:1,zip:0,zoomorph:1},titles:["API","Changelog","dogpile Core","Front Matter","Welcome to dogpile.cache\u2019s documentation!","Recipes","Usage Guide"],titleterms:{"null":0,Using:[2,6],all:5,anoth:5,api:[0,2],asynchron:5,backend:[0,6],behavior:6,bug:[1,3],cach:[2,4],chang:6,changelog:1,configur:6,core:[0,2],creat:6,data:5,decod:5,directli:2,distribut:2,document:4,dogpil:[0,2,4],encod:5,event:5,exampl:2,except:0,featur:1,file:[0,2],format:5,front:3,group:5,guid:6,homepag:3,indic:4,instal:3,integr:0,invalid:5,kei:5,learn:2,lock:2,mako:0,matter:3,memcach:0,memori:0,misc:1,need:2,note:5,orm:5,overview:6,plugin:0,prefix:5,project:3,proxi:0,pylibmc:6,recip:5,redi:[0,5],region:[0,6],relat:5,rudimentari:[2,6],tabl:4,updat:5,usag:[2,6],util:0,welcom:4}}) \ No newline at end of file +Search.setIndex({docnames:["api","changelog","core_usage","front","index","recipes","usage"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,sphinx:55},filenames:["api.rst","changelog.rst","core_usage.rst","front.rst","index.rst","recipes.rst","usage.rst"],objects:{"dogpile.Lock.params":{async_creator:[0,1,1,""],creator:[0,1,1,""],expiretime:[0,1,1,""],mutex:[0,1,1,""],value_and_created_fn:[0,1,1,""]},"dogpile.cache":{api:[0,2,0,"-"],exception:[0,2,0,"-"],proxy:[0,2,0,"-"],region:[0,2,0,"-"]},"dogpile.cache.api":{CacheBackend:[0,0,1,""],CachedValue:[0,0,1,""],NO_VALUE:[0,5,1,""],NoValue:[0,0,1,""]},"dogpile.cache.api.CacheBackend":{"delete":[0,3,1,""],delete_multi:[0,3,1,""],get:[0,3,1,""],get_multi:[0,3,1,""],get_mutex:[0,3,1,""],key_mangler:[0,4,1,""],set:[0,3,1,""],set_multi:[0,3,1,""]},"dogpile.cache.api.CachedValue":{metadata:[0,4,1,""],payload:[0,4,1,""]},"dogpile.cache.backends":{"null":[0,2,0,"-"],file:[0,2,0,"-"],memcached:[0,2,0,"-"],memory:[0,2,0,"-"],redis:[0,2,0,"-"]},"dogpile.cache.backends.file":{AbstractFileLock:[0,0,1,""],DBMBackend:[0,0,1,""],FileLock:[0,0,1,""]},"dogpile.cache.backends.file.AbstractFileLock":{acquire:[0,3,1,""],acquire_read_lock:[0,3,1,""],acquire_write_lock:[0,3,1,""],is_open:[0,4,1,""],read:[0,3,1,""],release:[0,3,1,""],release_read_lock:[0,3,1,""],release_write_lock:[0,3,1,""],write:[0,3,1,""]},"dogpile.cache.backends.file.DBMBackend":{"delete":[0,3,1,""],delete_multi:[0,3,1,""],get:[0,3,1,""],get_multi:[0,3,1,""],get_mutex:[0,3,1,""],set:[0,3,1,""],set_multi:[0,3,1,""]},"dogpile.cache.backends.file.DBMBackend.params":{dogpile_lockfile:[0,1,1,""],filename:[0,1,1,""],lock_factory:[0,1,1,""],rw_lockfile:[0,1,1,""]},"dogpile.cache.backends.file.FileLock":{acquire_read_lock:[0,3,1,""],acquire_write_lock:[0,3,1,""],is_open:[0,4,1,""],release_read_lock:[0,3,1,""],release_write_lock:[0,3,1,""]},"dogpile.cache.backends.memcached":{BMemcachedBackend:[0,0,1,""],GenericMemcachedBackend:[0,0,1,""],MemcachedBackend:[0,0,1,""],MemcachedLock:[0,0,1,""],PylibmcBackend:[0,0,1,""]},"dogpile.cache.backends.memcached.BMemcachedBackend":{delete_multi:[0,3,1,""]},"dogpile.cache.backends.memcached.BMemcachedBackend.params":{password:[0,1,1,""],username:[0,1,1,""]},"dogpile.cache.backends.memcached.GenericMemcachedBackend":{"delete":[0,3,1,""],client:[0,4,1,""],delete_multi:[0,3,1,""],get:[0,3,1,""],get_multi:[0,3,1,""],get_mutex:[0,3,1,""],set:[0,3,1,""],set_arguments:[0,4,1,""],set_multi:[0,3,1,""]},"dogpile.cache.backends.memcached.GenericMemcachedBackend.params":{distributed_lock:[0,1,1,""],lock_timeout:[0,1,1,""],memcached_expire_time:[0,1,1,""],url:[0,1,1,""]},"dogpile.cache.backends.memcached.PylibmcBackend.params":{behaviors:[0,1,1,""],binary:[0,1,1,""],min_compress_len:[0,1,1,""]},"dogpile.cache.backends.memory":{MemoryBackend:[0,0,1,""],MemoryPickleBackend:[0,0,1,""]},"dogpile.cache.backends.memory.MemoryBackend":{"delete":[0,3,1,""],delete_multi:[0,3,1,""],get:[0,3,1,""],get_multi:[0,3,1,""],set:[0,3,1,""],set_multi:[0,3,1,""]},"dogpile.cache.backends.null":{NullBackend:[0,0,1,""]},"dogpile.cache.backends.null.NullBackend":{"delete":[0,3,1,""],delete_multi:[0,3,1,""],get:[0,3,1,""],get_multi:[0,3,1,""],get_mutex:[0,3,1,""],set:[0,3,1,""],set_multi:[0,3,1,""]},"dogpile.cache.backends.redis":{RedisBackend:[0,0,1,""]},"dogpile.cache.backends.redis.RedisBackend":{"delete":[0,3,1,""],delete_multi:[0,3,1,""],get:[0,3,1,""],get_multi:[0,3,1,""],get_mutex:[0,3,1,""],set:[0,3,1,""],set_multi:[0,3,1,""]},"dogpile.cache.backends.redis.RedisBackend.params":{connection_pool:[0,1,1,""],db:[0,1,1,""],distributed_lock:[0,1,1,""],host:[0,1,1,""],lock_sleep:[0,1,1,""],lock_timeout:[0,1,1,""],password:[0,1,1,""],port:[0,1,1,""],redis_expiration_time:[0,1,1,""],socket_timeout:[0,1,1,""],url:[0,1,1,""]},"dogpile.cache.exception":{DogpileCacheException:[0,6,1,""],PluginNotFound:[0,6,1,""],RegionAlreadyConfigured:[0,6,1,""],RegionNotConfigured:[0,6,1,""],ValidationError:[0,6,1,""]},"dogpile.cache.plugins":{mako_cache:[0,2,0,"-"]},"dogpile.cache.plugins.mako_cache":{MakoPlugin:[0,0,1,""]},"dogpile.cache.plugins.mako_cache.MakoPlugin":{get:[0,3,1,""],get_or_create:[0,3,1,""],invalidate:[0,3,1,""]},"dogpile.cache.plugins.mako_cache.MakoPlugin.get.params":{"**kw":[0,1,1,""],key:[0,1,1,""]},"dogpile.cache.plugins.mako_cache.MakoPlugin.get_or_create.params":{"**kw":[0,1,1,""],creation_function:[0,1,1,""],key:[0,1,1,""]},"dogpile.cache.plugins.mako_cache.MakoPlugin.invalidate.params":{"**kw":[0,1,1,""],key:[0,1,1,""]},"dogpile.cache.proxy":{ProxyBackend:[0,0,1,""]},"dogpile.cache.proxy.ProxyBackend":{"delete":[0,3,1,""],delete_multi:[0,3,1,""],get:[0,3,1,""],get_multi:[0,3,1,""],get_mutex:[0,3,1,""],set:[0,3,1,""],set_multi:[0,3,1,""],wrap:[0,3,1,""]},"dogpile.cache.region":{CacheRegion:[0,0,1,""],DefaultInvalidationStrategy:[0,0,1,""],RegionInvalidationStrategy:[0,0,1,""],make_region:[0,7,1,""],value_version:[0,5,1,""]},"dogpile.cache.region.CacheRegion":{"delete":[0,3,1,""],actual_backend:[0,4,1,""],cache_multi_on_arguments:[0,3,1,""],cache_on_arguments:[0,3,1,""],configure:[0,3,1,""],configure_from_config:[0,3,1,""],delete_multi:[0,3,1,""],get:[0,3,1,""],get_multi:[0,3,1,""],get_or_create:[0,3,1,""],get_or_create_multi:[0,3,1,""],invalidate:[0,3,1,""],is_configured:[0,4,1,""],set:[0,3,1,""],set_multi:[0,3,1,""],wrap:[0,3,1,""]},"dogpile.cache.region.CacheRegion.cache_multi_on_arguments.params":{asdict:[0,1,1,""],expiration_time:[0,1,1,""],function_multi_key_generator:[0,1,1,""],namespace:[0,1,1,""],should_cache_fn:[0,1,1,""],to_str:[0,1,1,""]},"dogpile.cache.region.CacheRegion.cache_on_arguments.params":{expiration_time:[6,1,1,""],function_key_generator:[6,1,1,""],namespace:[6,1,1,""],should_cache_fn:[6,1,1,""],to_str:[6,1,1,""]},"dogpile.cache.region.CacheRegion.configure.params":{arguments:[6,1,1,""],backend:[6,1,1,""],expiration_time:[6,1,1,""],region_invalidator:[6,1,1,""],replace_existing_backend:[6,1,1,""],wrap:[6,1,1,""]},"dogpile.cache.region.CacheRegion.get.params":{expiration_time:[6,1,1,""],ignore_expiration:[6,1,1,""],key:[6,1,1,""]},"dogpile.cache.region.CacheRegion.get_or_create.params":{creator:[6,1,1,""],creator_args:[6,1,1,""],expiration_time:[6,1,1,""],key:[6,1,1,""],should_cache_fn:[6,1,1,""]},"dogpile.cache.region.CacheRegion.get_or_create_multi.params":{creator:[0,1,1,""],expiration_time:[0,1,1,""],keys:[0,1,1,""],should_cache_fn:[0,1,1,""]},"dogpile.cache.region.CacheRegion.invalidate.params":{hard:[0,1,1,""]},"dogpile.cache.region.CacheRegion.params":{async_creation_runner:[6,1,1,""],function_key_generator:[6,1,1,""],function_multi_key_generator:[6,1,1,""],key_mangler:[6,1,1,""],name:[6,1,1,""]},"dogpile.cache.region.DefaultInvalidationStrategy":{invalidate:[0,3,1,""],is_hard_invalidated:[0,3,1,""],is_invalidated:[0,3,1,""],is_soft_invalidated:[0,3,1,""],was_hard_invalidated:[0,3,1,""],was_soft_invalidated:[0,3,1,""]},"dogpile.cache.region.RegionInvalidationStrategy":{invalidate:[0,3,1,""],is_hard_invalidated:[0,3,1,""],is_invalidated:[0,3,1,""],is_soft_invalidated:[0,3,1,""],was_hard_invalidated:[0,3,1,""],was_soft_invalidated:[0,3,1,""]},"dogpile.cache.util":{function_key_generator:[0,7,1,""],kwarg_function_key_generator:[0,7,1,""],length_conditional_mangler:[0,7,1,""],sha1_mangle_key:[0,7,1,""]},"dogpile.util":{NameRegistry:[0,0,1,""],ReadWriteMutex:[0,0,1,""]},"dogpile.util.NameRegistry":{get:[0,3,1,""]},"dogpile.util.NameRegistry.get.params":{"**kw":[0,1,1,""],identifier:[0,1,1,""]},"dogpile.util.NameRegistry.params":{creator:[0,1,1,""]},"dogpile.util.ReadWriteMutex":{acquire_read_lock:[0,3,1,""],acquire_write_lock:[0,3,1,""],release_read_lock:[0,3,1,""],release_write_lock:[0,3,1,""]},dogpile:{Lock:[0,0,1,""],NeedRegenerationException:[0,0,1,""]}},objnames:{"0":["py","class","Python class"],"1":["py","parameter","Python parameter"],"2":["py","module","Python module"],"3":["py","method","Python method"],"4":["py","attribute","Python attribute"],"5":["py","data","Python data"],"6":["py","exception","Python exception"],"7":["py","function","Python function"]},objtypes:{"0":"py:class","1":"py:parameter","2":"py:module","3":"py:method","4":"py:attribute","5":"py:data","6":"py:exception","7":"py:function"},terms:{"2to3":1,"53def077a4264bd3183d4eb21b1f56f883e1b572":2,"\u0142ukasz":1,"abstract":1,"boolean":[0,1],"case":[0,1,2,5,6],"class":[0,1,2,5,6],"default":[0,1,5,6],"final":[0,6],"float":[0,1],"function":[0,1,2,5,6],"import":[0,1,2,5,6],"int":1,"long":[0,1,6],"menkevi\u010diu":1,"new":[0,1,2,4,5,6],"null":1,"return":[0,1,2,5,6],"short":2,"super":6,"true":[0,1,5,6],"try":[0,5,6],"while":[0,1,4,5,6],Added:[0,1,6],For:[0,2,6],NFS:2,One:[0,6],Such:[0,6],The:[0,1,2,3,5,6],Then:6,There:[0,2],These:6,Use:[0,1],Used:[0,6],Using:[1,4,5],With:[0,6],__future__:1,__init__:[0,6],__name__:[0,5,6],__repr__:1,_config_argument_dict:[0,6],_config_prefix:[0,6],_encodedproxi:5,_hard_invalid:0,_soft_invalid:0,abil:0,about:3,abov:[0,2,5,6],abstractfilelock:[0,1],accept:[0,1,6],access:[0,1,2,6],accessor:[0,1],accomplish:2,account:[0,1],acheiv:5,acquir:[0,1,6],acquire_read_lock:0,acquire_write_lock:0,across:[0,1,2],act:2,actual:[0,1,2,5,6],actual_backend:[0,1],adapt:[0,4],add:[1,5],add_new_data:5,added:[0,1,6],addit:[0,1,2,6],addition:[1,4],address:2,adjust:[1,4],advantag:0,adventag:6,affect:0,after:[0,1,5,6],after_commit:5,again:[0,2,6],against:[0,1,2,6],ahead:2,akkerman:1,alert:2,alexand:1,all:[0,1,2,4,6],allow:[0,1,2,4,6],along:[2,5],alphabet:0,alreadi:[0,1,6],also:[0,1,2,5,6],alter:[0,6],altern:[0,6],although:1,alwai:[0,6],amix:0,among:6,analogu:0,anderson:1,anentrop:1,ani:[0,2,4,6],ankitpatel96:1,anoth:[0,1,2,4,6],answer:2,anticip:2,antoin:1,anydbm:0,anyth:6,api:[1,4,5,6],app:1,appar:1,appear:0,append:[0,5],appli:[0,1,5,6],applic:[0,2,4,6],approach:[0,1,2,5,6],appropri:[0,6],approxim:2,apr:1,araujo:1,arbitrari:0,aren:0,arg:[0,5,6],argnam:0,argspec:0,argument:[0,1,2,5,6],argvalu:0,around:[0,2],ascii:[0,6],asdict:[0,1],ask:0,assembl:0,assert:5,associ:[0,5,6],assum:[0,1],async:1,async_cr:[0,6],async_creation_runn:[0,1,5,6],asynchron:[0,1,4,6],attach:0,attempt:[0,6],attribut:[0,6],aug:1,augment:[0,1,6],authent:0,automat:0,avail:[0,1,3,4,5,6],avoid:[1,5],awar:[0,5,6],azoff:1,back:[0,1],backend:[1,2,4,5],background:[0,5,6],backward:0,base:[0,1,2,5,6],basi:[0,1,6],basic:[0,6],baton:2,beaker:[0,2],bean:1,becom:[0,6],been:[0,1,2,5,6],befor:[0,1,2,6],behalf:6,behav:0,behavior:[0,1,4,5],behind:6,being:[0,1,5,6],beitei:1,below:[0,5,6],ben:1,bertin:1,besid:5,best:0,between:[0,6],beyond:1,binari:0,bit:6,block:[0,2,4,5,6],blog:0,bmemcach:[0,1],bmemcachedbackend:0,bookkeep:5,bool:0,both:[0,1],bother:6,brian:1,brown:1,bsddb:[0,6],bug:4,build:[0,1,2,4,5],built:[0,6],builtin:[0,6],bypass:[0,1,6],bytestr:[0,1,6],cach:[0,1,3,5,6],cache_arg:0,cache_dict:0,cache_impl:0,cache_multi_on_argu:[0,1,6],cache_on_argu:[0,1,5,6],cache_refresh:5,cache_region:0,cache_timeout:1,cachebackend:[0,6],cachedvalu:[0,5,6],cachefil:0,cacheimpl:0,cacheregion:[0,1,5,6],calcul:1,call:[0,1,2,5,6],callabl:[0,1,5,6],caller:0,can:[0,1,2,5,6],cannot:[0,1,6],categori:2,caus:1,caveat:[0,6],celeri:[0,6],certain:[0,6],chain:[0,6],chang:[0,1,2,4,5],changelog:4,check:[0,1,2,6],choos:0,christian:1,circumst:6,client:[0,1,2,5,6],client_fn:0,cls:[0,6],code:[0,2,5],coerc:[0,1,6],coerce_string_conf:1,coercion:1,collect:0,collis:5,com:[1,3],combin:[0,6],commit:5,common:[0,1,2,6],commun:1,compar:[0,6],compat:[0,1],complement:1,complet:[0,2],compon:6,comput:[0,6],concept:[0,2,4],concern:5,concret:0,concurr:[0,2,6],condit:[0,1],condition:[0,6],conf:1,config:[0,1,6],config_dict:[0,6],configur:[0,1,4,5],configure_from_config:[0,1,6],conjunct:[0,1,6],connect:[0,1],connection_pool:[0,1],connectionpool:[0,1],consid:[0,1,6],consist:[4,6],constant:1,construct:[0,1,6],constructor:[0,6],consult:[0,6],contain:[0,5,6],content:0,context:[0,2],continu:[0,1,2],contribut:1,control:4,conveni:[0,6],convert:[0,6],coordin:[0,2,6],copi:[0,1],core:[1,4,6],correct:[0,6],correctli:1,correspond:0,could:[0,1,5],count:5,counter:5,courtesi:1,cover:1,cpickl:0,creat:[0,1,2,4],create_some_resourc:2,create_valu:[0,6],createdtim:2,creation:[0,1,2,4,6],creation_funct:0,creation_tim:0,creationtim:2,creator:[0,1,4,6],creator_arg:[0,1,6],critic:1,cross:2,current:[0,1,2,6],custom:[0,1,5,6],custominvalidationstrategi:0,customiz:1,cutom:0,d_arg1_arg2_arg3:5,daemon:5,dai:[0,6],dairiki:1,daniel:1,data:[0,4,6],databas:5,date:[0,1,6],datetim:[0,1,6],david:1,dbclass:5,dbm:[0,1,6],dbmbackend:[0,1],dbmfile:[0,6],deadlock:1,deal:0,debug:6,dec:1,declar:[0,6],decod:4,decor:[0,1,2,5,6],def:[0,2,5,6],defaultinvalidationstrategi:0,defer:[0,2,6],defin:[5,6],delai:5,deleg:0,delet:[0,1,5,6],delete_multi:[0,1],deliv:1,depend:[0,1,6],deprec:1,deriv:[0,6],describ:[0,2,6],descriptor:0,deseri:0,design:[2,6],desir:0,destruct:1,detail:[0,6],detect:0,determin:[0,1,6],develop:1,dict:[0,5],dictionari:[0,1,6],dictionarybackend:6,did:[1,6],didn:1,differ:[0,1,2,5,6],digest:2,direct:[0,1,5],directli:[0,1,4,6],directori:[0,1],disabl:[0,1,6],disambigu:[0,6],disappear:2,discard:0,distinguish:[0,6],distribut:[0,1,4],distributed_lock:[0,1,6],do_refresh:5,do_someth:2,doc:1,document:[0,1,3],doe:[0,1,5,6],doesn:[0,2],dogpil:[1,3,5,6],dogpile_lockfil:0,dogpilecach:3,dogpilecacheexcept:0,doing:0,don:[0,1],done:5,dont_cache_non:[0,6],down:[0,6],drop:[0,1],due:1,dump:1,dure:[0,1,2],dynam:[0,1,6],each:[0,1,2,5,6],easi:4,easier:6,easili:[5,6],edg:6,ef206ed4473fec3b639:1,effect:0,effici:2,effort:1,either:[0,1,5,6],elect:0,elimin:6,els:[0,2],emploi:1,empti:1,enabl:1,encapsul:2,encod:4,encourag:4,end:[0,1,2,6],enhanc:[1,3],enough:0,ensur:[1,2],enter:5,entir:[0,1,6],entri:1,entry_point:6,entrypoint:[0,1,6],environ:[0,4],equival:[0,1,6],eric:1,errant:1,erron:1,error:[0,1],establish:[0,1,6],etc:[0,1],evalu:[0,6],even:[0,1],event:[4,6],everi:[1,2],everyth:5,exact:1,exampl:[0,1,4,5,6],excel:6,except:[1,4,5,6],exception:5,excess:1,execut:4,exist:[0,1,2,6],existing_valu:0,expand:1,expect:2,expedi:5,expens:[0,2,6],expir:[0,1,2,6],expiration_tim:[0,1,2,5,6],expiretim:0,expiri:0,explicitli:0,expos:1,extend:[0,5,6],extra:[0,6],face:1,fact:[0,6],fail:[0,1],failur:1,fainberg:1,fall:2,fallback:1,fals:[0,1,5,6],far:2,faster:6,fcntl:0,featur:[0,3,6],feb:1,fedorov:1,fidosz:1,field:1,file:[1,4,6],filelock:[0,1,2],filenam:[0,2,6],filesystem:[0,2],filter:5,finish:[0,2,6],first:[0,1,2,6],fix:[0,1,6],flag:[0,1,6],flock:[0,1,2],flufl:2,fly:5,fname:[0,5,6],fname_:5,focus:6,follow:[0,2,6],foo1:0,foo:[0,6],forc:[0,1],foremost:6,form:[0,1,6],format:[0,1,4],former:0,found:[0,6],frequent:1,fri:1,frit:1,from:[0,1,2,3,5,6],from_url:[0,1],front:[0,2,4,6],full:1,function_key_gener:[0,1,5,6],function_multi_key_gener:[0,1,6],futur:[0,6],garbag:0,gdbm:1,gen:[0,6],gen_cach:2,gener:[0,1,2,4,5,6],generate_kei:[0,5,6],generate_my_expensive_valu:2,generate_someth:[0,6],genericmemachedbackend:0,genericmemcachedbackend:[0,1],get:[0,1,2,5,6],get_multi:[0,1,5],get_mutex:0,get_or_cr:[0,1,6],get_or_create_multi:[0,1,5,6],get_some_data:5,get_valu:2,getargspec:1,getlogg:6,getter:[0,1],git:1,github:[1,3],given:[0,1,2,5,6],glitch:1,global:[0,2],goe:[0,2],good:[2,5],great:1,greater:0,group:4,guard:1,guid:4,had:1,hanchrow:1,hand:[0,6],handl:0,hanu:1,happen:5,hard:[0,1,5],has:[0,1,2,5,6],has_valu:0,hash:[0,6],hashlib:2,have:[0,1,2,5,6],hayden:1,hbccbh:1,held:0,help:[0,5,6],helper:6,henc:6,here:[0,2,6],hex:2,hexdigest:2,high:[4,6],highest_protocol:[0,1],hit:[0,5],hoc:[2,6],homepag:4,hongbin:1,honor:[0,1],hood:5,hook:[4,5],hope:5,host:[0,1,3],hour:0,how:[0,2,6],howev:[0,1,2,5,6],http:[0,1,3,5],idea:[2,5],idempot:[0,6],identifi:[0,6],ignor:[0,1,6],ignore_expir:[0,1,6],illustr:[0,2,6],immedi:[0,6],impact:0,implement:[0,1,5,6],impli:[0,2],implicitli:1,improv:[0,5],includ:[0,1,6],incom:[0,6],incompat:[0,1],incur:0,index:[3,4],indic:[0,6],indirectli:2,individu:0,info:1,inform:[0,3,6],inher:0,inherit:[0,5],initi:[0,1,2,6],inject:0,insid:[0,6],inspect:1,instal:[1,4,6],instanc:[0,1,2,5,6],instant:6,instanti:[0,5,6],instead:[1,2,5],instruct:6,integ:[0,1,5,6],integr:4,intend:1,intent:0,interfac:[0,2,4,6],intern:[0,1,2,6],interpret:[0,6],invalid:[0,1,4,6],invalidate_user_id:5,invoc:[0,2],invok:[0,2,6],involv:0,is_configur:[0,1],is_hard_invalid:0,is_invalid:0,is_open:0,is_soft_invalid:0,is_unittest:1,isinst:5,isn:[0,1,6],issu:[1,2,3,6],item:0,iteritem:5,itertool:5,its:[0,1,2,4,6],itself:[0,1,2,6],jack:1,jami:1,jan:1,jeff:1,jimmei:1,job:0,john:1,join:[0,2,5,6],jon:1,jonathan:1,json:5,jul:1,jun:1,just:[0,2,5,6],justin:1,keep:[0,2],kei:[0,1,2,4,6],ketama:0,key1:0,key2:0,key3:0,key_mangl:[0,1,5,6],key_templ:5,keyerror:1,keyreentrantmutex:1,keyword:[0,1,6],kind:[0,6],klinger:1,know:5,kolak:1,krau:1,kwarg:[0,5,6],kwarg_function_key_gener:[0,1,6],lambda:5,larger:0,last:[0,6],lastli:[0,6],later:[0,6],latter:0,lead:[1,5],learn:4,least:[0,2,5],leav:5,left:0,length:[0,1,6],length_conditional_mangl:0,lennox:1,less:1,level:[0,2,6],lib:0,librari:[0,1,6],life:6,like:[0,1,2,5,6],link:[0,5],list:[0,1,6],listens_for:5,load:[0,1,6],load_user_info:6,local:[0,2,5,6],local_region:[0,6],localhost:[0,2],locat:[1,6],lock:[0,1,4,6],lock_factori:[0,1],lock_path:2,lock_sleep:[0,1],lock_timeout:[0,1],lockfil:[0,2],log:6,loggingproxi:6,logic:0,longer:1,look:6,lookup:[0,2],lookup_user_by_id:6,lose:1,lot:4,lutz:1,mabei:1,made:[0,1,2],mai:[0,1,2,5,6],main:5,maintain:1,makarov:1,make:[0,1,2,6],make_region:[0,5,6],mako:1,mako_cach:[0,1],mako_lookup:0,makoplugin:0,manag:[0,2,5,6],mangl:[0,1,5,6],mangler:[0,5,6],mani:[1,6],map:[0,1,5],mapping_set:5,mar:1,marco:1,markedli:6,masayuko:1,match:[0,1],matter:4,mc_pool:2,mean:[0,1,5,6],mechan:[0,1,4,6],memcach:[1,2,6],memcached_expire_tim:[0,1],memcached_region:[0,6],memcachedbackend:0,memcachedlock:0,memoized_properti:1,memori:[1,5],memory_pickl:0,memorybackend:[0,1],memorypickl:1,memorypicklebackend:[0,1],metadata:[0,5,6],method:[0,1,5,6],might:[0,6],min_compress_len:[0,1],mind:6,minim:5,minimum:[0,1],minu:2,miss:[0,1],moc:[0,6],mode:[0,6],model:6,modern:0,modifi:0,modul:[0,1,4,6],modulu:0,moment:5,mon:1,more:[0,1,2,6],morgan:1,most:[0,2,3],move:1,msgpack:5,msgpackproxi:5,much:5,multipl:[0,1,2,6],multithread:[0,6],multivalu:1,must:[0,1],mutex:[0,2,6],mutexlock:0,my_data:[0,6],my_dictionari:0,my_foo:0,my_funct:[0,6],my_key_gener:[0,5,6],my_multi_key_gener:[0,6],my_region:[0,6],myapp:[0,5,6],mybackend:6,myclass:[0,6],myconfig:[0,6],myfirstproxi:0,myfoo:0,myinvalid:0,myotherclass:[0,6],mypackag:6,myregion:6,mysecondproxi:0,mysect:0,name:[0,1,6],nameregistri:[0,1],namespac:[0,1,5,6],nativ:6,necessari:5,necessarili:[0,1,6],need:[0,1,4,5,6],needregenerationexcept:[0,2],neg:1,negat:5,nest:5,never:0,new_valu:0,newli:[0,1,2,6],newvalu:[0,6],next:[0,2,5],no_valu:[0,1,5,6],non:[0,1,2,6],none:[0,1,2,6],nor:1,normal:[0,2,6],note:[0,2,6],notimplementederror:[0,5],nov:1,novalu:0,now:[0,1,2,5,6],nullbackend:[0,1],nulllock:1,number:[0,2,6],object:[0,1,2,4,6],object_hook:5,occur:[0,1,6],oct:1,off:2,offer:6,offload:5,often:2,old:[0,1,5],older:[0,2,6],olli:1,omit:0,onc:[0,1,2],one:[0,1,2,4,5,6],ones:[0,5],onli:[0,1,2,5,6],oper:[0,1,2,5,6],optimist:5,option:[0,1,6],order:[0,1,2,5,6],ordinari:0,org:[3,5],organ:1,orient:0,origin:[0,1,6],orm:4,other:[0,1,2,4,5,6],otherwis:[0,1,5,6],our:[2,5,6],out:[1,5],output:[1,2],outsid:[0,2,6],over:0,overid:[0,6],overrid:[0,5,6],overridden:6,overview:4,own:[0,2,4,5],packag:[0,1,2,3],packb:5,page:4,pair:2,param:0,paramet:[0,1,6],paramt:0,parent:[0,6],pars:1,part:[0,1,6],parti:0,particular:[0,1,2,5,6],particularli:6,pass:[0,1,2,5,6],passthrough:0,password:[0,1],past:0,patch:1,path:[0,2,6],pattern:6,paul:1,payload:[0,5,6],per:[0,1,2,6],perform:[0,1,2,5,6],period:[0,2,6],persist:[0,5,6],pickl:[0,1,5,6],pickleabl:0,pileup:1,pip:3,place:[0,1,5,6],plain:[0,1],platform:[0,1],plu:1,pluck:[0,6],pluggabl:1,plugin:[1,4,6],pluginload:1,pluginnotfound:[0,1],point:[0,1,5,6],pool:0,pop:[1,6],popul:[0,6],popular:6,port:0,portalock:0,portion:6,posit:1,possibl:[0,5,6],post:0,potenti:[1,5,6],pre:5,prefix:[0,4,6],present:[0,1,5,6],preserv:[1,5],prevent:[0,1,6],previou:[0,2,4,6],previous:[1,2],primari:2,print:5,prior:0,probabl:5,problem:1,problemat:0,proce:[0,1,2,4],process:[0,1,2,5,6],produc:[0,1,6],product:[1,6],project:[1,4],promptli:[0,6],propag:[0,1],properli:6,properti:0,protect:0,protocol:1,provid:[0,1,2,4,6],proxi:[5,6],proxybackend:[0,1,5,6],publish:3,pull:[0,1,5,6],pullreq:1,pure:0,purpos:[1,2,5],push:[0,5],put:[2,6],py2:1,py3k:1,pylibmc:[0,1,2,5],pylibmcbackend:0,pypi:3,pytest:1,python3:1,python:[0,1,2,3,5,6],queri:[0,5,6],queue:[0,6],rais:[0,1,2,5,6],ralph:1,rather:[0,2,6],raw:5,reach:[0,2,6],read:0,reader:[0,1],readi:[0,6],readwrite_lock:[0,1],readwritemutex:[0,1],real:6,receiv:[0,1,6],recent:3,recip:[1,2,4],recod:5,recogn:[0,1,6],recommend:[0,6],record:5,recreat:[0,6],redi:[1,4,6],redis_expiration_tim:0,redisbackend:[0,1],redundantli:6,reentrant:1,refer:[0,1,2,4],referenc:0,reflect:0,refresh:[0,1,5,6],regardless:[0,6],regen:0,regener:[0,1,2,6],region:[1,4,5],region_invalid:[0,6],regionalreadyconfigur:0,regioninvalidationstrategi:[0,1,6],regionnotconfigur:0,regist:[0,1,6],register_backend:6,registri:[0,5],regress:1,regular:0,rel:[0,6],relat:4,releas:[0,1,3,6],release_read_lock:0,release_write_lock:0,reli:[1,2],relianc:1,remain:[0,1],rememb:[0,6],remot:0,remov:[0,1,2,6],repair:1,replac:[0,1,5,6],replace_existing_backend:[0,1,6],report:[0,3,6],repositori:1,repres:[0,6],request:[0,1,6],requir:[0,1,2,4,6],reserv:2,resolv:[0,6],resourc:[2,4],respect:1,respons:[0,6],restor:1,result:[0,1,5,6],ret:0,retir:1,retri:6,retriev:[0,1,2,6],retrieve_resourc:2,retry_count:6,retry_proxi:6,retrydeleteproxi:6,roll:1,rosebaugh:1,rougher:6,round:2,routin:1,rudimentari:4,run:[0,1,6],runner:[0,1,6],runtim:6,rutherfurd:1,rw_lockfil:0,ryan:1,safe:[0,2,6],same:[0,1,2,6],sasl:0,sat:1,sauerwein:1,sauliu:1,scenario:1,scene:6,scheme:[1,2,5],scope:0,scoped_sess:5,scott:0,search:4,second:[0,1,2,6],section:[0,2,6],see:[0,1,2,6],select:[0,4],self:[0,5,6],semant:1,semaphor:0,send:1,sent:5,sep:1,separ:[0,1,2,6],sequenc:[0,5],seri:5,serial:[0,1,5,6],serializ:6,serv:1,server:[0,2,6],servic:2,session:5,sessionmak:5,set:[0,1,5,6],set_argu:0,set_multi:[0,1,5],setup:[0,1,2,6],setuptool:[1,6],sever:[0,1],sha1:[0,2,6],sha1_mangle_kei:[0,6],share:[1,2,6],sheldon:1,should:[0,3,6],should_cache_fn:[0,1,6],sign:1,signatur:[0,1],similar:[0,1,3,6],simpl:[0,1,2,5,6],simpli:5,simultan:[0,6],sinc:[0,5,6],singl:[0,1,2,4,6],singleton:0,size:[0,5],skip:[0,6],sleep:0,slow_databas:2,small:[1,6],smaller:5,sobrinho:1,socket:0,socket_timeout:[0,1],soft:[0,1],some:[0,1,2,4,5,6],some_creation_funct:2,some_databas:6,some_kei:2,somedatabas:[0,6],somekei:[0,6],somemethod:[0,6],someregion:[0,6],something_new:5,somevalu:6,somewher:0,sourc:[0,1,2,6],space:6,special:1,specif:[0,1,4,6],specifi:[0,1,5,6],sqlalchemi:[1,3,5],stack:0,stale:[0,2,6],standard:0,start:[0,5,6],state:[0,1],statu:3,stegmann:1,step:[0,6],still:[0,1,2,5,6],storag:[1,5,6],store:[0,1,2,5,6],str:[0,1,5,6],strategi:[0,1,2,6],strictredi:[0,1],string:[0,1,6],strongli:0,structur:[0,4,6],stuff:2,subclass:[0,1,6],submit:0,subsequ:[0,1,6],subset:0,subsitut:1,substitut:[0,6],subsystem:4,success:1,successfulli:2,suffix:0,suit:[0,1],suitabl:[0,6],sun:1,supersed:[0,6],suppli:[0,6],support:[0,1,6],suppos:[1,5],sure:[0,6],symbol:[1,2],symlink:2,synchron:[0,2],syncreaderdogpil:1,syntax:1,sys:6,system:[0,1,2,5,6],tag:0,take:[0,1,6],talk:[0,6],target:[0,5,6],task:[0,6],tcp_nodelai:0,techniqu:5,templat:[0,1,5],templatelookup:0,term:[0,6],test:[0,1,6],than:[0,2,5,6],thank:1,the_resourc:2,thei:[0,2,6],them:[0,1,5],therebi:1,therefor:[0,6],thi:[0,1,2,3,4,5,6],thing:[1,6],third:[0,5],those:[0,1,4,5,6],though:[0,1,6],thread:[0,1,2,4,5,6],threadmappedpool:2,threadsaf:[0,2],three:[0,5],threshold:0,throttl:0,through:[2,5],thrown:[0,1],thu:[0,1,2,6],tiger:0,tim:1,time:[0,1,2,6],timedelta:[0,1,6],timeout:[0,1],timestamp:[0,1,6],tmp:2,to_list:1,to_str:[0,1,6],tobia:1,togeth:[0,6],token:[0,6],tool:[0,3,6],top:4,total:0,total_second:1,toward:0,track:[0,2,5],tracker:3,transform:5,translat:5,trip:2,tue:1,tup:2,tupl:[0,2,6],turn:6,tweak:4,twice:2,two:[0,2,4,5,6],type:[0,6],typeerror:1,typic:[0,5,6],ultim:[0,1,2,6],unaffect:1,uncondition:[0,6],unconfigur:1,under:[0,1,5,6],underli:[0,6],underneath:[0,6],understood:0,undesir:0,unencod:5,unicod:[0,1,6],uninstanti:6,uniqu:[0,2,5],unit:1,unix:[0,1,2],unless:[0,2,6],unlik:[0,2],unlimit:0,unnecessari:[0,1],unnecessarili:1,unpackb:5,unsupport:1,until:[0,1,2,4,5,6],updat:4,upon:[0,1,2,6],upstream:0,url:[0,1,5,6],usabl:6,usag:[0,1,4],use:[0,1,2,4,5,6],use_bin_typ:5,used:[0,1,2,5,6],user:[1,2,4,5,6],user_fn_on:5,user_fn_one_:5,user_fn_thre:5,user_fn_three_:5,user_fn_two:5,user_fn_two_:5,user_id:[5,6],user_kei:5,usernam:0,uses:[0,1,2,5,6],using:[0,1,2,5,6],usual:[1,2,6],utf:5,util:[1,4],valid:0,validationerror:0,valu:[0,1,2,5,6],value1:0,value2:0,value3:0,value_and_created_fn:0,value_decod:5,value_encod:5,value_plus_tim:2,value_vers:0,vanasco:1,variabl:1,variant:[0,1,5],varieti:4,variou:[0,2],verbos:6,veri:4,version:[0,2,3,4,6],versu:[0,6],via:[0,1,2,5,6],volum:4,wai:[0,1,5,6],wait:[0,1,6],want:[0,2,5,6],warn:1,was_hard_invalid:0,was_soft_invalid:0,wasn:1,wed:1,week:[0,6],well:[0,1,2,5,6],were:[0,1,6],what:[0,1,2],whatev:[0,6],when:[0,1,2,5,6],whenev:[0,6],where:[0,1,2,6],wherebi:1,whether:[0,1,6],which:[0,1,2,4,5,6],whole:1,whose:0,wichert:1,wide:1,window:[0,1],wish:0,with_stat:1,within:[0,1,5,6],without:[0,2,6],won:[0,2,6],work:[0,1,2,5],worker:6,would:[0,1,5,6],wrap:[0,1,5,6],write:[0,1,6],writer:[0,5,6],written:6,wrong:1,yank:1,yet:[0,1,6],you:[0,2,5,6],your:[0,2,5],zero:1,zip:0,zoomorph:1},titles:["API","Changelog","dogpile Core","Front Matter","Welcome to dogpile.cache\u2019s documentation!","Recipes","Usage Guide"],titleterms:{"null":0,Using:[2,6],all:5,anoth:5,api:[0,2],asynchron:5,backend:[0,6],behavior:6,bug:[1,3],cach:[2,4],chang:6,changelog:1,configur:6,core:[0,2],creat:6,data:5,decod:5,directli:2,distribut:2,document:4,dogpil:[0,2,4],encod:5,event:5,exampl:2,except:0,featur:1,file:[0,2],format:5,front:3,group:5,guid:6,homepag:3,indic:4,instal:3,integr:0,invalid:5,kei:5,learn:2,lock:2,mako:0,matter:3,memcach:0,memori:0,misc:1,need:2,note:5,orm:5,overview:6,plugin:0,prefix:5,project:3,proxi:0,pylibmc:6,recip:5,redi:[0,5],region:[0,6],relat:5,rudimentari:[2,6],tabl:4,updat:5,usag:[2,6],util:0,welcom:4}}) \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/docs/usage.html new/dogpile.cache-0.7.1/docs/usage.html --- old/dogpile.cache-0.6.8/docs/usage.html 2018-11-25 03:24:27.000000000 +0100 +++ new/dogpile.cache-0.7.1/docs/usage.html 2018-12-12 03:33:54.000000000 +0100 @@ -6,7 +6,7 @@ <head> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Usage Guide — dogpile.cache 0.6.8 documentation</title> + <title>Usage Guide — dogpile.cache 0.7.1 documentation</title> <link rel="stylesheet" href="_static/nature_override.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <link rel="stylesheet" type="text/css" href="_static/changelog.css" /> @@ -35,7 +35,7 @@ <li class="right" > <a href="front.html" title="Front Matter" accesskey="P">previous</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.6.8 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.7.1 documentation</a> »</li> </ul> </div> @@ -432,7 +432,7 @@ <dl class="method"> <dt> -<code class="descclassname">CacheRegion.</code><code class="descname">get_or_create</code><span class="sig-paren">(</span><em>key</em>, <em>creator</em>, <em>expiration_time=None</em>, <em>should_cache_fn=None</em><span class="sig-paren">)</span></dt> +<code class="descclassname">CacheRegion.</code><code class="descname">get_or_create</code><span class="sig-paren">(</span><em>key</em>, <em>creator</em>, <em>expiration_time=None</em>, <em>should_cache_fn=None</em>, <em>creator_args=None</em><span class="sig-paren">)</span></dt> <dd><p>Return a cached value based on the given key.</p> <p>If the value does not exist or is considered to be expired based on its creation time, the given @@ -467,6 +467,12 @@ be of any type recognized by the backend or by the key_mangler function, if present.</li> <li><span class="target" id="dogpile.cache.region.CacheRegion.get_or_create.params.creator"></span><strong>creator</strong><a class="paramlink headerlink reference internal" href="#dogpile.cache.region.CacheRegion.get_or_create.params.creator">¶</a> – function which creates a new value.</li> +<li><span class="target" id="dogpile.cache.region.CacheRegion.get_or_create.params.creator_args"></span><strong>creator_args</strong><a class="paramlink headerlink reference internal" href="#dogpile.cache.region.CacheRegion.get_or_create.params.creator_args">¶</a> – <p>optional tuple of (args, kwargs) that will be +passed to the creator function if present.</p> +<div class="versionadded"> +<p><span class="versionmodified">New in version 0.7.0.</span></p> +</div> +</li> <li><span class="target" id="dogpile.cache.region.CacheRegion.get_or_create.params.expiration_time"></span><strong>expiration_time</strong><a class="paramlink headerlink reference internal" href="#dogpile.cache.region.CacheRegion.get_or_create.params.expiration_time">¶</a> – optional expiration time which will overide the expiration time already configured on this <a class="reference internal" href="api.html#dogpile.cache.region.CacheRegion" title="dogpile.cache.region.CacheRegion"><code class="xref py py-class docutils literal notranslate"><span class="pre">CacheRegion</span></code></a> if not None. To set no expiration, use the value -1.</li> @@ -901,7 +907,7 @@ <li class="right" > <a href="front.html" title="Front Matter" >previous</a> |</li> - <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.6.8 documentation</a> »</li> + <li class="nav-item nav-item-0"><a href="index.html">dogpile.cache 0.7.1 documentation</a> »</li> </ul> </div> <div class="footer" role="contentinfo"> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/dogpile/__init__.py new/dogpile.cache-0.7.1/dogpile/__init__.py --- old/dogpile.cache-0.6.8/dogpile/__init__.py 2018-11-25 03:24:16.000000000 +0100 +++ new/dogpile.cache-0.7.1/dogpile/__init__.py 2018-12-12 03:33:43.000000000 +0100 @@ -1,4 +1,4 @@ -__version__ = '0.6.8' +__version__ = '0.7.1' from .lock import Lock # noqa from .lock import NeedRegenerationException # noqa diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/dogpile/cache/region.py new/dogpile.cache-0.7.1/dogpile/cache/region.py --- old/dogpile.cache-0.6.8/dogpile/cache/region.py 2018-11-25 03:24:16.000000000 +0100 +++ new/dogpile.cache-0.7.1/dogpile/cache/region.py 2018-12-12 03:33:43.000000000 +0100 @@ -10,8 +10,9 @@ import time import datetime from numbers import Number -from functools import wraps +from functools import wraps, partial import threading +from decorator import decorate _backend_loader = PluginLoader("dogpile.cache") register_backend = _backend_loader.register @@ -188,7 +189,7 @@ class CacheRegion(object): - """A front end to a particular cache backend. + r"""A front end to a particular cache backend. :param name: Optional, a string name for the region. This isn't used internally @@ -743,7 +744,8 @@ ] def get_or_create( - self, key, creator, expiration_time=None, should_cache_fn=None): + self, key, creator, expiration_time=None, should_cache_fn=None, + creator_args=None): """Return a cached value based on the given key. If the value does not exist or is considered to be expired @@ -779,6 +781,11 @@ :param creator: function which creates a new value. + :param creator_args: optional tuple of (args, kwargs) that will be + passed to the creator function if present. + + .. versionadded:: 0.7.0 + :param expiration_time: optional expiration time which will overide the expiration time already configured on this :class:`.CacheRegion` if not None. To set no expiration, use the value -1. @@ -828,7 +835,10 @@ return value.payload, ct def gen_value(): - created_value = creator() + if creator_args: + created_value = creator(*creator_args[0], **creator_args[1]) + else: + created_value = creator() value = self._value(created_value) if not should_cache_fn or \ @@ -851,8 +861,13 @@ if self.async_creation_runner: def async_creator(mutex): - return self.async_creation_runner( - self, orig_key, creator, mutex) + if creator_args: + @wraps(creator) + def go(): + return creator(*creator_args[0], **creator_args[1]) + else: + go = creator + return self.async_creation_runner(self, orig_key, go, mutex) else: async_creator = None @@ -1248,26 +1263,31 @@ if function_key_generator is None: function_key_generator = self.function_key_generator - def decorator(fn): + def get_or_create_for_user_func(key_generator, user_func, *arg, **kw): + key = key_generator(*arg, **kw) + + timeout = expiration_time() if expiration_time_is_callable \ + else expiration_time + return self.get_or_create(key, user_func, timeout, + should_cache_fn, (arg, kw)) + + def cache_decorator(user_func): if to_str is compat.string_type: # backwards compatible - key_generator = function_key_generator(namespace, fn) + key_generator = function_key_generator(namespace, user_func) else: key_generator = function_key_generator( - namespace, fn, + namespace, user_func, to_str=to_str) - @wraps(fn) - def decorate(*arg, **kw): + def refresh(*arg, **kw): + """ + Like invalidate, but regenerates the value instead + """ key = key_generator(*arg, **kw) - - @wraps(fn) - def creator(): - return fn(*arg, **kw) - timeout = expiration_time() if expiration_time_is_callable \ - else expiration_time - return self.get_or_create(key, creator, timeout, - should_cache_fn) + value = user_func(*arg, **kw) + self.set(key, value) + return value def invalidate(*arg, **kw): key = key_generator(*arg, **kw) @@ -1281,20 +1301,18 @@ key = key_generator(*arg, **kw) return self.get(key) - def refresh(*arg, **kw): - key = key_generator(*arg, **kw) - value = fn(*arg, **kw) - self.set(key, value) - return value + user_func.set = set_ + user_func.invalidate = invalidate + user_func.get = get + user_func.refresh = refresh + user_func.original = user_func - decorate.set = set_ - decorate.invalidate = invalidate - decorate.refresh = refresh - decorate.get = get - decorate.original = fn + # Use `decorate` to preserve the signature of :param:`user_func`. - return decorate - return decorator + return decorate(user_func, partial( + get_or_create_for_user_func, key_generator)) + + return cache_decorator def cache_multi_on_arguments( self, namespace=None, expiration_time=None, @@ -1422,50 +1440,49 @@ if function_multi_key_generator is None: function_multi_key_generator = self.function_multi_key_generator - def decorator(fn): - key_generator = function_multi_key_generator( - namespace, fn, - to_str=to_str) - - @wraps(fn) - def decorate(*arg, **kw): - cache_keys = arg - keys = key_generator(*arg, **kw) - key_lookup = dict(zip(keys, cache_keys)) - - @wraps(fn) - def creator(*keys_to_create): - return fn(*[key_lookup[k] for k in keys_to_create]) - - timeout = expiration_time() if expiration_time_is_callable \ - else expiration_time + def get_or_create_for_user_func(key_generator, user_func, *arg, **kw): + cache_keys = arg + keys = key_generator(*arg, **kw) + key_lookup = dict(zip(keys, cache_keys)) + + @wraps(user_func) + def creator(*keys_to_create): + return user_func(*[key_lookup[k] for k in keys_to_create]) + + timeout = expiration_time() if expiration_time_is_callable \ + else expiration_time + + if asdict: + def dict_create(*keys): + d_values = creator(*keys) + return [ + d_values.get(key_lookup[k], NO_VALUE) + for k in keys] + + def wrap_cache_fn(value): + if value is NO_VALUE: + return False + elif not should_cache_fn: + return True + else: + return should_cache_fn(value) + + result = self.get_or_create_multi( + keys, dict_create, timeout, wrap_cache_fn) + result = dict( + (k, v) for k, v in zip(cache_keys, result) + if v is not NO_VALUE) + else: + result = self.get_or_create_multi( + keys, creator, timeout, + should_cache_fn) - if asdict: - def dict_create(*keys): - d_values = creator(*keys) - return [ - d_values.get(key_lookup[k], NO_VALUE) - for k in keys] - - def wrap_cache_fn(value): - if value is NO_VALUE: - return False - elif not should_cache_fn: - return True - else: - return should_cache_fn(value) - - result = self.get_or_create_multi( - keys, dict_create, timeout, wrap_cache_fn) - result = dict( - (k, v) for k, v in zip(cache_keys, result) - if v is not NO_VALUE) - else: - result = self.get_or_create_multi( - keys, creator, timeout, - should_cache_fn) + return result - return result + def cache_decorator(user_func): + key_generator = function_multi_key_generator( + namespace, user_func, + to_str=to_str) def invalidate(*arg): keys = key_generator(*arg) @@ -1486,7 +1503,7 @@ def refresh(*arg): keys = key_generator(*arg) - values = fn(*arg) + values = user_func(*arg) if asdict: self.set_multi( dict(zip(keys, [values[a] for a in arg])) @@ -1498,13 +1515,18 @@ ) return values - decorate.set = set_ - decorate.invalidate = invalidate - decorate.refresh = refresh - decorate.get = get + user_func.set = set_ + user_func.invalidate = invalidate + user_func.refresh = refresh + user_func.get = get + + # Use `decorate` to preserve the signature of :param:`user_func`. + + return decorate(user_func, partial(get_or_create_for_user_func, key_generator)) + + return cache_decorator + - return decorate - return decorator def make_region(*arg, **kw): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/dogpile/cache/util.py new/dogpile.cache-0.7.1/dogpile/cache/util.py --- old/dogpile.cache-0.6.8/dogpile/cache/util.py 2018-11-25 03:24:16.000000000 +0100 +++ new/dogpile.cache-0.7.1/dogpile/cache/util.py 2018-12-12 03:33:43.000000000 +0100 @@ -1,5 +1,4 @@ from hashlib import sha1 -import inspect from ..util import compat from ..util import langhelpers @@ -28,7 +27,7 @@ else: namespace = '%s:%s|%s' % (fn.__module__, fn.__name__, namespace) - args = inspect.getargspec(fn) + args = compat.inspect_getargspec(fn) has_self = args[0] and args[0][0] in ('self', 'cls') def generate_key(*args, **kw): @@ -50,7 +49,7 @@ else: namespace = '%s:%s|%s' % (fn.__module__, fn.__name__, namespace) - args = inspect.getargspec(fn) + args = compat.inspect_getargspec(fn) has_self = args[0] and args[0][0] in ('self', 'cls') def generate_keys(*args, **kw): @@ -88,7 +87,7 @@ else: namespace = '%s:%s|%s' % (fn.__module__, fn.__name__, namespace) - argspec = inspect.getargspec(fn) + argspec = compat.inspect_getargspec(fn) default_list = list(argspec.defaults or []) # Reverse the list, as we want to compare the argspec by negative index, # meaning default_list[0] should be args[-1], which works well with diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/dogpile/util/compat.py new/dogpile.cache-0.7.1/dogpile/util/compat.py --- old/dogpile.cache-0.6.8/dogpile/util/compat.py 2018-11-25 03:24:16.000000000 +0100 +++ new/dogpile.cache-0.7.1/dogpile/util/compat.py 2018-12-12 03:33:43.000000000 +0100 @@ -1,65 +1,87 @@ -import sys - -py2k = sys.version_info < (3, 0) -py3k = sys.version_info >= (3, 0) -py32 = sys.version_info >= (3, 2) -py27 = sys.version_info >= (2, 7) -jython = sys.platform.startswith('java') -win32 = sys.platform.startswith('win') - -try: - import threading -except ImportError: - import dummy_threading as threading # noqa - - -if py3k: # pragma: no cover - string_types = str, - text_type = str - string_type = str - - if py32: - callable = callable - else: - def callable(fn): - return hasattr(fn, '__call__') - - def u(s): - return s - - def ue(s): - return s - - import configparser - import io - import _thread as thread -else: - string_types = basestring, - text_type = unicode - string_type = str - - def u(s): - return unicode(s, "utf-8") - - def ue(s): - return unicode(s, "unicode_escape") - - import ConfigParser as configparser # noqa - import StringIO as io # noqa - - callable = callable # noqa - import thread # noqa - - -if py3k or jython: - import pickle -else: - import cPickle as pickle # noqa - - -def timedelta_total_seconds(td): - if py27: - return td.total_seconds() - else: - return (td.microseconds + ( - td.seconds + td.days * 24 * 3600) * 1e6) / 1e6 +import sys + +py2k = sys.version_info < (3, 0) +py3k = sys.version_info >= (3, 0) +py32 = sys.version_info >= (3, 2) +py27 = sys.version_info >= (2, 7) +jython = sys.platform.startswith('java') +win32 = sys.platform.startswith('win') + +try: + import threading +except ImportError: + import dummy_threading as threading # noqa + + +if py3k: # pragma: no cover + string_types = str, + text_type = str + string_type = str + + if py32: + callable = callable + else: + def callable(fn): + return hasattr(fn, '__call__') + + def u(s): + return s + + def ue(s): + return s + + import configparser + import io + import _thread as thread +else: + string_types = basestring, + text_type = unicode + string_type = str + + def u(s): + return unicode(s, "utf-8") + + def ue(s): + return unicode(s, "unicode_escape") + + import ConfigParser as configparser # noqa + import StringIO as io # noqa + + callable = callable # noqa + import thread # noqa + + +if py3k: + import collections + ArgSpec = collections.namedtuple( + "ArgSpec", + ["args", "varargs", "keywords", "defaults"]) + + from inspect import getfullargspec as inspect_getfullargspec + + def inspect_getargspec(func): + return ArgSpec( + *inspect_getfullargspec(func)[0:4] + ) +else: + from inspect import getargspec as inspect_getargspec # noqa + +if py3k or jython: + import pickle +else: + import cPickle as pickle # noqa + +if py3k: + def read_config_file(config, fileobj): + return config.read_file(fileobj) +else: + def read_config_file(config, fileobj): + return config.readfp(fileobj) + + +def timedelta_total_seconds(td): + if py27: + return td.total_seconds() + else: + return (td.microseconds + ( + td.seconds + td.days * 24 * 3600) * 1e6) / 1e6 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/dogpile/util/nameregistry.py new/dogpile.cache-0.7.1/dogpile/util/nameregistry.py --- old/dogpile.cache-0.6.8/dogpile/util/nameregistry.py 2018-11-25 03:24:16.000000000 +0100 +++ new/dogpile.cache-0.7.1/dogpile/util/nameregistry.py 2018-12-12 03:33:43.000000000 +0100 @@ -50,7 +50,7 @@ self.creator = creator def get(self, identifier, *args, **kw): - """Get and possibly create the value. + r"""Get and possibly create the value. :param identifier: Hash key for the value. If the creation function is called, this identifier @@ -75,10 +75,12 @@ if identifier in self._values: return self._values[identifier] else: - self._values[identifier] = value = self.creator(identifier, *args, **kw) + self._values[identifier] = value = self.creator( + identifier, *args, **kw) return value except KeyError: - self._values[identifier] = value = self.creator(identifier, *args, **kw) + self._values[identifier] = value = self.creator( + identifier, *args, **kw) return value finally: self._mutex.release() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/dogpile.cache.egg-info/PKG-INFO new/dogpile.cache-0.7.1/dogpile.cache.egg-info/PKG-INFO --- old/dogpile.cache-0.6.8/dogpile.cache.egg-info/PKG-INFO 2018-11-25 03:24:28.000000000 +0100 +++ new/dogpile.cache-0.7.1/dogpile.cache.egg-info/PKG-INFO 2018-12-12 03:33:55.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: dogpile.cache -Version: 0.6.8 +Version: 0.7.1 Summary: A caching front-end based on the Dogpile lock. Home-page: https://github.com/sqlalchemy/dogpile.cache Author: Mike Bayer diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/dogpile.cache.egg-info/SOURCES.txt new/dogpile.cache-0.7.1/dogpile.cache.egg-info/SOURCES.txt --- old/dogpile.cache-0.6.8/dogpile.cache.egg-info/SOURCES.txt 2018-11-25 03:24:28.000000000 +0100 +++ new/dogpile.cache-0.7.1/dogpile.cache.egg-info/SOURCES.txt 2018-12-12 03:33:55.000000000 +0100 @@ -72,6 +72,7 @@ dogpile.cache.egg-info/dependency_links.txt dogpile.cache.egg-info/entry_points.txt dogpile.cache.egg-info/not-zip-safe +dogpile.cache.egg-info/requires.txt dogpile.cache.egg-info/top_level.txt dogpile/cache/__init__.py dogpile/cache/api.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/dogpile.cache.egg-info/requires.txt new/dogpile.cache-0.7.1/dogpile.cache.egg-info/requires.txt --- old/dogpile.cache-0.6.8/dogpile.cache.egg-info/requires.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/dogpile.cache-0.7.1/dogpile.cache.egg-info/requires.txt 2018-12-12 03:33:55.000000000 +0100 @@ -0,0 +1 @@ +decorator diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/setup.cfg new/dogpile.cache-0.7.1/setup.cfg --- old/dogpile.cache-0.6.8/setup.cfg 2018-11-25 03:24:28.000000000 +0100 +++ new/dogpile.cache-0.7.1/setup.cfg 2018-12-12 03:33:55.000000000 +0100 @@ -16,6 +16,8 @@ exclude = docs/* [tool:pytest] -addopts = --tb native -v -r fxX -p no:warnings -p no:logging +addopts = --tb native -v -r fxX -p no:logging python_files = tests/*test_*.py +filterwarnings = + error diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/setup.py new/dogpile.cache-0.7.1/setup.py --- old/dogpile.cache-0.6.8/setup.py 2018-11-25 03:24:16.000000000 +0100 +++ new/dogpile.cache-0.7.1/setup.py 2018-12-12 03:33:43.000000000 +0100 @@ -58,6 +58,7 @@ dogpile.cache = dogpile.cache.plugins.mako_cache:MakoPlugin """, zip_safe=False, + install_requires=['decorator'], tests_require=['pytest', 'pytest-cov', 'mock', 'Mako'], cmdclass={'test': PyTest}, ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/tests/cache/test_decorator.py new/dogpile.cache-0.7.1/tests/cache/test_decorator.py --- old/dogpile.cache-0.6.8/tests/cache/test_decorator.py 2018-11-25 03:24:16.000000000 +0100 +++ new/dogpile.cache-0.7.1/tests/cache/test_decorator.py 2018-12-12 03:33:43.000000000 +0100 @@ -586,3 +586,27 @@ generate.set({7: 18, 10: 15}) eq_(generate(2, 7, 10), ['2 5', 18, 15]) + + def test_cache_preserve_sig(self): + reg = self._region() + + def func(a, b, c=True, *args, **kwargs): + return None + + signature = compat.inspect_getargspec(func) + cached_func = reg.cache_on_arguments()(func) + cached_signature = compat.inspect_getargspec(cached_func) + + self.assertEqual(signature, cached_signature) + + def test_cache_multi_preserve_sig(self): + reg = self._region() + + def func(a, b, c=True, *args, **kwargs): + return None, None + + signature = compat.inspect_getargspec(func) + cached_func = reg.cache_multi_on_arguments()(func) + cached_signature = compat.inspect_getargspec(cached_func) + + self.assertEqual(signature, cached_signature) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/tests/cache/test_region.py new/dogpile.cache-0.7.1/tests/cache/test_region.py --- old/dogpile.cache-0.6.8/tests/cache/test_region.py 2018-11-25 03:24:16.000000000 +0100 +++ new/dogpile.cache-0.7.1/tests/cache/test_region.py 2018-12-12 03:33:43.000000000 +0100 @@ -6,10 +6,12 @@ from dogpile.cache.proxy import ProxyBackend from dogpile.cache.region import _backend_loader from dogpile.cache.region import RegionInvalidationStrategy +from dogpile.util import compat from . import eq_, is_, assert_raises_message, io, configparser import time import datetime import itertools +import mock from collections import defaultdict from ._fixtures import MockBackend @@ -57,7 +59,7 @@ my_region = make_region() config = configparser.ConfigParser() - config.readfp(io.StringIO(my_conf)) + compat.read_config_file(config, io.StringIO(my_conf)) my_region.configure_from_config( dict(config.items('xyz')), 'cache.example.') @@ -527,6 +529,79 @@ return reg +class AsyncCreatorTest(TestCase): + def _fixture(self): + + def async_creation_runner(cache, somekey, creator, mutex): + try: + value = creator() + cache.set(somekey, value) + finally: + mutex.release() + + return mock.Mock(side_effect=async_creation_runner) + + def test_get_or_create(self): + acr = self._fixture() + reg = CacheRegion(async_creation_runner=acr) + reg.configure("mock", expiration_time=.2) + + def some_value(): + return "some value" + + def some_new_value(): + return "some new value" + + eq_(reg.get_or_create("some key", some_value), "some value") + time.sleep(.5) + eq_( + reg.get_or_create("some key", some_new_value), + "some value") + eq_( + reg.get_or_create("some key", some_new_value), + "some new value") + eq_( + acr.mock_calls, [ + mock.call(reg, "some key", + some_new_value, reg._mutex("some key")) + ]) + + def test_fn_decorator(self): + acr = self._fixture() + reg = CacheRegion(async_creation_runner=acr) + reg.configure("mock", expiration_time=5) + + canary = mock.Mock() + + @reg.cache_on_arguments() + def go(x, y): + canary(x, y) + return x + y + + eq_(go(1, 2), 3) + eq_(go(1, 2), 3) + + eq_(canary.mock_calls, [mock.call(1, 2)]) + + eq_(go(3, 4), 7) + + eq_(canary.mock_calls, [mock.call(1, 2), mock.call(3, 4)]) + + reg.invalidate(hard=False) + + eq_(go(1, 2), 3) + + eq_(canary.mock_calls, [ + mock.call(1, 2), mock.call(3, 4), mock.call(1, 2)]) + + eq_( + acr.mock_calls, [ + mock.call(reg, "tests.cache.test_region:go|1 2", + mock.ANY, + reg._mutex("tests.cache.test_region:go|1 2")) + ]) + + class ProxyBackendTest(TestCase): class GetCounterProxy(ProxyBackend): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dogpile.cache-0.6.8/tests/test_lock.py new/dogpile.cache-0.7.1/tests/test_lock.py --- old/dogpile.cache-0.6.8/tests/test_lock.py 2018-11-25 03:24:16.000000000 +0100 +++ new/dogpile.cache-0.7.1/tests/test_lock.py 2018-12-12 03:33:43.000000000 +0100 @@ -304,8 +304,8 @@ with Lock( mutex, creator, value_and_created_fn, expiration_time ) as entered_value: - self.assertEquals("the value", entered_value) + self.assertEqual("the value", entered_value) - self.assertEquals( + self.assertEqual( value_and_created_fn.call_count, 1 )