Compare commits

...

4 Commits
v0.5 ... v0.5.1

Author SHA1 Message Date
Ross Lawley
591149b1f0 Bumped version for 0.5.1 release 2011-10-08 07:31:24 -07:00
Ross Lawley
9a0a0b1bd4 Ported bugfix for circular references regression
Refs #294
2011-10-08 07:29:12 -07:00
Ross Lawley
89c44cd14e Added missing fields to the api documentation 2011-09-11 08:09:16 +01:00
Ross Lawley
8105bfd8b3 Updated changelog for 0.5 release 2011-09-10 13:00:34 +01:00
6 changed files with 85 additions and 32 deletions

View File

@@ -38,39 +38,24 @@ Fields
====== ======
.. autoclass:: mongoengine.StringField .. autoclass:: mongoengine.StringField
.. autoclass:: mongoengine.URLField .. autoclass:: mongoengine.URLField
.. autoclass:: mongoengine.EmailField .. autoclass:: mongoengine.EmailField
.. autoclass:: mongoengine.IntField .. autoclass:: mongoengine.IntField
.. autoclass:: mongoengine.FloatField .. autoclass:: mongoengine.FloatField
.. autoclass:: mongoengine.DecimalField .. autoclass:: mongoengine.DecimalField
.. autoclass:: mongoengine.BooleanField
.. autoclass:: mongoengine.DateTimeField .. autoclass:: mongoengine.DateTimeField
.. autoclass:: mongoengine.ComplexDateTimeField .. autoclass:: mongoengine.ComplexDateTimeField
.. autoclass:: mongoengine.EmbeddedDocumentField
.. autoclass:: mongoengine.DictField
.. autoclass:: mongoengine.ListField .. autoclass:: mongoengine.ListField
.. autoclass:: mongoengine.SortedListField .. autoclass:: mongoengine.SortedListField
.. autoclass:: mongoengine.DictField
.. autoclass:: mongoengine.BinaryField .. autoclass:: mongoengine.MapField
.. autoclass:: mongoengine.ObjectIdField .. autoclass:: mongoengine.ObjectIdField
.. autoclass:: mongoengine.ReferenceField .. autoclass:: mongoengine.ReferenceField
.. autoclass:: mongoengine.GenericReferenceField .. autoclass:: mongoengine.GenericReferenceField
.. autoclass:: mongoengine.EmbeddedDocumentField
.. autoclass:: mongoengine.GenericEmbeddedDocumentField
.. autoclass:: mongoengine.BooleanField
.. autoclass:: mongoengine.FileField .. autoclass:: mongoengine.FileField
.. autoclass:: mongoengine.BinaryField
.. autoclass:: mongoengine.GeoPointField .. autoclass:: mongoengine.GeoPointField
.. autoclass:: mongoengine.SequenceField

View File

@@ -2,8 +2,13 @@
Changelog Changelog
========= =========
Changes in dev Changes in v0.5.1
============== =================
- Circular reference bugfix
Changes in v0.5
===============
- Added InvalidDocumentError - so Document core methods can't be overwritten - Added InvalidDocumentError - so Document core methods can't be overwritten
- Added GenericEmbeddedDocument - so you can embed any type of embeddable document - Added GenericEmbeddedDocument - so you can embed any type of embeddable document

View File

@@ -14,7 +14,7 @@ __all__ = (document.__all__ + fields.__all__ + connection.__all__ +
__author__ = 'Harry Marr' __author__ = 'Harry Marr'
VERSION = (0, 5, 0) VERSION = (0, 5, 1)
def get_version(): def get_version():

View File

@@ -40,6 +40,8 @@ class DeReference(object):
if isinstance(doc_type, ReferenceField): if isinstance(doc_type, ReferenceField):
doc_type = doc_type.document_type doc_type = doc_type.document_type
if all([i.__class__ == doc_type for i in items]):
return items
self.reference_map = self._find_references(items) self.reference_map = self._find_references(items)
self.object_map = self._fetch_objects(doc_type=doc_type) self.object_map = self._fetch_objects(doc_type=doc_type)

View File

@@ -920,9 +920,11 @@ class GeoPointField(BaseField):
class SequenceField(IntField): class SequenceField(IntField):
"""Provides a sequental counter. """Provides a sequental counter (see http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-SequenceNumbers)
..note:: Although traditional databases often use increasing sequence .. note::
Although traditional databases often use increasing sequence
numbers for primary keys. In MongoDB, the preferred approach is to numbers for primary keys. In MongoDB, the preferred approach is to
use Object IDs instead. The concept is that in a very large use Object IDs instead. The concept is that in a very large
cluster of machines, it is easier to create an object ID than have cluster of machines, it is easier to create an object ID than have

View File

@@ -129,6 +129,65 @@ class FieldTest(unittest.TestCase):
self.assertEquals(employee.friends, friends) self.assertEquals(employee.friends, friends)
self.assertEqual(q, 2) self.assertEqual(q, 2)
def test_circular_reference(self):
"""Ensure you can handle circular references
"""
class Person(Document):
name = StringField()
relations = ListField(EmbeddedDocumentField('Relation'))
def __repr__(self):
return "<Person: %s>" % self.name
class Relation(EmbeddedDocument):
name = StringField()
person = ReferenceField('Person')
Person.drop_collection()
mother = Person(name="Mother")
daughter = Person(name="Daughter")
mother.save()
daughter.save()
daughter_rel = Relation(name="Daughter", person=daughter)
mother.relations.append(daughter_rel)
mother.save()
mother_rel = Relation(name="Daughter", person=mother)
self_rel = Relation(name="Self", person=daughter)
daughter.relations.append(mother_rel)
daughter.relations.append(self_rel)
daughter.save()
self.assertEquals("[<Person: Mother>, <Person: Daughter>]", "%s" % Person.objects())
def test_circular_reference_on_self(self):
"""Ensure you can handle circular references
"""
class Person(Document):
name = StringField()
relations = ListField(ReferenceField('self'))
def __repr__(self):
return "<Person: %s>" % self.name
Person.drop_collection()
mother = Person(name="Mother")
daughter = Person(name="Daughter")
mother.save()
daughter.save()
mother.relations.append(daughter)
mother.save()
daughter.relations.append(mother)
daughter.relations.append(daughter)
daughter.save()
self.assertEquals("[<Person: Mother>, <Person: Daughter>]", "%s" % Person.objects())
def test_generic_reference(self): def test_generic_reference(self):
class UserA(Document): class UserA(Document):