better mongodb import

This commit is contained in:
mdipierro
2012-07-27 17:25:30 -05:00
parent c7ac700355
commit 4350ddaec0
2 changed files with 11 additions and 20 deletions
+1 -1
View File
@@ -1 +1 @@
Version 2.00.0 (2012-07-27 16:53:30) dev Version 2.00.0 (2012-07-27 17:25:26) dev
+10 -19
View File
@@ -4663,7 +4663,10 @@ class MongoDBAdapter(NoSQLAdapter):
# therefor call __select() connection[table].find(query).count() Since this will probably reduce the return set? # therefor call __select() connection[table].find(query).count() Since this will probably reduce the return set?
def expand(self, expression, field_type=None): def expand(self, expression, field_type=None):
import pymongo.objectid try:
from pymongo.objectid import ObjectId
except ImportError:
from bson.objectid import ObjectId
#if isinstance(expression,Field): #if isinstance(expression,Field):
# if expression.type=='id': # if expression.type=='id':
# return {_id}" # return {_id}"
@@ -4675,21 +4678,21 @@ class MongoDBAdapter(NoSQLAdapter):
# if second arg is 0 convert to objectid # if second arg is 0 convert to objectid
if isinstance(expression.first,Field) and expression.first.type == 'id': if isinstance(expression.first,Field) and expression.first.type == 'id':
expression.first.name = '_id' expression.first.name = '_id'
if expression.second != 0 and not isinstance(expression.second,pymongo.objectid.ObjectId): if expression.second != 0 and not isinstance(expression.second,ObjectId):
if isinstance(expression.second,int): if isinstance(expression.second,int):
try: try:
#Because the reference field is by default an integer and therefore this must be an integer to be able to work with other databases #Because the reference field is by default an integer and therefore this must be an integer to be able to work with other databases
expression.second = pymongo.objectid.ObjectId(("%X" % expression.second)) expression.second = ObjectId(("%X" % expression.second))
except: except:
raise SyntaxError, 'The second argument must by an integer that can represent an objectid.' raise SyntaxError, 'The second argument must by an integer that can represent an objectid.'
else: else:
try: try:
#But a direct id is also possible #But a direct id is also possible
expression.second = pymongo.objectid.ObjectId(expression.second) expression.second = ObjectId(expression.second)
except: except:
raise SyntaxError, 'second argument must be of type bson.objectid.ObjectId or an objectid representable integer' raise SyntaxError, 'second argument must be of type ObjectId or an objectid representable integer'
elif expression.second == 0: elif expression.second == 0:
expression.second = pymongo.objectid.ObjectId('000000000000000000000000') expression.second = ObjectId('000000000000000000000000')
return expression.op(expression.first, expression.second) return expression.op(expression.first, expression.second)
if isinstance(expression, Field): if isinstance(expression, Field):
if expression.type=='id': if expression.type=='id':
@@ -4794,7 +4797,7 @@ class MongoDBAdapter(NoSQLAdapter):
column = '_id' if colname=='id' else colname column = '_id' if colname=='id' else colname
if column in record: if column in record:
if column == '_id' and isinstance( if column == '_id' and isinstance(
record[column],pymongo.objectid.ObjectId): record[column],ObjectId):
value = int(str(record[column]),16) value = int(str(record[column]),16)
elif column != '_id': elif column != '_id':
value = record[column] value = record[column]
@@ -4947,13 +4950,7 @@ class MongoDBAdapter(NoSQLAdapter):
def GT(self,first,second): def GT(self,first,second):
print "in GT" print "in GT"
#import pymongo.objectid
result = {} result = {}
#if expanded_first == '_id':
#if expanded_second != 0 and not isinstance(second,pymongo.objectid.ObjectId):
#raise SyntaxError, 'second argument must be of type bson.objectid.ObjectId'
#elif expanded_second == 0:
#expanded_second = pymongo.objectid.ObjectId('000000000000000000000000')
result[self.expand(first)] = {'$gt': self.expand(second)} result[self.expand(first)] = {'$gt': self.expand(second)}
return result return result
@@ -5084,13 +5081,7 @@ class MongoDBAdapter(NoSQLAdapter):
def GT(self,first,second): def GT(self,first,second):
print "in GT" print "in GT"
#import pymongo.objectid
result = {} result = {}
#if expanded_first == '_id':
#if expanded_second != 0 and not isinstance(second,pymongo.objectid.ObjectId):
#raise SyntaxError, 'second argument must be of type bson.objectid.ObjectId'
#elif expanded_second == 0:
#expanded_second = pymongo.objectid.ObjectId('000000000000000000000000')
result[self.expand(first)] = {'$gt': self.expand(second)} result[self.expand(first)] = {'$gt': self.expand(second)}
return result return result