def get(self,id,limit=0): q=self.set_query() if id: try: q['_id']=ObjectId(str(id)) except Exception as e: return bundle_400("The ID you submitted is malformed.") if "enrollments" in self.request.args: info = self.get_bundle(q) en = self.get_enrollments(info['username'], info['userid']) en.update({"username": info['username'], '_id': q['_id']}) self.bundle = en else: self.bundle=self.get_bundle(q) if self.bundle: self.bundle=self.auth_filter(self.bundle) if not self.bundle: return action_401() self.set_resource() return self.serialize_bundle(self.bundle) else: return bundle_404() else: self.bundle=self.collection.find(q).limit(limit) return self.get_list()
def get(self, id): if not id: return self.get_list() else: from auth import get_profile userid = get_profile()['userid'] if not userid: return action_401() query = {'_id': str(id), 'userid': userid} bundle = self.get_bundle(query) if bundle: return self.serialize_bundle(bundle) else: return bundle_404()
def patch(self, id): from auth import get_profile atts = get_profile() if self.request.json is None or 'replacement_file' not in self.request.json: return super(MediaAsset, self).patch(id) if not atts['superuser']: return action_401() found = assets.find_one({'_id': id}) if not found: return bundle_404() file_id = None to_delete = [] # find existing filenames for f in found['@graph']['ma:locator']: if file_id is not None and f['@id'] != file_id: raise Exception( "Cannot replace file; multiple files with different IDs") file_id = f['@id'] extension = f['ma:hasFormat'].split('/')[-1] fpath = config.MEDIA_DIRECTORY + f['@id'] + '.' + extension to_delete.append(fpath) from os import remove for f in to_delete: try: remove(f) except OSError: pass assets.update({'_id': id}, {'$set': {'@graph.ma:locator': []}}) result = self.set_new_file(id, file_id, self.request.json['replacement_file']) if not result[0]: return bundle_400(result[1]) return self.serialize_bundle(assets.find_one({'_id': id}))
def get(self,id,limit=0): q=self.set_query() if id: try: q['_id']=ObjectId(str(id)) except Exception as e: return bundle_400("The ID you submitted is malformed.") self.bundle=self.get_bundle(q) if self.bundle: self.bundle=self.auth_filter(self.bundle) if not self.bundle: return action_401() self.set_resource() return self.serialize_bundle(self.bundle) else: return bundle_404() else: self.bundle=self.collection.find(q).limit(limit) return self.get_list()
def patch(self, id): from auth import get_profile atts=get_profile() if self.request.json is None or 'replacement_file' not in self.request.json: return super(MediaAsset, self).patch(id) if not atts['superuser']: return action_401() found = assets.find_one({'_id': id}) if not found: return bundle_404() file_id = None to_delete = [] # find existing filenames for f in found['@graph']['ma:locator']: if file_id is not None and f['@id'] != file_id: raise Exception("Cannot replace file; multiple files with different IDs") file_id = f['@id'] extension = f['ma:hasFormat'].split('/')[-1] fpath = config.MEDIA_DIRECTORY + f['@id'] + '.' + extension to_delete.append(fpath) from os import remove for f in to_delete: try: remove(f) except OSError: pass assets.update({'_id': id}, {'$set': {'@graph.ma:locator': []}}) result = self.set_new_file(id, file_id, self.request.json['replacement_file']) if not result[0]: return bundle_400(result[1]) return self.serialize_bundle(assets.find_one({'_id': id}))