summaryrefslogtreecommitdiffstats
path: root/ipalib/parameters.py
diff options
context:
space:
mode:
authorJason Gerard DeRose <jderose@redhat.com>2009-05-13 01:04:35 -0600
committerJason Gerard DeRose <jderose@redhat.com>2009-05-19 13:49:15 -0600
commit4f9224774f7ec7c1c8ed4fedef2f2b62390064d2 (patch)
tree40dada32e1083c94eff71c31046d13e51399f485 /ipalib/parameters.py
parent86472a94eeb166a0d1379834e91995809a7ddf7e (diff)
downloadfreeipa-4f9224774f7ec7c1c8ed4fedef2f2b62390064d2.tar.gz
freeipa-4f9224774f7ec7c1c8ed4fedef2f2b62390064d2.tar.xz
freeipa-4f9224774f7ec7c1c8ed4fedef2f2b62390064d2.zip
Added Param 'include' and 'exclude' kwargs; added frontend.UsesParams base class with methods implementing the filtering to restrict params to only certain contexts
Diffstat (limited to 'ipalib/parameters.py')
-rw-r--r--ipalib/parameters.py52
1 files changed, 48 insertions, 4 deletions
diff --git a/ipalib/parameters.py b/ipalib/parameters.py
index 13fd50b59..0c2748ee5 100644
--- a/ipalib/parameters.py
+++ b/ipalib/parameters.py
@@ -232,7 +232,8 @@ class Param(ReadOnly):
('autofill', bool, False),
('query', bool, False),
('attribute', bool, False),
- ('limit_to', frozenset, None),
+ ('include', frozenset, None),
+ ('exclude', frozenset, None),
('flags', frozenset, frozenset()),
# The 'default' kwarg gets appended in Param.__init__():
@@ -328,6 +329,16 @@ class Param(ReadOnly):
else:
self._get_default = None
+ # Check that only 'include' or 'exclude' was provided:
+ if None not in (self.include, self.exclude):
+ raise ValueError(
+ '%s: cannot have both %s=%r and %s=%r' % (
+ self.nice,
+ 'include', self.include,
+ 'exclude', self.exclude,
+ )
+ )
+
# Check that all the rules are callable
self.class_rules = tuple(class_rules)
self.rules = rules
@@ -345,12 +356,18 @@ class Param(ReadOnly):
"""
Return an expresion that could construct this `Param` instance.
"""
- return make_repr(
+ return '%s(%s)' % (
self.__class__.__name__,
- self.param_spec,
- **self.__kw
+ ', '.join(self.__repr_iter())
)
+ def __repr_iter(self):
+ yield repr(self.param_spec)
+ for rule in self.rules:
+ yield rule.__name__
+ for key in sorted(self.__kw):
+ yield '%s=%r' % (key, self.__kw[key])
+
def __call__(self, value, **kw):
"""
One stop shopping.
@@ -362,6 +379,33 @@ class Param(ReadOnly):
self.validate(value)
return value
+ def use_in_context(self, env):
+ """
+ Return ``True`` if this param should be used in ``env.context``.
+
+ For example:
+
+ >>> from ipalib.config import Env
+ >>> server = Env()
+ >>> server.context = 'server'
+ >>> client = Env()
+ >>> client.context = 'client'
+ >>> param = Param('my_param', include=['server', 'webui'])
+ >>> param.use_in_context(server)
+ True
+ >>> param.use_in_context(client)
+ False
+
+ So that a subclass can add additional logic basic on other environment
+ variables, the `config.Env` instance is passed in rather than just the
+ value of ``env.context``.
+ """
+ if self.include is not None:
+ return (env.context in self.include)
+ if self.exclude is not None:
+ return (env.context not in self.exclude)
+ return True
+
def safe_value(self, value):
"""
Return a value safe for logging.