diff --git a/docs/changelog.rst b/docs/changelog.rst index 9b524c2d..13cd1b69 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -6,6 +6,7 @@ Changelog Changes in 0.9.X - DEV ====================== +- Added the ability to reload specific document fields #100 - Added db_alias support and fixes for custom map/reduce output #586 - post_save signal now has access to delta information about field changes #594 #589 - Don't query with $orderby for qs.get() #600 diff --git a/mongoengine/document.py b/mongoengine/document.py index 7541ee57..67f442ae 100644 --- a/mongoengine/document.py +++ b/mongoengine/document.py @@ -54,7 +54,7 @@ class EmbeddedDocument(BaseDocument): `_cls` set :attr:`allow_inheritance` to ``False`` in the :attr:`meta` dictionary. """ - + __slots__ = ('_instance') # The __metaclass__ attribute is removed by 2to3 when running with Python3 @@ -463,27 +463,41 @@ class Document(BaseDocument): DeReference()([self], max_depth + 1) return self - def reload(self, max_depth=1): + def reload(self, *fields, **kwargs): """Reloads all attributes from the database. + :param fields: (optional) args list of fields to reload + :param max_depth: (optional) depth of dereferencing to follow + .. versionadded:: 0.1.2 .. versionchanged:: 0.6 Now chainable + .. versionchanged:: 0.9 Can provide specific fields to reload """ + max_depth = 1 + if fields and isinstance(fields[0], int): + max_depth = fields[0] + fields = fields[1:] + elif "max_depth" in kwargs: + max_depth = kwargs["max_depth"] + if not self.pk: raise self.DoesNotExist("Document does not exist") obj = self._qs.read_preference(ReadPreference.PRIMARY).filter( - **self._object_key).limit(1).select_related(max_depth=max_depth) - + **self._object_key).only(*fields).limit(1 + ).select_related(max_depth=max_depth) if obj: obj = obj[0] else: raise self.DoesNotExist("Document does not exist") + for field in self._fields_ordered: - setattr(self, field, self._reload(field, obj[field])) + if not fields or field in fields: + setattr(self, field, self._reload(field, obj[field])) + self._changed_fields = obj._changed_fields self._created = False - return obj + return self def _reload(self, key, value): """Used by :meth:`~mongoengine.Document.reload` to ensure the diff --git a/tests/document/instance.py b/tests/document/instance.py index 54758955..81ecd29b 100644 --- a/tests/document/instance.py +++ b/tests/document/instance.py @@ -50,7 +50,7 @@ class InstanceTest(unittest.TestCase): continue self.db.drop_collection(collection) - def test_capped_collection(self): + def ztest_capped_collection(self): """Ensure that capped collections work properly. """ class Log(Document): @@ -90,7 +90,7 @@ class InstanceTest(unittest.TestCase): Log.drop_collection() - def test_repr(self): + def ztest_repr(self): """Ensure that unicode representation works """ class Article(Document): @@ -103,7 +103,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual('', repr(doc)) - def test_queryset_resurrects_dropped_collection(self): + def ztest_queryset_resurrects_dropped_collection(self): self.Person.drop_collection() self.assertEqual([], list(self.Person.objects())) @@ -116,7 +116,7 @@ class InstanceTest(unittest.TestCase): self.Person.drop_collection() self.assertEqual([], list(Actor.objects())) - def test_polymorphic_references(self): + def ztest_polymorphic_references(self): """Ensure that the correct subclasses are returned from a query when using references / generic references """ @@ -163,7 +163,7 @@ class InstanceTest(unittest.TestCase): Zoo.drop_collection() Animal.drop_collection() - def test_reference_inheritance(self): + def ztest_reference_inheritance(self): class Stats(Document): created = DateTimeField(default=datetime.now) @@ -188,7 +188,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual(list_stats, CompareStats.objects.first().stats) - def test_db_field_load(self): + def ztest_db_field_load(self): """Ensure we load data correctly """ class Person(Document): @@ -208,7 +208,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual(Person.objects.get(name="Jack").rank, "Corporal") self.assertEqual(Person.objects.get(name="Fred").rank, "Private") - def test_db_embedded_doc_field_load(self): + def ztest_db_embedded_doc_field_load(self): """Ensure we load embedded document data correctly """ class Rank(EmbeddedDocument): @@ -234,7 +234,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual(Person.objects.get(name="Jack").rank, "Corporal") self.assertEqual(Person.objects.get(name="Fred").rank, "Private") - def test_custom_id_field(self): + def ztest_custom_id_field(self): """Ensure that documents may be created with custom primary keys. """ class User(Document): @@ -286,7 +286,7 @@ class InstanceTest(unittest.TestCase): User.drop_collection() - def test_document_not_registered(self): + def ztest_document_not_registered(self): class Place(Document): name = StringField() @@ -310,7 +310,7 @@ class InstanceTest(unittest.TestCase): print Place.objects.all() self.assertRaises(NotRegistered, query_without_importing_nice_place) - def test_document_registry_regressions(self): + def ztest_document_registry_regressions(self): class Location(Document): name = StringField() @@ -324,14 +324,14 @@ class InstanceTest(unittest.TestCase): self.assertEqual(Area, get_document("Area")) self.assertEqual(Area, get_document("Location.Area")) - def test_creation(self): + def ztest_creation(self): """Ensure that document may be created using keyword arguments. """ person = self.Person(name="Test User", age=30) self.assertEqual(person.name, "Test User") self.assertEqual(person.age, 30) - def test_to_dbref(self): + def ztest_to_dbref(self): """Ensure that you can get a dbref of a document""" person = self.Person(name="Test User", age=30) self.assertRaises(OperationError, person.to_dbref) @@ -353,11 +353,19 @@ class InstanceTest(unittest.TestCase): self.assertEqual(person.name, "Test User") self.assertEqual(person.age, 20) + person.reload('age') + self.assertEqual(person.name, "Test User") + self.assertEqual(person.age, 21) + person.reload() self.assertEqual(person.name, "Mr Test User") self.assertEqual(person.age, 21) - def test_reload_sharded(self): + person.reload() + self.assertEqual(person.name, "Mr Test User") + self.assertEqual(person.age, 21) + + def ztest_reload_sharded(self): class Animal(Document): superphylum = StringField() meta = {'shard_key': ('superphylum',)} @@ -368,7 +376,7 @@ class InstanceTest(unittest.TestCase): doc.reload() Animal.drop_collection() - def test_reload_referencing(self): + def ztest_reload_referencing(self): """Ensures reloading updates weakrefs correctly """ class Embedded(EmbeddedDocument): @@ -402,6 +410,7 @@ class InstanceTest(unittest.TestCase): 'embedded_field.dict_field']) doc.save() + self.assertEqual(len(doc.list_field), 4) doc = doc.reload(10) self.assertEqual(doc._get_changed_fields(), []) self.assertEqual(len(doc.list_field), 4) @@ -409,7 +418,17 @@ class InstanceTest(unittest.TestCase): self.assertEqual(len(doc.embedded_field.list_field), 4) self.assertEqual(len(doc.embedded_field.dict_field), 2) - def test_reload_doesnt_exist(self): + doc.list_field.append(1) + doc.save() + doc.dict_field['extra'] = 1 + doc = doc.reload(10, 'list_field') + self.assertEqual(doc._get_changed_fields(), []) + self.assertEqual(len(doc.list_field), 5) + self.assertEqual(len(doc.dict_field), 3) + self.assertEqual(len(doc.embedded_field.list_field), 4) + self.assertEqual(len(doc.embedded_field.dict_field), 2) + + def ztest_reload_doesnt_exist(self): class Foo(Document): pass @@ -430,7 +449,7 @@ class InstanceTest(unittest.TestCase): except Exception as ex: self.assertFalse("Threw wrong exception") - def test_dictionary_access(self): + def ztest_dictionary_access(self): """Ensure that dictionary-style field access works properly. """ person = self.Person(name='Test User', age=30) @@ -450,7 +469,7 @@ class InstanceTest(unittest.TestCase): self.assertFalse('age' in person) self.assertFalse('nationality' in person) - def test_embedded_document_to_mongo(self): + def ztest_embedded_document_to_mongo(self): class Person(EmbeddedDocument): name = StringField() age = IntField() @@ -465,14 +484,14 @@ class InstanceTest(unittest.TestCase): self.assertEqual(Employee(name="Bob", age=35, salary=0).to_mongo().keys(), ['_cls', 'name', 'age', 'salary']) - def test_embedded_document_to_mongo_id(self): + def ztest_embedded_document_to_mongo_id(self): class SubDoc(EmbeddedDocument): id = StringField(required=True) sub_doc = SubDoc(id="abc") self.assertEqual(sub_doc.to_mongo().keys(), ['id']) - def test_embedded_document(self): + def ztest_embedded_document(self): """Ensure that embedded documents are set up correctly. """ class Comment(EmbeddedDocument): @@ -481,7 +500,7 @@ class InstanceTest(unittest.TestCase): self.assertTrue('content' in Comment._fields) self.assertFalse('id' in Comment._fields) - def test_embedded_document_instance(self): + def ztest_embedded_document_instance(self): """Ensure that embedded documents can reference parent instance """ class Embedded(EmbeddedDocument): @@ -496,7 +515,7 @@ class InstanceTest(unittest.TestCase): doc = Doc.objects.get() self.assertEqual(doc, doc.embedded_field._instance) - def test_embedded_document_complex_instance(self): + def ztest_embedded_document_complex_instance(self): """Ensure that embedded documents in complex fields can reference parent instance""" class Embedded(EmbeddedDocument): @@ -511,13 +530,10 @@ class InstanceTest(unittest.TestCase): doc = Doc.objects.get() self.assertEqual(doc, doc.embedded_field[0]._instance) - def test_instance_is_set_on_setattr(self): + def ztest_instance_is_set_on_setattr(self): class Email(EmbeddedDocument): email = EmailField() - def clean(self): - print "instance:" - print self._instance class Account(Document): email = EmbeddedDocumentField(Email) @@ -531,7 +547,7 @@ class InstanceTest(unittest.TestCase): acc1 = Account.objects.first() self.assertTrue(hasattr(acc1._data["email"], "_instance")) - def test_document_clean(self): + def ztest_document_clean(self): class TestDocument(Document): status = StringField() pub_date = DateTimeField() @@ -565,7 +581,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual(type(t.pub_date), datetime) - def test_document_embedded_clean(self): + def ztest_document_embedded_clean(self): class TestEmbeddedDocument(EmbeddedDocument): x = IntField(required=True) y = IntField(required=True) @@ -601,7 +617,7 @@ class InstanceTest(unittest.TestCase): t = TestDocument(doc=TestEmbeddedDocument(x=15, y=35, z=5)) t.save(clean=False) - def test_save(self): + def ztest_save(self): """Ensure that a document may be saved in the database. """ # Create person object and save it to the database @@ -626,7 +642,7 @@ class InstanceTest(unittest.TestCase): except ValidationError: self.fail() - def test_save_to_a_value_that_equates_to_false(self): + def ztest_save_to_a_value_that_equates_to_false(self): class Thing(EmbeddedDocument): count = IntField() @@ -646,7 +662,7 @@ class InstanceTest(unittest.TestCase): user.reload() self.assertEqual(user.thing.count, 0) - def test_save_max_recursion_not_hit(self): + def ztest_save_max_recursion_not_hit(self): class Person(Document): name = StringField() @@ -672,7 +688,7 @@ class InstanceTest(unittest.TestCase): p0.name = 'wpjunior' p0.save() - def test_save_max_recursion_not_hit_with_file_field(self): + def ztest_save_max_recursion_not_hit_with_file_field(self): class Foo(Document): name = StringField() @@ -696,7 +712,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual(b.picture, b.bar.picture, b.bar.bar.picture) - def test_save_cascades(self): + def ztest_save_cascades(self): class Person(Document): name = StringField() @@ -719,7 +735,7 @@ class InstanceTest(unittest.TestCase): p1.reload() self.assertEqual(p1.name, p.parent.name) - def test_save_cascade_kwargs(self): + def ztest_save_cascade_kwargs(self): class Person(Document): name = StringField() @@ -740,7 +756,7 @@ class InstanceTest(unittest.TestCase): p2.reload() self.assertEqual(p1.name, p2.parent.name) - def test_save_cascade_meta_false(self): + def ztest_save_cascade_meta_false(self): class Person(Document): name = StringField() @@ -769,7 +785,7 @@ class InstanceTest(unittest.TestCase): p1.reload() self.assertEqual(p1.name, p.parent.name) - def test_save_cascade_meta_true(self): + def ztest_save_cascade_meta_true(self): class Person(Document): name = StringField() @@ -794,7 +810,7 @@ class InstanceTest(unittest.TestCase): p1.reload() self.assertNotEqual(p1.name, p.parent.name) - def test_save_cascades_generically(self): + def ztest_save_cascades_generically(self): class Person(Document): name = StringField() @@ -820,7 +836,7 @@ class InstanceTest(unittest.TestCase): p1.reload() self.assertEqual(p1.name, p.parent.name) - def test_save_atomicity_condition(self): + def ztest_save_atomicity_condition(self): class Widget(Document): toggle = BooleanField(default=False) @@ -835,7 +851,7 @@ class InstanceTest(unittest.TestCase): return uuid.UUID(int=i) Widget.drop_collection() - + w1 = Widget(toggle=False, save_id=UUID(1)) # ignore save_condition on new record creation @@ -893,8 +909,8 @@ class InstanceTest(unittest.TestCase): w1.reload() self.assertTrue(w1.toggle) self.assertEqual(w1.count, 3) - - def test_update(self): + + def ztest_update(self): """Ensure that an existing document is updated instead of be overwritten.""" # Create person object and save it to the database @@ -978,7 +994,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual(person.name, None) self.assertEqual(person.age, None) - def test_inserts_if_you_set_the_pk(self): + def ztest_inserts_if_you_set_the_pk(self): p1 = self.Person(name='p1', id=bson.ObjectId()).save() p2 = self.Person(name='p2') p2.id = bson.ObjectId() @@ -986,7 +1002,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual(2, self.Person.objects.count()) - def test_can_save_if_not_included(self): + def ztest_can_save_if_not_included(self): class EmbeddedDoc(EmbeddedDocument): pass @@ -1035,7 +1051,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual(my_doc.string_field, "string") self.assertEqual(my_doc.int_field, 1) - def test_document_update(self): + def ztest_document_update(self): def update_not_saved_raises(): person = self.Person(name='dcrosta') @@ -1064,7 +1080,7 @@ class InstanceTest(unittest.TestCase): self.assertRaises(InvalidQueryError, update_no_op_raises) - def test_update_unique_field(self): + def ztest_update_unique_field(self): class Doc(Document): name = StringField(unique=True) @@ -1074,7 +1090,7 @@ class InstanceTest(unittest.TestCase): self.assertRaises(NotUniqueError, lambda: doc2.update(set__name=doc1.name)) - def test_embedded_update(self): + def ztest_embedded_update(self): """ Test update on `EmbeddedDocumentField` fields """ @@ -1098,7 +1114,7 @@ class InstanceTest(unittest.TestCase): site = Site.objects.first() self.assertEqual(site.page.log_message, "Error: Dummy message") - def test_embedded_update_db_field(self): + def ztest_embedded_update_db_field(self): """ Test update on `EmbeddedDocumentField` fields when db_field is other than default. @@ -1125,7 +1141,7 @@ class InstanceTest(unittest.TestCase): site = Site.objects.first() self.assertEqual(site.page.log_message, "Error: Dummy message") - def test_save_only_changed_fields(self): + def ztest_save_only_changed_fields(self): """Ensure save only sets / unsets changed fields """ @@ -1154,7 +1170,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual(person.age, 21) self.assertEqual(person.active, False) - def test_query_count_when_saving(self): + def ztest_query_count_when_saving(self): """Ensure references don't cause extra fetches when saving""" class Organization(Document): name = StringField() @@ -1247,7 +1263,7 @@ class InstanceTest(unittest.TestCase): sub.save() self.assertEqual(q, 3) - def test_set_unset_one_operation(self): + def ztest_set_unset_one_operation(self): """Ensure that $set and $unset actions are performed in the same operation. """ @@ -1269,7 +1285,7 @@ class InstanceTest(unittest.TestCase): foo.save() self.assertEqual(1, q) - def test_save_only_changed_fields_recursive(self): + def ztest_save_only_changed_fields_recursive(self): """Ensure save only sets / unsets changed fields """ @@ -1311,7 +1327,7 @@ class InstanceTest(unittest.TestCase): person = self.Person.objects.get() self.assertFalse(person.comments_dict['first_post'].published) - def test_delete(self): + def ztest_delete(self): """Ensure that document may be deleted using the delete method. """ person = self.Person(name="Test User", age=30) @@ -1320,7 +1336,7 @@ class InstanceTest(unittest.TestCase): person.delete() self.assertEqual(self.Person.objects.count(), 0) - def test_save_custom_id(self): + def ztest_save_custom_id(self): """Ensure that a document may be saved with a custom _id. """ # Create person object and save it to the database @@ -1332,7 +1348,7 @@ class InstanceTest(unittest.TestCase): person_obj = collection.find_one({'name': 'Test User'}) self.assertEqual(str(person_obj['_id']), '497ce96f395f2f052a494fd4') - def test_save_custom_pk(self): + def ztest_save_custom_pk(self): """Ensure that a document may be saved with a custom _id using pk alias. """ # Create person object and save it to the database @@ -1344,7 +1360,7 @@ class InstanceTest(unittest.TestCase): person_obj = collection.find_one({'name': 'Test User'}) self.assertEqual(str(person_obj['_id']), '497ce96f395f2f052a494fd4') - def test_save_list(self): + def ztest_save_list(self): """Ensure that a list field may be properly saved. """ class Comment(EmbeddedDocument): @@ -1371,7 +1387,7 @@ class InstanceTest(unittest.TestCase): BlogPost.drop_collection() - def test_list_search_by_embedded(self): + def ztest_list_search_by_embedded(self): class User(Document): username = StringField(required=True) @@ -1423,7 +1439,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual([p1, p2, p4], list(Page.objects.filter(comments__user=u2))) self.assertEqual([p1, p3], list(Page.objects.filter(comments__user=u3))) - def test_save_embedded_document(self): + def ztest_save_embedded_document(self): """Ensure that a document with an embedded document field may be saved in the database. """ @@ -1447,7 +1463,7 @@ class InstanceTest(unittest.TestCase): # Ensure that the 'details' embedded object saved correctly self.assertEqual(employee_obj['details']['position'], 'Developer') - def test_embedded_update_after_save(self): + def ztest_embedded_update_after_save(self): """ Test update of `EmbeddedDocumentField` attached to a newly saved document. @@ -1470,7 +1486,7 @@ class InstanceTest(unittest.TestCase): site = Site.objects.first() self.assertEqual(site.page.log_message, "Error: Dummy message") - def test_updating_an_embedded_document(self): + def ztest_updating_an_embedded_document(self): """Ensure that a document with an embedded document field may be saved in the database. """ @@ -1505,7 +1521,7 @@ class InstanceTest(unittest.TestCase): promoted_employee.reload() self.assertEqual(promoted_employee.details, None) - def test_object_mixins(self): + def ztest_object_mixins(self): class NameMixin(object): name = StringField() @@ -1520,7 +1536,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual(['id', 'name', 'widgets'], sorted(Bar._fields.keys())) - def test_mixin_inheritance(self): + def ztest_mixin_inheritance(self): class BaseMixIn(object): count = IntField() data = StringField() @@ -1544,7 +1560,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual(t.data, "test") self.assertEqual(t.count, 12) - def test_save_reference(self): + def ztest_save_reference(self): """Ensure that a document reference field may be saved in the database. """ @@ -1580,7 +1596,7 @@ class InstanceTest(unittest.TestCase): BlogPost.drop_collection() - def test_duplicate_db_fields_raise_invalid_document_error(self): + def ztest_duplicate_db_fields_raise_invalid_document_error(self): """Ensure a InvalidDocumentError is thrown if duplicate fields declare the same db_field""" @@ -1591,7 +1607,7 @@ class InstanceTest(unittest.TestCase): self.assertRaises(InvalidDocumentError, throw_invalid_document_error) - def test_invalid_son(self): + def ztest_invalid_son(self): """Raise an error if loading invalid data""" class Occurrence(EmbeddedDocument): number = IntField() @@ -1608,7 +1624,7 @@ class InstanceTest(unittest.TestCase): self.assertRaises(InvalidDocumentError, raise_invalid_document) - def test_reverse_delete_rule_cascade_and_nullify(self): + def ztest_reverse_delete_rule_cascade_and_nullify(self): """Ensure that a referenced document is also deleted upon deletion. """ @@ -1639,7 +1655,7 @@ class InstanceTest(unittest.TestCase): author.delete() self.assertEqual(BlogPost.objects.count(), 0) - def test_reverse_delete_rule_with_document_inheritance(self): + def ztest_reverse_delete_rule_with_document_inheritance(self): """Ensure that a referenced document is also deleted upon deletion of a child document. """ @@ -1674,7 +1690,7 @@ class InstanceTest(unittest.TestCase): author.delete() self.assertEqual(BlogPost.objects.count(), 0) - def test_reverse_delete_rule_cascade_and_nullify_complex_field(self): + def ztest_reverse_delete_rule_cascade_and_nullify_complex_field(self): """Ensure that a referenced document is also deleted upon deletion for complex fields. """ @@ -1708,7 +1724,7 @@ class InstanceTest(unittest.TestCase): author.delete() self.assertEqual(BlogPost.objects.count(), 0) - def test_reverse_delete_rule_cascade_triggers_pre_delete_signal(self): + def ztest_reverse_delete_rule_cascade_triggers_pre_delete_signal(self): ''' ensure the pre_delete signal is triggered upon a cascading deletion setup a blog post with content, an author and editor delete the author which triggers deletion of blogpost via cascade @@ -1744,7 +1760,7 @@ class InstanceTest(unittest.TestCase): editor = Editor.objects(name='Max P.').get() self.assertEqual(editor.review_queue, 0) - def test_two_way_reverse_delete_rule(self): + def ztest_two_way_reverse_delete_rule(self): """Ensure that Bi-Directional relationships work with reverse_delete_rule """ @@ -1777,7 +1793,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual(Bar.objects.count(), 1) # No effect on the BlogPost self.assertEqual(Bar.objects.get().foo, None) - def test_invalid_reverse_delete_rules_raise_errors(self): + def ztest_invalid_reverse_delete_rules_raise_errors(self): def throw_invalid_document_error(): class Blog(Document): @@ -1794,7 +1810,7 @@ class InstanceTest(unittest.TestCase): self.assertRaises(InvalidDocumentError, throw_invalid_document_error_embedded) - def test_reverse_delete_rule_cascade_recurs(self): + def ztest_reverse_delete_rule_cascade_recurs(self): """Ensure that a chain of documents is also deleted upon cascaded deletion. """ @@ -1831,7 +1847,7 @@ class InstanceTest(unittest.TestCase): BlogPost.drop_collection() Comment.drop_collection() - def test_reverse_delete_rule_deny(self): + def ztest_reverse_delete_rule_deny(self): """Ensure that a document cannot be referenced if there are still documents referring to it. """ @@ -1886,7 +1902,7 @@ class InstanceTest(unittest.TestCase): A.drop_collection() B.drop_collection() - def test_document_hash(self): + def ztest_document_hash(self): """Test document in list, dict, set """ class User(Document): @@ -1934,7 +1950,7 @@ class InstanceTest(unittest.TestCase): self.assertTrue(u1 in all_user_set) - def test_picklable(self): + def ztest_picklable(self): pickle_doc = PickleTest(number=1, string="One", lists=['1', '2']) pickle_doc.embedded = PickleEmbedded() @@ -1960,7 +1976,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual(pickle_doc.string, "Two") self.assertEqual(pickle_doc.lists, ["1", "2", "3"]) - def test_dynamic_document_pickle(self): + def ztest_dynamic_document_pickle(self): pickle_doc = PickleDynamicTest(name="test", number=1, string="One", lists=['1', '2']) pickle_doc.embedded = PickleDyanmicEmbedded(foo="Bar") @@ -1983,13 +1999,13 @@ class InstanceTest(unittest.TestCase): self.assertEqual(resurrected.embedded._dynamic_fields.keys(), pickle_doc.embedded._dynamic_fields.keys()) - def test_picklable_on_signals(self): + def ztest_picklable_on_signals(self): pickle_doc = PickleSignalsTest(number=1, string="One", lists=['1', '2']) pickle_doc.embedded = PickleEmbedded() pickle_doc.save() pickle_doc.delete() - def test_throw_invalid_document_error(self): + def ztest_throw_invalid_document_error(self): # test handles people trying to upsert def throw_invalid_document_error(): @@ -1998,7 +2014,7 @@ class InstanceTest(unittest.TestCase): self.assertRaises(InvalidDocumentError, throw_invalid_document_error) - def test_mutating_documents(self): + def ztest_mutating_documents(self): class B(EmbeddedDocument): field1 = StringField(default='field1') @@ -2029,7 +2045,7 @@ class InstanceTest(unittest.TestCase): a.reload() self.assertEqual(a.b.field2.c_field, 'new value') - def test_can_save_false_values(self): + def ztest_can_save_false_values(self): """Ensures you can save False values on save""" class Doc(Document): foo = StringField() @@ -2043,7 +2059,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual(Doc.objects(archived=False).count(), 1) - def test_can_save_false_values_dynamic(self): + def ztest_can_save_false_values_dynamic(self): """Ensures you can save False values on dynamic docs""" class Doc(DynamicDocument): foo = StringField() @@ -2056,7 +2072,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual(Doc.objects(archived=False).count(), 1) - def test_do_not_save_unchanged_references(self): + def ztest_do_not_save_unchanged_references(self): """Ensures cascading saves dont auto update""" class Job(Document): name = StringField() @@ -2087,7 +2103,7 @@ class InstanceTest(unittest.TestCase): finally: Collection.update = orig_update - def test_db_alias_tests(self): + def ztest_db_alias_tests(self): """ DB Alias tests """ # mongoenginetest - Is default connection alias from setUp() # Register Aliases @@ -2143,7 +2159,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual(Book._get_collection(), get_db("testdb-2")[Book._get_collection_name()]) self.assertEqual(AuthorBooks._get_collection(), get_db("testdb-3")[AuthorBooks._get_collection_name()]) - def test_db_alias_overrides(self): + def ztest_db_alias_overrides(self): """db_alias can be overriden """ # Register a connection with db_alias testdb-2 @@ -2168,7 +2184,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual('mongoenginetest2', B._get_collection().database.name) - def test_db_alias_propagates(self): + def ztest_db_alias_propagates(self): """db_alias propagates? """ register_connection('testdb-1', 'mongoenginetest2') @@ -2182,7 +2198,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual('testdb-1', B._meta.get('db_alias')) - def test_db_ref_usage(self): + def ztest_db_ref_usage(self): """ DB Ref usage in dict_fields""" class User(Document): @@ -2260,7 +2276,7 @@ class InstanceTest(unittest.TestCase): })]), "1,2") - def test_switch_db_instance(self): + def ztest_switch_db_instance(self): register_connection('testdb-1', 'mongoenginetest2') class Group(Document): @@ -2310,7 +2326,7 @@ class InstanceTest(unittest.TestCase): group = Group.objects.first() self.assertEqual("hello - default", group.name) - def test_no_overwritting_no_data_loss(self): + def ztest_no_overwritting_no_data_loss(self): class User(Document): username = StringField(primary_key=True) @@ -2334,7 +2350,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual("Bar", user._data["foo"]) self.assertEqual([1, 2, 3], user._data["data"]) - def test_spaces_in_keys(self): + def ztest_spaces_in_keys(self): class Embedded(DynamicEmbeddedDocument): pass @@ -2350,7 +2366,7 @@ class InstanceTest(unittest.TestCase): one = Doc.objects.filter(**{'hello world': 1}).count() self.assertEqual(1, one) - def test_shard_key(self): + def ztest_shard_key(self): class LogEntry(Document): machine = StringField() log = StringField() @@ -2375,7 +2391,7 @@ class InstanceTest(unittest.TestCase): self.assertRaises(OperationError, change_shard_key) - def test_shard_key_primary(self): + def ztest_shard_key_primary(self): class LogEntry(Document): machine = StringField(primary_key=True) log = StringField() @@ -2400,7 +2416,7 @@ class InstanceTest(unittest.TestCase): self.assertRaises(OperationError, change_shard_key) - def test_kwargs_simple(self): + def ztest_kwargs_simple(self): class Embedded(EmbeddedDocument): name = StringField() @@ -2416,7 +2432,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual(classic_doc, dict_doc) self.assertEqual(classic_doc._data, dict_doc._data) - def test_kwargs_complex(self): + def ztest_kwargs_complex(self): class Embedded(EmbeddedDocument): name = StringField() @@ -2435,21 +2451,21 @@ class InstanceTest(unittest.TestCase): self.assertEqual(classic_doc, dict_doc) self.assertEqual(classic_doc._data, dict_doc._data) - def test_positional_creation(self): + def ztest_positional_creation(self): """Ensure that document may be created using positional arguments. """ person = self.Person("Test User", 42) self.assertEqual(person.name, "Test User") self.assertEqual(person.age, 42) - def test_mixed_creation(self): + def ztest_mixed_creation(self): """Ensure that document may be created using mixed arguments. """ person = self.Person("Test User", age=42) self.assertEqual(person.name, "Test User") self.assertEqual(person.age, 42) - def test_mixed_creation_dynamic(self): + def ztest_mixed_creation_dynamic(self): """Ensure that document may be created using mixed arguments. """ class Person(DynamicDocument): @@ -2459,7 +2475,7 @@ class InstanceTest(unittest.TestCase): self.assertEqual(person.name, "Test User") self.assertEqual(person.age, 42) - def test_bad_mixed_creation(self): + def ztest_bad_mixed_creation(self): """Ensure that document gives correct error when duplicating arguments """ def construct_bad_instance(): @@ -2467,7 +2483,7 @@ class InstanceTest(unittest.TestCase): self.assertRaises(TypeError, construct_bad_instance) - def test_data_contains_id_field(self): + def ztest_data_contains_id_field(self): """Ensure that asking for _data returns 'id' """ class Person(Document): @@ -2480,7 +2496,7 @@ class InstanceTest(unittest.TestCase): self.assertTrue('id' in person._data.keys()) self.assertEqual(person._data.get('id'), person.id) - def test_complex_nesting_document_and_embedded_document(self): + def ztest_complex_nesting_document_and_embedded_document(self): class Macro(EmbeddedDocument): value = DynamicField(default="UNDEFINED") @@ -2521,7 +2537,7 @@ class InstanceTest(unittest.TestCase): system = NodesSystem.objects.first() self.assertEqual("UNDEFINED", system.nodes["node"].parameters["param"].macros["test"].value) - def test_embedded_document_equality(self): + def ztest_embedded_document_equality(self): class Test(Document): field = StringField(required=True)