diff options
author | Jason Gerard DeRose <jderose@redhat.com> | 2009-05-13 01:04:35 -0600 |
---|---|---|
committer | Jason Gerard DeRose <jderose@redhat.com> | 2009-05-19 13:49:15 -0600 |
commit | 4f9224774f7ec7c1c8ed4fedef2f2b62390064d2 (patch) | |
tree | 40dada32e1083c94eff71c31046d13e51399f485 /ipalib/parameters.py | |
parent | 86472a94eeb166a0d1379834e91995809a7ddf7e (diff) | |
download | freeipa-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.py | 52 |
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. |