Add flexibility for fields handling bad data (MongoEngine/mongoengine#78)

This commit is contained in:
Ross Lawley 2012-08-17 16:02:33 +01:00
parent 22010d7d95
commit 90fa0f6c4a
3 changed files with 39 additions and 11 deletions

View File

@ -4,6 +4,7 @@ Changelog
Changes in 0.7.X
=================
- Add flexibility for fields handling bad data (MongoEngine/mongoengine#78)
- Embedded Documents no longer handle meta definitions
- Use weakref proxies in base lists / dicts (MongoEngine/mongoengine#74)
- Improved queryset filtering (hmarr/mongoengine#554)

View File

@ -207,7 +207,6 @@ class Document(BaseDocument):
else:
object_id = doc['_id']
updates, removals = self._delta()
# Need to add shard key to query, or you get an error
select_dict = {'_id': object_id}
shard_key = self.__class__._meta.get('shard_key', tuple())

View File

@ -49,8 +49,11 @@ class StringField(BaseField):
def to_python(self, value):
if isinstance(value, unicode):
return value
else:
return value.decode('utf-8')
try:
value = value.decode('utf-8')
except:
pass
return value
def validate(self, value):
if not isinstance(value, basestring):
@ -150,7 +153,11 @@ class IntField(BaseField):
super(IntField, self).__init__(**kwargs)
def to_python(self, value):
return int(value)
try:
value = int(value)
except ValueError:
pass
return value
def validate(self, value):
try:
@ -180,7 +187,11 @@ class FloatField(BaseField):
super(FloatField, self).__init__(**kwargs)
def to_python(self, value):
return float(value)
try:
value = float(value)
except ValueError:
pass
return value
def validate(self, value):
if isinstance(value, int):
@ -212,9 +223,14 @@ class DecimalField(BaseField):
super(DecimalField, self).__init__(**kwargs)
def to_python(self, value):
original_value = value
if not isinstance(value, basestring):
value = unicode(value)
return decimal.Decimal(value)
try:
value = decimal.Decimal(value)
except ValueError:
return original_value
return value
def to_mongo(self, value):
return unicode(value)
@ -242,7 +258,11 @@ class BooleanField(BaseField):
"""
def to_python(self, value):
return bool(value)
try:
value = bool(value)
except ValueError:
pass
return value
def validate(self, value):
if not isinstance(value, bool):
@ -385,7 +405,11 @@ class ComplexDateTimeField(StringField):
'ComplexDateTimeField')
def to_python(self, value):
original_value = value
try:
return self._convert_from_string(value)
except:
return original_value
def to_mongo(self, value):
return self._convert_from_datetime(value)
@ -1340,9 +1364,13 @@ class UUIDField(BaseField):
def to_python(self, value):
if not self._binary:
original_value = value
try:
if not isinstance(value, basestring):
value = unicode(value)
return uuid.UUID(value)
except:
return original_value
return value
def to_mongo(self, value):