diff --git a/pfbudget/db/model.py b/pfbudget/db/model.py index 90cc41c..7c6782a 100644 --- a/pfbudget/db/model.py +++ b/pfbudget/db/model.py @@ -263,7 +263,6 @@ class Category(Base, Serializable, repr=False): for rule in self.rules: rules.append( { - "name": rule.name, "start": rule.start, "end": rule.end, "description": rule.description, @@ -277,7 +276,6 @@ class Category(Base, Serializable, repr=False): schedule = None if self.schedule: schedule = { - "name": self.schedule.name, "period": self.schedule.period.name if self.schedule.period else None, "period_multiplier": self.schedule.period_multiplier, "amount": self.schedule.amount, @@ -367,7 +365,6 @@ class Tag(Base, Serializable): for rule in self.rules: rules.append( { - "name": rule.tag, "start": rule.start, "end": rule.end, "description": rule.description, @@ -405,7 +402,7 @@ class SchedulePeriod(enum.Enum): class CategorySchedule(Base): __tablename__ = "category_schedules" - name: Mapped[catfk] = mapped_column(primary_key=True) + name: Mapped[catfk] = mapped_column(primary_key=True, init=False) period: Mapped[Optional[SchedulePeriod]] period_multiplier: Mapped[Optional[int]] amount: Mapped[Optional[int]] @@ -418,17 +415,17 @@ class Link(Base): link: Mapped[idfk] = mapped_column(primary_key=True) -class Rule(Base, init=False): +class Rule(Base): __tablename__ = "rules" id: Mapped[idpk] = mapped_column(init=False) - start: Mapped[Optional[dt.date]] - end: Mapped[Optional[dt.date]] - description: Mapped[Optional[str]] - regex: Mapped[Optional[str]] - bank: Mapped[Optional[str]] - min: Mapped[Optional[money]] - max: Mapped[Optional[money]] + start: Mapped[Optional[dt.date]] = mapped_column(default=None) + end: Mapped[Optional[dt.date]] = mapped_column(default=None) + description: Mapped[Optional[str]] = mapped_column(default=None) + regex: Mapped[Optional[str]] = mapped_column(default=None) + bank: Mapped[Optional[str]] = mapped_column(default=None) + min: Mapped[Optional[money]] = mapped_column(default=None) + max: Mapped[Optional[money]] = mapped_column(default=None) type: Mapped[str] = mapped_column(init=False) @@ -437,10 +434,6 @@ class Rule(Base, init=False): "polymorphic_on": "type", } - def __init__(self, **kwargs: Any) -> None: - for k, v in kwargs.items(): - setattr(self, k, v) - def matches(self, t: BankTransaction) -> bool: valid = None if self.regex: @@ -478,16 +471,12 @@ class CategoryRule(Rule): primary_key=True, init=False, ) - name: Mapped[catfk] + name: Mapped[catfk] = mapped_column(init=False) __mapper_args__ = { "polymorphic_identity": "category_rule", } - def __init__(self, name: str, **kwargs: Any) -> None: - super().__init__(**kwargs) - self.name = name - class TagRule(Rule): __tablename__ = "tag_rules" @@ -498,12 +487,10 @@ class TagRule(Rule): primary_key=True, init=False, ) - tag: Mapped[str] = mapped_column(ForeignKey(Tag.name, ondelete="CASCADE")) + tag: Mapped[str] = mapped_column( + ForeignKey(Tag.name, ondelete="CASCADE"), init=False + ) __mapper_args__ = { "polymorphic_identity": "tag_rule", } - - def __init__(self, name: str, **kwargs: Any) -> None: - super().__init__(**kwargs) - self.tag = name diff --git a/tests/mocks/categories.py b/tests/mocks/categories.py index 9f5540d..457c34e 100644 --- a/tests/mocks/categories.py +++ b/tests/mocks/categories.py @@ -9,13 +9,13 @@ categorygroup1 = CategoryGroup("group#1") category1 = Category( "cat#1", "group#1", - rules=[CategoryRule("cat#1", description="desc#1", max=Decimal(0))], + rules=[CategoryRule(description="desc#1", max=Decimal(0))], ) category2 = Category( "cat#2", "group#1", - rules=[CategoryRule("cat#1", description="desc#1", max=Decimal(0))], + rules=[CategoryRule(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(description="desc#1", max=Decimal(0))]) diff --git a/tests/test_transform.py b/tests/test_transform.py index f27c740..98f0327 100644 --- a/tests/test_transform.py +++ b/tests/test_transform.py @@ -56,7 +56,9 @@ class TestTransform: for t in transactions: assert not t.category - rules = [CategoryRule("null", bank="Bank#1")] + rule = CategoryRule(bank="Bank#1") + rule.name = "null" + rules = [rule] categorizer: Transformer = Nullifier(rules) transactions = categorizer.transform(transactions) @@ -64,7 +66,9 @@ class TestTransform: for t in transactions: assert not t.category - rules.append(CategoryRule("null", bank="Bank#2")) + rule = CategoryRule(bank="Bank#2") + rule.name = "null" + rules.append(rule) categorizer = Nullifier(rules) transactions = categorizer.transform(transactions) @@ -79,7 +83,11 @@ class TestTransform: for t in transactions: assert not t.category - categorizer: Transformer = Tagger(mock.tag_1.rules) + rules = mock.tag_1.rules + for rule in rules: + rule.tag = mock.tag_1.name + + categorizer: Transformer = Tagger(rules) transactions = categorizer.transform(transactions) for t in transactions: @@ -93,7 +101,11 @@ class TestTransform: for t in transactions: assert not t.category - categorizer: Transformer = Categorizer(mock.category1.rules) + rules = mock.category1.rules + for rule in rules: + rule.name = mock.category1.name + + categorizer: Transformer = Categorizer(rules) transactions = categorizer.transform(transactions) for t in transactions: