2023-04-25 22:56:55 +02:00

55 lines
1.7 KiB
Python

from sqlalchemy import Column, Integer, String, Unicode
from sqlalchemy.orm import deferred
from project import db
from project.dateutils import gmt_tz
from project.models.iowned import IOwned
from project.models.trackable_mixin import TrackableMixin
class Image(db.Model, TrackableMixin, IOwned):
__tablename__ = "image"
id = Column(Integer(), primary_key=True)
data = deferred(db.Column(db.LargeBinary))
encoding_format = Column(String(80))
copyright_text = Column(Unicode(255))
adminunit = db.relationship("AdminUnit", uselist=False)
event = db.relationship("Event", uselist=False)
eventorganizer = db.relationship("EventOrganizer", uselist=False)
eventplace = db.relationship("EventPlace", uselist=False)
eventsuggestion = db.relationship("EventSuggestion", uselist=False)
def is_empty(self):
return not self.data
def get_hash(self):
return (
int(self.updated_at.replace(tzinfo=gmt_tz).timestamp() * 1000)
if self.updated_at
else 0
)
def get_file_extension(self):
return self.encoding_format.split("/")[-1] if self.encoding_format else "png"
def before_flush(self, session, is_dirty):
if self.is_empty():
if self.adminunit:
self.adminunit.logo = None
if self.event:
self.event.photo = None
if self.eventorganizer:
self.eventorganizer.logo = None
if self.eventplace:
self.eventplace.photo = None
if self.eventsuggestion:
self.eventsuggestion.photo = None
if is_dirty:
session.delete(self)