From 0e2ed06e108cb7d389234e78afbb0397fcf32787 Mon Sep 17 00:00:00 2001 From: Olle Settergren Date: Mon, 9 Dec 2024 18:08:40 +0000 Subject: [PATCH 1/2] added tags to event and news --- db_models/event_model.py | 3 +++ db_models/news_model.py | 3 +++ db_models/tag_model.py | 26 ++++++++++++++++++++++++++ helpers/constants.py | 3 +++ 4 files changed, 35 insertions(+) create mode 100644 db_models/tag_model.py diff --git a/db_models/event_model.py b/db_models/event_model.py index 83fe39d..0a12f5a 100644 --- a/db_models/event_model.py +++ b/db_models/event_model.py @@ -11,6 +11,7 @@ from event_user_model import EventUser_DB from council_model import Council_DB from priority_model import Priority_DB + from tag_model import Tag_DB class Event_DB(BaseModel_DB): @@ -42,6 +43,8 @@ class Event_DB(BaseModel_DB): target_collection="event_users", attr="user", init=False ) + tags: AssociationProxy[list["Tag_DB"]] = association_proxy(target_collection="event_tags", attr="tag", init=False) + priorities: Mapped[list["Priority_DB"]] = relationship(back_populates="event", init=False) all_day: Mapped[bool] = mapped_column(default=False) diff --git a/db_models/news_model.py b/db_models/news_model.py index f794b98..05d1586 100644 --- a/db_models/news_model.py +++ b/db_models/news_model.py @@ -6,9 +6,11 @@ from helpers.constants import MAX_NEWS_CONTENT, MAX_NEWS_TITLE from helpers.db_util import created_at_column +from sqlalchemy.ext.associationproxy import association_proxy, AssociationProxy if TYPE_CHECKING: from .user_model import User_DB + from tag_model import Tag_DB class News_DB(BaseModel_DB): @@ -36,5 +38,6 @@ class News_DB(BaseModel_DB): pinned_to: Mapped[Optional[datetime]] = mapped_column(default=None) + tags: AssociationProxy[list["Tag_DB"]] = association_proxy(target_collection="news_tags", attr="tag", init=False) # categories: Mapped[list["Category_DB"]] # image: Mapped["Image_DB"] diff --git a/db_models/tag_model.py b/db_models/tag_model.py new file mode 100644 index 0000000..7848b7e --- /dev/null +++ b/db_models/tag_model.py @@ -0,0 +1,26 @@ +from typing import TYPE_CHECKING, Optional + +from sqlalchemy import String + +from helpers.constants import MAX_TAG_NAME +from .base_model import BaseModel_DB +from sqlalchemy.orm import mapped_column, Mapped, relationship +from sqlalchemy.ext.associationproxy import association_proxy, AssociationProxy + +if TYPE_CHECKING: + from news_model import News_DB + from event_model import Event_DB + + +class Tag_DB(BaseModel_DB): + __tablename__ = "tag_table" + + id: Mapped[int] = mapped_column(primary_key=True, init=False) + tag_name: Mapped[str] = mapped_column(String(MAX_TAG_NAME)) + color: Mapped[str] = mapped_column(String(7)) # Defined as #ff0000 for example + + events: AssociationProxy[list["Event_DB"]] = association_proxy( + target_collection="event_tags", attr="tag", init=False + ) + + news: AssociationProxy[list["News_DB"]] = association_proxy(target_collection="news_tags", attr="tag", init=False) diff --git a/helpers/constants.py b/helpers/constants.py index 0fa2c1a..3a51154 100644 --- a/helpers/constants.py +++ b/helpers/constants.py @@ -32,3 +32,6 @@ # Imgs MAX_IMG_NAME = 200 + +# Tag +MAX_TAG_NAME = 100 From e051fbdd3584827951646840cb9a41f342790774 Mon Sep 17 00:00:00 2001 From: Olle Settergren Date: Wed, 11 Dec 2024 17:06:22 +0000 Subject: [PATCH 2/2] added image tags (?) --- db_models/img_model.py | 8 +++++++- db_models/tag_model.py | 7 +++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/db_models/img_model.py b/db_models/img_model.py index 6a03713..7ceee47 100644 --- a/db_models/img_model.py +++ b/db_models/img_model.py @@ -1,8 +1,12 @@ -from typing import Optional +from typing import Optional, TYPE_CHECKING from sqlalchemy import ForeignKey from .album_model import Album_DB from .base_model import BaseModel_DB from sqlalchemy.orm import relationship, Mapped, mapped_column +from sqlalchemy.ext.associationproxy import association_proxy, AssociationProxy + +if TYPE_CHECKING: + from tag_model import Tag_DB class Img_DB(BaseModel_DB): @@ -15,3 +19,5 @@ class Img_DB(BaseModel_DB): album_id: Mapped[int] = mapped_column(ForeignKey("album_table.id"), default=None) album: Mapped["Album_DB"] = relationship(back_populates="imgs", init=False) + + tags: AssociationProxy[list["Tag_DB"]] = association_proxy(target_collection="image_tags", attr="tag", init=False) diff --git a/db_models/tag_model.py b/db_models/tag_model.py index 7848b7e..eb3289d 100644 --- a/db_models/tag_model.py +++ b/db_models/tag_model.py @@ -1,15 +1,16 @@ -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING from sqlalchemy import String from helpers.constants import MAX_TAG_NAME from .base_model import BaseModel_DB -from sqlalchemy.orm import mapped_column, Mapped, relationship +from sqlalchemy.orm import mapped_column, Mapped from sqlalchemy.ext.associationproxy import association_proxy, AssociationProxy if TYPE_CHECKING: from news_model import News_DB from event_model import Event_DB + from img_model import Img_DB class Tag_DB(BaseModel_DB): @@ -24,3 +25,5 @@ class Tag_DB(BaseModel_DB): ) news: AssociationProxy[list["News_DB"]] = association_proxy(target_collection="news_tags", attr="tag", init=False) + + images: AssociationProxy[list["Img_DB"]] = association_proxy(target_collection="image_tags", attr="tag", init=False)