diff options
author | German M. Bravo <german.mb@deipi.com> | 2014-10-15 14:49:00 -0500 |
---|---|---|
committer | German M. Bravo <german.mb@deipi.com> | 2014-10-15 15:04:33 -0500 |
commit | 4f69796b6cd6650f8090329e705275221fabf14c (patch) | |
tree | d94a19e8187c682f3a60d3ffe63cc0a14489115c | |
parent | 12dfddf00fd75f1ad545e8e7b4dbbff5f536a238 (diff) | |
download | pyscss-4f69796b6cd6650f8090329e705275221fabf14c.tar.gz |
Added simple local memory Cache class for using in extensions
-rw-r--r-- | scss/extension/__init__.py | 3 | ||||
-rw-r--r-- | scss/extension/api.py | 41 |
2 files changed, 43 insertions, 1 deletions
diff --git a/scss/extension/__init__.py b/scss/extension/__init__.py index 56e66ef..ff61aa4 100644 --- a/scss/extension/__init__.py +++ b/scss/extension/__init__.py @@ -6,8 +6,9 @@ from __future__ import division from __future__ import print_function # Re-export +from .api import Cache from .api import Extension from .api import NamespaceAdapterExtension -__all__ = ['Extension', 'NamespaceAdapterExtension'] +__all__ = ['Cache', 'Extension', 'NamespaceAdapterExtension'] diff --git a/scss/extension/api.py b/scss/extension/api.py index b3ccd1f..46d3b93 100644 --- a/scss/extension/api.py +++ b/scss/extension/api.py @@ -4,6 +4,47 @@ from __future__ import division from __future__ import print_function +_no_default = object() + + +class Cache(object): + """Serves as a local memory cache storage for extensions usage. + """ + _cache = {} + + def __init__(self, prefix=None): + self.prefix = prefix + + def get(self, key, default=None): + try: + return self.__class__._cache[self.prefix][key] + except KeyError: + if default is _no_default: + raise + return default + + def set(self, key, value): + self.__class__._cache.setdefault(self.prefix, {})[key] = value + + def clear_cache(self, key=None): + if key: + try: + del self.__class__._cache[self.prefix][key] + except KeyError: + pass + else: + self.__class__._cache.clear() + + def __getitem__(self, key): + return self.get(key, _no_default) + + def __setitem__(self, key, value): + return self.set(key, value) + + def __delitem__(self, key): + self.clear_cache(key) + + class Extension(object): """An extension to the Sass compile process. Subclass to add your own behavior. |