[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.
This commit is contained in:
Luís Murta 2023-05-08 23:46:58 +01:00
parent ec22b5e5bd
commit 271130b107
Signed by: satprog
GPG Key ID: 169EF1BBD7049F94
3 changed files with 8 additions and 8 deletions

View File

@ -323,7 +323,7 @@ class Manager:
for rule in rules: for rule in rules:
del rule["type"] del rule["type"]
category.rules = set(CategoryRule(**rule) for rule in rules) category.rules = [CategoryRule(**rule) for rule in rules]
if row["schedule"]: if row["schedule"]:
category.schedule = CategorySchedule(**row["schedule"]) category.schedule = CategorySchedule(**row["schedule"])
categories.append(category) categories.append(category)

View File

@ -180,8 +180,8 @@ class Category(Base, Export):
ForeignKey(CategoryGroup.name), default=None ForeignKey(CategoryGroup.name), default=None
) )
rules: Mapped[set[CategoryRule]] = relationship( rules: Mapped[list[CategoryRule]] = relationship(
cascade="all, delete-orphan", passive_deletes=True, default_factory=set cascade="all, delete-orphan", passive_deletes=True, default_factory=list
) )
schedule: Mapped[Optional[CategorySchedule]] = relationship( schedule: Mapped[Optional[CategorySchedule]] = relationship(
cascade="all, delete-orphan", passive_deletes=True, default=None cascade="all, delete-orphan", passive_deletes=True, default=None
@ -267,8 +267,8 @@ class Tag(Base):
name: Mapped[str] = mapped_column(primary_key=True) name: Mapped[str] = mapped_column(primary_key=True)
rules: Mapped[set[TagRule]] = relationship( rules: Mapped[list[TagRule]] = relationship(
cascade="all, delete-orphan", passive_deletes=True, default_factory=set 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) 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" __tablename__ = "rules"
id: Mapped[idpk] = mapped_column(init=False) id: Mapped[idpk] = mapped_column(init=False)

View File

@ -6,7 +6,7 @@ category_null = Category("null")
category1 = Category( category1 = Category(
"cat#1", "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))])