Skip to content

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

content property

content: bytes

Raw bytes of the content.

content_type property

content_type: str

Mimetype of the content.

extension property

extension: str | None

Extension of file.

Return the extension of the file in this order
  1. extension using the (suggested) filename taken from response headers (if filename has extension)
  2. extension using mimetype from object initialization
  3. extension using mimetype guessed from file content itself

filename property

filename: str

Filename of file on disk.

fptr instance-attribute

fptr = fptr

mimetype property

mimetype: str

Mimetype of the file.

size property

size: int

Size of file in bytes.

size_fmt property

size_fmt: str

Human-readable size of file.

suggested_filename property

suggested_filename: str | None

Suggested filename.

__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

Bases: BinaryFile

Class to handle image files.

Changed in version 0.4.0

TextFile

Bases: BinaryFile

Class to handle text files.

Changed in version 0.4.0

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)

content property

content: bytes

Raw bytes of the content.

content_type property

content_type: str

Mimetype of the content.

extension property

extension

Extension of file. See BinaryFile.extension.

mimetype property

mimetype: str

Mimetype of the file.

size property

size

Size of file in bytes.

size_fmt property

size_fmt: str

Human-readable size of file.

suggested_filename property

suggested_filename

Suggested filename.

__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