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
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
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
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