Skip to content

Commit b1919f5

Browse files
authored
Merge pull request #293 from poissoncorp/RDBC-1057
RDBC-1057 Metadata wasn't attached to compare exchange value via session API
2 parents 8780f40 + 80e29f9 commit b1919f5

3 files changed

Lines changed: 69 additions & 2 deletions

File tree

ravendb/documents/operations/compare_exchange/compare_exchange.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ def get_value(
9595
else:
9696
entity = self.__original_value.value
9797

98-
value = CompareExchangeValue(self._key, self._index, entity)
98+
metadata = self.__original_value.metadata if self.__original_value.has_metadata else None
99+
value = CompareExchangeValue(self._key, self._index, entity, metadata)
99100
self.__value = value
100101
return value
101102

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
from ravendb import SessionOptions, TransactionMode
2+
from ravendb.tests.test_base import TestBase, User
3+
4+
5+
class TestCompareExchangeSessionApi(TestBase):
6+
def setUp(self):
7+
super().setUp()
8+
9+
def test_get_compare_exchange_value_returns_metadata(self):
10+
key = "locks/happy-metadata"
11+
options = SessionOptions(transaction_mode=TransactionMode.CLUSTER_WIDE)
12+
13+
with self.store.open_session(session_options=options) as session:
14+
value = session.advanced.cluster_transaction.create_compare_exchange_value(key, User(name="Simon"))
15+
value.metadata["@expires"] = "2099-01-01T00:00:00.0000000Z"
16+
value.metadata["@created-at"] = "2026-04-15T12:27:51.556568Z"
17+
value.metadata["Custom-Tag"] = "hello"
18+
session.save_changes()
19+
20+
with self.store.open_session(session_options=options) as session:
21+
got = session.advanced.cluster_transaction.get_compare_exchange_value(key, User)
22+
23+
self.assertIsNotNone(got)
24+
self.assertEqual("Simon", got.value.name)
25+
self.assertTrue(got.has_metadata)
26+
self.assertEqual("2099-01-01T00:00:00.0000000Z", got.metadata["@expires"])
27+
self.assertEqual("2026-04-15T12:27:51.556568Z", got.metadata["@created-at"])
28+
self.assertEqual("hello", got.metadata["Custom-Tag"])
29+
30+
def test_delete_compare_exchange_value_removes_item(self):
31+
key = "locks/happy-delete"
32+
options = SessionOptions(transaction_mode=TransactionMode.CLUSTER_WIDE)
33+
34+
with self.store.open_session(session_options=options) as session:
35+
session.advanced.cluster_transaction.create_compare_exchange_value(key, User(name="Simon"))
36+
session.save_changes()
37+
38+
with self.store.open_session(session_options=options) as session:
39+
current = session.advanced.cluster_transaction.get_compare_exchange_value(key, User)
40+
self.assertIsNotNone(current)
41+
42+
session.advanced.cluster_transaction.delete_compare_exchange_value(current)
43+
session.save_changes()
44+
45+
with self.store.open_session(session_options=options) as session:
46+
after = session.advanced.cluster_transaction.get_compare_exchange_value(key, User)
47+
self.assertIsNone(after)
48+
49+
def test_delete_compare_exchange_value_by_key_and_index_removes_item(self):
50+
key = "locks/happy-delete-by-key"
51+
options = SessionOptions(transaction_mode=TransactionMode.CLUSTER_WIDE)
52+
53+
with self.store.open_session(session_options=options) as session:
54+
session.advanced.cluster_transaction.create_compare_exchange_value(key, User(name="Simon"))
55+
session.save_changes()
56+
57+
with self.store.open_session(session_options=options) as session:
58+
current = session.advanced.cluster_transaction.get_compare_exchange_value(key, User)
59+
self.assertIsNotNone(current)
60+
61+
session.advanced.cluster_transaction.delete_compare_exchange_value(current.key, current.index)
62+
session.save_changes()
63+
64+
with self.store.open_session(session_options=options) as session:
65+
after = session.advanced.cluster_transaction.get_compare_exchange_value(key, User)
66+
self.assertIsNone(after)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
setup(
44
name="ravendb",
55
packages=find_packages(exclude=["*.tests.*", "tests", "*.tests", "tests.*"]),
6-
version="7.2.1",
6+
version="7.2.1.post1",
77
long_description_content_type="text/markdown",
88
long_description=open("README_pypi.md").read(),
99
description="Python client for RavenDB NoSQL Database",

0 commit comments

Comments
 (0)