Skip to content

Commit fb7aa30

Browse files
committed
RDBC-812 Don't send 'Id' property to the server
1 parent 207b249 commit fb7aa30

File tree

6 files changed

+49
-5
lines changed

6 files changed

+49
-5
lines changed

ravendb/documents/session/entity_to_json.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def convert_entity_to_json(self, entity: object, document_info: DocumentInfo) ->
3838
self._session.before_conversion_to_document_invoke(
3939
BeforeConversionToDocumentEventArgs(document_info.key, entity, self._session)
4040
)
41-
document = EntityToJson._convert_entity_to_json_internal(self, entity, document_info)
41+
document = EntityToJson._convert_entity_to_json_internal(self, entity, document_info, True)
4242
if document_info is not None:
4343
self._session.after_conversion_to_document_invoke(
4444
AfterConversionToDocumentEventArgs(self._session, document_info.key, entity, document)

ravendb/tests/issue_tests/test_issue_198.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from ravendb.infrastructure.orders import Company
2+
from ravendb.primitives import constants
13
from ravendb.tests.test_base import TestBase
24

35

@@ -22,6 +24,28 @@ def test_create_document_with_server_generated_guid(self):
2224
with self.store.open_session() as session:
2325
product = session.load(guid_from_server)
2426
self.assertEqual("Test", product.name)
27+
metadata_id = session.advanced.get_metadata_for(product)["@id"]
28+
identity = session.advanced.get_document_id(product)
29+
id_prop = product.Id
30+
31+
self.assertEqual(id_prop, identity)
32+
self.assertEqual(id_prop, metadata_id)
33+
self.assertEqual(id_prop, guid_from_server)
34+
35+
with self.store.open_session() as session:
36+
product = session.load(guid_from_server)
37+
product.Id = ""
38+
session.save_changes()
39+
40+
with self.store.open_session() as session:
41+
product = session.load(guid_from_server)
42+
metadata_id1 = session.advanced.get_metadata_for(product)[constants.Documents.Metadata.ID]
43+
identity1 = session.advanced.get_document_id(product)
44+
id_prop1 = product.Id
45+
46+
self.assertEqual(id_prop, id_prop1)
47+
self.assertEqual(id_prop, metadata_id1)
48+
self.assertEqual(id_prop, identity1)
2549

2650
def test_can_create_multiple_documents_with_server_generated_guid(self):
2751
with self.store.open_session() as session:
@@ -45,3 +69,14 @@ def test_can_create_multiple_documents_with_server_generated_guid(self):
4569

4670
product3 = session.load(guid_from_server3)
4771
self.assertEqual("Test3", product3.name)
72+
73+
def test_preserve_id_field(self):
74+
with self.store.open_session() as session:
75+
company = Company(Id="companies/222", name="Apple Inc.")
76+
session.store(company)
77+
session.save_changes()
78+
79+
with self.store.open_session() as session:
80+
company = session.load("companies/222", Company)
81+
self.assertEqual("companies/222", company.Id)
82+
self.assertEqual("Apple Inc.", company.name)

ravendb/tests/jvm_migrated_tests/crud_tests/test_basic_document.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def setUp(self):
1313
super(TestBasicDocument, self).setUp()
1414

1515
def test_get(self):
16-
dummy = {"name": None, "age": None, "Id": None}
16+
dummy = {"name": None, "age": None}
1717
with self.store.open_session() as session:
1818
user1 = User("jacus", None)
1919
user2 = User("arek", None)

ravendb/tests/jvm_migrated_tests/issues_tests/test_RDBC_387.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,5 @@ def test_should_store_single_id(self):
2525
self.assertIsNone(session_user.get("id", None))
2626
self.assertIsNone(bulk_insert_user.get("id", None))
2727

28-
self.assertIsNotNone(session_user.get("Id", None))
28+
self.assertIsNone(session_user.get("Id", None))
2929
self.assertIsNone(bulk_insert_user.get("Id", None))

ravendb/tests/jvm_migrated_tests/server_tests/patching/test_advanced_patching.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def to_json(self) -> Dict[str, Any]:
4646
@classmethod
4747
def from_json(cls, json_dict: Dict[str, Any]) -> CustomType:
4848
return cls(
49-
json_dict["Id"],
49+
json_dict["Id"] if "Id" in json_dict else None,
5050
json_dict["owner"],
5151
json_dict["value"],
5252
json_dict["comments"],

ravendb/tools/utils.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,16 @@ def fill_with_nested_object_types(entity: object, nested_object_types: Dict[str,
450450
@staticmethod
451451
def initialize_object(obj: dict, object_type: Type[_T], convert_to_snake_case: bool = None) -> _T:
452452
initialize_dict, set_needed = Utils.make_initialize_dict(obj, object_type.__init__, convert_to_snake_case)
453-
o = object_type(**initialize_dict)
453+
try:
454+
o = object_type(**initialize_dict)
455+
except Exception as e:
456+
if "Id" not in initialize_dict:
457+
initialize_dict["Id"] = None
458+
o = object_type(**initialize_dict)
459+
else:
460+
raise TypeError(
461+
f"Couldn't initialize object of type '{object_type.__name__}' using dict '{obj}'"
462+
) from e
454463
if set_needed:
455464
for key, value in obj.items():
456465
setattr(o, key, value)

0 commit comments

Comments
 (0)