From 73aff806f329ace77bccca4001d8d8b15a44a7a3 Mon Sep 17 00:00:00 2001 From: Florian Schlachter Date: Sun, 31 Jan 2010 18:00:01 +0100 Subject: [PATCH] reset to master, keep working on the dirty-fields-patch in another branch --- mongoengine/base.py | 13 ++++--------- mongoengine/document.py | 28 ++-------------------------- mongoengine/fields.py | 1 - 3 files changed, 6 insertions(+), 36 deletions(-) diff --git a/mongoengine/base.py b/mongoengine/base.py index b658f326..024602a9 100644 --- a/mongoengine/base.py +++ b/mongoengine/base.py @@ -15,14 +15,13 @@ class BaseField(object): _index_with_types = True def __init__(self, name=None, required=False, default=None, unique=False, - unique_with=None, primary_key=False, modified=False): + unique_with=None, primary_key=False): self.name = name if not primary_key else '_id' self.required = required or primary_key self.default = default self.unique = bool(unique or unique_with) self.unique_with = unique_with self.primary_key = primary_key - self.modified = modified def __get__(self, instance, owner): """Descriptor for retrieving a value from a field in a document. Do @@ -45,7 +44,6 @@ class BaseField(object): """Descriptor for assigning a value to a field in a document. """ instance._data[self.name] = value - self.modified = True def to_python(self, value): """Convert a MongoDB-compatible type to a Python type. @@ -254,11 +252,8 @@ class BaseDocument(object): def __init__(self, **values): self._data = {} - - modified = 'id' in values.keys() # Assign initial values to instance for attr_name, attr_value in self._fields.items(): - attr_value.modified = modified if attr_name in values: setattr(self, attr_name, values.pop(attr_name)) else: @@ -382,9 +377,9 @@ class BaseDocument(object): # that has been queried to return this SON return None cls = subclasses[class_name] - + for field_name, field in cls._fields.items(): if field.name in data: data[field_name] = field.to_python(data[field.name]) - - return cls(**data) \ No newline at end of file + + return cls(**data) diff --git a/mongoengine/document.py b/mongoengine/document.py index 36216e0d..62f9ecce 100644 --- a/mongoengine/document.py +++ b/mongoengine/document.py @@ -1,9 +1,8 @@ from base import (DocumentMetaclass, TopLevelDocumentMetaclass, BaseDocument, ValidationError) -from queryset import OperationError, QuerySet +from queryset import OperationError from connection import _get_db - import pymongo @@ -76,34 +75,12 @@ class Document(BaseDocument): if force_insert: object_id = collection.insert(doc, safe=safe) else: - if getattr(self, 'id', None) == None: - # new document - object_id = collection.save(doc, safe=safe) - else: - # update document - modified_fields = map(lambda obj: obj[0], filter(lambda obj: obj[1].modified, self._fields.items())) - modified_doc = dict(filter(lambda k: k[0] in modified_fields, doc.items())) - try: - # - # WORK IN PROGRESS - # - EmbeddedDocuments still aren't tracked - # - id_field = self._meta['id_field'] - idObj = self._fields[id_field].to_mongo(self['id']) - collection.update({'_id': idObj}, {'$set': modified_doc}, safe=safe) - except pymongo.errors.OperationFailure, err: - if str(err) == 'multi not coded yet': - raise OperationError('update() method requires MongoDB 1.1.3+') - raise OperationError('Update failed (%s)' % str(err)) - object_id = self['id'] - - for field in self._fields.values(): field.modified = False + object_id = collection.save(doc, safe=safe) except pymongo.errors.OperationFailure, err: message = 'Could not save document (%s)' if 'duplicate key' in str(err): message = 'Tried to save duplicate unique keys (%s)' raise OperationError(message % str(err)) - id_field = self._meta['id_field'] self[id_field] = self._fields[id_field].to_python(object_id) @@ -129,7 +106,6 @@ class Document(BaseDocument): obj = self.__class__.objects(**{id_field: self[id_field]}).first() for field in self._fields: setattr(self, field, obj[field]) - obj.modified = False @classmethod def drop_collection(cls): diff --git a/mongoengine/fields.py b/mongoengine/fields.py index 90a3b3d2..beb8ae00 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -71,7 +71,6 @@ class FloatField(BaseField): return float(value) def validate(self, value): - if isinstance(value, int): value = float(value) assert isinstance(value, float) if self.min_value is not None and value < self.min_value: