comparison sat/plugins/plugin_exp_pubsub_schema.py @ 2774:95321f233387

plugin pubsub schema: code formatting minor update
author Goffi <goffi@goffi.org>
date Sat, 12 Jan 2019 16:50:13 +0100
parents 003b8b4b56a7
children 76ebecdb9b1e
comparison
equal deleted inserted replaced
2773:b7974814dd5b 2774:95321f233387
143 d = iq_elt.send() 143 d = iq_elt.send()
144 d.addCallback(self._getSchemaCb) 144 d.addCallback(self._getSchemaCb)
145 return d 145 return d
146 146
147 @defer.inlineCallbacks 147 @defer.inlineCallbacks
148 def getSchemaForm( 148 def getSchemaForm(self, client, service, nodeIdentifier, schema=None,
149 self, 149 form_type="form", copy_form=True):
150 client,
151 service,
152 nodeIdentifier,
153 schema=None,
154 form_type="form",
155 copy_form=True,
156 ):
157 """get data form from node's schema 150 """get data form from node's schema
158 151
159 @param service(None, jid.JID): PubSub service 152 @param service(None, jid.JID): PubSub service
160 @param nodeIdentifier(unicode): node 153 @param nodeIdentifier(unicode): node
161 @param schema(domish.Element, data_form.Form, None): node schema 154 @param schema(domish.Element, data_form.Form, None): node schema
192 def schema2XMLUI(self, schema_elt): 185 def schema2XMLUI(self, schema_elt):
193 form = data_form.Form.fromElement(schema_elt) 186 form = data_form.Form.fromElement(schema_elt)
194 xmlui = xml_tools.dataForm2XMLUI(form, "") 187 xmlui = xml_tools.dataForm2XMLUI(form, "")
195 return xmlui 188 return xmlui
196 189
197 def _getUISchema( 190 def _getUISchema(self, service, nodeIdentifier, default_node=None,
198 self, service, nodeIdentifier, default_node=None, profile_key=C.PROF_KEY_NONE 191 profile_key=C.PROF_KEY_NONE):
199 ):
200 if not nodeIdentifier: 192 if not nodeIdentifier:
201 if not default_node: 193 if not default_node:
202 raise ValueError(_(u"nodeIndentifier needs to be set")) 194 raise ValueError(_(u"nodeIndentifier needs to be set"))
203 nodeIdentifier = default_node 195 nodeIdentifier = default_node
204 client = self.host.getClient(profile_key) 196 client = self.host.getClient(profile_key)
232 schema_elt["node"] = nodeIdentifier 224 schema_elt["node"] = nodeIdentifier
233 if schema is not None: 225 if schema is not None:
234 schema_elt.addChild(schema) 226 schema_elt.addChild(schema)
235 return iq_elt.send() 227 return iq_elt.send()
236 228
237 def _getDataFormItems( 229 def _getDataFormItems(self, form_ns="", service="", node="", schema="", max_items=10,
238 self, 230 item_ids=None, sub_id=None, extra_dict=None,
239 form_ns="", 231 profile_key=C.PROF_KEY_NONE):
240 service="",
241 node="",
242 schema="",
243 max_items=10,
244 item_ids=None,
245 sub_id=None,
246 extra_dict=None,
247 profile_key=C.PROF_KEY_NONE,
248 ):
249 client = self.host.getClient(profile_key) 232 client = self.host.getClient(profile_key)
250 service = jid.JID(service) if service else None 233 service = jid.JID(service) if service else None
251 if not node: 234 if not node:
252 raise exceptions.DataError(_(u"empty node is not allowed")) 235 raise exceptions.DataError(_(u"empty node is not allowed"))
253 if schema: 236 if schema:
272 return d 255 return d
273 256
274 @defer.inlineCallbacks 257 @defer.inlineCallbacks
275 def getDataFormItems(self, client, service, nodeIdentifier, schema=None, 258 def getDataFormItems(self, client, service, nodeIdentifier, schema=None,
276 max_items=None, item_ids=None, sub_id=None, rsm_request=None, 259 max_items=None, item_ids=None, sub_id=None, rsm_request=None,
277 extra=None, default_node=None, form_ns=None, filters=None): 260 extra=None, default_node=None, form_ns=None, filters=None):
278 """Get items known as being data forms, and convert them to XMLUI 261 """Get items known as being data forms, and convert them to XMLUI
279 262
280 @param schema(domish.Element, data_form.Form, None): schema of the node if known 263 @param schema(domish.Element, data_form.Form, None): schema of the node if known
281 if None, it will be retrieved from node 264 if None, it will be retrieved from node
282 @param default_node(unicode): node to use if nodeIdentifier is None or empty 265 @param default_node(unicode): node to use if nodeIdentifier is None or empty
331 ) 314 )
332 items_xmlui.append(xmlui) 315 items_xmlui.append(xmlui)
333 break 316 break
334 defer.returnValue((items_xmlui, metadata)) 317 defer.returnValue((items_xmlui, metadata))
335 318
336 def _sendDataFormItem( 319 def _sendDataFormItem(self, service, nodeIdentifier, values, schema=None,
337 self, 320 item_id=None, extra=None, profile_key=C.PROF_KEY_NONE):
338 service,
339 nodeIdentifier,
340 values,
341 schema=None,
342 item_id=None,
343 extra=None,
344 profile_key=C.PROF_KEY_NONE,
345 ):
346 client = self.host.getClient(profile_key) 321 client = self.host.getClient(profile_key)
347 service = None if not service else jid.JID(service) 322 service = None if not service else jid.JID(service)
348 if schema: 323 if schema:
349 schema = generic.parseXml(schema.encode("utf-8")) 324 schema = generic.parseXml(schema.encode("utf-8"))
350 else: 325 else:
361 ) 336 )
362 d.addCallback(lambda ret: ret or u"") 337 d.addCallback(lambda ret: ret or u"")
363 return d 338 return d
364 339
365 @defer.inlineCallbacks 340 @defer.inlineCallbacks
366 def sendDataFormItem( 341 def sendDataFormItem(self, client, service, nodeIdentifier, values, schema=None,
367 self, 342 item_id=None, extra=None, deserialise=False):
368 client,
369 service,
370 nodeIdentifier,
371 values,
372 schema=None,
373 item_id=None,
374 extra=None,
375 deserialise=False,
376 ):
377 """Publish an item as a dataform when we know that there is a schema 343 """Publish an item as a dataform when we know that there is a schema
378 344
379 @param values(dict[key(unicode), [iterable[object], object]]): values set for the form 345 @param values(dict[key(unicode), [iterable[object], object]]): values set for the
380 if not iterable, will be put in a list 346 form. If not iterable, will be put in a list.
381 @param schema(domish.Element, data_form.Form, None): data schema 347 @param schema(domish.Element, data_form.Form, None): data schema
382 None to retrieve data schema from node (need to do a additional XMPP call) 348 None to retrieve data schema from node (need to do a additional XMPP call)
383 Schema is needed to construct data form to publish 349 Schema is needed to construct data form to publish
384 @param deserialise(bool): if True, data are list of unicode and must be deserialized according to expected type 350 @param deserialise(bool): if True, data are list of unicode and must be
385 This is done in this method and not directly in _sendDataFormItem because we need to know the data type 351 deserialized according to expected type.
386 which is in the form, not availablable in _sendDataFormItem 352 This is done in this method and not directly in _sendDataFormItem because we
353 need to know the data type which is in the form, not availablable in
354 _sendDataFormItem
387 other parameters as the same as for [self._p.sendItem] 355 other parameters as the same as for [self._p.sendItem]
388 @return (unicode): id of the created item 356 @return (unicode): id of the created item
389 """ 357 """
390 form = yield self.getSchemaForm( 358 form = yield self.getSchemaForm(
391 client, service, nodeIdentifier, schema, form_type="submit" 359 client, service, nodeIdentifier, schema, form_type="submit"
472 ## Helper methods ## 440 ## Helper methods ##
473 441
474 def prepareBridgeGet(self, service, node, max_items, sub_id, extra_dict, profile_key): 442 def prepareBridgeGet(self, service, node, max_items, sub_id, extra_dict, profile_key):
475 """Parse arguments received from bridge *Get methods and return higher level data 443 """Parse arguments received from bridge *Get methods and return higher level data
476 444
477 @return (tuple): (client, service, node, max_items, extra, sub_id) usable for internal methods 445 @return (tuple): (client, service, node, max_items, extra, sub_id) usable for
446 internal methods
478 """ 447 """
479 client = self.host.getClient(profile_key) 448 client = self.host.getClient(profile_key)
480 service = jid.JID(service) if service else None 449 service = jid.JID(service) if service else None
481 if not node: 450 if not node:
482 node = None 451 node = None
527 return d 496 return d
528 497
529 def prepareBridgeSet(self, service, node, schema, item_id, extra, profile_key): 498 def prepareBridgeSet(self, service, node, schema, item_id, extra, profile_key):
530 """Parse arguments received from bridge *Set methods and return higher level data 499 """Parse arguments received from bridge *Set methods and return higher level data
531 500
532 @return (tuple): (client, service, node, schema, item_id, extra) usable for internal methods 501 @return (tuple): (client, service, node, schema, item_id, extra) usable for
502 internal methods
533 """ 503 """
534 client = self.host.getClient(profile_key) 504 client = self.host.getClient(profile_key)
535 service = None if not service else jid.JID(service) 505 service = None if not service else jid.JID(service)
536 if schema: 506 if schema:
537 schema = generic.parseXml(schema.encode("utf-8")) 507 schema = generic.parseXml(schema.encode("utf-8"))
539 schema = None 509 schema = None
540 if extra and u"update" in extra: 510 if extra and u"update" in extra:
541 extra[u"update"] = C.bool(extra[u"update"]) 511 extra[u"update"] = C.bool(extra[u"update"])
542 return client, service, node or None, schema, item_id or None, extra 512 return client, service, node or None, schema, item_id or None, extra
543 513
544 def _set( 514 def _set(self, service, node, values, schema=None, item_id=None, extra=None,
545 self, 515 default_node=None, form_ns=None, fill_author=True,
546 service, 516 profile_key=C.PROF_KEY_NONE):
547 node,
548 values,
549 schema=None,
550 item_id=None,
551 extra=None,
552 default_node=None,
553 form_ns=None,
554 fill_author=True,
555 profile_key=C.PROF_KEY_NONE,
556 ):
557 """Bridge method to set item in node with schema 517 """Bridge method to set item in node with schema
558 518
559 this method is a helper so dependant plugins can use it directly 519 this method is a helper so dependant plugins can use it directly
560 when adding *Set methods 520 when adding *Set methods
561 """ 521 """
577 ) 537 )
578 d.addCallback(lambda ret: ret or u"") 538 d.addCallback(lambda ret: ret or u"")
579 return d 539 return d
580 540
581 @defer.inlineCallbacks 541 @defer.inlineCallbacks
582 def set( 542 def set(self, client, service, node, values, schema, item_id, extra, deserialise,
583 self, 543 form_ns, default_node=None, fill_author=True):
584 client,
585 service,
586 node,
587 values,
588 schema,
589 item_id,
590 extra,
591 deserialise,
592 form_ns,
593 default_node=None,
594 fill_author=True,
595 ):
596 """Set an item in a node with a schema 544 """Set an item in a node with a schema
597 545
598 This method can be used directly by *Set methods added by dependant plugin 546 This method can be used directly by *Set methods added by dependant plugin
599 @param values(dict[key(unicode), [iterable[object]|object]]): values of the items 547 @param values(dict[key(unicode), [iterable[object]|object]]): values of the items
600 if value is not iterable, it will be put in a list 548 if value is not iterable, it will be put in a list