Beispiel #1
0
 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()
Beispiel #2
0
    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()
Beispiel #3
0
    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}))
Beispiel #4
0
 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}))