From c35ca3e8b34e3f2c20312e8c403f3b57268ff100 Mon Sep 17 00:00:00 2001 From: Nicola Iarocci Date: Fri, 2 Oct 2015 08:28:25 +0200 Subject: [PATCH] Fix: explicit inclusive projection is ignored. Closes #722. --- CHANGES | 7 ++++++- eve/flaskapp.py | 12 +++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index 6192572db..44c59bb52 100644 --- a/CHANGES +++ b/CHANGES @@ -6,7 +6,12 @@ Here you can see the full list of changes between each Eve release. In Development -------------- -- Move along nothing to see here. +Version 0.6.1 +~~~~~~~~~~~~~ + +Not released. + +- Fix: explict inclusive datasource projection is ignored. Closes #722. Stable ------ diff --git a/eve/flaskapp.py b/eve/flaskapp.py index df9fddc76..2b63966c6 100644 --- a/eve/flaskapp.py +++ b/eve/flaskapp.py @@ -498,6 +498,10 @@ def set_defaults(self): def _set_resource_defaults(self, resource, settings): """ Low-level method which sets default values for one resource. + .. versionchanged:: 0.6.1 + Fix: inclusive projection defined for a datasource is ignored + (#722). + .. versionchanged:: 0.6 Support for 'mongo_indexes'. @@ -583,8 +587,7 @@ def _set_resource_defaults(self, resource, settings): settings['datasource'].setdefault('filter', None) settings['datasource'].setdefault('default_sort', None) - projection = settings['datasource'].get('projection', {}) - projection = projection or {} + projection = settings['datasource'].get('projection', {}).copy() # check if any exclusion projection is defined exclusion = any(((k, v) for k, v in projection.items() if v == 0)) @@ -608,7 +611,10 @@ def _set_resource_defaults(self, resource, settings): self.config['VERSION_ID_SUFFIX']] = 1 projection.update(dict((field, 1) for (field) in schema)) if settings['soft_delete'] is True: - projection[self.config['DELETED']] = 1 + # careful here, we want the actual settings updated, not the + # local copy + key = self.config['DELETED'] + settings['datasource']['projection'][key] = 1 else: # all fields are returned. projection = None