コード例 #1
0
ファイル: api.py プロジェクト: dbenders/radstore
	def POST(self, id=None, outputs=None, **kwargs):
		if id is None:
			metadata = self.parse_json_dict(simplejson.load(cherrypy.request.body))
			for inp in metadata.get("inputs",[]):
				if '_id' in inp: inp['_id'] = self.parse_value(inp['_id'])

			id = Transformations.insert_one(metadata).inserted_id

			# for inp in metadata.get("inputs",[]):
			# 	Products.update_one({'_id':inp['_id']},{'$push':{'transformations':{'_id':id}}})

			return self.build_response('ok', **dict(transformation={'_id':id}))

		else:
			if outputs == 'outputs':
				metadata = self.parse_json_dict(simplejson.load(cherrypy.request.body))
				resp = simplejson.loads(ProductsController().POST(id=None, metadata=metadata))
				if resp['status'] != 'ok':
					return self.build_response('error',
						message='error creating output product: %s' % resp['message'])
				Transformations.update_one({'_id':ObjectId(id)},{'$push':{'outputs':{'_id':ObjectId(resp['data']['product']['_id'])}}})
				return self.build_response('ok', **dict(product=resp['data']['product']))

			else:
				return self.build_response('error',message='cannot POST metadata for an existing transformation. Use PUT instead.')
コード例 #2
0
    def POST(self, id=None, outputs=None, **kwargs):
        if id is None:
            metadata = self.parse_json_dict(
                simplejson.load(cherrypy.request.body))
            for inp in metadata.get("inputs", []):
                if '_id' in inp: inp['_id'] = self.parse_value(inp['_id'])

            id = Transformations.insert_one(metadata).inserted_id

            for inp in metadata.get("inputs", []):
                Products.update_one(
                    {'_id': inp['_id']},
                    {'$push': {
                        'transformations': {
                            '_id': id
                        }
                    }})

            return self.build_response('ok',
                                       **dict(transformation={'_id': id}))

        else:
            if outputs == 'outputs':
                metadata = self.parse_json_dict(
                    simplejson.load(cherrypy.request.body))
                resp = simplejson.loads(ProductsController().POST(
                    id=None, metadata=metadata))
                if resp['status'] != 'ok':
                    return self.build_response(
                        'error',
                        message='error creating output product: %s' %
                        resp['message'])
                Transformations.update_one({'_id': ObjectId(id)}, {
                    '$push': {
                        'outputs': {
                            '_id': ObjectId(resp['data']['product']['_id'])
                        }
                    }
                })
                return self.build_response(
                    'ok', **dict(product=resp['data']['product']))

            else:
                return self.build_response(
                    'error',
                    message=
                    'cannot POST metadata for an existing transformation. Use PUT instead.'
                )
コード例 #3
0
    def GET(self, id=None, content=None, **kwargs):
        if id is None:
            # if 'include' in kwargs:
            # 	include = kwargs.pop('include').split(',')
            # else:
            # 	include = []

            q = self.process_filter_params(Products.collection, **kwargs)

            count = q.count()
            limit = int(kwargs.get('limit', self.DEFAULT_LIMIT))
            if limit == 0:
                q = []
            else:
                q = self.process_pagination_params(q, **kwargs)
            q = q.sort([('datetime', pymongo.ASCENDING)])
            q = list(q)

            # if 'transformations' in include:
            # 	for doc in q:
            # 		qt = Transformations.find({'inputs._id':doc['_id']})
            # 		if qt.count() > 0:
            # 			doc['transformations'] = list(qt)

            return self.build_response(
                'ok', **{
                    'count': count,
                    'limit': limit,
                    'offset': int(kwargs.get('offset', 0)),
                    'products': q
                })
        else:
            if content == 'content':
                q = Products.find_one({'_id': ObjectId(id)})
                return serve_gzip_file(os.path.join(self.fs_dir,
                                                    id), q['name'],
                                       "application/x-download", "attachment")
            else:
                if 'include' in kwargs:
                    include = kwargs.pop('include').split(',')
                else:
                    include = []

                q = Products.find_one({'_id': ObjectId(id)})

                if 'transformations' in include:
                    qt = Transformations.find({'inputs._id': q['_id']})
                    if qt.count() > 0:
                        q['transformations'] = list(qt)

                return self.build_response('ok', **dict(product=q))
コード例 #4
0
ファイル: api.py プロジェクト: dbenders/radstore
	def GET(self, id=None, **kwargs):
		if id is None:
			q = self.process_filter_params(Transformations.collection, **kwargs)
			q = self.process_pagination_params(q, **kwargs)

			return self.build_response('ok', **{
					'count': q.count(),
					'limit': kwargs.get('limit',self.DEFAULT_LIMIT),
					'offset': kwargs.get('offset',0),
					'transformations': list(q)
				})
		else:
			q = Transformations.find_one({'_id':ObjectId(id)})
			return self.build_response('ok', **dict(transformation=q))
コード例 #5
0
ファイル: api.py プロジェクト: INTA-Radar/radstore
	def GET(self, id=None, content=None, **kwargs):
		if id is None:
			# if 'include' in kwargs: 
			# 	include = kwargs.pop('include').split(',')
			# else:
			# 	include = []

			q = self.process_filter_params(Products.collection, **kwargs)

			count = q.count()
			limit = int(kwargs.get('limit',self.DEFAULT_LIMIT))
			if limit == 0:
				q = []
			else:
				q = self.process_pagination_params(q, **kwargs)			
			q = q.sort([('datetime',pymongo.ASCENDING)])
			q = list(q)

			# if 'transformations' in include:
			# 	for doc in q:
			# 		qt = Transformations.find({'inputs._id':doc['_id']})
			# 		if qt.count() > 0:
			# 			doc['transformations'] = list(qt)

			return self.build_response('ok', **{
					'count': count,
					'limit': limit,
					'offset': int(kwargs.get('offset',0)),
					'products': q
				})
		else:
			if content == 'content':
				q = Products.find_one({'_id':ObjectId(id)})
	 			return serve_gzip_file(os.path.join(self.fs_dir,id), q['name'], "application/x-download", "attachment")
	 		else:
				if 'include' in kwargs: 
					include = kwargs.pop('include').split(',')
				else:
					include = []

				q = Products.find_one({'_id':ObjectId(id)})

				if 'transformations' in include:
					qt = Transformations.find({'inputs._id':q['_id']})
					if qt.count() > 0:
						q['transformations'] = list(qt)

				return self.build_response('ok', **dict(product=q))
コード例 #6
0
    def GET(self, id=None, **kwargs):
        if id is None:
            q = self.process_filter_params(Transformations.collection,
                                           **kwargs)
            q = self.process_pagination_params(q, **kwargs)

            return self.build_response(
                'ok', **{
                    'count': q.count(),
                    'limit': kwargs.get('limit', self.DEFAULT_LIMIT),
                    'offset': kwargs.get('offset', 0),
                    'transformations': list(q)
                })
        else:
            q = Transformations.find_one({'_id': ObjectId(id)})
            return self.build_response('ok', **dict(transformation=q))