Skip to content
Snippets Groups Projects
Commit cb713104 authored by Harsha Kethineni's avatar Harsha Kethineni
Browse files

analyses single file download can go through filelisthandler

parent abff95fd
No related branches found
No related tags found
No related merge requests found
......@@ -35,7 +35,7 @@ routing_regexes = {
'uid': '[0-9a-zA-Z.@_-]*',
# Container name
'cname': 'projects|sessions|acquisitions|collections',
'cname': 'projects|sessions|acquisitions|collections|analyses',
# Tag name
'tag': '[^/]{1,32}',
......
......@@ -2,6 +2,7 @@ import bson.objectid
from .. import config
from ..auth import INTEGER_ROLES
from ..validators import InputValidationException
CONT_TYPES = ['acquisition', 'analysis', 'collection', 'group', 'project', 'session']
SINGULAR_TO_PLURAL = {
......@@ -201,11 +202,11 @@ def pluralize(cont_name):
return SINGULAR_TO_PLURAL[cont_name]
elif cont_name in PLURAL_TO_SINGULAR:
return cont_name
raise Exception('Could not pluralize unknown container name {}'.format(cont_name))
raise InputValidationException('Could not pluralize unknown container name {}'.format(cont_name))
def singularize(cont_name):
if cont_name in PLURAL_TO_SINGULAR:
return PLURAL_TO_SINGULAR[cont_name]
elif cont_name in SINGULAR_TO_PLURAL:
return cont_name
raise Exception('Could not singularize unknown container name {}'.format(cont_name))
raise InputValidationException('Could not singularize unknown container name {}'.format(cont_name))
......@@ -66,7 +66,7 @@ class TargetContainer(object):
# TODO: already in code elsewhere? Location?
def get_container(cont_name, _id):
cont_name += 's'
cont_name = containerutil.pluralize(cont_name)
if cont_name != 'groups':
_id = bson.ObjectId(_id)
......@@ -85,21 +85,31 @@ def get_parent_tree(cont_name, _id):
'group': <group>
}
"""
if cont_name not in ['acquisitions', 'acquisition', 'sessions', 'session', 'projects', 'project', 'groups', 'group']:
raise ValueError('Can only construct tree from group, project, session or acquisition level')
cont_name = containerutil.singularize(cont_name)
if cont_name not in ['acquisition', 'session', 'project', 'group', 'analysis']:
raise ValueError('Can only construct tree from group, project, session, analysis or acquisition level')
analysis_id = None
acquisition_id = None
session_id = None
project_id = None
group_id = None
tree = {}
if cont_name in ['acquisition', 'acquisitions']:
if cont_name == 'analysis':
analysis_id = bson.ObjectId(_id)
analysis = get_container('analysis', analysis_id)
tree['analysis'] = analysis
if analysis['parent']['type'] == 'session':
session_id = analysis['parent']['id']
if cont_name == 'acquisition':
acquisition_id = bson.ObjectId(_id)
acquisition = get_container('acquisition', acquisition_id)
tree['acquisition'] = acquisition
session_id = acquisition['session']
if cont_name in ['session', 'sessions'] or session_id:
if cont_name == 'session' or session_id:
if not session_id:
session_id = bson.ObjectId(_id)
session = get_container('session', session_id)
......@@ -108,13 +118,13 @@ def get_parent_tree(cont_name, _id):
if subject:
tree['subject'] = subject
project_id = session['project']
if cont_name in ['project', 'projects'] or project_id:
if cont_name == 'project' or project_id:
if not project_id:
project_id = bson.ObjectId(_id)
project = get_container('project', project_id)
tree['project'] = project
group_id = project['group']
if cont_name in ['group', 'groups'] or group_id:
if cont_name == 'group' or group_id:
if not group_id:
group_id = _id
tree['group'] = get_container('group', group_id)
......
......@@ -11,7 +11,7 @@ from . import config
from . import util
from . import validators
import os
from .dao.containerutil import SINGULAR_TO_PLURAL
from .dao.containerutil import pluralize
log = config.log
......@@ -86,7 +86,7 @@ class Download(base.RequestHandler):
targets = []
for fref in file_refs:
cont_name = SINGULAR_TO_PLURAL.get(fref.get('container_name',''))
cont_name = pluralize(fref.get('container_name',''))
cont_id = fref.get('container_id', '')
filename = fref.get('filename', '')
......
......@@ -81,9 +81,7 @@ def initialize_list_configurations():
'sessions': copy.deepcopy(container_default_configurations),
'acquisitions': copy.deepcopy(container_default_configurations),
'collections': copy.deepcopy(container_default_configurations),
'analyses': {
'notes': copy.deepcopy(container_default_configurations['notes']),
},
'analyses': copy.deepcopy(container_default_configurations),
}
# preload the Storage instances for all configurations
for cont_name, cont_config in list_container_configurations.iteritems():
......
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