예제 #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
예제 #2
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
예제 #3
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
예제 #4
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
예제 #5
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