|
@@ -1,69 +0,0 @@
|
|
|
-"""copied from django 4.0 before removal
|
|
|
-
|
|
|
-modified to fix bug with monkeypatching and remove warnings
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
-Copyright (c) Django Software Foundation and individual contributors.
|
|
|
-All rights reserved.
|
|
|
-
|
|
|
-Redistribution and use in source and binary forms, with or without modification,
|
|
|
-are permitted provided that the following conditions are met:
|
|
|
-
|
|
|
- 1. Redistributions of source code must retain the above copyright notice,
|
|
|
- this list of conditions and the following disclaimer.
|
|
|
-
|
|
|
- 2. Redistributions in binary form must reproduce the above copyright
|
|
|
- notice, this list of conditions and the following disclaimer in the
|
|
|
- documentation and/or other materials provided with the distribution.
|
|
|
-
|
|
|
- 3. Neither the name of Django nor the names of its contributors may be used
|
|
|
- to endorse or promote products derived from this software without
|
|
|
- specific prior written permission.
|
|
|
-
|
|
|
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
|
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
|
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
|
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
|
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
|
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
|
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
|
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
|
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
-"""
|
|
|
-import pickle
|
|
|
-
|
|
|
-from django.core.cache.backends.memcached import BaseMemcachedCache
|
|
|
-
|
|
|
-
|
|
|
-class MemcachedCache(BaseMemcachedCache):
|
|
|
- "An implementation of a cache binding using python-memcached"
|
|
|
-
|
|
|
- # python-memcached doesn't support default values in get().
|
|
|
- # https://github.com/linsomniac/python-memcached/issues/159
|
|
|
- _missing_key = None
|
|
|
-
|
|
|
- def __init__(self, server, params):
|
|
|
- # python-memcached ≥ 1.45 returns None for a nonexistent key in
|
|
|
- # incr/decr(), python-memcached < 1.45 raises ValueError.
|
|
|
- import memcache
|
|
|
-
|
|
|
- super().__init__(server, params, library=memcache, value_not_found_exception=ValueError)
|
|
|
- self._options = {"pickleProtocol": pickle.HIGHEST_PROTOCOL, **self._options} # type: ignore[has-type]
|
|
|
-
|
|
|
- def get(self, key, default=None, version=None):
|
|
|
- key = self.make_key(key, version=version)
|
|
|
- self.validate_key(key)
|
|
|
- val = self._cache.get(key) # type: ignore[attr-defined]
|
|
|
- # python-memcached doesn't support default values in get().
|
|
|
- # https://github.com/linsomniac/python-memcached/issues/159
|
|
|
- # Remove this method if that issue is fixed.
|
|
|
- if val is None:
|
|
|
- return default
|
|
|
- return val
|
|
|
-
|
|
|
- def delete(self, key, version=None):
|
|
|
- key = self.make_key(key, version=version)
|
|
|
- self.validate_key(key)
|
|
|
- return bool(self._cache.delete(key)) # type: ignore[attr-defined]
|