Skip to content
Snippets Groups Projects
Commit 8e9b85c7 authored by Renzo Frigato's avatar Renzo Frigato
Browse files

add measurements to list of sessions

parent d65456b0
No related branches found
No related tags found
No related merge requests found
......@@ -28,7 +28,7 @@ def list_permission_checker(handler, uid=None):
def f(method, query=None, projection=None):
if uid is not None:
if uid != handler.uid and not handler.superuser_request:
self.abort(403, 'User ' + handler.uid + ' may not see the Groups of User ' + uid)
handler.abort(403, 'User ' + handler.uid + ' may not see the Groups of User ' + uid)
query = query or {}
query['roles._id'] = uid
projection = projection or {}
......@@ -37,7 +37,7 @@ def list_permission_checker(handler, uid=None):
if not handler.superuser_request:
query = query or {}
projection = projection or {}
if self.request.GET.get('admin', '').lower() in ('1', 'true'):
if handler.request.GET.get('admin', '').lower() in ('1', 'true'):
query['roles'] = {'$elemMatch': {'_id': handler.uid, 'access': 'admin'}}
else:
query['roles._id'] = handler.uid
......
......@@ -41,6 +41,6 @@ def _add_di(handler, coll_name, response):
if response.get('group'):
response['debug']['group'] = handler.uri_for(
'group',
response['group'],
_id=response['group'],
_full=True) + '?' + handler.request.query_string
......@@ -161,8 +161,8 @@ class CollectionsHandler(ContainerHandler):
log.error(query)
log.error(projection)
sessions = list(self.app.db.sessions.find(query, projection))
for sess in sessions:
sess['subject_code'] = sess.pop('subject', {}).get('code', '') # FIXME when subject is pulled out of session
if self.request.GET.get('measurements', '').lower() in ('1', 'true'):
self._add_session_measurements(sessions)
if self.debug:
for sess in sessions:
sess['debug'] = {}
......
......@@ -112,7 +112,7 @@ class ContainerHandler(base.RequestHandler):
if not par_id:
self.abort(500, 'par_id is required when par_coll_name is provided')
if self.use_oid.get(par_coll_name):
if not bsons.ObjectId.is_valid(par_id):
if not bson.ObjectId.is_valid(par_id):
self.abort(400, 'not a valid object id')
par_id = bson.ObjectId(par_id)
query = {par_coll_name[:-1]: par_id}
......@@ -123,6 +123,8 @@ class ContainerHandler(base.RequestHandler):
self.abort(404, 'Element not found in collection {} {}'.format(storage.coll_name, _id))
if self.request.GET.get('counts', '').lower() in ('1', 'true'):
self._add_results_counts(results, coll_name)
if coll_name == 'sessions' and self.request.GET.get('measurements', '').lower() in ('1', 'true'):
self._add_session_measurements(results)
if self.debug:
debuginfo.add_debuginfo(self, coll_name, results)
return results
......@@ -139,6 +141,17 @@ class ContainerHandler(base.RequestHandler):
for elem in results:
elem[dbc_name[:-1] + '_count'] = counts.get(elem['_id'], 0)
def _add_session_measurements(self, results):
session_measurements = {}
if self.request.GET.get('measurements', '').lower() in ('1', 'true'):
session_measurements = self.app.db.acquisitions.aggregate([
{'$match': {'session': {'$in': [sess['_id'] for sess in results]}}},
{'$group': {'_id': '$session', 'measurements': {'$addToSet': '$datatype'}}}
])
session_measurements = {sess['_id']: sess['measurements'] for sess in session_measurements}
for sess in results:
sess['measurements'] = session_measurements.get(sess['_id'], None)
def get_all_for_user(self, coll_name, uid):
self.config = self.container_handler_configurations[coll_name]
self._init_storage()
......
......@@ -18,7 +18,7 @@ import logging
import scitran.data
logging.basicConfig(
format='%(asctime)s %(name)16.16s %(filename)s %(lineno)d:%(levelname)4.4s %(message)s',
format='%(asctime)s %(name)16.16s %(filename)24.24s %(lineno)5.5d:%(levelname)4.4s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
level=logging.DEBUG,
)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment