Skip to content

Commit d3faa1b

Browse files
committed
Add diff_version and diff_object as well
Makes the functions more self-contained and responsible for a single thing.
1 parent 9e5a925 commit d3faa1b

2 files changed

Lines changed: 87 additions & 1 deletion

File tree

terminusdb_client/client/Client.py

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2012,6 +2012,52 @@ def _convert_diff_document(self, document):
20122012
new_doc = self._conv_to_dict(document)
20132013
return new_doc
20142014

2015+
def diff_object(self, before_object, after_object):
2016+
"""Diff two different objects.
2017+
2018+
Parameters
2019+
----------
2020+
before_object : string
2021+
Before object to compare
2022+
after_object : string
2023+
After object to compare
2024+
"""
2025+
self._check_connection(check_db=False)
2026+
return json.loads(
2027+
_finish_response(
2028+
requests.post(
2029+
self._diff_url(),
2030+
headers=self._default_headers,
2031+
json={'before': before_object,
2032+
'after': after_object},
2033+
auth=self._auth(),
2034+
)
2035+
)
2036+
)
2037+
2038+
def diff_version(self, before_version, after_version):
2039+
"""Diff two different versions. Can either be a branch or a commit
2040+
2041+
Parameters
2042+
----------
2043+
before_version : string
2044+
Commit or branch of the before version to compare
2045+
after_version : string
2046+
Commit or branch of the after version to compare
2047+
"""
2048+
self._check_connection(check_db=False)
2049+
return json.loads(
2050+
_finish_response(
2051+
requests.post(
2052+
self._diff_url(),
2053+
headers=self._default_headers,
2054+
json={'before_data_version': before_version,
2055+
'after_data_version': after_version},
2056+
auth=self._auth(),
2057+
)
2058+
)
2059+
)
2060+
20152061
def diff(
20162062
self,
20172063
before: Union[
@@ -2032,7 +2078,9 @@ def diff(
20322078
],
20332079
document_id: Union[str, None] = None,
20342080
):
2035-
"""Perform diff on 2 set of document(s), result in a Patch object.
2081+
"""DEPRECATED
2082+
2083+
Perform diff on 2 set of document(s), result in a Patch object.
20362084
20372085
Do not connect when using public API.
20382086

terminusdb_client/tests/integration_tests/test_client.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,44 @@ def test_add_get_remove_org(docker_url):
110110
client.get_organization("testOrg")
111111

112112

113+
def test_diff_object(docker_url):
114+
# create client
115+
client = Client(docker_url, user_agent=test_user_agent)
116+
# test create db
117+
client.connect()
118+
diff = client.diff_object({'test': 'wew'}, {'test': 'wow'})
119+
assert diff == {'test': {'@before': 'wew', '@after': 'wow', '@op': 'SwapValue'}}
120+
121+
122+
def test_diff_version(docker_url):
123+
client = Client(docker_url, user_agent=test_user_agent)
124+
client.connect()
125+
db_name = "philosophers" + str(random())
126+
client.create_database(db_name)
127+
client.connect(db=db_name)
128+
# Add a philosopher schema
129+
schema = {"@type": "Class",
130+
"@id": "Philosopher",
131+
"name": "xsd:string"
132+
}
133+
# Add schema and Socrates
134+
client.insert_document(schema, graph_type="schema")
135+
client.insert_document({"name": "Socrates"})
136+
137+
# Create new branch and switch to it
138+
client.create_branch("changes")
139+
client.branch = "changes"
140+
141+
# Add more philosophers
142+
client.insert_document({"name": "Plato"})
143+
client.insert_document({"name": "Aristotle"})
144+
145+
diff = client.diff_version("main", "changes")
146+
assert len(diff) == 2
147+
assert diff[0]['@insert']['name'] == 'Plato'
148+
assert diff[1]['@insert']['name'] == 'Aristotle'
149+
150+
113151
def test_log(docker_url):
114152
# create client
115153
client = Client(docker_url, user_agent=test_user_agent)

0 commit comments

Comments
 (0)