Skip to content

Commit 09b6a08

Browse files
committed
RDBC-856 Decrease client complexity, enhance code clarity
1 parent e246568 commit 09b6a08

File tree

10 files changed

+71
-461
lines changed

10 files changed

+71
-461
lines changed

ravendb/documents/operations/compare_exchange/compare_exchange_value_result_parser.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import json
2-
from typing import Dict, Type, TypeVar, Optional
2+
from typing import Dict, Type, TypeVar, Optional, Any, Union
33

44
from ravendb.primitives import constants
55
from ravendb.documents.conventions import DocumentConventions
@@ -60,11 +60,11 @@ def get_single_value(
6060

6161
key: str = item.get("Key")
6262
index: int = item.get("Index")
63-
raw: dict = item.get("Value")
63+
raw: Dict[str, Union[Any, Dict[str, Any]]] = item.get("Value")
6464
if not raw:
6565
return CompareExchangeValue(key, index, None)
6666
metadata = None
67-
bjro = raw.get(constants.Documents.Metadata.KEY)
67+
bjro: Dict[str, Any] = raw.get(constants.Documents.Metadata.KEY)
6868
if bjro:
6969
metadata = (
7070
MetadataAsDictionary(bjro)

ravendb/documents/queries/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def write(self, obj: object):
3535
elif "__str__" in obj.__class__.__dict__:
3636
self.__buffer.append(str(obj))
3737
else:
38-
self.__buffer.append(str(Utils.dictionarize(obj)))
38+
self.__buffer.append(str(Utils.object_to_dict_for_hash_calculator(obj)))
3939

4040
def write_parameters(self, qp: "Parameters") -> None:
4141
if qp is None:

ravendb/documents/session/entity_to_json.py

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -172,15 +172,8 @@ def convert_to_entity(
172172
if "from_json" in object_type.__dict__ and inspect.ismethod(object_type.from_json):
173173
# By custom defined 'from_json' serializer class method
174174
entity = object_type.from_json(document_deepcopy)
175-
elif is_projection:
176-
entity = DynamicStructure(**document_deepcopy)
177-
entity.__class__ = object_type
178-
try:
179-
entity = Utils.initialize_object(document_deepcopy, object_type)
180-
except TypeError as e:
181-
raise InvalidOperationException("Probably projection error", e)
182175
else:
183-
entity = Utils.convert_json_dict_to_object(document_deepcopy, object_type)
176+
entity = Utils.convert_json_dict_to_object(document_deepcopy, object_type, is_projection)
184177

185178
EntityToJsonUtils.invoke_after_conversion_to_entity_event(session, key, object_type, document_deepcopy)
186179

@@ -295,10 +288,15 @@ def determine_object_type(
295288

296289
# Passed type is not a type from metadata, neither there's no inheritance - probably projection
297290
elif object_type_from_user is not object_type_from_metadata:
298-
if not all([name in object_type_from_metadata.__dict__ for name in object_type_from_user.__dict__]):
299-
# Document from database and object_type from user aren't compatible
291+
# Check if types are compatible
292+
incompatible_fields = Utils.check_valid_projection(object_type_from_user, object_type_from_metadata)
293+
if incompatible_fields:
300294
raise exceptions.InvalidOperationException(
301-
f"Cannot covert document from type {object_type_from_metadata} to {object_type_from_user}"
295+
f"Invalid projection. Cannot covert document "
296+
f"from type '{object_type_from_metadata.__name__}' "
297+
f"to type '{object_type_from_user.__name__}'. "
298+
f"Type '{object_type_from_user.__name__}' instance has fields {incompatible_fields} "
299+
f"that aren't on '{object_type_from_metadata.__name__}'."
302300
)
303301

304302
# Projection

ravendb/tests/jvm_migrated_tests/client_tests/revisions_tests/test_revisions.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def test_can_get_revisions_by_change_vector(self):
5858

5959
for i in range(10):
6060
with self.store.open_session() as session:
61-
user = session.load(id_, Company)
61+
user = session.load(id_, User)
6262
user.name = f"Fitzchak{i}"
6363
session.save_changes()
6464

@@ -134,7 +134,7 @@ def test_collection_case_sensitive_test_1(self):
134134

135135
for i in range(10):
136136
with self.store.open_session() as session:
137-
user = session.load(id_, Company)
137+
user = session.load(id_, User)
138138
user.name = "raven" + str(i)
139139
session.save_changes()
140140

@@ -159,7 +159,7 @@ def test_collection_case_sensitive_test_2(self):
159159

160160
for i in range(10):
161161
with self.store.open_session() as session:
162-
user = session.load(id_, Company)
162+
user = session.load(id_, User)
163163
user.name = "raven" + str(i)
164164
session.save_changes()
165165

@@ -284,7 +284,7 @@ def test_can_get_metadata_for_lazily(self):
284284

285285
for i in range(10):
286286
with self.store.open_session() as session:
287-
user = session.load(id_, Company)
287+
user = session.load(id_, User)
288288
user.name = f"Omer{i}"
289289
session.save_changes()
290290

@@ -319,7 +319,7 @@ def test_can_get_for_lazily(self):
319319

320320
for i in range(10):
321321
with self.store.open_session() as session:
322-
user = session.load(id_, Company)
322+
user = session.load(id_, User)
323323
user.name = f"Omer{i}"
324324
session.save_changes()
325325

@@ -392,7 +392,7 @@ def test_can_get_revisions_by_change_vectors_lazily(self):
392392

393393
for i in range(10):
394394
with self.store.open_session() as session:
395-
user = session.load(id_, Company)
395+
user = session.load(id_, User)
396396
user.name = f"Omer{i}"
397397
session.save_changes()
398398

ravendb/tests/jvm_migrated_tests/issues_tests/test_ravenDB_14006.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
import time
2-
import unittest
32
from typing import Optional
4-
53
from ravendb.documents.indexes.abstract_index_creation_tasks import AbstractIndexCreationTask
64
from ravendb.documents.session.loaders.include import QueryIncludeBuilder
75
from ravendb.documents.session.misc import TransactionMode, SessionOptions
86
from ravendb.documents.session.query import QueryStatistics
97
from ravendb.infrastructure.orders import Company, Address, Employee
108
from ravendb.tests.test_base import TestBase
11-
from ravendb.util.util import StartingWithOptions
129

1310

1411
class Companies_ByName(AbstractIndexCreationTask):

ravendb/tools/custom_decoder.py

Lines changed: 0 additions & 51 deletions
This file was deleted.

ravendb/tools/indexqueue.py

Lines changed: 0 additions & 61 deletions
This file was deleted.

ravendb/tools/projection.py

Lines changed: 0 additions & 42 deletions
This file was deleted.

0 commit comments

Comments
 (0)