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