summaryrefslogtreecommitdiff
path: root/scss
diff options
context:
space:
mode:
authorGerman M. Bravo <german.mb@deipi.com>2014-10-15 14:49:00 -0500
committerGerman M. Bravo <german.mb@deipi.com>2014-10-15 15:04:33 -0500
commit4f69796b6cd6650f8090329e705275221fabf14c (patch)
treed94a19e8187c682f3a60d3ffe63cc0a14489115c /scss
parent12dfddf00fd75f1ad545e8e7b4dbbff5f536a238 (diff)
downloadpyscss-4f69796b6cd6650f8090329e705275221fabf14c.tar.gz
Added simple local memory Cache class for using in extensions
Diffstat (limited to 'scss')
-rw-r--r--scss/extension/__init__.py3
-rw-r--r--scss/extension/api.py41
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.