diff options
author | Jason Gerard DeRose <jderose@redhat.com> | 2008-11-14 21:29:46 -0700 |
---|---|---|
committer | Jason Gerard DeRose <jderose@redhat.com> | 2008-11-14 21:29:46 -0700 |
commit | 36737c2d913716eb99aece5cc1f6a21234abe46a (patch) | |
tree | f33cdc01d6580f373bc68445d46d866e84c973a9 /ipalib/frontend.py | |
parent | 3433840692d294d8c16bd775cfea225b86b4d9e1 (diff) | |
download | freeipa-36737c2d913716eb99aece5cc1f6a21234abe46a.tar.gz freeipa-36737c2d913716eb99aece5cc1f6a21234abe46a.tar.xz freeipa-36737c2d913716eb99aece5cc1f6a21234abe46a.zip |
Added frontend.LocalOrRemote command base class for commands like env
Diffstat (limited to 'ipalib/frontend.py')
-rw-r--r-- | ipalib/frontend.py | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/ipalib/frontend.py b/ipalib/frontend.py index 3e04db519..446384a3a 100644 --- a/ipalib/frontend.py +++ b/ipalib/frontend.py @@ -782,6 +782,37 @@ class Command(plugable.Plugin): yield arg +class LocalOrRemote(Command): + """ + A command that is explicitly executed locally or remotely. + + This is for commands that makes sense to execute either locally or + remotely to return a perhaps different result. The best example of + this is the `ipalib.plugins.f_misc.env` plugin which returns the + key/value pairs describing the configuration state: it can be + """ + + takes_options = ( + Param('server', type=ipa_types.Bool(), default=False, + doc='Forward to server instead of running locally', + ), + ) + + def run(self, *args, **options): + """ + Dispatch to forward() or execute() based on ``server`` option. + + When running in a client context, this command is executed remotely if + ``options['server']`` is true; otherwise it is executed locally. + + When running in a server context, this command is always executed + locally and the value of ``options['server']`` is ignored. + """ + if options['server'] and not self.env.in_server: + return self.forward(*args, **options) + return self.execute(*args, **options) + + class Object(plugable.Plugin): __public__ = frozenset(( 'backend', |