Esempio n. 1
0
def _download(url: str) -> File:
    resp = requests.get(url, timeout=5)
    content = BytesIO(resp.content)
    file = File(stream=content,
                mimetype=USE_MAGIC)
    file.size = resp.headers['Content-Length']
    return file
Esempio n. 2
0
 def __init__(self, title, artist, lyrics, timings, stream,
              mimetype='audio/mpeg', language='en-US'):
     File.__init__(self, stream, mimetype, title)
     self.artist = artist
     self.lyrics = lyrics
     self.timings = timings
     self.language = language
Esempio n. 3
0
    def __init__(self, fp, mimetype=None, filename=None, **kwargs):
        if not filename:
            filename = self.title

        DaceObject.__init__(self, **kwargs)
        if fp:
            fp.seek(0)
        else:
            fp = None

        if not mimetype or mimetype == 'application/x-download':
            hint = USE_MAGIC
        else:
            hint = mimetype

        OriginFile.__init__(self, fp, hint, filename)
        self.set_data(kwargs)
Esempio n. 4
0
 def deserialize(self, node, value):
     """Deserialize into a File."""
     if value == colander.null:
         return None
     try:
         result = File(stream=value.file, mimetype=USE_MAGIC, title=value.filename)
         # We add the size as an extra attribute since get_size() doesn't
         # work before the transaction has been committed
         if isinstance(value.file, io.BytesIO):
             result.size = len(value.file.getvalue())
         else:
             result.size = os.fstat(value.file.fileno()).st_size
     except Exception as err:
         raise colander.Invalid(node, msg=str(err), value=value)
     if result.size > self.SIZE_LIMIT:
         msg = "Asset too large: {} bytes".format(result.size)
         raise colander.Invalid(node, msg=msg, value=value)
     return result
Esempio n. 5
0
 def deserialize(self, node, value):
     """Deserialize into a File."""
     if value == colander.null:
         return None
     try:
         result = File(stream=value.file,
                       mimetype=USE_MAGIC,
                       title=value.filename)
         # We add the size as an extra attribute since get_size() doesn't
         # work before the transaction has been committed
         if isinstance(value.file, io.BytesIO):
             result.size = len(value.file.getvalue())
         else:
             result.size = os.fstat(value.file.fileno()).st_size
     except Exception as err:
         raise colander.Invalid(node, msg=str(err), value=value)
     if result.size > self.SIZE_LIMIT:
         msg = 'Asset too large: {} bytes'.format(result.size)
         raise colander.Invalid(node, msg=msg, value=value)
     return result
Esempio n. 6
0
 def deserialize(self, node: SchemaNode, value: object) -> File:
     """Deserialize :class:`cgi.file` or class:`deform.widget.filedict` ."""
     if value == null:
         return None
     try:
         filedata, filename = self._get_file_data_and_name(value)
         filedata.seek(0)
         result = File(stream=filedata,
                       mimetype=USE_MAGIC,
                       title=filename)
         # We add the size as an extra attribute since get_size() doesn't
         # work before the transaction has been committed
         if isinstance(filedata, io.BytesIO):
             result.size = len(filedata.getvalue())
         else:
             result.size = os.fstat(filedata.fileno()).st_size
     except Exception as err:
         raise Invalid(node, msg=str(err), value=value)
     if result.size > self.SIZE_LIMIT:
         msg = 'Asset too large: {} bytes'.format(result.size)
         raise Invalid(node, msg=msg, value=value)
     return result
Esempio n. 7
0
 def deserialize(self, node: SchemaNode, value: object) -> File:
     """Deserialize :class:`cgi.file` or class:`deform.widget.filedict` ."""
     if value == null:
         return None
     try:
         filedata, filename = self._get_file_data_and_name(value)
         filedata.seek(0)
         result = File(stream=filedata,
                       mimetype=USE_MAGIC,
                       title=filename)
         # We add the size as an extra attribute since get_size() doesn't
         # work before the transaction has been committed
         if isinstance(filedata, io.BytesIO):
             result.size = len(filedata.getvalue())
         else:
             result.size = os.fstat(filedata.fileno()).st_size
     except Exception as err:
         raise Invalid(node, msg=str(err), value=value)
     if result.size > self.SIZE_LIMIT:
         msg = 'Asset too large: {} bytes'.format(result.size)
         raise Invalid(node, msg=msg, value=value)
     return result
Esempio n. 8
0
 def _crop_and_resize_image(self,
                            context: IResource,
                            registry: Registry) -> File:
     parent_file = retrieve_asset_file(context.__parent__, registry)
     # Crop and resize image via PIL
     with parent_file.blob.open('r') as blobdata:
         mimetype = parent_file.mimetype
         image = Image.open(blobdata)
         cropped_image = self._crop_if_needed(image)
         resized_image = cropped_image.resize(self.dimensions,
                                              Image.ANTIALIAS)
         bytestream = io.BytesIO()
         resized_image.save(bytestream, image.format)
         bytestream.seek(0)
     # Store as substanced File and return
     self.file = File(stream=bytestream, mimetype=mimetype)
     transaction.commit()  # to avoid BlobError: Uncommitted changes
     return self.file
Esempio n. 9
0
 def get_size(self):
     try:
         return OriginFile.get_size(self)
     except BlobError:
         transaction.commit()
         return OriginFile.get_size(self)
Esempio n. 10
0
 def _get_response(self) -> FileResponse:
     return File.get_response(self)
Esempio n. 11
0
 def upload(self, stream, mimetype_hint=None):
     result = File.upload(self, stream, mimetype_hint)
     duration = audioread.audio_open(
         self.blob._p_blob_uncommitted).duration
     self.duration = duration
     return result
Esempio n. 12
0
 def _get_response(self) -> FileResponse:
     return File.get_response(self)
Esempio n. 13
0
 def __init__(self, title, artist, timings, audio_stream,
              audio_mimetype='audio/mpeg'):
     File.__init__(self, audio_stream, audio_mimetype, title)
     self.artist = artist
     self.timings = timings