54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
from uuid import uuid4
|
|
|
|
from citext import CIText
|
|
from sqlalchemy import BigInteger, Column
|
|
from sqlalchemy import Enum as DBEnum
|
|
from sqlalchemy import ForeignKey
|
|
from sqlalchemy.dialects.postgresql import UUID
|
|
from sqlalchemy.orm import backref, relationship
|
|
from sqlalchemy.util import OrderedSet
|
|
|
|
from ereuse_devicehub.db import db
|
|
from ereuse_devicehub.resources.device.models import Device
|
|
from ereuse_devicehub.resources.enums import ImageMimeTypes, Orientation
|
|
from ereuse_devicehub.resources.models import Thing
|
|
from ereuse_devicehub.teal.db import CASCADE_OWN
|
|
|
|
|
|
class ImageList(Thing):
|
|
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid4)
|
|
device_id = Column(BigInteger, ForeignKey(Device.id), nullable=False)
|
|
device = relationship(
|
|
Device,
|
|
primaryjoin=Device.id == device_id,
|
|
backref=backref(
|
|
'images',
|
|
lazy=True,
|
|
cascade=CASCADE_OWN,
|
|
order_by=lambda: ImageList.created,
|
|
collection_class=OrderedSet,
|
|
),
|
|
)
|
|
|
|
|
|
class Image(Thing):
|
|
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid4)
|
|
name = Column(CIText(), default='', nullable=False)
|
|
content = db.Column(db.LargeBinary, nullable=False)
|
|
file_format = db.Column(DBEnum(ImageMimeTypes), nullable=False)
|
|
orientation = db.Column(DBEnum(Orientation), nullable=False)
|
|
image_list_id = Column(UUID(as_uuid=True), ForeignKey(ImageList.id), nullable=False)
|
|
image_list = relationship(
|
|
ImageList,
|
|
primaryjoin=ImageList.id == image_list_id,
|
|
backref=backref(
|
|
'images',
|
|
cascade=CASCADE_OWN,
|
|
order_by=lambda: Image.created,
|
|
collection_class=OrderedSet,
|
|
),
|
|
)
|
|
|
|
# todo make an image Field that converts to/from image object
|
|
# todo which metadata we get from Photobox?
|