mirror of https://gitlab.com/KKlochko/tui-rsync
				
				
				
			Added Rsync wrappper. Added fzf_prompt, all_labels for choosing a label of source.dev
							parent
							
								
									b9d8131c3b
								
							
						
					
					
						commit
						467989bbd5
					
				@ -1,3 +1,5 @@
 | 
				
			|||||||
from cli.cli import cli_app
 | 
					from cli.cli import cli_app
 | 
				
			||||||
from cli.source import source
 | 
					from cli.source import source
 | 
				
			||||||
 | 
					from cli.sync import sync
 | 
				
			||||||
 | 
					from cli.rsync import Rsync
 | 
				
			||||||
from cli.label_prompt import LabelPrompt
 | 
					from cli.label_prompt import LabelPrompt
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Copyright (C) 2023 Kostiantyn Klochko <kostya_klochko@ukr.net>               #
 | 
				
			||||||
 | 
					#                                                                              #
 | 
				
			||||||
 | 
					# 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 <https://www.gnu.org/licenses/>.                      #
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import shlex
 | 
				
			||||||
 | 
					from subprocess import Popen, PIPE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Rsync:
 | 
				
			||||||
 | 
					    def __init__(self, args:str):
 | 
				
			||||||
 | 
					        self.__args = ["rsync"] + shlex.split(args)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def run_one(self, source, destination):
 | 
				
			||||||
 | 
					        args = self.__args + [source, destination]
 | 
				
			||||||
 | 
					        output = Popen(args, stdout=PIPE)
 | 
				
			||||||
 | 
					        response = output.communicate()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -0,0 +1,49 @@
 | 
				
			|||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					# Copyright (C) 2023 Kostiantyn Klochko <kostya_klochko@ukr.net>               #
 | 
				
			||||||
 | 
					#                                                                              #
 | 
				
			||||||
 | 
					# 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 <https://www.gnu.org/licenses/>.                      #
 | 
				
			||||||
 | 
					################################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from rich.console import Console
 | 
				
			||||||
 | 
					from rich.prompt import Prompt
 | 
				
			||||||
 | 
					from typing import List, Optional
 | 
				
			||||||
 | 
					import typer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from models.models import Source, Destination, SyncCommand, Path
 | 
				
			||||||
 | 
					from cli.label_prompt import LabelPrompt
 | 
				
			||||||
 | 
					from cli.rsync import Rsync
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					console = Console()
 | 
				
			||||||
 | 
					sync = typer.Typer()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@sync.command()
 | 
				
			||||||
 | 
					def one(
 | 
				
			||||||
 | 
					    label: str = typer.Option(
 | 
				
			||||||
 | 
					        None, "--label", "-l",
 | 
				
			||||||
 | 
					        help="[b]The label[/] is a uniq identification of a [b]source[/].",
 | 
				
			||||||
 | 
					        show_default=False
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					):
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    [green b]Sync[/] a [yellow]source[/] with the [yellow b]label[/] and its backups.
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    if label is None:
 | 
				
			||||||
 | 
					        label = LabelPrompt.get_label_fzf()
 | 
				
			||||||
 | 
					    src = Source.get(Source.label == label)
 | 
				
			||||||
 | 
					    rsync = Rsync(str(src.args))
 | 
				
			||||||
 | 
					    for dest in src.destinations:
 | 
				
			||||||
 | 
					        rsync.run_one(str(src.source), str(dest))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue