def test_recursive_descent_set_tocopy(self): path = "store..[?('price' in @)].price" original = copy.deepcopy(self.obj) result = querypath.set_(self.obj, path, self.value, True) for value in querypath.get(result, path): self.assertEqual(value, self.value) self.assertEqual(original, self.obj) self.assertIsNot(result, self.obj)
def test_script_query_set_(self): path = "store.books.*[?(@.price<10)].title" result = querypath.set_(self.obj, path, self.value, False) for value in querypath.get(result, path): self.assertEqual(value, self.value) for value in querypath.get(result, "store.books.*[?(@.price>=10)].title"): self.assertNotEqual(value, self.value) self.assertIs(result, self.obj)
def test_script_query2_set_(self): path = "store.books.*[?('isbn' in @)].title" result = querypath.set_(self.obj, path, self.value, False) for value in querypath.get(result, path): self.assertEqual(value, self.value) for value in querypath.get(result, "store.books.*[?('isbn' not in @)].title"): self.assertNotEqual(value, self.value) self.assertIs(result, self.obj)
def test_script_query_set_tocopy(self): path = "store.books.*[?(@.price<10)].title" original = copy.deepcopy(self.obj) result = querypath.set_(self.obj, path, self.value, True) for value in querypath.get(result, path): self.assertEqual(value, self.value) for value in querypath.get(result, "store.books.*[?(@.price>=10)].title"): self.assertNotEqual(value, self.value) self.assertEqual(original, self.obj) self.assertIsNot(result, self.obj)
def test_script_query2_set_tocopy(self): path = "store.books.*[?('isbn' in @.__dict__)].title" original = copy.deepcopy(self.obj) result = querypath.set_(self.obj, path, self.value, True) for value in querypath.get(result, path): self.assertEqual(value, self.value) for value in querypath.get(result, "store.books.*[?('isbn' not in @.__dict__)].title"): self.assertNotEqual(value, self.value) self.assertEqual(original, self.obj) self.assertIsNot(result, self.obj)
def test_valid_set_(self): original = copy.deepcopy(self.obj) for path in ( "store.bicycle.color", "store.books.0.author", "store.books.*.price", "store.books[:].price", "store.books[2:].price", "store.books[:-1].price", "store.books[::2].price", "store.bicycle.color|store.book[0].title", "store.books[(@.__len__()-1)].isbn", ): self.obj = copy.deepcopy(original) result = querypath.set_(self.obj, path, self.value, False) for value in querypath.get(result, path): self.assertEqual(value, self.value) self.assertIs(result, self.obj)
def _merge(previous, items, tocopy): rvalue = previous for path, value in items if items is not None else tuple(): rvalue = _querypath.set_(rvalue, path, value, tocopy) return rvalue
def test_recursive_descent_set_(self): path = "store..[?('price' in @)].price" result = querypath.set_(self.obj, path, self.value, False) for value in querypath.get(result, path): self.assertEqual(value, self.value) self.assertIs(result, self.obj)