jp (pubsub/hook): added create/delete/list hook command to handle new Pubsub hook feature
This commit is contained in:
parent
05f0764d2f
commit
73ed5094b9
1 changed files with 99 additions and 1 deletions
|
|
@ -25,11 +25,14 @@ from sat_frontends.jp import common
|
|||
from functools import partial
|
||||
from sat.tools.common import uri
|
||||
from sat_frontends.tools import jid
|
||||
import os.path
|
||||
|
||||
__commands__ = ["Pubsub"]
|
||||
|
||||
PUBSUB_TMP_DIR = u"pubsub"
|
||||
|
||||
# TODO: need to split this class in several modules, plugin should handle subcommands
|
||||
|
||||
|
||||
class NodeInfo(base.CommandBase):
|
||||
|
||||
|
|
@ -448,8 +451,103 @@ class Uri(base.CommandBase):
|
|||
self.display_uri(None)
|
||||
|
||||
|
||||
class HookCreate(base.CommandBase):
|
||||
|
||||
def __init__(self, host):
|
||||
base.CommandBase.__init__(self, host, 'create', use_pubsub_node_req=True, help=_(u'create a Pubsub hook'))
|
||||
self.need_loop=True
|
||||
|
||||
def add_parser_options(self):
|
||||
self.parser.add_argument('-t', '--type', default=u'python', choices=('python', 'python_file', 'python_code'), help=_(u"hook type"))
|
||||
self.parser.add_argument('-P', '--persistent', action='store_true', help=_(u"make hook persistent across restarts"))
|
||||
self.parser.add_argument("hook_arg", type=base.unicode_decoder, help=_(u"argument of the hook (depend of the type)"))
|
||||
|
||||
@staticmethod
|
||||
def checkArgs(self):
|
||||
if self.args.type == u'python_file':
|
||||
self.args.hook_arg = os.path.abspath(self.args.hook_arg)
|
||||
if not os.path.isfile(self.args.hook_arg):
|
||||
self.parser.error(_(u"{path} is not a file").format(path=self.args.hook_arg))
|
||||
|
||||
def start(self):
|
||||
common.checkURI(self.args)
|
||||
self.checkArgs(self)
|
||||
self.host.bridge.psHookAdd(
|
||||
self.args.service,
|
||||
self.args.node,
|
||||
self.args.type,
|
||||
self.args.hook_arg,
|
||||
self.args.persistent,
|
||||
self.profile,
|
||||
callback=self.host.quit,
|
||||
errback=partial(self.errback,
|
||||
msg=_(u"can't create hook: {}"),
|
||||
exit_code=C.EXIT_BRIDGE_ERRBACK))
|
||||
|
||||
|
||||
class HookDelete(base.CommandBase):
|
||||
|
||||
def __init__(self, host):
|
||||
base.CommandBase.__init__(self, host, 'delete', use_pubsub_node_req=True, help=_(u'delete a Pubsub hook'))
|
||||
self.need_loop=True
|
||||
|
||||
def add_parser_options(self):
|
||||
self.parser.add_argument('-t', '--type', default=u'', choices=('', 'python', 'python_file', 'python_code'), help=_(u"hook type to remove, empty to remove all (DEFAULT: remove all)"))
|
||||
self.parser.add_argument('-a', '--arg', dest='hook_arg', type=base.unicode_decoder, default=u'', help=_(u"argument of the hook to remove, empty to remove all (DEFAULT: remove all)"))
|
||||
|
||||
def psHookRemoveCb(self, nb_deleted):
|
||||
self.disp(_(u'{nb_deleted} hook(s) have been deleted').format(
|
||||
nb_deleted = nb_deleted))
|
||||
self.host.quit()
|
||||
|
||||
def start(self):
|
||||
common.checkURI(self.args)
|
||||
HookCreate.checkArgs(self)
|
||||
self.host.bridge.psHookRemove(
|
||||
self.args.service,
|
||||
self.args.node,
|
||||
self.args.type,
|
||||
self.args.hook_arg,
|
||||
self.profile,
|
||||
callback=self.psHookRemoveCb,
|
||||
errback=partial(self.errback,
|
||||
msg=_(u"can't delete hook: {}"),
|
||||
exit_code=C.EXIT_BRIDGE_ERRBACK))
|
||||
|
||||
|
||||
class HookList(base.CommandBase):
|
||||
|
||||
def __init__(self, host):
|
||||
base.CommandBase.__init__(self, host, 'list', use_output=C.OUTPUT_LIST_DICT, help=_(u'list hooks of a profile'))
|
||||
self.need_loop = True
|
||||
|
||||
def add_parser_options(self):
|
||||
pass
|
||||
|
||||
def psHookListCb(self, data):
|
||||
if not data:
|
||||
self.disp(_(u'No hook found.'))
|
||||
self.output(data)
|
||||
self.host.quit()
|
||||
|
||||
def start(self):
|
||||
self.host.bridge.psHookList(
|
||||
self.profile,
|
||||
callback=self.psHookListCb,
|
||||
errback=partial(self.errback,
|
||||
msg=_(u"can't list hooks: {}"),
|
||||
exit_code=C.EXIT_BRIDGE_ERRBACK))
|
||||
|
||||
|
||||
class Hook(base.CommandBase):
|
||||
subcommands = (HookCreate, HookDelete, HookList)
|
||||
|
||||
def __init__(self, host):
|
||||
super(Hook, self).__init__(host, 'hook', use_profile=False, help=_('trigger action on Pubsub notifications'))
|
||||
|
||||
|
||||
class Pubsub(base.CommandBase):
|
||||
subcommands = (Get, Delete, Edit, Node, Affiliations, Uri)
|
||||
subcommands = (Get, Delete, Edit, Node, Affiliations, Hook, Uri)
|
||||
|
||||
def __init__(self, host):
|
||||
super(Pubsub, self).__init__(host, 'pubsub', use_profile=False, help=_('PubSub nodes/items management'))
|
||||
|
|
|
|||
Loading…
Reference in a new issue