Adds modify rule operation
This commit is contained in:
parent
7986fe8e5b
commit
a2b2f2c1d1
@ -69,6 +69,27 @@ if __name__ == "__main__":
|
|||||||
assert args.keys() >= {"id"}, "argparser ill defined"
|
assert args.keys() >= {"id"}, "argparser ill defined"
|
||||||
params = args["id"]
|
params = args["id"]
|
||||||
|
|
||||||
|
case pfbudget.Operation.RuleModify:
|
||||||
|
assert args.keys() >= {
|
||||||
|
"id",
|
||||||
|
"category",
|
||||||
|
"date",
|
||||||
|
"description",
|
||||||
|
"bank",
|
||||||
|
"min",
|
||||||
|
"max",
|
||||||
|
"remove",
|
||||||
|
}, "argparser ill defined"
|
||||||
|
|
||||||
|
nargs_1 = ["category", "date", "description", "regex", "bank", "min", "max"]
|
||||||
|
params = []
|
||||||
|
for id in args["id"]:
|
||||||
|
param = {"id": id}
|
||||||
|
param |= {k: v[0] for k, v in args.items() if k in nargs_1 and args[k]}
|
||||||
|
param |= {k: None for k in args["remove"] if k in nargs_1}
|
||||||
|
|
||||||
|
params.append(param)
|
||||||
|
|
||||||
case pfbudget.Operation.GroupAdd:
|
case pfbudget.Operation.GroupAdd:
|
||||||
assert "group" in args, "argparser ill defined"
|
assert "group" in args, "argparser ill defined"
|
||||||
params = [pfbudget.types.CategoryGroup(group) for group in args["group"]]
|
params = [pfbudget.types.CategoryGroup(group) for group in args["group"]]
|
||||||
|
|||||||
@ -377,6 +377,18 @@ def category_rule(parser: argparse.ArgumentParser, universal: argparse.ArgumentP
|
|||||||
remove.set_defaults(op=Operation.RuleRemove)
|
remove.set_defaults(op=Operation.RuleRemove)
|
||||||
remove.add_argument("id", nargs="+", type=int)
|
remove.add_argument("id", nargs="+", type=int)
|
||||||
|
|
||||||
|
modify = commands.add_parser("modify", parents=[universal])
|
||||||
|
modify.set_defaults(op=Operation.RuleModify)
|
||||||
|
modify.add_argument("id", nargs="+", type=int)
|
||||||
|
modify.add_argument("--category", nargs=1, type=str)
|
||||||
|
modify.add_argument("--date", nargs=1, type=dt.date.fromisoformat)
|
||||||
|
modify.add_argument("--description", nargs=1, type=str)
|
||||||
|
modify.add_argument("--regex", nargs=1, type=str)
|
||||||
|
modify.add_argument("--bank", nargs=1, type=str)
|
||||||
|
modify.add_argument("--min", nargs=1, type=decimal.Decimal)
|
||||||
|
modify.add_argument("--max", nargs=1, type=decimal.Decimal)
|
||||||
|
modify.add_argument("--remove", nargs="*", default=[], type=str)
|
||||||
|
|
||||||
|
|
||||||
def run():
|
def run():
|
||||||
args = vars(argparser().parse_args())
|
args = vars(argparser().parse_args())
|
||||||
|
|||||||
@ -19,6 +19,7 @@ class Operation(Enum):
|
|||||||
CategorySchedule = auto()
|
CategorySchedule = auto()
|
||||||
RuleAdd = auto()
|
RuleAdd = auto()
|
||||||
RuleRemove = auto()
|
RuleRemove = auto()
|
||||||
|
RuleModify = auto()
|
||||||
GroupAdd = auto()
|
GroupAdd = auto()
|
||||||
GroupRemove = auto()
|
GroupRemove = auto()
|
||||||
|
|
||||||
|
|||||||
@ -74,6 +74,11 @@ class Manager:
|
|||||||
with self.db.session() as session:
|
with self.db.session() as session:
|
||||||
session.removerules(params)
|
session.removerules(params)
|
||||||
|
|
||||||
|
case Operation.RuleModify:
|
||||||
|
assert all(isinstance(param, dict) for param in params)
|
||||||
|
with self.db.session() as session:
|
||||||
|
session.updaterules(params)
|
||||||
|
|
||||||
case Operation.GroupAdd:
|
case Operation.GroupAdd:
|
||||||
with self.db.session() as session:
|
with self.db.session() as session:
|
||||||
session.addgroups(CategoryGroup(params))
|
session.addgroups(CategoryGroup(params))
|
||||||
|
|||||||
@ -117,11 +117,12 @@ class DbClient:
|
|||||||
self.__session.add_all(rules)
|
self.__session.add_all(rules)
|
||||||
|
|
||||||
def removerules(self, ids: list[int]):
|
def removerules(self, ids: list[int]):
|
||||||
stmt = delete(CategoryRule).where(
|
stmt = delete(CategoryRule).where(CategoryRule.id.in_(ids))
|
||||||
CategoryRule.id.in_(ids)
|
|
||||||
)
|
|
||||||
self.__session.execute(stmt)
|
self.__session.execute(stmt)
|
||||||
|
|
||||||
|
def updaterules(self, rules: list[dict]):
|
||||||
|
self.__session.execute(update(CategoryRule), rules)
|
||||||
|
|
||||||
def addgroups(self, groups: list[CategoryGroup]):
|
def addgroups(self, groups: list[CategoryGroup]):
|
||||||
self.__session.add_all(groups)
|
self.__session.add_all(groups)
|
||||||
|
|
||||||
|
|||||||
@ -114,7 +114,7 @@ class Category(Base):
|
|||||||
)
|
)
|
||||||
|
|
||||||
rules: Mapped[Optional[set[CategoryRule]]] = relationship(
|
rules: Mapped[Optional[set[CategoryRule]]] = relationship(
|
||||||
cascade="all, delete-orphan", passive_deletes=True, default=None
|
cascade="all, delete-orphan", passive_deletes=True, default_factory=set
|
||||||
)
|
)
|
||||||
schedule: Mapped[CategorySchedule] = relationship(
|
schedule: Mapped[CategorySchedule] = relationship(
|
||||||
back_populates="category", default=None
|
back_populates="category", default=None
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user