From d4a934ac72fa1e06db5a108c2dc81044327cb58b Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Thu, 7 Jun 2012 21:55:48 -0400 Subject: - compat.py needs to be in dogpile.cache - we're a namespace package ! - don't import compat's into util if we're going to have compat, keep it clean - fix imports of new compat module --- dogpile/cache/api.py | 2 +- dogpile/cache/backends/file.py | 9 +++++---- dogpile/cache/backends/memcached.py | 3 ++- dogpile/cache/backends/redis.py | 2 +- dogpile/cache/compat.py | 30 ++++++++++++++++++++++++++++++ dogpile/cache/util.py | 16 +++++----------- dogpile/compat.py | 24 ------------------------ setup.cfg | 6 +++++- tests/cache/__init__.py | 2 +- 9 files changed, 50 insertions(+), 44 deletions(-) create mode 100644 dogpile/cache/compat.py delete mode 100644 dogpile/compat.py diff --git a/dogpile/cache/api.py b/dogpile/cache/api.py index ea28c42..b8e04c3 100644 --- a/dogpile/cache/api.py +++ b/dogpile/cache/api.py @@ -1,5 +1,5 @@ import operator -from dogpile.compat import py3k +from .compat import py3k class NoValue(object): diff --git a/dogpile/cache/backends/file.py b/dogpile/cache/backends/file.py index 734276e..37e7301 100644 --- a/dogpile/cache/backends/file.py +++ b/dogpile/cache/backends/file.py @@ -8,6 +8,7 @@ Provides backends that deal with local filesystem access. from dogpile.cache.api import CacheBackend, NO_VALUE from contextlib import contextmanager +from dogpile.cache import compat from dogpile.cache import util import os import fcntl @@ -97,7 +98,7 @@ class DBMBackend(CacheBackend): util.KeyReentrantMutex.factory) # TODO: make this configurable - if util.py3k: + if compat.py3k: import dbm else: import anydbm as dbm @@ -165,12 +166,12 @@ class DBMBackend(CacheBackend): with self._dbm_file(False) as dbm: value = dbm.get(key, NO_VALUE) if value is not NO_VALUE: - value = util.pickle.loads(value) + value = compat.pickle.loads(value) return value def set(self, key, value): with self._dbm_file(True) as dbm: - dbm[key] = util.pickle.dumps(value) + dbm[key] = compat.pickle.dumps(value) def delete(self, key): with self._dbm_file(True) as dbm: @@ -188,7 +189,7 @@ class FileLock(object): """ def __init__(self, filename): - self._filedescriptor = util.threading.local() + self._filedescriptor = compat.threading.local() self.filename = filename def acquire(self, wait=True): diff --git a/dogpile/cache/backends/memcached.py b/dogpile/cache/backends/memcached.py index 51dfdcc..2c9f108 100644 --- a/dogpile/cache/backends/memcached.py +++ b/dogpile/cache/backends/memcached.py @@ -7,6 +7,7 @@ Provides backends for talking to `memcached `_. """ from dogpile.cache.api import CacheBackend, NO_VALUE +from dogpile.cache import compat from dogpile.cache import util import random import time @@ -117,7 +118,7 @@ class GenericMemcachedBackend(CacheBackend): @util.memoized_property def _clients(self): backend = self - class ClientPool(util.threading.local): + class ClientPool(compat.threading.local): def __init__(self): self.memcached = backend._create_client() diff --git a/dogpile/cache/backends/redis.py b/dogpile/cache/backends/redis.py index fbb60ab..d0aa5e6 100644 --- a/dogpile/cache/backends/redis.py +++ b/dogpile/cache/backends/redis.py @@ -8,7 +8,7 @@ Provides backends for talking to `Redis `_. from __future__ import absolute_import from dogpile.cache.api import CacheBackend, NO_VALUE -from dogpile.cache.util import pickle +from dogpile.cache.compat import pickle import random import time diff --git a/dogpile/cache/compat.py b/dogpile/cache/compat.py new file mode 100644 index 0000000..622c86b --- /dev/null +++ b/dogpile/cache/compat.py @@ -0,0 +1,30 @@ +import sys + + +py3k = sys.version_info >= (3, 0) +jython = sys.platform.startswith('java') + + +try: + import threading +except ImportError: + import dummy_threading as threading + + +if py3k: # pragma: no cover + string_types = str, + text_type = str + + import configparser + import io +else: + string_types = basestring, + text_type = unicode + + import ConfigParser as configparser + import StringIO as io + +if py3k or jython: + import pickle +else: + import cPickle as pickle \ No newline at end of file diff --git a/dogpile/cache/util.py b/dogpile/cache/util.py index ed2d515..8515825 100644 --- a/dogpile/cache/util.py +++ b/dogpile/cache/util.py @@ -3,19 +3,13 @@ import inspect import sys import re import collections -from dogpile.compat import string_types, text_type, pickle - - -try: - import threading -except ImportError: - import dummy_threading as threading +from . import compat def coerce_string_conf(d): result = {} for k, v in d.items(): - if not isinstance(v, string_types): + if not isinstance(v, compat.string_types): result[k] = v continue @@ -86,7 +80,7 @@ def function_key_generator(namespace, fn): "function does not accept keyword arguments.") if has_self: args = args[1:] - return namespace + "|" + " ".join(map(text_type, args)) + return namespace + "|" + " ".join(map(compat.text_type, args)) return generate_key def sha1_mangle_key(key): @@ -147,7 +141,7 @@ class KeyReentrantMutex(object): return fac def acquire(self, wait=True): - current_thread = threading.current_thread().ident + current_thread = compat.threading.current_thread().ident keys = self.keys.get(current_thread) if keys is not None and \ self.key not in keys: @@ -162,7 +156,7 @@ class KeyReentrantMutex(object): return False def release(self): - current_thread = threading.current_thread().ident + current_thread = compat.threading.current_thread().ident keys = self.keys.get(current_thread) assert keys is not None, "this thread didn't do the acquire" assert self.key in keys, "No acquire held for key '%s'" % self.key diff --git a/dogpile/compat.py b/dogpile/compat.py deleted file mode 100644 index 628f4a1..0000000 --- a/dogpile/compat.py +++ /dev/null @@ -1,24 +0,0 @@ -import sys - - -py3k = sys.version_info >= (3, 0) -jython = sys.platform.startswith('java') - - -if py3k: # pragma: no cover - string_types = str, - text_type = str - - import configparser - import io -else: - string_types = basestring, - text_type = unicode - - import ConfigParser as configparser - import StringIO as io - -if py3k or jython: - import pickle -else: - import cPickle as pickle \ No newline at end of file diff --git a/setup.cfg b/setup.cfg index 62befee..1c476ff 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,10 @@ [egg_info] -tag_build = dev [upload_docs] upload-dir = docs/build/output/html + +[nosetests] +cover-package = dogpile.cache +with-coverage = 1 +cover-erase = 1 \ No newline at end of file diff --git a/tests/cache/__init__.py b/tests/cache/__init__.py index 2613f08..7ec9a07 100644 --- a/tests/cache/__init__.py +++ b/tests/cache/__init__.py @@ -16,4 +16,4 @@ def assert_raises_message(except_cls, msg, callable_, *args, **kwargs): except except_cls as e: assert re.search(msg, str(e)), "%r !~ %s" % (msg, e) -from dogpile.compat import configparser, io +from dogpile.cache.compat import configparser, io -- cgit v1.2.1