[DB missing] Remove SQLAlchemy Enum

This commit is contained in:
Luís Murta 2023-05-10 20:49:57 +01:00
parent 271130b107
commit 3698654715
Signed by: satprog
GPG Key ID: 169EF1BBD7049F94
3 changed files with 57 additions and 20 deletions

View File

@ -0,0 +1,48 @@
"""Drop SQLAlchemy enum
Revision ID: 60469d5dd2b0
Revises: b599dafcf468
Create Date: 2023-05-15 19:24:07.911352+00:00
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
# revision identifiers, used by Alembic.
revision = "60469d5dd2b0"
down_revision = "b599dafcf468"
branch_labels = None
depends_on = None
def upgrade() -> None:
op.execute(
"""
CREATE TYPE pfbudget.scheduleperiod
AS ENUM ('daily', 'weekly', 'monthly', 'yearly')
"""
)
op.execute(
"""ALTER TABLE pfbudget.category_schedules
ALTER COLUMN period TYPE pfbudget.scheduleperiod
USING period::text::pfbudget.scheduleperiod
"""
)
op.execute("DROP TYPE pfbudget.period")
def downgrade() -> None:
op.execute(
"""
CREATE TYPE pfbudget.period
AS ENUM ('daily', 'weekly', 'monthly', 'yearly')
"""
)
op.execute(
"""ALTER TABLE pfbudget.category_schedules
ALTER COLUMN period TYPE pfbudget.period
USING period::text::pfbudget.period
"""
)
op.execute("DROP TYPE pfbudget.scheduleperiod")

View File

@ -6,7 +6,7 @@ import os
import re import re
from pfbudget.common.types import Operation from pfbudget.common.types import Operation
from pfbudget.db.model import AccountType, Period from pfbudget.db.model import AccountType, SchedulePeriod
from pfbudget.db.sqlite import DatabaseClient from pfbudget.db.sqlite import DatabaseClient
import pfbudget.reporting.graph import pfbudget.reporting.graph
@ -269,7 +269,7 @@ def category(parser: argparse.ArgumentParser):
schedule = commands.add_parser("schedule") schedule = commands.add_parser("schedule")
schedule.set_defaults(op=Operation.CategorySchedule) schedule.set_defaults(op=Operation.CategorySchedule)
schedule.add_argument("category", nargs="+", type=str) schedule.add_argument("category", nargs="+", type=str)
schedule.add_argument("period", nargs=1, choices=[e.value for e in Period]) schedule.add_argument("period", nargs=1, choices=[e.value for e in SchedulePeriod])
schedule.add_argument("--frequency", nargs=1, default=[1], type=int) schedule.add_argument("--frequency", nargs=1, default=[1], type=int)
rule = commands.add_parser("rule") rule = commands.add_parser("rule")

View File

@ -50,12 +50,6 @@ class AccountType(enum.Enum):
MASTERCARD = enum.auto() MASTERCARD = enum.auto()
accounttype = Annotated[
AccountType,
mapped_column(Enum(AccountType, inherit_schema=True)),
]
class Export: class Export:
@property @property
def format(self) -> dict[str, Any]: def format(self) -> dict[str, Any]:
@ -67,7 +61,7 @@ class Bank(Base, Export):
name: Mapped[str] = mapped_column(primary_key=True) name: Mapped[str] = mapped_column(primary_key=True)
BIC: Mapped[str] = mapped_column(String(8)) BIC: Mapped[str] = mapped_column(String(8))
type: Mapped[accounttype] type: Mapped[AccountType]
nordigen: Mapped[Optional[Nordigen]] = relationship(init=False, lazy="joined") nordigen: Mapped[Optional[Nordigen]] = relationship(init=False, lazy="joined")
@ -283,23 +277,18 @@ class TransactionTag(Base, Export, unsafe_hash=True):
return dict(tag=self.tag) return dict(tag=self.tag)
class Period(enum.Enum): class SchedulePeriod(enum.Enum):
daily = "daily" daily = enum.auto()
weekly = "weekly" weekly = enum.auto()
monthly = "monthly" monthly = enum.auto()
yearly = "yearly" yearly = enum.auto()
scheduleperiod = Annotated[
CategorySelector, mapped_column(Enum(Period, inherit_schema=True))
]
class CategorySchedule(Base, Export): class CategorySchedule(Base, Export):
__tablename__ = "category_schedules" __tablename__ = "category_schedules"
name: Mapped[catfk] = mapped_column(primary_key=True) name: Mapped[catfk] = mapped_column(primary_key=True)
period: Mapped[Optional[scheduleperiod]] period: Mapped[Optional[SchedulePeriod]]
period_multiplier: Mapped[Optional[int]] period_multiplier: Mapped[Optional[int]]
amount: Mapped[Optional[int]] amount: Mapped[Optional[int]]