comparison frontends/src/jp/cmd_event.py @ 2532:772447ec070f

jp: pubsub options refactoring: There is now only "use_pubsub", and specification are set using "pubsub_flags" argument when instantiating CommandBase. Options are more Python Zen compliant by using explicit arguments for item, draft, url instead of trying to guess with magic keyword and type detection. Pubsub node and item are now always using respecively "-n" and "-i" even when required, this way shell history can be used to change command more easily, and it's globally less confusing for user. if --pubsub-url is used, elements can be overwritten with individual option (e.g. change item id with --item). New "use_draft" argument in CommandBase, to re-use current draft or open a file path as draft. Item can now be specified when using a draft. If it already exists, its content will be added to current draft (with a separator), to avoid loosing data. common.BaseEdit.getItemPath could be simplified thanks to those changes. Pubsub URI handling has been moved to base.py.
author Goffi <goffi@goffi.org>
date Wed, 21 Mar 2018 19:13:22 +0100
parents 5895e4daae8c
children
comparison
equal deleted inserted replaced
2531:1dfc5516dead 2532:772447ec070f
40 def __init__(self, host): 40 def __init__(self, host):
41 base.CommandBase.__init__(self, 41 base.CommandBase.__init__(self,
42 host, 42 host,
43 'get', 43 'get',
44 use_output=C.OUTPUT_DICT, 44 use_output=C.OUTPUT_DICT,
45 use_pubsub_node_req=True, 45 use_pubsub=True, pubsub_flags={C.NODE, C.SINGLE_ITEM},
46 use_verbose=True, 46 use_verbose=True,
47 help=_(u'get event data')) 47 help=_(u'get event data'))
48 self.need_loop=True 48 self.need_loop=True
49 49
50 def add_parser_options(self): 50 def add_parser_options(self):
51 self.parser.add_argument("-i", "--item", type=base.unicode_decoder, default=u'', help=_(u"ID of the PubSub Item")) 51 pass
52 52
53 def eventInviteeGetCb(self, result): 53 def eventInviteeGetCb(self, result):
54 event_date, event_data = result 54 event_date, event_data = result
55 event_data['date'] = event_date 55 event_data['date'] = event_date
56 self.output(event_data) 56 self.output(event_data)
57 self.host.quit() 57 self.host.quit()
58 58
59 def start(self): 59 def start(self):
60 common.checkURI(self.args)
61 self.host.bridge.eventGet( 60 self.host.bridge.eventGet(
62 self.args.service, 61 self.args.service,
63 self.args.node, 62 self.args.node,
64 self.args.item, 63 self.args.item,
65 self.profile, 64 self.profile,
98 return date 97 return date
99 98
100 99
101 class Create(EventBase, base.CommandBase): 100 class Create(EventBase, base.CommandBase):
102 def __init__(self, host): 101 def __init__(self, host):
103 super(Create, self).__init__(host, 'create', use_pubsub_node_req=True, help=_('create or replace event')) 102 super(Create, self).__init__(host, 'create', use_pubsub=True, pubsub_flags={C.NODE}, help=_('create or replace event'))
104 EventBase.__init__(self) 103 EventBase.__init__(self)
105 self.need_loop=True 104 self.need_loop=True
106 105
107 def eventCreateCb(self, node): 106 def eventCreateCb(self, node):
108 self.disp(_(u'Event created successfuly on node {node}').format(node=node)) 107 self.disp(_(u'Event created successfuly on node {node}').format(node=node))
124 exit_code=C.EXIT_BRIDGE_ERRBACK)) 123 exit_code=C.EXIT_BRIDGE_ERRBACK))
125 124
126 125
127 class Modify(EventBase, base.CommandBase): 126 class Modify(EventBase, base.CommandBase):
128 def __init__(self, host): 127 def __init__(self, host):
129 super(Modify, self).__init__(host, 'modify', use_pubsub_node_req=True, help=_('modify an existing event')) 128 super(Modify, self).__init__(host, 'modify', use_pubsub=True, pubsub_flags={C.NODE}, help=_('modify an existing event'))
130 EventBase.__init__(self) 129 EventBase.__init__(self)
131 self.need_loop=True 130 self.need_loop=True
132 131
133 def start(self): 132 def start(self):
134 common.checkURI(self.args)
135 fields = self.parseFields() 133 fields = self.parseFields()
136 date = 0 if not self.args.date else self.parseDate() 134 date = 0 if not self.args.date else self.parseDate()
137 self.host.bridge.eventModify( 135 self.host.bridge.eventModify(
138 self.args.service, 136 self.args.service,
139 self.args.node, 137 self.args.node,
152 def __init__(self, host): 150 def __init__(self, host):
153 base.CommandBase.__init__(self, 151 base.CommandBase.__init__(self,
154 host, 152 host,
155 'get', 153 'get',
156 use_output=C.OUTPUT_DICT, 154 use_output=C.OUTPUT_DICT,
157 use_pubsub_node_req=True, 155 use_pubsub=True, pubsub_flags={C.NODE},
158 use_verbose=True, 156 use_verbose=True,
159 help=_(u'get event attendance')) 157 help=_(u'get event attendance'))
160 self.need_loop=True 158 self.need_loop=True
161 159
162 def add_parser_options(self): 160 def add_parser_options(self):
165 def eventInviteeGetCb(self, event_data): 163 def eventInviteeGetCb(self, event_data):
166 self.output(event_data) 164 self.output(event_data)
167 self.host.quit() 165 self.host.quit()
168 166
169 def start(self): 167 def start(self):
170 common.checkURI(self.args)
171 self.host.bridge.eventInviteeGet( 168 self.host.bridge.eventInviteeGet(
172 self.args.service, 169 self.args.service,
173 self.args.node, 170 self.args.node,
174 self.profile, 171 self.profile,
175 callback=self.eventInviteeGetCb, 172 callback=self.eventInviteeGetCb,
178 exit_code=C.EXIT_BRIDGE_ERRBACK)) 175 exit_code=C.EXIT_BRIDGE_ERRBACK))
179 176
180 177
181 class InviteeSet(base.CommandBase): 178 class InviteeSet(base.CommandBase):
182 def __init__(self, host): 179 def __init__(self, host):
183 super(InviteeSet, self).__init__(host, 'set', use_output=C.OUTPUT_DICT, use_pubsub_node_req=True, help=_('set event attendance')) 180 super(InviteeSet, self).__init__(host, 'set', use_output=C.OUTPUT_DICT, use_pubsub=True, pubsub_flags={C.NODE}, help=_('set event attendance'))
184 self.need_loop=True 181 self.need_loop=True
185 182
186 def add_parser_options(self): 183 def add_parser_options(self):
187 self.parser.add_argument("-f", "--field", type=base.unicode_decoder, action='append', nargs=2, dest='fields', 184 self.parser.add_argument("-f", "--field", type=base.unicode_decoder, action='append', nargs=2, dest='fields',
188 metavar=(u"KEY", u"VALUE"), help=_(u"configuration field to set")) 185 metavar=(u"KEY", u"VALUE"), help=_(u"configuration field to set"))
189 186
190 def start(self): 187 def start(self):
191 common.checkURI(self.args)
192 fields = dict(self.args.fields) if self.args.fields else {} 188 fields = dict(self.args.fields) if self.args.fields else {}
193 self.host.bridge.eventInviteeSet( 189 self.host.bridge.eventInviteeSet(
194 self.args.service, 190 self.args.service,
195 self.args.node, 191 self.args.node,
196 fields, 192 fields,
208 base.CommandBase.__init__(self, 204 base.CommandBase.__init__(self,
209 host, 205 host,
210 'list', 206 'list',
211 use_output=C.OUTPUT_DICT_DICT, 207 use_output=C.OUTPUT_DICT_DICT,
212 extra_outputs=extra_outputs, 208 extra_outputs=extra_outputs,
213 use_pubsub_node_req=True, 209 use_pubsub=True, pubsub_flags={C.NODE},
214 use_verbose=True, 210 use_verbose=True,
215 help=_(u'get event attendance')) 211 help=_(u'get event attendance'))
216 self.need_loop=True 212 self.need_loop=True
217 213
218 def add_parser_options(self): 214 def add_parser_options(self):
353 self.getList(prefilled) 349 self.getList(prefilled)
354 350
355 def start(self): 351 def start(self):
356 if self.args.no_rsvp and not self.args.missing: 352 if self.args.no_rsvp and not self.args.missing:
357 self.parser.error(_(u"you need to use --missing if you use --no-rsvp")) 353 self.parser.error(_(u"you need to use --missing if you use --no-rsvp"))
358 common.checkURI(self.args)
359 if self.args.missing: 354 if self.args.missing:
360 self.host.bridge.psNodeAffiliationsGet( 355 self.host.bridge.psNodeAffiliationsGet(
361 self.args.service, 356 self.args.service,
362 self.args.node, 357 self.args.node,
363 self.profile, 358 self.profile,
370 365
371 366
372 class InviteeInvite(base.CommandBase): 367 class InviteeInvite(base.CommandBase):
373 368
374 def __init__(self, host): 369 def __init__(self, host):
375 base.CommandBase.__init__(self, host, 'invite', use_pubsub_node_req=True, help=_(u'invite someone to the event through email')) 370 base.CommandBase.__init__(self, host, 'invite', use_pubsub=True, pubsub_flags={C.NODE, C.SINGLE_ITEM}, help=_(u'invite someone to the event through email'))
376 self.need_loop=True 371 self.need_loop=True
377 372
378 def add_parser_options(self): 373 def add_parser_options(self):
379 self.parser.add_argument("-i", "--item", type=base.unicode_decoder, default=u'', help=_(u"ID of the PubSub Item"))
380 self.parser.add_argument("-e", "--email", action="append", type=base.unicode_decoder, default=[], help='email(s) to send the invitation to') 374 self.parser.add_argument("-e", "--email", action="append", type=base.unicode_decoder, default=[], help='email(s) to send the invitation to')
381 self.parser.add_argument("-n", "--name", type=base.unicode_decoder, default='', help='name of the invitee') 375 self.parser.add_argument("-N", "--name", type=base.unicode_decoder, default='', help='name of the invitee')
382 self.parser.add_argument("-N", "--host-name", type=base.unicode_decoder, default='', help='name of the host') 376 self.parser.add_argument("-H", "--host-name", type=base.unicode_decoder, default='', help='name of the host')
383 self.parser.add_argument("-l", "--lang", type=base.unicode_decoder, default='', help='main language spoken by the invitee') 377 self.parser.add_argument("-l", "--lang", type=base.unicode_decoder, default='', help='main language spoken by the invitee')
384 self.parser.add_argument("-u", "--url", type=base.unicode_decoder, default='', help='template to construct the URL') 378 self.parser.add_argument("-U", "--url-template", type=base.unicode_decoder, default='', help='template to construct the URL')
385 self.parser.add_argument("-S", "--subject", type=base.unicode_decoder, default='', help='subject of the invitation email (default: generic subject)') 379 self.parser.add_argument("-S", "--subject", type=base.unicode_decoder, default='', help='subject of the invitation email (default: generic subject)')
386 self.parser.add_argument("-b", "--body", type=base.unicode_decoder, default='', help='body of the invitation email (default: generic body)') 380 self.parser.add_argument("-b", "--body", type=base.unicode_decoder, default='', help='body of the invitation email (default: generic body)')
387 381
388 def start(self): 382 def start(self):
389 common.checkURI(self.args)
390 email = self.args.email[0] if self.args.email else None 383 email = self.args.email[0] if self.args.email else None
391 emails_extra = self.args.email[1:] 384 emails_extra = self.args.email[1:]
392 385
393 self.host.bridge.eventInvite( 386 self.host.bridge.eventInvite(
394 self.args.service, 387 self.args.service,
397 email, 390 email,
398 emails_extra, 391 emails_extra,
399 self.args.name, 392 self.args.name,
400 self.args.host_name, 393 self.args.host_name,
401 self.args.lang, 394 self.args.lang,
402 self.args.url, 395 self.args.url_template,
403 self.args.subject, 396 self.args.subject,
404 self.args.body, 397 self.args.body,
405 self.args.profile, 398 self.args.profile,
406 callback=self.host.quit, 399 callback=self.host.quit,
407 errback=partial(self.errback, 400 errback=partial(self.errback,