def test_delitem_does_not_work_on_orphans(self): doc = Document({"item": {"nested": "value"}}) fragment = doc['item'] doc.value = {} self.assertTrue(fragment.is_orphaned) self.assertRaises(OrphanedFragmentError, fragment.__delitem__, "nested")
def __getattribute__(self, name) : _fields = Document.__getattribute__(self, '_fields') if name in _fields: if isinstance(_fields[name], JSONObjectField) or \ isinstance(_fields[name], JSONListField): return FragmentProxy(self[name]) return self[name].value return Document.__getattribute__(self, name)
def __getattribute__(self, name): _fields = Document.__getattribute__(self, '_fields') if name in _fields: if isinstance(_fields[name], JSONObjectField) or \ isinstance(_fields[name], JSONListField): return FragmentProxy(self[name]) return self[name].value return Document.__getattribute__(self, name)
def test_delitem_undefaults(self): doc = Document(DefaultValue, {'default': {"foo": "bar"}}) self.assertEqual(doc['foo'].value, "bar") self.assertTrue(doc.is_default) del doc["foo"] self.assertEqual(doc['foo'].value, "bar") self.assertFalse(doc.is_default)
def test_deeply_nested_defaults_unwind(self): doc = Document(value={}, schema={ "type": "object", "default": {}, "properties": { "a": { "type": "object", "default": {}, "properties": { "b": { "type": "object", "default": {}, "properties": { "c": { "type": "integer", "default": 0 } } } } } } }) self.assertEqual(doc._value, {}) self.assertTrue(doc['a']['b']['c'].is_default) self.assertEqual(doc['a']['b']['c'].value, 0) self.assertEqual(doc._value, {}) doc['a']['b']['c'].value = 0 self.assertFalse(doc['a']['b']['c'].is_default) self.assertEqual(doc._value, {'a': {'b': {'c': 0}}})
def test_delitem_removes_data(self): # NOTE: I use Document, insted of DocumentFragment, as here the # document revision gets bumped and I did not want to mock that doc = Document({"item": "value"}) del doc['item'] self.assertTrue("item" not in doc._value) self.assertTrue("item" not in doc._fragment_cache)
def __delattr__(self, item): if hasattr(self, '_fields') and item in self._fields: del self[item] else: return Document.__delattr__(self, item)
def test_delitem_bumps_document_revision(self): doc = Document({"item": "value"}) before = doc._revision del doc['item'] after = doc._revision self.assertNotEqual(before, after)
def __setattr__(self, key, value): if hasattr(self, '_fields') and key in self._fields: self[key] = value else: return Document.__setattr__(self, key, value)
def test_is_orphaned(self): doc = Document({}) doc["foo"] = "value" foo = doc["foo"] doc.value = {} self.assertTrue(foo.is_orphaned)
def test_document_has_initial_revision(self): doc = Document({}) self.assertEqual(doc.revision, 0)
def test_document_is_valid_initially(self): doc = Document({}) try: doc.validate() except ValidationError: self.fail("Document was not valid")
def test_delitem_orphans_fragments(self): doc = Document({"item": "value"}) fragment = doc['item'] del doc['item'] self.assertTrue(fragment.is_orphaned)
def test_document_has_no_item(self): doc = Document({}) self.assertIs(doc._item, None)
def test_document_is_its_own_document(self): doc = Document({}) self.assertIs(doc._document, doc)
def test_document_initial_schema(self): doc = Document({}) self.assertEqual(doc.document_schema, {"type": "any"})
def test_document_is_empty_initially(self): doc = Document({}) self.assertEqual(doc._value, {})