comparison sat_pubsub/pgsql_storage.py @ 244:3ecc94407e36

item access_model (not finished)
author Goffi <goffi@goffi.org>
date Wed, 30 May 2012 01:04:15 +0200
parents 42048e37699e
children e11e99246be5
comparison
equal deleted inserted replaced
243:42048e37699e 244:3ecc94407e36
59 from twisted.internet import defer 59 from twisted.internet import defer
60 from twisted.words.protocols.jabber import jid 60 from twisted.words.protocols.jabber import jid
61 61
62 from wokkel.generic import parseXml, stripNamespace 62 from wokkel.generic import parseXml, stripNamespace
63 from wokkel.pubsub import Subscription 63 from wokkel.pubsub import Subscription
64 from wokkel import data_form
64 65
65 from sat_pubsub import error, iidavoll 66 from sat_pubsub import error, iidavoll
67
68 NS_ITEM_CONFIG = "http://jabber.org/protocol/pubsub#item-config"
69 OPT_ACCESS_MODEL = 'pubsub#access_model'
70 VAL_DEFAULT = 'default'
66 71
67 class Storage: 72 class Storage:
68 73
69 implements(iidavoll.IStorage) 74 implements(iidavoll.IStorage)
70 75
508 for item in items: 513 for item in items:
509 self._storeItem(cursor, item, publisher) 514 self._storeItem(cursor, item, publisher)
510 515
511 516
512 def _storeItem(self, cursor, item, publisher): 517 def _storeItem(self, cursor, item, publisher):
518 item_config = None
519 access_model = VAL_DEFAULT
520 for i in range(len(item.children)):
521 elt = item.children[i]
522 if not (elt.uri,elt.name)==(data_form.NS_X_DATA,'x'):
523 continue
524 form = data_form.Form.fromElement(elt)
525 if (form.formNamespace == NS_ITEM_CONFIG):
526 item_config = form
527 del item.children[i] #we need to remove the config from item
528 break
529
530 if item_config:
531 access_model = item_config.get("pubsub#access_model", VAL_DEFAULT)
532
513 data = item.toXml() 533 data = item.toXml()
534
514 cursor.execute("""UPDATE items SET date=now(), publisher=%s, data=%s 535 cursor.execute("""UPDATE items SET date=now(), publisher=%s, data=%s
515 FROM nodes 536 FROM nodes
516 WHERE nodes.node_id = items.node_id AND 537 WHERE nodes.node_id = items.node_id AND
517 nodes.node = %s and items.item=%s""", 538 nodes.node = %s and items.item=%s""",
518 (publisher.full(), 539 (publisher.full(),
520 self.nodeIdentifier, 541 self.nodeIdentifier,
521 item["id"])) 542 item["id"]))
522 if cursor.rowcount == 1: 543 if cursor.rowcount == 1:
523 return 544 return
524 545
525 cursor.execute("""INSERT INTO items (node_id, item, publisher, data) 546 cursor.execute("""INSERT INTO items (node_id, item, publisher, data, access_model)
526 SELECT node_id, %s, %s, %s FROM nodes 547 SELECT node_id, %s, %s, %s, %s FROM nodes
527 WHERE node=%s""", 548 WHERE node=%s""",
528 (item["id"], 549 (item["id"],
529 publisher.full(), 550 publisher.full(),
530 data, 551 data,
552 access_model,
531 self.nodeIdentifier)) 553 self.nodeIdentifier))
532 554
533 555
534 def removeItems(self, itemIdentifiers): 556 def removeItems(self, itemIdentifiers):
535 return self.dbpool.runInteraction(self._removeItems, itemIdentifiers) 557 return self.dbpool.runInteraction(self._removeItems, itemIdentifiers)