Skip to content

Commit 82164ae

Browse files
committed
save_entity no longer try to save the entity without a key ,add analyze enum for the IndexDefinition,fix track entity method to be more precise and stable
1 parent 1e1bb9f commit 82164ae

File tree

4 files changed

+35
-16
lines changed

4 files changed

+35
-16
lines changed

pyravendb/data/indexes.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,15 @@ def __str__(self):
2525
return self.value
2626

2727

28+
class FieldIndexing(Enum):
29+
# Do not index the field value.
30+
no = "No"
31+
# Index the tokens produced by running the field's value through an Analyzer
32+
analyzed = "Analyzed"
33+
# Index the field's value without using an Analyzer, so it can be searched.
34+
not_analyzed = "NotAnalyzed"
35+
36+
2837
class IndexDefinition(object):
2938
def __init__(self, index_map, name=None, **kwargs):
3039
"""

pyravendb/store/document_session.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,15 +70,16 @@ def save_includes(self, includes=None):
7070
self._includes[include["@metadata"]["@id"]] = include
7171

7272
def save_entity(self, key, entity, original_metadata, metadata, document, force_concurrency_check=False):
73-
self._known_missing_ids.discard(key)
73+
if key is not None:
74+
self._known_missing_ids.discard(key)
7475

75-
if key not in self._entities_by_key:
76-
self._entities_by_key[key] = entity
76+
if key not in self._entities_by_key:
77+
self._entities_by_key[key] = entity
7778

78-
self._entities_and_metadata[self._entities_by_key[key]] = {
79-
"original_value": document.copy(), "metadata": metadata,
80-
"original_metadata": original_metadata, "etag": metadata.get("etag", None), "key": key,
81-
"force_concurrency_check": force_concurrency_check}
79+
self._entities_and_metadata[self._entities_by_key[key]] = {
80+
"original_value": document.copy(), "metadata": metadata,
81+
"original_metadata": original_metadata, "etag": metadata.get("etag", None), "key": key,
82+
"force_concurrency_check": force_concurrency_check}
8283

8384
def _convert_and_save_entity(self, key, document, object_type, nested_object_types):
8485
if key not in self._entities_by_key:

pyravendb/store/session_query.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -210,10 +210,10 @@ def where_greater_than(self, field_name, value):
210210
def where_greater_than_or_equal(self, field_name, value):
211211
return self.where_between_or_equal(field_name, value, None)
212212

213-
def where_less_then(self, field_name, value):
213+
def where_less_than(self, field_name, value):
214214
return self.where_between(field_name, None, value)
215215

216-
def where_less_then_or_equal(self, field_name, value):
216+
def where_less_than_or_equal(self, field_name, value):
217217
return self.where_between_or_equal(field_name, None, value)
218218

219219
def where_not_none(self, field_name):
@@ -279,7 +279,8 @@ def _execute_query(self):
279279
for result in response_results:
280280
entity, metadata, original_metadata = Utils.convert_to_entity(result, self.object_type, conventions,
281281
self.nested_object_types)
282-
self.session.save_entity(key=original_metadata["@id"], entity=entity, original_metadata=original_metadata,
282+
self.session.save_entity(key=original_metadata.get("@id", None), entity=entity,
283+
original_metadata=original_metadata,
283284
metadata=metadata, document=result)
284285
results.append(entity)
285286
self.session.save_includes(response_includes)

pyravendb/tools/utils.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,11 @@ def convert_to_entity(document, object_type, conventions, nested_object_types=No
9393
metadata = document.pop("@metadata")
9494
original_metadata = metadata.copy()
9595
type_from_metadata = conventions.try_get_type_from_metadata(metadata)
96+
entity = _DynamicStructure(**document)
9697
object_from_metadata = None
9798
if type_from_metadata is not None:
9899
object_from_metadata = Utils.import_class(type_from_metadata)
99-
entity = _DynamicStructure(**document)
100+
100101
if object_from_metadata is None:
101102
if object_type is not None:
102103
entity.__class__ = object_type
@@ -108,7 +109,9 @@ def convert_to_entity(document, object_type, conventions, nested_object_types=No
108109
entity.__class__ = object_from_metadata
109110
# Checking the class for initialize
110111
entity_initialize_dict = Utils.make_initialize_dict(document, entity.__class__.__init__)
111-
entity.__init__(**entity_initialize_dict)
112+
113+
entity = entity.__class__(**entity_initialize_dict)
114+
112115
if nested_object_types:
113116
for key in nested_object_types:
114117
attr = getattr(entity, key)
@@ -134,8 +137,8 @@ def make_initialize_dict(document, entity_init):
134137
return document
135138

136139
entity_initialize_dict = {}
137-
args, __, __, defaults = inspect.getargspec(entity_init)
138-
if (len(args) - 1) != len(document):
140+
args, __, keywords, defaults = inspect.getargspec(entity_init)
141+
if (len(args) - 1) > len(document):
139142
remainder = len(args)
140143
if defaults:
141144
remainder -= len(defaults)
@@ -144,7 +147,12 @@ def make_initialize_dict(document, entity_init):
144147
for i in range(remainder, len(args)):
145148
entity_initialize_dict[args[i]] = document.get(args[i], defaults[i - remainder])
146149
else:
147-
entity_initialize_dict = document
150+
if keywords == "kwargs":
151+
entity_initialize_dict = document
152+
else:
153+
for key in document:
154+
if key in args:
155+
entity_initialize_dict[key] = document[key]
148156

149157
return entity_initialize_dict
150158

@@ -196,7 +204,7 @@ def numeric_to_lucene_syntax(value):
196204

197205
python_version = sys.version_info.major
198206

199-
if (python_version > 2 and value > sys.maxsize and isinstance(value,int)) \
207+
if (python_version > 2 and value > sys.maxsize and isinstance(value, int)) \
200208
or python_version <= 2 and isinstance(value, long):
201209
value = "Lx{0}".format(int(value))
202210

0 commit comments

Comments
 (0)