Mercurial > libervia-pubsub
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) |