diff --git a/api/dao/base.py b/api/dao/base.py index f511524e0..b0ac55177 100644 --- a/api/dao/base.py +++ b/api/dao/base.py @@ -87,7 +87,7 @@ def get_children(self, _id, projection=None): raise APINotFoundException('Children cannot be listed from the {0} level'.format(self.cont_name)) query = {self.cont_name[:-1]: bson.ObjectId(_id)} if not projection: - projection = {'metadata': 0, 'files.metadata': 0, 'subject': 0} + projection = {'info': 0, 'files.info': 0, 'subject': 0, 'tags': 0} return ContainerStorage.factory(child_name).get_all_el(query, None, projection) def _from_mongo(self, cont): @@ -184,9 +184,20 @@ def get_all_el(self, query, user, projection, fill_defaults=False): query['permissions'] = {'$elemMatch': user} log.debug(query) log.debug(projection) + + # if projection includes files.info, add new key `info_exists` + if projection and 'files.info' in projection: + replace_info_with_bool = True + projection.pop('files.info') + else: + replace_info_with_bool = False + results = list(self.dbc.find(query, projection)) for cont in results: cont = self._from_mongo(cont) if fill_defaults: cont = self._fill_default_values(cont) + if replace_info_with_bool: + for f in cont.get('files', []): + f['info_exists'] = bool(f.pop('info', False)) return results diff --git a/api/handlers/containerhandler.py b/api/handlers/containerhandler.py index ae6ab4874..73fe581fc 100644 --- a/api/handlers/containerhandler.py +++ b/api/handlers/containerhandler.py @@ -80,7 +80,7 @@ class ContainerHandler(base.RequestHandler): 'parent_storage': containerstorage.SessionStorage(), 'storage_schema_file': 'acquisition.json', 'payload_schema_file': 'acquisition.json', - 'list_projection': {'info': 0, 'collections': 0, 'files.info': 0, 'tag': 0} + 'list_projection': {'info': 0, 'collections': 0, 'files.info': 0, 'tags': 0} } } diff --git a/raml/schemas/definitions/file.json b/raml/schemas/definitions/file.json index c2e4c9a51..10e4bec13 100644 --- a/raml/schemas/definitions/file.json +++ b/raml/schemas/definitions/file.json @@ -62,7 +62,8 @@ "hash":{"$ref":"#/definitions/hash"}, "created":{"$ref":"../definitions/created-modified.json#/definitions/created"}, "modified":{"$ref":"../definitions/created-modified.json#/definitions/modified"}, - "size":{"$ref":"#/definitions/size"} + "size":{"$ref":"#/definitions/size"}, + "info_exists": {"type": "boolean"} }, "additionalProperties": false, "required":["modified", "size"]