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.')
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.' )
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))
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))
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))
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))