Skip to content
Snippets Groups Projects
acquisitions.py 3.51 KiB
Newer Older
# @author:  Gunnar Schaefer

import logging
Gunnar Schaefer's avatar
Gunnar Schaefer committed
log = logging.getLogger('scitran.api')

import bson.json_util

Gunnar Schaefer's avatar
Gunnar Schaefer committed
import scitran.data
import scitran.data.medimg
Gunnar Schaefer's avatar
Gunnar Schaefer committed
import containers
Gunnar Schaefer's avatar
Gunnar Schaefer committed
ACQUISITION_PUT_SCHEMA = {
    '$schema': 'http://json-schema.org/draft-04/schema#',
    'title': 'Acquisition',
    'type': 'object',
    'properties': {
        'name': {
            'title': 'Name',
            'type': 'string',
            'maxLength': 32,
        },
        'notes': {
            'title': 'Notes',
            'type': 'string',
        },
        'files': {
            'title': 'Files',
            'type': 'array',
            'items': containers.FILE_SCHEMA,
            'uniqueItems': True,
        },
    },
Gunnar Schaefer's avatar
Gunnar Schaefer committed
    'additionalProperties': False,
}
Gunnar Schaefer's avatar
Gunnar Schaefer committed

class Acquisitions(containers.ContainerList):

    """/nimsapi/acquisitions """

    def __init__(self, request=None, response=None):
        super(Acquisitions, self).__init__(request, response)
        self.dbc = self.app.db.acquisitions

    def count(self):
        """Return the number of Acquisitions."""
        self.response.write(self.dbc.count())

    def post(self):
        """Create a new Acquisition."""
        self.response.write('acquisitions post\n')

    def get(self, sid):
        """Return the list of Session Acquisitions."""
        _id = bson.ObjectId(sid)
        if not self.app.db.sessions.find_one({'_id': _id}):
            self.abort(404, 'no such Session')
        query = {'session': _id}
        projection = {'label': 1, 'description': 1, 'types': 1, 'notes': 1}
        acquisitions = self._get(query, projection, self.request.get('admin').lower() in ('1', 'true'))
        if self.debug:
            for acquisition in acquisitions:
                aid = str(acquisition['_id'])
Gunnar Schaefer's avatar
Gunnar Schaefer committed
                acquisition['details'] = self.uri_for('acquisition', aid, _full=True) + '?' + self.request.query_string
        return acquisitions

    def put(self):
        """Update many Acquisitions."""
        self.response.write('acquisitions put\n')


Gunnar Schaefer's avatar
Gunnar Schaefer committed
class Acquisition(containers.Container):

    """/nimsapi/acquisitions/<aid> """

    json_schema = {
        '$schema': 'http://json-schema.org/draft-04/schema#',
        'title': 'Acquisition',
        'type': 'object',
        'properties': {
            '_id': {
            },
            'session': {
            },
            'files': {
                'title': 'Files',
                'type': 'array',
Gunnar Schaefer's avatar
Gunnar Schaefer committed
                'items': containers.FILE_SCHEMA,
                'uniqueItems': True,
            },
        },
        'required': ['_id'], #FIXME
    }

Gunnar Schaefer's avatar
Gunnar Schaefer committed
    put_schema = ACQUISITION_PUT_SCHEMA

    def __init__(self, request=None, response=None):
        super(Acquisition, self).__init__(request, response)
        self.dbc = self.app.db.acquisitions

    def schema(self, *args, **kwargs):
Gunnar Schaefer's avatar
Gunnar Schaefer committed
        return super(Acquisition, self).schema(scitran.data.medimg.medimg.MedImgReader.acquisition_properties)
        scitran.data.project_properties(ds_dict['project_type'])
        scitran.data.session_properties(ds_dict['session_type'])
        scitran.data.acquisition_properties(ds_dict['acquisition_type'])

    def get(self, aid):
        """Return one Acquisition, conditionally with details."""
        _id = bson.ObjectId(aid)
        acq, _ = self._get(_id)
Gunnar Schaefer's avatar
Gunnar Schaefer committed
        return acq

    def put(self, aid):
        """Update an existing Acquisition."""
        _id = bson.ObjectId(aid)
        json_body = super(Acquisition, self).put(_id)

    def delete(self, aid):
        """Delete an Acquisition."""
        self.abort(501)