Quellcode für meipi.indexing.srcdocs
"""Modelle zur Speicherung der eigentlichen Bilder und Dokumente in der Datenbank.
Aktuell nicht genutzt, da die Bilder und Dokumente in Dateien auf der Festplatte gespeichert werden."""
#TODO: Umbenennen und erweitern, um auch die Speicherung von Dokumenten zu ermöglichen.
#TODO: S3-Integration für Bilder und Dokumente, um die Datenbank von großen Binärdaten zu entlasten.
import io
from sqlalchemy.types import TypeDecorator, LargeBinary
from sqlalchemy.orm import (
Mapped,
mapped_column,
)
from PIL import Image
from .model import Base
[Doku]
class PILImageType(TypeDecorator):
"""Decorator für Bilder-Attribut"""
impl = LargeBinary
[Doku]
def process_bind_param(self, value:Image.Image | None, dialect):
if value is None:
return None
buf = io.BytesIO()
value.save(buf, format="JPEG")
return buf.getvalue()
[Doku]
def process_result_value(self, value, dialect):
if value is None:
return None
return Image.open(io.BytesIO(value))
[Doku]
class Photo(Base):
"""Tabelle für Bilddaten
"""
__tablename__ = "photos"
id: Mapped[int] = mapped_column(primary_key=True)
image: Mapped[Image.Image] = mapped_column(PILImageType)