Mercurial > libervia-pubsub
comparison sat_pubsub/pgsql_storage.py @ 240:70c8bb90d75f
added access_model to config, default to 'open'
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 22 May 2012 21:21:57 +0200 |
parents | 64f780413b82 |
children | 42048e37699e |
comparison
equal
deleted
inserted
replaced
239:2b50e4664d74 | 240:70c8bb90d75f |
---|---|
71 defaultConfig = { | 71 defaultConfig = { |
72 'leaf': { | 72 'leaf': { |
73 "pubsub#persist_items": True, | 73 "pubsub#persist_items": True, |
74 "pubsub#deliver_payloads": True, | 74 "pubsub#deliver_payloads": True, |
75 "pubsub#send_last_published_item": 'on_sub', | 75 "pubsub#send_last_published_item": 'on_sub', |
76 "pubsub#access_model": 'open', | |
76 }, | 77 }, |
77 'collection': { | 78 'collection': { |
78 "pubsub#deliver_payloads": True, | 79 "pubsub#deliver_payloads": True, |
79 "pubsub#send_last_published_item": 'on_sub', | 80 "pubsub#send_last_published_item": 'on_sub', |
81 "pubsub#access_model": 'open', | |
80 } | 82 } |
81 } | 83 } |
82 | 84 |
83 def __init__(self, dbpool): | 85 def __init__(self, dbpool): |
84 self.dbpool = dbpool | 86 self.dbpool = dbpool |
85 | 87 |
86 | 88 |
87 def getNode(self, nodeIdentifier): | 89 def getNode(self, nodeIdentifier): |
88 return self.dbpool.runInteraction(self._getNode, nodeIdentifier) | 90 return self.dbpool.runInteraction(self._getNode, nodeIdentifier) |
89 | |
90 | 91 |
91 def _getNode(self, cursor, nodeIdentifier): | 92 def _getNode(self, cursor, nodeIdentifier): |
92 configuration = {} | 93 configuration = {} |
93 cursor.execute("""SELECT node_type, | 94 cursor.execute("""SELECT node_type, |
94 persist_items, | 95 persist_items, |
95 deliver_payloads, | 96 deliver_payloads, |
96 send_last_published_item | 97 send_last_published_item, |
98 access_model | |
97 FROM nodes | 99 FROM nodes |
98 WHERE node=%s""", | 100 WHERE node=%s""", |
99 (nodeIdentifier,)) | 101 (nodeIdentifier,)) |
100 row = cursor.fetchone() | 102 row = cursor.fetchone() |
101 | 103 |
105 if row[0] == 'leaf': | 107 if row[0] == 'leaf': |
106 configuration = { | 108 configuration = { |
107 'pubsub#persist_items': row[1], | 109 'pubsub#persist_items': row[1], |
108 'pubsub#deliver_payloads': row[2], | 110 'pubsub#deliver_payloads': row[2], |
109 'pubsub#send_last_published_item': | 111 'pubsub#send_last_published_item': |
110 row[3]} | 112 row[3], |
113 'pubsub#access_model':row[4]} | |
111 node = LeafNode(nodeIdentifier, configuration) | 114 node = LeafNode(nodeIdentifier, configuration) |
112 node.dbpool = self.dbpool | 115 node.dbpool = self.dbpool |
113 return node | 116 return node |
114 elif row[0] == 'collection': | 117 elif row[0] == 'collection': |
115 configuration = { | 118 configuration = { |
116 'pubsub#deliver_payloads': row[2], | 119 'pubsub#deliver_payloads': row[2], |
117 'pubsub#send_last_published_item': | 120 'pubsub#send_last_published_item': |
118 row[3]} | 121 row[3], |
122 'pubsub#access_model':row[4]} | |
119 node = CollectionNode(nodeIdentifier, configuration) | 123 node = CollectionNode(nodeIdentifier, configuration) |
120 node.dbpool = self.dbpool | 124 node.dbpool = self.dbpool |
121 return node | 125 return node |
122 | 126 |
123 | 127 |
139 | 143 |
140 owner = owner.userhost() | 144 owner = owner.userhost() |
141 try: | 145 try: |
142 cursor.execute("""INSERT INTO nodes | 146 cursor.execute("""INSERT INTO nodes |
143 (node, node_type, persist_items, | 147 (node, node_type, persist_items, |
144 deliver_payloads, send_last_published_item) | 148 deliver_payloads, send_last_published_item, access_model) |
145 VALUES | 149 VALUES |
146 (%s, 'leaf', %s, %s, %s)""", | 150 (%s, 'leaf', %s, %s, %s, %s)""", |
147 (nodeIdentifier, | 151 (nodeIdentifier, |
148 config['pubsub#persist_items'], | 152 config['pubsub#persist_items'], |
149 config['pubsub#deliver_payloads'], | 153 config['pubsub#deliver_payloads'], |
150 config['pubsub#send_last_published_item']) | 154 config['pubsub#send_last_published_item'], |
155 config['pubsub#access_model']) | |
151 ) | 156 ) |
152 except cursor._pool.dbapi.IntegrityError: | 157 except cursor._pool.dbapi.IntegrityError: |
153 raise error.NodeExists() | 158 raise error.NodeExists() |
154 | 159 |
155 cursor.execute("""SELECT 1 from entities where jid=%s""", | 160 cursor.execute("""SELECT 1 from entities where jid=%s""", |
284 NATURAL JOIN nodes | 289 NATURAL JOIN nodes |
285 NATURAL JOIN entities | 290 NATURAL JOIN entities |
286 WHERE node=%s AND jid=%s""", | 291 WHERE node=%s AND jid=%s""", |
287 (self.nodeIdentifier, | 292 (self.nodeIdentifier, |
288 entity.userhost())) | 293 entity.userhost())) |
294 | |
295 try: | |
296 return cursor.fetchone()[0] | |
297 except TypeError: | |
298 return None | |
299 | |
300 def getAccessModel(self): | |
301 return self.dbpool.runInteraction(self._getAccessModel) | |
302 | |
303 def _getAccessModel(self, cursor, entity): | |
304 self._checkNodeExists(cursor) | |
305 cursor.execute("""SELECT access_model FROM nodes | |
306 WHERE node=%s""", | |
307 (self.nodeIdentifier,)) | |
289 | 308 |
290 try: | 309 try: |
291 return cursor.fetchone()[0] | 310 return cursor.fetchone()[0] |
292 except TypeError: | 311 except TypeError: |
293 return None | 312 return None |