Mercurial > libervia-backend
comparison frontends/src/jp/cmd_pubsub.py @ 2221:a6c9bc4d1de0
jp (pubsub/node): added create and delete commands
author | Goffi <goffi@goffi.org> |
---|---|
date | Mon, 03 Apr 2017 00:23:01 +0200 |
parents | 4e06cd44e667 |
children | 87fcd4a7c7e4 |
comparison
equal
deleted
inserted
replaced
2220:0d27d95652a7 | 2221:a6c9bc4d1de0 |
---|---|
19 | 19 |
20 | 20 |
21 import base | 21 import base |
22 from sat.core.i18n import _ | 22 from sat.core.i18n import _ |
23 from sat_frontends.jp.constants import Const as C | 23 from sat_frontends.jp.constants import Const as C |
24 from functools import partial | |
24 | 25 |
25 __commands__ = ["Pubsub"] | 26 __commands__ = ["Pubsub"] |
26 | 27 |
27 | 28 |
28 class NodeInfo(base.CommandBase): | 29 class NodeCommon(object): |
30 node_required = True | |
31 | |
32 def __init__(self, node_required=True): | |
33 self.node_required = node_required | |
34 | |
35 def add_parser_options(self): | |
36 self.parser.add_argument("-s", "--service", type=base.unicode_decoder, default=u'', | |
37 help=_(u"JID of the PubSub service (default: PEP service)")) | |
38 if self.node_required: | |
39 self.parser.add_argument("node", type=base.unicode_decoder, help=_(u"node to request")) | |
40 else: | |
41 self.parser.add_argument("-n", "--node", type=base.unicode_decoder, default=u'', help=_(u"node to request")) | |
42 | |
43 | |
44 class NodeInfo(base.CommandBase, NodeCommon): | |
29 | 45 |
30 def __init__(self, host): | 46 def __init__(self, host): |
31 base.CommandBase.__init__(self, host, 'info', use_output=C.OUTPUT_DICT, help=_(u'retrieve node configuration')) | 47 base.CommandBase.__init__(self, host, 'info', use_output=C.OUTPUT_DICT, help=_(u'retrieve node configuration')) |
32 self.need_loop=True | 48 self.need_loop=True |
33 | 49 |
34 def add_parser_options(self): | 50 def add_parser_options(self): |
35 self.parser.add_argument("-k", "--key", type=base.unicode_decoder, action='append', dest='keys', | 51 self.parser.add_argument("-k", "--key", type=base.unicode_decoder, action='append', dest='keys', |
36 help=_(u"data key to filter")) | 52 help=_(u"data key to filter")) |
37 self.parser.add_argument("node", type=base.unicode_decoder, help=_(u"node to request")) | 53 NodeCommon.add_parser_options(self) |
38 self.parser.add_argument("service", type=base.unicode_decoder, nargs='?', default=u'', | |
39 help=_(u"JID of the PubSub service (default: request profile own pubsub)")) | |
40 | 54 |
41 def removePrefix(self, key): | 55 def removePrefix(self, key): |
42 return key[7:] if key.startswith(u"pubsub#") else key | 56 return key[7:] if key.startswith(u"pubsub#") else key |
43 | 57 |
44 def filterKey(self, key): | 58 def filterKey(self, key): |
61 self.args.node, | 75 self.args.node, |
62 self.profile, | 76 self.profile, |
63 callback=self.psNodeConfigurationGetCb, | 77 callback=self.psNodeConfigurationGetCb, |
64 errback=self.psNodeConfigurationGetEb) | 78 errback=self.psNodeConfigurationGetEb) |
65 | 79 |
66 class NodeSet(base.CommandBase): | 80 |
67 | 81 class NodeCreate(base.CommandBase, NodeCommon): |
68 def __init__(self, host): | 82 |
69 base.CommandBase.__init__(self, host, 'set', use_output=C.OUTPUT_DICT, use_verbose=True, help=_(u'set node configuration')) | 83 def __init__(self, host): |
84 NodeCommon.__init__(self, node_required=False) | |
85 base.CommandBase.__init__(self, host, 'create', use_output=C.OUTPUT_DICT, use_verbose=True, help=_(u'create a node')) | |
70 self.need_loop=True | 86 self.need_loop=True |
71 | 87 |
72 def add_parser_options(self): | 88 def add_parser_options(self): |
73 self.parser.add_argument("-f", "--field", type=base.unicode_decoder, action='append', nargs=2, dest='fields', | 89 self.parser.add_argument("-f", "--field", type=base.unicode_decoder, action='append', nargs=2, dest='fields', |
74 required=True, metavar=(u"KEY", u"VALUE"), help=_(u"configuration field to set (required)")) | 90 required=True, metavar=(u"KEY", u"VALUE"), help=_(u"configuration field to set (required)")) |
75 self.parser.add_argument("node", type=base.unicode_decoder, help=_(u"node to request")) | 91 self.parser.add_argument("-F", "--full-prefix", action="store_true", help=_(u"don't prepend \"pubsub#\" prefix to field names")) |
76 self.parser.add_argument("service", type=base.unicode_decoder, nargs='?', default=u'', | 92 NodeCommon.add_parser_options(self) |
77 help=_(u"JID of the PubSub service (default: request profile own pubsub)")) | 93 |
94 def psNodeCreateCb(self, node_id): | |
95 if self.host.verbosity: | |
96 announce = _(u'node created successfully: ') | |
97 else: | |
98 announce = u'' | |
99 self.disp(announce + node_id) | |
100 self.host.quit() | |
101 | |
102 def psNodeCreateEb(self, failure_): | |
103 self.disp(u"can't create: {reason}".format( | |
104 reason=failure_), error=True) | |
105 self.host.quit(C.EXIT_BRIDGE_ERRBACK) | |
106 | |
107 def start(self): | |
108 if not self.args.full_prefix: | |
109 options = {u'pubsub#' + k: v for k,v in self.args.fields} | |
110 else: | |
111 options = dict(self.args.fields) | |
112 self.host.bridge.psNodeCreate( | |
113 self.args.service, | |
114 self.args.node, | |
115 options, | |
116 self.profile, | |
117 callback=self.psNodeCreateCb, | |
118 errback=partial(self.errback, | |
119 msg=_(u"can't create node: {}"), | |
120 exit_code=C.EXIT_BRIDGE_ERRBACK)) | |
121 | |
122 | |
123 class NodeDelete(base.CommandBase, NodeCommon): | |
124 | |
125 def __init__(self, host): | |
126 base.CommandBase.__init__(self, host, 'delete', help=_(u'delete a node')) | |
127 self.need_loop=True | |
128 | |
129 def add_parser_options(self): | |
130 self.parser.add_argument('-f', '--force', action='store_true', help=_(u'delete node without confirmation')) | |
131 NodeCommon.add_parser_options(self) | |
132 | |
133 def psNodeDeleteCb(self): | |
134 self.disp(_(u'node deleted successfully')) | |
135 self.host.quit() | |
136 | |
137 def start(self): | |
138 if not self.args.force: | |
139 if not self.args.service: | |
140 message = _(u"Are you sure to delete pep node [{node_id}] ?").format( | |
141 node_id=self.args.node) | |
142 else: | |
143 message = _(u"Are you sure to delete node [{node_id}] on service [{service}] ?").format( | |
144 node_id=self.args.node, service=self.args.service) | |
145 | |
146 res = raw_input("{} (y/N)? ".format(message)) | |
147 if res not in ("y", "Y"): | |
148 self.disp(_(u"node deletion cancelled")) | |
149 self.host.quit(2) | |
150 | |
151 self.host.bridge.psNodeDelete( | |
152 self.args.service, | |
153 self.args.node, | |
154 self.profile, | |
155 callback=self.psNodeDeleteCb, | |
156 errback=partial(self.errback, | |
157 msg=_(u"can't delete node: {}"), | |
158 exit_code=C.EXIT_BRIDGE_ERRBACK)) | |
159 | |
160 | |
161 class NodeSet(base.CommandBase, NodeCommon): | |
162 | |
163 def __init__(self, host): | |
164 base.CommandBase.__init__(self, host, 'set', use_output=C.OUTPUT_DICT, use_verbose=True, help=_(u'set node configuration')) | |
165 self.need_loop=True | |
166 | |
167 def add_parser_options(self): | |
168 self.parser.add_argument("-f", "--field", type=base.unicode_decoder, action='append', nargs=2, dest='fields', | |
169 required=True, metavar=(u"KEY", u"VALUE"), help=_(u"configuration field to set (required)")) | |
170 NodeCommon.add_parser_options(self) | |
78 | 171 |
79 def psNodeConfigurationSetCb(self): | 172 def psNodeConfigurationSetCb(self): |
80 self.disp(_(u'node configuration successful'), 1) | 173 self.disp(_(u'node configuration successful'), 1) |
81 self.host.quit() | 174 self.host.quit() |
82 | 175 |
99 self.profile, | 192 self.profile, |
100 callback=self.psNodeConfigurationSetCb, | 193 callback=self.psNodeConfigurationSetCb, |
101 errback=self.psNodeConfigurationSetEb) | 194 errback=self.psNodeConfigurationSetEb) |
102 | 195 |
103 | 196 |
104 class NodeAffiliationsGet(base.CommandBase): | 197 class NodeAffiliationsGet(base.CommandBase, NodeCommon): |
105 | 198 |
106 def __init__(self, host): | 199 def __init__(self, host): |
107 base.CommandBase.__init__(self, host, 'get', use_output=C.OUTPUT_DICT, help=_(u'retrieve node affiliations (for node owner)')) | 200 base.CommandBase.__init__(self, host, 'get', use_output=C.OUTPUT_DICT, help=_(u'retrieve node affiliations (for node owner)')) |
108 self.need_loop=True | 201 self.need_loop=True |
109 | 202 |
110 def add_parser_options(self): | 203 def add_parser_options(self): |
111 self.parser.add_argument("-s", "--service", type=base.unicode_decoder, default=u'', | 204 NodeCommon.add_parser_options(self) |
112 help=_(u"JID of the PubSub service (default: request profile own pubsub)")) | |
113 self.parser.add_argument("node", type=base.unicode_decoder, help=_(u"node to request")) | |
114 | 205 |
115 def psNodeAffiliationsGetCb(self, affiliations): | 206 def psNodeAffiliationsGetCb(self, affiliations): |
116 self.output(affiliations) | 207 self.output(affiliations) |
117 self.host.quit() | 208 self.host.quit() |
118 | 209 |
128 self.profile, | 219 self.profile, |
129 callback=self.psNodeAffiliationsGetCb, | 220 callback=self.psNodeAffiliationsGetCb, |
130 errback=self.psNodeAffiliationsGetEb) | 221 errback=self.psNodeAffiliationsGetEb) |
131 | 222 |
132 | 223 |
133 class NodeAffiliationsSet(base.CommandBase): | 224 class NodeAffiliationsSet(base.CommandBase, NodeCommon): |
134 | 225 |
135 def __init__(self, host): | 226 def __init__(self, host): |
136 base.CommandBase.__init__(self, host, 'set', use_verbose=True, help=_(u'set affiliations (for node owner)')) | 227 base.CommandBase.__init__(self, host, 'set', use_verbose=True, help=_(u'set affiliations (for node owner)')) |
137 self.need_loop=True | 228 self.need_loop=True |
138 | 229 |
139 def add_parser_options(self): | 230 def add_parser_options(self): |
140 self.parser.add_argument("-s", "--service", type=base.unicode_decoder, default=u'', | 231 NodeCommon.add_parser_options(self) |
141 help=_(u"JID of the PubSub service (default: request profile own pubsub)")) | |
142 self.parser.add_argument("node", type=base.unicode_decoder, help=_(u"node to set")) | |
143 # XXX: we use optional argument syntax for a required one because list of list of 2 elements | 232 # XXX: we use optional argument syntax for a required one because list of list of 2 elements |
144 # (uses to construct dicts) don't work with positional arguments | 233 # (uses to construct dicts) don't work with positional arguments |
145 self.parser.add_argument("-a", | 234 self.parser.add_argument("-a", |
146 "--affiliation", | 235 "--affiliation", |
147 dest="affiliations", | 236 dest="affiliations", |
178 def __init__(self, host): | 267 def __init__(self, host): |
179 super(NodeAffiliations, self).__init__(host, 'affiliations', use_profile=False, help=_(u'set or retrieve node affiliations')) | 268 super(NodeAffiliations, self).__init__(host, 'affiliations', use_profile=False, help=_(u'set or retrieve node affiliations')) |
180 | 269 |
181 | 270 |
182 class Node(base.CommandBase): | 271 class Node(base.CommandBase): |
183 subcommands = (NodeInfo, NodeSet, NodeAffiliations) | 272 subcommands = (NodeInfo, NodeCreate, NodeDelete, NodeSet, NodeAffiliations) |
184 | 273 |
185 def __init__(self, host): | 274 def __init__(self, host): |
186 super(Node, self).__init__(host, 'node', use_profile=False, help=_('node handling')) | 275 super(Node, self).__init__(host, 'node', use_profile=False, help=_('node handling')) |
187 | 276 |
188 | 277 |