def test_document_2(self): d = u.Document2() self.assertIsNone(d.self_value) self.assertDictEqual( d.value, { '_id': None, 'f1': [None, None], 'f2': { 'a': None, 'b': None }, 'm1': { 'x1': None, 'x2': [], 'x3': [None, None], 'x4': { 'a': None, 'b': None } }, 'm2': [], 'd2': [], 'd1': { '_id': None, 'x1': None, 'x2': [], 'x3': [None, None], 'x4': { 'a': None, 'b': None } } }) dt1 = datetime.datetime(2016, 1, 2, 3, 4, 5) dt2 = datetime.datetime(2016, 2, 3, 4, 5, 6) d.set_value({ 'f1': [111, 'x'], 'f2': { 'a': 222, 'b': None }, }) self.assertIsNone(d.self_value) self.assertDictEqual( d.value, { '_id': None, 'f1': [111, 'x'], 'f2': { 'a': 222, 'b': None }, 'm1': { 'x1': None, 'x2': [], 'x3': [None, None], 'x4': { 'a': None, 'b': None } }, 'm2': [], 'd1': { '_id': None, 'x1': None, 'x2': [], 'x3': [None, None], 'x4': { 'a': None, 'b': None } }, 'd2': [] }) self.assertDictEqual(d.query, {'$set': { 'f1': [111, 'x'], 'f2.a': 222 }}) d['m1'].value = { 'x1': 1, 'x2': [dt1], 'x3': [2, None], 'x4': { 'a': 3, 'b': None } } self.assertDictEqual( d.query, { '$set': { 'f1': [111, 'x'], 'f2.a': 222, 'm1.x1': 1.0, 'm1.x2': [dt1], 'm1.x3': [2, None], 'm1.x4.a': 3 } }) d['m2'].append_value({ 'x1': 1, 'x2': [dt1], 'x3': [2, None], 'x4': { 'a': 3, 'b': None } }) self.assertDictEqual( d.query, { '$set': { 'f1': [111, 'x'], 'f2.a': 222, 'm1.x1': 1.0, 'm1.x2': [dt1], 'm1.x3': [2, None], 'm1.x4.a': 3, 'm2': [{ 'x2': [dt1], 'x3': [2, None], 'x1': 1.0, 'x4': { 'a': 3, 'b': None } }] } }) d['m1.x2'].value = [dt2, dt1] self.assertDictEqual( d.query, { '$set': { 'f1': [111, 'x'], 'f2.a': 222, 'm1.x1': 1.0, 'm1.x2': [dt2, dt1], 'm1.x3': [2, None], 'm1.x4.a': 3, 'm2': [{ 'x2': [dt1], 'x3': [2, None], 'x1': 1.0, 'x4': { 'a': 3, 'b': None } }] } }) self.assertEqual(d['m1'].prop1, 3.0) self.assertEqual(d['m2.0'].prop1, 3.0) d['m1.x1'].value = 10 d['m2.0.x1'].value = 20 self.assertEqual(d['m1'].prop1, 12.0) self.assertEqual(d['m2.0'].prop1, 22.0)
def test_document_4(self): dt1 = datetime.datetime(2016, 1, 2, 3, 4, 5) dt2 = datetime.datetime(2016, 2, 3, 4, 5, 6) id1 = ObjectId() id2 = ObjectId() d = u.Document2() # scheme = { # 'f1': (int, str), # 'f2': {'a': int, 'b': int}, # 'm1': Model1, # 'm2': [Model1], # 'd1': Document1, # 'd2': [Document1] # } d['d2'].append_value({ 'x1': 100, 'x2': [dt1], 'x3': (200, 1), 'x4': { 'b': 300 } }) self.assertTrue(d.dirty) self.assertIsNone(d.self_value) self.assertDictEqual( d.value, { '_id': None, 'f1': [None, None], 'f2': { 'a': None, 'b': None }, 'm1': { 'x1': None, 'x2': [], 'x3': [None, None], 'x4': { 'a': None, 'b': None } }, 'm2': [], 'd1': { '_id': None, 'x1': None, 'x2': [], 'x3': [None, None], 'x4': { 'a': None, 'b': None } }, 'd2': [{ '_id': None, 'x1': 100.0, 'x2': [dt1], 'x3': [200, 1], 'x4': { 'a': None, 'b': 300 } }], }) with self.assertRaises(mokito.errors.MokitoDBREFError): _ = d.query d['d2.0'].id = id1 d['d2.0'].dirty_clear() self.assertTrue(d.dirty) self.assertDictEqual( d.query, {'$set': { 'd2': [DBRef(u.Document1.__collection__, id1)] }}) d.dirty_clear() d['d2'][1].value = { 'x1': 200.0, 'x2': [dt2], 'x3': [300, 2], 'x4': { 'a': None, 'b': 400 } } with self.assertRaises(mokito.errors.MokitoDBREFError): _ = d.query d['d2.1'].id = id2 d['d2.1'].dirty_clear() self.assertTrue(d.dirty) self.assertDictEqual( d.query, { '$set': { 'd2': [ DBRef(u.Document1.__collection__, id1), DBRef(u.Document1.__collection__, id2) ] } }) del d['d2.0'] self.assertDictEqual( d.query, {'$set': { 'd2': [DBRef(u.Document1.__collection__, id2)] }}) d.dirty_clear() d['d2.0.x1'].value = 55 self.assertFalse(d.dirty) self.assertDictEqual(d.query, {}) self.assertDictEqual( d['d2'].value[0], { '_id': id2, 'x2': [dt2], 'x3': [300, 2], 'x1': 55.0, 'x4': { 'a': None, 'b': 400 } }) self.assertEqual(d['d2'].self_value[0], DBRef(u.Document1.__collection__, id2))
def test_from_json_1(self): d = u.Document2() self.assertFalse(d.dirty) d.set_value(u.col2_data2, inner=True) self.assertTrue(d.dirty) self.assertEqual(d['d1'].dbref, u.col1_dbref2) yield d['d1'].reload() yield [i.reload() for i in d['d2']] self.assertDictEqual( d.value, { '_id': u.col2_id2, 'f1': [45602, 'foo3'], 'f2': { 'a': 11, 'b': 12 }, 'm1': { 'x1': 0.2, 'x2': [u.dt11, u.dt12], 'x3': [7, 3], 'x4': { 'a': 8, 'b': 8 } }, 'm2': [{ 'x1': 0.2, 'x2': [u.xt1], 'x3': [8, 1], 'x4': { 'a': 9, 'b': 9 } }, { 'x1': 0.3, 'x2': [u.xt2, u.xt3], 'x3': [9, 2], 'x4': { 'a': 10, 'b': 10 } }], 'd1': { 'x1': 1.5, 'x2': [u.dt4, u.dt5, u.dt6], 'x3': [45601, 2], 'x4': { 'a': 3, 'b': 4 }, '_id': u.col1_id2 }, 'd2': [{ 'x1': 1.5, 'x2': [u.dt4, u.dt5, u.dt6], 'x3': [45601, 2], 'x4': { 'a': 3, 'b': 4 }, '_id': u.col1_id2 }] })
def test_document_3(self): dt2 = datetime.datetime(2016, 2, 3, 4, 5, 6) d = u.Document2() # scheme = { # 'f1': (int, str), # 'f2': {'a': int, 'b': int}, # 'm1': Model1, # 'm2': [Model1], # 'd1': Document1, ->Model1 # 'd2': [Document1] ->[Model1] # } d['d1'].value = { 'x1': 100, 'x2': [dt2], 'x3': (200, 3), 'x4': { 'b': 300 } } self.assertFalse(d.dirty) self.assertIsNone(d.self_value) self.assertDictEqual( d.value, { '_id': None, 'f1': [None, None], 'f2': { 'a': None, 'b': None }, 'm1': { 'x1': None, 'x2': [], 'x3': [None, None], 'x4': { 'a': None, 'b': None } }, 'm2': [], 'd1': { '_id': None, 'x1': 100.0, 'x2': [dt2], 'x3': [200, 3], 'x4': { 'a': None, 'b': 300 } }, 'd2': [] }) self.assertEqual(d.query, {}) # with self.assertRaises(mokito.errors.MokitoDBREFError): # _ = d.query id1 = ObjectId() d['d1'].id = id1 self.assertDictEqual( d.query, {'$set': { 'd1': DBRef(u.Document1.__collection__, id1) }}) d.dirty_clear() self.assertFalse(d.dirty) self.assertDictEqual( d.query, {'$set': { 'd1': DBRef(u.Document1.__collection__, id1) }}) d['d1'].dirty_clear() d['d1.x4.a'].value = 500 self.assertFalse(d.dirty) self.assertDictEqual(d.query, {}) self.assertTrue(d['d1'].dirty) self.assertDictEqual(d['d1'].query, {'$set': {'x4.a': 500}}) # # d['d1'].value = None # # d['d1'] = None del d['d1'] self.assertTrue(d.dirty) self.assertDictEqual(d.query, {'$unset': {'d1': ''}}) # d['f1'].value = None # d['f1'] = None del d['f1'] self.assertTrue(d.dirty) self.assertDictEqual(d.query, { '$set': { 'f1': [None, None] }, '$unset': { 'd1': '' } }) del d['f2'] self.assertTrue(d.dirty) self.assertDictEqual( d.query, { '$set': { 'f1': [None, None], 'f2.a': None, 'f2.b': None }, '$unset': { 'd1': '' } }) del d['m1'] self.assertTrue(d.dirty) self.assertDictEqual( d.query, { '$set': { 'f1': [None, None], 'f2.a': None, 'f2.b': None, 'm1.x1': None, 'm1.x2': [], 'm1.x3': [None, None], 'm1.x4.a': None, 'm1.x4.b': None }, '$unset': { 'd1': '' } }) del d['m2'] self.assertTrue(d.dirty) self.assertDictEqual( d.query, { '$set': { 'f1': [None, None], 'f2.a': None, 'f2.b': None, 'm1.x1': None, 'm1.x2': [], 'm1.x3': [None, None], 'm1.x4.a': None, 'm1.x4.b': None, 'm2': [] }, '$unset': { 'd1': '' } }) d.dirty_clear() del d['d2'] self.assertTrue(d.dirty) self.assertDictEqual(d.query, {'$set': {'d2': []}})
def test_save_4(self): x = u.Document2() x['f1.1'].value = 'foo' x['f2.a'].value = 123 self.assertIsNone(x.id) self.assertEqual((yield self.db[u.TEST_COLLECTION2].count()), 2) res = yield x.save() self.assertTrue(res) self.assertDictEqual( x.value, { '_id': x.id, 'f1': [None, 'foo'], 'f2': { 'a': 123, 'b': None }, 'm1': { 'x1': None, 'x2': [], 'x3': [None, None], 'x4': { 'a': None, 'b': None } }, 'm2': [], 'd1': { 'x1': None, 'x2': [], 'x3': [None, None], 'x4': { 'a': None, 'b': None }, '_id': None }, # 'd1': {'_id': None, 'x2': [], 'x3': [None, None], 'x1': None, 'x4': {'a': None, 'b': None}}, 'd2': [] }) self.assertIsNotNone(x.id) self.assertEqual((yield self.db[u.TEST_COLLECTION2].count()), 3) res = yield self.db[u.TEST_COLLECTION2].find_one( {'_id': { '$nin': [u.col2_id1, u.col2_id2] }}) self.assertDictEqual( res, { '_id': x.id, 'f1': [None, 'foo'], 'f2': { 'a': 123, 'b': None }, 'm1': { 'x1': None, 'x2': [], 'x3': [None, None], 'x4': { 'a': None, 'b': None } }, 'm2': [], 'd1': None, 'd2': [] })