From 271130b107fba6d6ab1ba8eda29cff9d29843797 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Murta?= Date: Mon, 8 May 2023 23:46:58 +0100 Subject: [PATCH] [DB] Rules collection using list instead of set There pains of using a set as the aggregation of rules overweight the small advantage. While it would make detecting similar rules faster, the use of a collection type not inherently supporting by JSON brings some issues in the serialization. --- pfbudget/core/manager.py | 2 +- pfbudget/db/model.py | 10 +++++----- tests/mocks/categories.py | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pfbudget/core/manager.py b/pfbudget/core/manager.py index 166757f..4c75308 100644 --- a/pfbudget/core/manager.py +++ b/pfbudget/core/manager.py @@ -323,7 +323,7 @@ class Manager: for rule in rules: del rule["type"] - category.rules = set(CategoryRule(**rule) for rule in rules) + category.rules = [CategoryRule(**rule) for rule in rules] if row["schedule"]: category.schedule = CategorySchedule(**row["schedule"]) categories.append(category) diff --git a/pfbudget/db/model.py b/pfbudget/db/model.py index 1bdfe33..3173ede 100644 --- a/pfbudget/db/model.py +++ b/pfbudget/db/model.py @@ -180,8 +180,8 @@ class Category(Base, Export): ForeignKey(CategoryGroup.name), default=None ) - rules: Mapped[set[CategoryRule]] = relationship( - cascade="all, delete-orphan", passive_deletes=True, default_factory=set + rules: Mapped[list[CategoryRule]] = relationship( + cascade="all, delete-orphan", passive_deletes=True, default_factory=list ) schedule: Mapped[Optional[CategorySchedule]] = relationship( cascade="all, delete-orphan", passive_deletes=True, default=None @@ -267,8 +267,8 @@ class Tag(Base): name: Mapped[str] = mapped_column(primary_key=True) - rules: Mapped[set[TagRule]] = relationship( - cascade="all, delete-orphan", passive_deletes=True, default_factory=set + rules: Mapped[list[TagRule]] = relationship( + cascade="all, delete-orphan", passive_deletes=True, default_factory=list ) @@ -320,7 +320,7 @@ class Link(Base): link: Mapped[idfk] = mapped_column(primary_key=True) -class Rule(Base, Export, init=False, unsafe_hash=True): +class Rule(Base, Export, init=False): __tablename__ = "rules" id: Mapped[idpk] = mapped_column(init=False) diff --git a/tests/mocks/categories.py b/tests/mocks/categories.py index de83881..5a40cb7 100644 --- a/tests/mocks/categories.py +++ b/tests/mocks/categories.py @@ -6,7 +6,7 @@ category_null = Category("null") category1 = Category( "cat#1", - rules={CategoryRule("cat#1", description="desc#1", max=Decimal(0))}, + rules=[CategoryRule("cat#1", description="desc#1", max=Decimal(0))], ) -tag_1 = Tag("tag#1", rules={TagRule("tag#1", description="desc#1", max=Decimal(0))}) +tag_1 = Tag("tag#1", rules=[TagRule("tag#1", description="desc#1", max=Decimal(0))])