models
models ¶
BinaryFile ¶
BinaryFile(
fptr: IO[bytes], suggested_filename=None, mimetype=None
)
Base class for handling files.
Added in version 0.4.0
Source code in itkdb/models/file.py
def __init__(self, fptr: IO[bytes], suggested_filename=None, mimetype=None):
self.fptr = fptr
self._suggested_filename = suggested_filename
self._mimetype = mimetype
extension property
¶
extension: str | None
Extension of file.
Return the extension of the file in this order
- extension using the (suggested) filename taken from response headers (if filename has extension)
- extension using mimetype from object initialization
- extension using mimetype guessed from file content itself
__del__ ¶
__del__() -> None
Source code in itkdb/models/file.py
def __del__(self) -> None:
if not self.fptr.closed:
self.fptr.close()
__len__ ¶
__len__() -> int
Source code in itkdb/models/file.py
def __len__(self) -> int:
return self.size
__repr__ ¶
__repr__() -> str
Source code in itkdb/models/file.py
def __repr__(self) -> str:
cls = type(self)
module = cls.__module__
qualname = cls.__qualname__
return f"<{module}.{qualname}(suggested_filename={self.suggested_filename}, size={self.size_fmt} [{self.size} bytes]) file-like object at {self.filename}>"
from_response classmethod
¶
from_response(response) -> Self
Factory to create BinaryFile-like object from requests.Response.
Source code in itkdb/models/file.py
@classmethod
def from_response(cls, response) -> Self:
"""
Factory to create BinaryFile-like object from requests.Response.
"""
mimetype = response.headers.get("content-type")
content_disposition = response.headers.get("content-disposition", "")
# NB: cgi module deprecated in 3.11
msg = EmailMessage()
msg["content-disposition"] = content_disposition
filename = msg["content-disposition"].params.get("filename")
temp_fp = NamedTemporaryFile() # pylint: disable=consider-using-with
for chunk in response.iter_content(chunk_size=512 * 1024):
temp_fp.write(chunk)
temp_fp.seek(0)
return cls(temp_fp, suggested_filename=filename, mimetype=mimetype)
save ¶
save(filename = None) -> int
Save the file.
Source code in itkdb/models/file.py
def save(self, filename=None) -> int:
"""
Save the file.
"""
new_filename = filename or self.suggested_filename
if new_filename is None:
msg = "Please set a filename to save to first."
raise ValueError(msg)
copyfile(self.filename, Path(new_filename))
log.info("Written %s (%d bytes) to %s", self.size_fmt, self.size, new_filename)
return self.size
ImageFile ¶
TextFile ¶
ZipFile ¶
ZipFile(binary_file)
Bases: zipfile.ZipFile
Class to handle zip files.
Added in version 0.4.0
Source code in itkdb/models/file.py
def __init__(self, binary_file):
self._file = binary_file
super().__init__(self._file.fptr)
__repr__ ¶
__repr__() -> str
Source code in itkdb/models/file.py
def __repr__(self) -> str:
cls = type(self)
module = cls.__module__
qualname = cls.__qualname__
return f"<{module}.{qualname}(suggested_filename={self.suggested_filename}, size={self.size_fmt} [{self.size} bytes]) file-like object at {self.filename}>"
from_response classmethod
¶
from_response(response)
Factory to create BinaryFile-like object from requests.Response.
Source code in itkdb/models/file.py
@classmethod
def from_response(cls, response):
"""
Factory to create BinaryFile-like object from requests.Response.
"""
return cls(BinaryFile.from_response(response))
save ¶
save(filename = None) -> int
Save the file.
Source code in itkdb/models/file.py
def save(self, filename=None) -> int:
"""
Save the file.
"""
return self._file.save(filename=filename)
Last update: April 19, 2023