31 lines
913 B
Python
31 lines
913 B
Python
from __future__ import annotations # TODO: Remove if python requirement is >= 3.10
|
|
|
|
from sqlalchemy import event
|
|
from pathlib import Path
|
|
|
|
from . import ModelSerializeMixin, Serial
|
|
from ..database import db
|
|
|
|
class Image(db.Model, ModelSerializeMixin):
|
|
__tablename__ = "image"
|
|
id: int = db.Column("id", Serial, primary_key=True)
|
|
filename_: str = db.Column(db.String(30), nullable=False)
|
|
mimetype_: str = db.Column(db.String(30), nullable=False)
|
|
thumbnail_: str = db.Column(db.String(127))
|
|
path_: str = db.Column(db.String(127))
|
|
|
|
def open(self):
|
|
return open(self.path_, "rb")
|
|
|
|
|
|
@event.listens_for(Image, 'before_delete')
|
|
def clear_file(mapper, connection, target: Image):
|
|
if target.path_:
|
|
p = Path(target.path_)
|
|
if p.exists():
|
|
p.unlink()
|
|
if target.thumbnail_:
|
|
p = Path(target.thumbnail_)
|
|
if p.exists():
|
|
p.unlink()
|