Author: gjm
Date: Mon Sep 30 19:38:07 2013
New Revision: 1527743
URL: http://svn.apache.org/r1527743
Log:
adding a decorator to allow ProductEnvironment creation using a
ProductEnvironment in place of it's parent - towards #676
Modified:
bloodhound/trunk/bloodhound_multiproduct/multiproduct/env.py
Modified: bloodhound/trunk/bloodhound_multiproduct/multiproduct/env.py
URL:
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_multiproduct/multiproduct/env.py?rev=1527743&r1=1527742&r2=1527743&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_multiproduct/multiproduct/env.py (original)
+++ bloodhound/trunk/bloodhound_multiproduct/multiproduct/env.py Mon Sep 30
19:38:07 2013
@@ -362,6 +362,15 @@ class ProductEnvironment(Component, Comp
class __metaclass__(ComponentMeta):
+ def select_global_env(f):
+ """Replaces env with env.parent where appropriate"""
+ # Keep the signature of __call__ method
+ def __call__(self, env, *args, **kwargs):
+ g_env = env.parent if isinstance(env,
+ ProductEnvironment) else env
+ return f(self, g_env, *args, **kwargs)
+ return __call__
+
def product_env_keymap(args, kwds, kwd_mark):
# Remove meta-reference to self (i.e. product env class)
args = args[1:]
@@ -377,14 +386,15 @@ class ProductEnvironment(Component, Comp
kwds['product'] = product.prefix
return default_keymap(args, kwds, kwd_mark)
+ @select_global_env
@lru_cache(maxsize=100, keymap=product_env_keymap)
def __call__(self, *args, **kwargs):
- """Return an existing instance of there is a hit
+ """Return an existing instance if there is a hit
in the global LRU cache, otherwise create a new instance.
"""
return ComponentMeta.__call__(self, *args, **kwargs)
- del product_env_keymap
+ del product_env_keymap, select_global_env
implements(trac.env.ISystemInfoProvider, IPermissionRequestor)