Skip to content

Commit 9dd8fb2

Browse files
committed
Merge fresh develop
2 parents a6f2cdc + dd6ad8f commit 9dd8fb2

File tree

4 files changed

+34
-21
lines changed

4 files changed

+34
-21
lines changed

docs/source/changelog.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
Changelog
22
=========
33

4+
* :release:`0.4.0 <2015-10-07>`
5+
* :feature:`-` Nested relationships are now indexed in bulk in ElasticSearch
6+
* :feature:`-` Added '_nesting_depth' property in models to control the level of nesting, default is 1
7+
48
* :release:`0.3.3 <2015-09-02>`
59
* :bug:`-` Fixed a bug when using reserved query params with GET tunneling
610
* :bug:`-` Fixed a bug preventing updates of floatFields via GET tunneling

nefertari_mongodb/documents.py

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ class BaseMixin(object):
9898
authenticated users.
9999
_public_fields: String names of fields meant to be displayed to
100100
non-authenticated users.
101+
_hidden_fields: String names of fields meant to be hidden but editable.
101102
_nested_relationships: String names of reference/relationship fields
102103
that should be included in JSON data of an object as full
103104
included documents. If reference/relationship field is not
@@ -109,6 +110,7 @@ class BaseMixin(object):
109110
"""
110111
_public_fields = None
111112
_auth_fields = None
113+
_hidden_fields = None
112114
_nested_relationships = ()
113115
_backref_hooks = ()
114116
_nesting_depth = 1
@@ -251,7 +253,7 @@ def filter_objects(cls, objects, first=False, **params):
251253
params[key] = ids
252254

253255
if first:
254-
return cls.get_resource(**params)
256+
return cls.get_item(**params)
255257
else:
256258
return cls.get_collection(**params)
257259

@@ -358,18 +360,13 @@ def fields_to_query(cls):
358360
return query_fields + list(cls._fields.keys())
359361

360362
@classmethod
361-
def get_resource(cls, **params):
363+
def get_item(cls, **params):
362364
params.setdefault('_raise_on_empty', True)
363365
params['_limit'] = 1
364366
params['_item_request'] = True
365367
query_set = cls.get_collection(**params)
366368
return query_set.first()
367369

368-
@classmethod
369-
def get(cls, **kw):
370-
return cls.get_resource(
371-
_raise_on_empty=kw.pop('__raise', False), **kw)
372-
373370
def unique_fields(self):
374371
pk_field = [self.pk_field()]
375372
uniques = [e['fields'][0][0] for e in self._unique_with_indexes()]
@@ -643,6 +640,19 @@ def _is_modified(self):
643640
def _is_created(self):
644641
return self._created
645642

643+
def _to_python_fields(self):
644+
""" Call to_python on non-relation fields. """
645+
from .utils import relationship_fields
646+
for name, field in self._fields.items():
647+
rel_field = isinstance(field, relationship_fields)
648+
if name not in self._data or rel_field:
649+
continue
650+
value = self._data[name]
651+
try:
652+
self._data[name] = field.to_python(value)
653+
except:
654+
continue
655+
646656

647657
class BaseDocument(six.with_metaclass(DocumentMetaclass,
648658
BaseMixin, mongo.Document)):
@@ -720,9 +730,9 @@ def update(self, params, request=None, **kw):
720730
kw['request'] = request
721731
# request are passed to _update and then to save
722732
try:
723-
updated_obj = self._update(params, **kw)
724-
updated_obj.reload()
725-
return updated_obj
733+
self._update(params, **kw)
734+
self._to_python_fields()
735+
return self
726736
except (mongo.NotUniqueError, mongo.OperationError) as e:
727737
if (e.__class__ is mongo.OperationError
728738
and 'E11000' not in e.message):

nefertari_mongodb/fields.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,7 @@ def __set__(self, instance, value):
638638
- `value`.
639639
"""
640640
super_set = super(RelationshipField, self).__set__
641+
641642
if not self.reverse_rel_field:
642643
return super_set(instance, value)
643644

@@ -648,15 +649,15 @@ def __set__(self, instance, value):
648649
if value == current_value:
649650
return
650651

651-
added_values = set(value) - set(current_value)
652-
deleted_values = set(current_value) - set(value)
653652
is_doc = lambda x: isinstance(x, mongo.Document)
654653

655-
if added_values and all(is_doc(v) for v in added_values):
654+
added_values = set(value) - set(current_value)
655+
if added_values and is_doc(list(added_values)[0]):
656656
for val in added_values:
657657
self._register_addition_hook(val, instance)
658658

659-
if deleted_values and all(is_doc(v) for v in deleted_values):
659+
deleted_values = set(current_value) - set(value)
660+
if deleted_values and is_doc(list(deleted_values)[0]):
660661
for val in deleted_values:
661662
self._register_deletion_hook(val, instance)
662663

setup.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
11
from setuptools import setup, find_packages
22

3-
43
install_requires = [
4+
'elasticsearch',
55
'mongoengine==0.9',
6+
'nefertari>=0.6.0',
67
'pymongo==2.8',
7-
'zope.dottedname',
8-
'elasticsearch',
9-
'python-dateutil',
108
'pyramid_tm',
9+
'python-dateutil',
1110
'six',
12-
'nefertari>=0.5.1'
11+
'zope.dottedname',
1312
]
1413

15-
1614
setup(
1715
name='nefertari_mongodb',
18-
version="0.3.3",
16+
version="0.4.0",
1917
description='mongodb engine for nefertari',
2018
classifiers=[
2119
"Programming Language :: Python",

0 commit comments

Comments
 (0)