##// END OF EJS Templates
add Client.resubmit for re-running tasks...
add Client.resubmit for re-running tasks closes gh-411 * allow `content` in session.serialize to be a unicode object, because mongo+JSON cannot be relied upon to produce encoded bytes.

File last commit:

r3780:5dadef8a
r3874:0c043a69
Show More
mongodb.py
96 lines | 3.3 KiB | text/x-python | PythonLexer
MinRK
Started DB backend with mongoDB support.
r3579 """A TaskRecord backend using mongodb"""
#-----------------------------------------------------------------------------
# Copyright (C) 2010 The IPython Development Team
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-----------------------------------------------------------------------------
from datetime import datetime
from pymongo import Connection
MinRK
Add SQLite backend, DB backends are Configurable...
r3646 from pymongo.binary import Binary
from IPython.utils.traitlets import Dict, List, CUnicode
MinRK
Started DB backend with mongoDB support.
r3579
MinRK
eliminate relative imports
r3642 from .dictdb import BaseDB
MinRK
resort imports in a cleaner order
r3631
#-----------------------------------------------------------------------------
MinRK
Started DB backend with mongoDB support.
r3579 # MongoDB class
MinRK
resort imports in a cleaner order
r3631 #-----------------------------------------------------------------------------
MinRK
Refactor newparallel to use Config system...
r3604 class MongoDB(BaseDB):
MinRK
Started DB backend with mongoDB support.
r3579 """MongoDB TaskRecord backend."""
MinRK
Add SQLite backend, DB backends are Configurable...
r3646
MinRK
General improvements to database backend...
r3780 connection_args = List(config=True) # args passed to pymongo.Connection
connection_kwargs = Dict(config=True) # kwargs passed to pymongo.Connection
database = CUnicode(config=True) # name of the mongodb database
MinRK
Add SQLite backend, DB backends are Configurable...
r3646 _table = Dict()
def __init__(self, **kwargs):
super(MongoDB, self).__init__(**kwargs)
self._connection = Connection(*self.connection_args, **self.connection_kwargs)
if not self.database:
self.database = self.session
self._db = self._connection[self.database]
MinRK
Started DB backend with mongoDB support.
r3579 self._records = self._db['task_records']
MinRK
Add SQLite backend, DB backends are Configurable...
r3646
def _binary_buffers(self, rec):
for key in ('buffers', 'result_buffers'):
MinRK
General improvements to database backend...
r3780 if rec.get(key, None):
MinRK
Add SQLite backend, DB backends are Configurable...
r3646 rec[key] = map(Binary, rec[key])
MinRK
General improvements to database backend...
r3780 return rec
MinRK
Started DB backend with mongoDB support.
r3579
def add_record(self, msg_id, rec):
"""Add a new Task Record, by msg_id."""
# print rec
MinRK
General improvements to database backend...
r3780 rec = self._binary_buffers(rec)
MinRK
Started DB backend with mongoDB support.
r3579 obj_id = self._records.insert(rec)
self._table[msg_id] = obj_id
def get_record(self, msg_id):
"""Get a specific Task Record, by msg_id."""
return self._records.find_one(self._table[msg_id])
def update_record(self, msg_id, rec):
"""Update the data in an existing record."""
MinRK
General improvements to database backend...
r3780 rec = self._binary_buffers(rec)
MinRK
Started DB backend with mongoDB support.
r3579 obj_id = self._table[msg_id]
MinRK
improved client.get_results() behavior
r3598 self._records.update({'_id':obj_id}, {'$set': rec})
MinRK
Started DB backend with mongoDB support.
r3579
def drop_matching_records(self, check):
"""Remove a record from the DB."""
self._records.remove(check)
def drop_record(self, msg_id):
"""Remove a record from the DB."""
obj_id = self._table.pop(msg_id)
self._records.remove(obj_id)
MinRK
General improvements to database backend...
r3780 def find_records(self, check, keys=None):
"""Find records matching a query dict, optionally extracting subset of keys.
Returns list of matching records.
Parameters
----------
check: dict
mongodb-style query argument
keys: list of strs [optional]
if specified, the subset of keys to extract. msg_id will *always* be
included.
"""
if keys and 'msg_id' not in keys:
keys.append('msg_id')
matches = list(self._records.find(check,keys))
for rec in matches:
rec.pop('_id')
return matches
def get_history(self):
"""get all msg_ids, ordered by time submitted."""
cursor = self._records.find({},{'msg_id':1}).sort('submitted')
return [ rec['msg_id'] for rec in cursor ]
MinRK
Started DB backend with mongoDB support.
r3579