45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
from uuid import UUID
|
|
import os
|
|
|
|
from typing import Any, Optional
|
|
|
|
from sqlalchemy import ForeignKey
|
|
from sqlalchemy.orm import Mapped
|
|
from sqlalchemy.orm import mapped_column
|
|
from sqlalchemy.orm import DeclarativeBase
|
|
from sqlalchemy.orm import relationship
|
|
|
|
from db.base import Base
|
|
|
|
# Define a model with a JSON column
|
|
class Attachment(Base):
|
|
__tablename__ = 'attachments'
|
|
|
|
# can be multiple attachments on a msg
|
|
# so we make our own ids for attachments
|
|
id: Mapped[UUID] = mapped_column(primary_key=True)
|
|
msg_id: Mapped[int] = mapped_column(nullable=False, index=True)
|
|
|
|
url: Mapped[str]
|
|
|
|
message: Mapped[dict[str, Any]]
|
|
guild: Mapped[dict[str, Any]]
|
|
channel: Mapped[dict[str, Any]]
|
|
vision: Mapped[Optional[dict[str, Any]]] = mapped_column(default=None)
|
|
|
|
def file_details(self) -> tuple[str, str]:
|
|
return os.path.splitext(os.path.basename(self.url))
|
|
|
|
def object_name(self) -> str:
|
|
(filename, ext) = self.file_details()
|
|
if self.convert_to_webp():
|
|
return f"{self.id}.webp"
|
|
|
|
return f"{id}{ext}"
|
|
|
|
def convert_to_webp(self) -> bool:
|
|
(filename, ext) = self.file_details()
|
|
convert_extensions = ['jpg', 'png', 'jpeg', 'webp']
|
|
return ext.lower()[1:] in convert_extensions
|
|
|