~hudson-openstack/burrow/trunk

« back to all changes in this revision

Viewing changes to burrow/backend/sqlite.py

  • Committer: Tarmac
  • Author(s): Eric Day
  • Date: 2011-08-24 17:08:00 UTC
  • mfrom: (33.1.4 doc-updates)
  • Revision ID: tarmac-20110824170800-1acaswi4cs9svbu0
More docs for backend modules.

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
 
31
31
 
32
32
class Backend(burrow.backend.Backend):
 
33
    '''Backend implemention that uses SQLite to store the account, queue,
 
34
    and message data.'''
33
35
 
34
36
    def __init__(self, config):
35
37
        super(Backend, self).__init__(config)
83
85
            self._delete_accounts(ids)
84
86
 
85
87
    def _delete_accounts(self, ids):
 
88
        '''Delete all accounts with the given row IDs, which includes
 
89
        cascading deletes for all queues and messages as well.'''
86
90
        ids = tuple(ids)
87
91
        query_values = '(?' + (',?' * (len(ids) - 1)) + ')'
88
92
        queue_ids = []
103
107
        self.db.execute(query + query_values, ids)
104
108
 
105
109
    def _detail(self, row, detail):
 
110
        '''Format the account or queue detail from the given row.'''
106
111
        if detail == 'id':
107
112
            return row[0]
108
113
        elif detail == 'all':
117
122
                yield self._detail(row, detail)
118
123
 
119
124
    def _get_accounts(self, query, filters):
 
125
        '''Build the SQL query to get accounts and check for empty
 
126
        responses.'''
120
127
        values = tuple()
121
128
        if filters is None:
122
129
            marker = None
142
149
            raise burrow.backend.NotFound()
143
150
 
144
151
    def _get_account(self, account):
 
152
        '''Get the rowid for a given account ID.'''
145
153
        query = 'SELECT rowid FROM accounts WHERE account=?'
146
154
        rows = self.db.execute(query, (account,)).fetchall()
147
155
        if len(rows) == 0:
165
173
        self._check_empty_account(account_rowid)
166
174
 
167
175
    def _delete_queues(self, ids):
 
176
        '''Delete all queues with the given row IDs, which includes
 
177
        cascading deletes for all messages as well.'''
168
178
        ids = tuple(ids)
169
179
        query_values = '(?' + (',?' * (len(ids) - 1)) + ')'
170
180
        query = 'DELETE FROM messages WHERE queue IN '
173
183
        self.db.execute(query + query_values, ids)
174
184
 
175
185
    def _check_empty_account(self, account_rowid):
 
186
        '''Check to see if an account is empty, and if so, remove it.'''
176
187
        query = 'SELECT rowid FROM queues WHERE account=? LIMIT 1'
177
188
        if len(self.db.execute(query, (account_rowid,)).fetchall()) == 0:
178
189
            query = 'DELETE FROM accounts WHERE rowid=?'
187
198
                yield self._detail(row, detail)
188
199
 
189
200
    def _get_queues(self, query, account_rowid, filters):
 
201
        '''Build the SQL query to get queues and check for empty
 
202
        responses.'''
190
203
        query += ' WHERE account=?'
191
204
        values = (account_rowid,)
192
205
        if filters is None:
213
226
            raise burrow.backend.NotFound()
214
227
 
215
228
    def _get_queue(self, account_rowid, queue):
 
229
        '''Get the rowid for a given queue ID.'''
216
230
        query = 'SELECT rowid FROM queues WHERE account=? AND queue=?'
217
231
        rows = self.db.execute(query, (account_rowid, queue)).fetchall()
218
232
        if len(rows) == 0:
238
252
        self._check_empty_queue(account_rowid, queue_rowid)
239
253
 
240
254
    def _delete_messages(self, ids):
 
255
        '''Delete all messages with the given row IDs.'''
241
256
        ids = tuple(ids)
242
257
        query_values = '(?' + (',?' * (len(ids) - 1)) + ')'
243
258
        query = 'DELETE FROM messages WHERE rowid IN '
244
259
        self.db.execute(query + query_values, ids)
245
260
 
246
261
    def _check_empty_queue(self, account_rowid, queue_rowid):
 
262
        '''Check to see if a queue is empty, and if so, remove it.'''
247
263
        query = 'SELECT rowid FROM messages WHERE queue=? LIMIT 1'
248
264
        if len(self.db.execute(query, (queue_rowid,)).fetchall()) == 0:
249
265
            self.db.execute('DELETE FROM queues WHERE rowid=?', (queue_rowid,))
250
266
            self._check_empty_account(account_rowid)
251
267
 
252
268
    def _message_detail(self, row, detail):
 
269
        '''Format the message detail from the given row.'''
253
270
        if detail == 'id':
254
271
            return row[0]
255
272
        elif detail == 'body':
277
294
                yield self._message_detail(row, detail)
278
295
 
279
296
    def _get_messages(self, query, queue_rowid, filters):
 
297
        '''Build the SQL query to get messages and check for empty
 
298
        responses.'''
280
299
        query += ' WHERE queue=?'
281
300
        values = (queue_rowid,)
282
301
        if filters is None:
307
326
            raise burrow.backend.NotFound()
308
327
 
309
328
    def _get_message(self, queue_rowid, message, full=False):
 
329
        '''Get the rowid for a given message ID.'''
310
330
        if full:
311
331
            query = 'SELECT rowid,message,ttl,hide,body'
312
332
        else:
348
368
            self.notify(account, queue)
349
369
 
350
370
    def _update_messages(self, ttl, hide, ids):
 
371
        '''Build the SQL query to update messages.'''
351
372
        query = 'UPDATE messages SET '
352
373
        query_values = ' WHERE rowid IN (?' + (',?' * (len(ids) - 1)) + ')'
353
374
        values = []