diff options
Diffstat (limited to 'paste/webkit/FakeWebware/MiscUtils/ParamFactory.py')
| -rw-r--r-- | paste/webkit/FakeWebware/MiscUtils/ParamFactory.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/paste/webkit/FakeWebware/MiscUtils/ParamFactory.py b/paste/webkit/FakeWebware/MiscUtils/ParamFactory.py new file mode 100644 index 0000000..4b3f2f3 --- /dev/null +++ b/paste/webkit/FakeWebware/MiscUtils/ParamFactory.py @@ -0,0 +1,22 @@ +from threading import Lock + +class ParamFactory: + def __init__(self, klass, **extraMethods): + self.lock = Lock() + self.cache = {} + self.klass = klass + for name, func in extraMethods.items(): + setattr(self, name, func) + def __call__(self, *args): + self.lock.acquire() + if not self.cache.has_key(args): + value = self.klass(*args) + self.cache[args] = value + self.lock.release() + return value + else: + self.lock.release() + return self.cache[args] + def allInstances(self): + return self.cache.values() + |
