From 9a4096240866332ee9f63062199fabe01b554a6c Mon Sep 17 00:00:00 2001 From: KKlochko Date: Sat, 25 Mar 2023 17:29:58 +0200 Subject: [PATCH] (Added) update labels option for groups. --- CHANGELOG.org | 2 + tui_rsync/cli/groups/group_update.py | 60 ++++++++++++++++++++++++++++ tui_rsync/cli/groups/groups.py | 2 + tui_rsync/models/models.py | 3 ++ 4 files changed, 67 insertions(+) create mode 100644 tui_rsync/cli/groups/group_update.py diff --git a/CHANGELOG.org b/CHANGELOG.org index 2c84f49..ff90a59 100644 --- a/CHANGELOG.org +++ b/CHANGELOG.org @@ -45,4 +45,6 @@ Added better label prompt for choosing labels. ** 0.8.9 <2023-03-25 Sat> Updated groups source creation. +** 0.8.10 <2023-03-25 Sat> + Added *update labels* option for groups. diff --git a/tui_rsync/cli/groups/group_update.py b/tui_rsync/cli/groups/group_update.py new file mode 100644 index 0000000..ec2b54f --- /dev/null +++ b/tui_rsync/cli/groups/group_update.py @@ -0,0 +1,60 @@ +################################################################################ +# Copyright (C) 2023 Kostiantyn Klochko # +# # +# This file is part of tui-rsync. # +# # +# tui-rsync is free software: you can redistribute it and/or modify it under # +# uthe terms of the GNU General Public License as published by the Free # +# Software Foundation, either version 3 of the License, or (at your option) # +# any later version. # +# # +# tui-rsync is distributed in the hope that it will be useful, but WITHOUT ANY # +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more # +# details. # +# # +# You should have received a copy of the GNU General Public License along with # +# tui-rsync. If not, see . # +################################################################################ + +from rich.console import Console +from rich.prompt import Prompt +from typing import List, Optional +import typer + +from tui_rsync.models.models import Group, GroupSource +from tui_rsync.cli.label_prompt import LabelPrompt +from tui_rsync.cli.groups.group_prompt import GroupPrompt +from typer.main import get_group + +console = Console() +group_update = typer.Typer() + +@group_update.command() +def labels( + group_label: str = typer.Option( + None, "--group-label", "-g", + help="[b]The label[/] is a uniq identification of a [b]group[/].", + show_default=False + ), + new_labels: str = typer.Option( + None, "--new-labels", "-nl", + help="[b]The new label[/] will replace the [b]old source label[/].", + show_default=False + ), + +): + """ + [green b]Update[/] [yellow]the group[/] with a [bold]the label[/]. + [b]The chosen sources[/] will be updated for [b]the group[/]. + """ + if group_label is None: + group_label = GroupPrompt.get_label_fzf() + + if new_labels is None: + new_labels = LabelPrompt.get_labels() + + group = Group.get_group(group_label) + group.remove_sources() + GroupSource.create_group_sources(group, new_labels) + group.save() diff --git a/tui_rsync/cli/groups/groups.py b/tui_rsync/cli/groups/groups.py index 75cddbf..766d327 100644 --- a/tui_rsync/cli/groups/groups.py +++ b/tui_rsync/cli/groups/groups.py @@ -25,10 +25,12 @@ import typer from tui_rsync.cli.label_prompt import LabelPrompt from tui_rsync.cli.rsync import Rsync from tui_rsync.models.models import Group, count_all_labels_except +from tui_rsync.cli.groups.group_update import group_update from tui_rsync.cli.groups.group_remove import group_remove console = Console() groups = typer.Typer() +groups.add_typer(group_update, name="update", help="Update groups") groups.add_typer(group_remove, name="remove", help="Remove groups") @groups.command() diff --git a/tui_rsync/models/models.py b/tui_rsync/models/models.py index 3114258..4cf2108 100644 --- a/tui_rsync/models/models.py +++ b/tui_rsync/models/models.py @@ -146,6 +146,9 @@ class Group(BaseModel): """ return (group_src.source for group_src in self.sources) + def remove_sources(self): + GroupSource.delete().where(GroupSource.group == self.label).execute() + def __str__(self) -> str: return f"{self.label}"