jp (pubsub/node): added create and delete commands

This commit is contained in:
Goffi 2017-04-03 00:23:01 +02:00
commit 55b6199997
2 changed files with 107 additions and 18 deletions

View file

@ -65,8 +65,8 @@ class ProfileDelete(base.CommandBase):
if self.args.profile not in self.host.bridge.profilesListGet():
log.error("Profile %s doesn't exist." % self.args.profile)
self.host.quit(1)
message = u"Are you sure to delete profile [{}] ?".format(self.args.profile)
if not self.args.force:
message = u"Are you sure to delete profile [{}] ?".format(self.args.profile)
res = raw_input("{} (y/N)? ".format(message))
if res not in ("y", "Y"):
self.disp(_(u"Profile deletion cancelled"))

View file

@ -21,11 +21,27 @@
import base
from sat.core.i18n import _
from sat_frontends.jp.constants import Const as C
from functools import partial
__commands__ = ["Pubsub"]
class NodeInfo(base.CommandBase):
class NodeCommon(object):
node_required = True
def __init__(self, node_required=True):
self.node_required = node_required
def add_parser_options(self):
self.parser.add_argument("-s", "--service", type=base.unicode_decoder, default=u'',
help=_(u"JID of the PubSub service (default: PEP service)"))
if self.node_required:
self.parser.add_argument("node", type=base.unicode_decoder, help=_(u"node to request"))
else:
self.parser.add_argument("-n", "--node", type=base.unicode_decoder, default=u'', help=_(u"node to request"))
class NodeInfo(base.CommandBase, NodeCommon):
def __init__(self, host):
base.CommandBase.__init__(self, host, 'info', use_output=C.OUTPUT_DICT, help=_(u'retrieve node configuration'))
@ -34,9 +50,7 @@ class NodeInfo(base.CommandBase):
def add_parser_options(self):
self.parser.add_argument("-k", "--key", type=base.unicode_decoder, action='append', dest='keys',
help=_(u"data key to filter"))
self.parser.add_argument("node", type=base.unicode_decoder, help=_(u"node to request"))
self.parser.add_argument("service", type=base.unicode_decoder, nargs='?', default=u'',
help=_(u"JID of the PubSub service (default: request profile own pubsub)"))
NodeCommon.add_parser_options(self)
def removePrefix(self, key):
return key[7:] if key.startswith(u"pubsub#") else key
@ -63,7 +77,88 @@ class NodeInfo(base.CommandBase):
callback=self.psNodeConfigurationGetCb,
errback=self.psNodeConfigurationGetEb)
class NodeSet(base.CommandBase):
class NodeCreate(base.CommandBase, NodeCommon):
def __init__(self, host):
NodeCommon.__init__(self, node_required=False)
base.CommandBase.__init__(self, host, 'create', use_output=C.OUTPUT_DICT, use_verbose=True, help=_(u'create a node'))
self.need_loop=True
def add_parser_options(self):
self.parser.add_argument("-f", "--field", type=base.unicode_decoder, action='append', nargs=2, dest='fields',
required=True, metavar=(u"KEY", u"VALUE"), help=_(u"configuration field to set (required)"))
self.parser.add_argument("-F", "--full-prefix", action="store_true", help=_(u"don't prepend \"pubsub#\" prefix to field names"))
NodeCommon.add_parser_options(self)
def psNodeCreateCb(self, node_id):
if self.host.verbosity:
announce = _(u'node created successfully: ')
else:
announce = u''
self.disp(announce + node_id)
self.host.quit()
def psNodeCreateEb(self, failure_):
self.disp(u"can't create: {reason}".format(
reason=failure_), error=True)
self.host.quit(C.EXIT_BRIDGE_ERRBACK)
def start(self):
if not self.args.full_prefix:
options = {u'pubsub#' + k: v for k,v in self.args.fields}
else:
options = dict(self.args.fields)
self.host.bridge.psNodeCreate(
self.args.service,
self.args.node,
options,
self.profile,
callback=self.psNodeCreateCb,
errback=partial(self.errback,
msg=_(u"can't create node: {}"),
exit_code=C.EXIT_BRIDGE_ERRBACK))
class NodeDelete(base.CommandBase, NodeCommon):
def __init__(self, host):
base.CommandBase.__init__(self, host, 'delete', help=_(u'delete a node'))
self.need_loop=True
def add_parser_options(self):
self.parser.add_argument('-f', '--force', action='store_true', help=_(u'delete node without confirmation'))
NodeCommon.add_parser_options(self)
def psNodeDeleteCb(self):
self.disp(_(u'node deleted successfully'))
self.host.quit()
def start(self):
if not self.args.force:
if not self.args.service:
message = _(u"Are you sure to delete pep node [{node_id}] ?").format(
node_id=self.args.node)
else:
message = _(u"Are you sure to delete node [{node_id}] on service [{service}] ?").format(
node_id=self.args.node, service=self.args.service)
res = raw_input("{} (y/N)? ".format(message))
if res not in ("y", "Y"):
self.disp(_(u"node deletion cancelled"))
self.host.quit(2)
self.host.bridge.psNodeDelete(
self.args.service,
self.args.node,
self.profile,
callback=self.psNodeDeleteCb,
errback=partial(self.errback,
msg=_(u"can't delete node: {}"),
exit_code=C.EXIT_BRIDGE_ERRBACK))
class NodeSet(base.CommandBase, NodeCommon):
def __init__(self, host):
base.CommandBase.__init__(self, host, 'set', use_output=C.OUTPUT_DICT, use_verbose=True, help=_(u'set node configuration'))
@ -72,9 +167,7 @@ class NodeSet(base.CommandBase):
def add_parser_options(self):
self.parser.add_argument("-f", "--field", type=base.unicode_decoder, action='append', nargs=2, dest='fields',
required=True, metavar=(u"KEY", u"VALUE"), help=_(u"configuration field to set (required)"))
self.parser.add_argument("node", type=base.unicode_decoder, help=_(u"node to request"))
self.parser.add_argument("service", type=base.unicode_decoder, nargs='?', default=u'',
help=_(u"JID of the PubSub service (default: request profile own pubsub)"))
NodeCommon.add_parser_options(self)
def psNodeConfigurationSetCb(self):
self.disp(_(u'node configuration successful'), 1)
@ -101,16 +194,14 @@ class NodeSet(base.CommandBase):
errback=self.psNodeConfigurationSetEb)
class NodeAffiliationsGet(base.CommandBase):
class NodeAffiliationsGet(base.CommandBase, NodeCommon):
def __init__(self, host):
base.CommandBase.__init__(self, host, 'get', use_output=C.OUTPUT_DICT, help=_(u'retrieve node affiliations (for node owner)'))
self.need_loop=True
def add_parser_options(self):
self.parser.add_argument("-s", "--service", type=base.unicode_decoder, default=u'',
help=_(u"JID of the PubSub service (default: request profile own pubsub)"))
self.parser.add_argument("node", type=base.unicode_decoder, help=_(u"node to request"))
NodeCommon.add_parser_options(self)
def psNodeAffiliationsGetCb(self, affiliations):
self.output(affiliations)
@ -130,16 +221,14 @@ class NodeAffiliationsGet(base.CommandBase):
errback=self.psNodeAffiliationsGetEb)
class NodeAffiliationsSet(base.CommandBase):
class NodeAffiliationsSet(base.CommandBase, NodeCommon):
def __init__(self, host):
base.CommandBase.__init__(self, host, 'set', use_verbose=True, help=_(u'set affiliations (for node owner)'))
self.need_loop=True
def add_parser_options(self):
self.parser.add_argument("-s", "--service", type=base.unicode_decoder, default=u'',
help=_(u"JID of the PubSub service (default: request profile own pubsub)"))
self.parser.add_argument("node", type=base.unicode_decoder, help=_(u"node to set"))
NodeCommon.add_parser_options(self)
# XXX: we use optional argument syntax for a required one because list of list of 2 elements
# (uses to construct dicts) don't work with positional arguments
self.parser.add_argument("-a",
@ -180,7 +269,7 @@ class NodeAffiliations(base.CommandBase):
class Node(base.CommandBase):
subcommands = (NodeInfo, NodeSet, NodeAffiliations)
subcommands = (NodeInfo, NodeCreate, NodeDelete, NodeSet, NodeAffiliations)
def __init__(self, host):
super(Node, self).__init__(host, 'node', use_profile=False, help=_('node handling'))