From eb8e536617e916fd801e02db79c79a910066bf58 Mon Sep 17 00:00:00 2001
From: Paul S
Date: Tue, 11 May 2021 19:08:56 +0200
Subject: [PATCH] check if user paths from user-input exists and differs
- CLI-mode: check if user paths from user-input exists
- CLI-mode: prevent identical source and target path
---
install.py | 29 ++++++++++++++++-------------
languages/english.py | 14 +++++++++-----
languages/german.py | 12 ++++++++----
utils.py | 20 +++++++++++++++++---
4 files changed, 50 insertions(+), 25 deletions(-)
diff --git a/install.py b/install.py
index 490916b..9113aba 100644
--- a/install.py
+++ b/install.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
"""
project: Backuppy
-version: 0.9
+version: 0.10
file: install.py
summary: python installer-script in CLI-mode
"""
@@ -11,10 +11,10 @@ import sys
import os
# local imports
-from utils import set_language, query, _print, trace
+from utils import set_language, query, query_path, _print, trace, paths_are_identical
# local globals
-VERSION: str = "0.9"
+VERSION: str = "0.10"
EMAIL = "fotocoder@joschu.ch"
EXCLUDE_FILE = "exclude.txt"
BACKUPPY_SCRIPT = "Backuppy.sh"
@@ -32,7 +32,7 @@ def main_install_cli(mydir, exclude_file):
_print("intromsg2")
# which Rsync options are available and which one you want to use
- _print("rsyncopt")
+ _print("rsyncopt", wait=2)
# asks if you want to exclude files/directories from backup and creates an exclude file in case of Yes
exclude = query("excludefile1")
@@ -47,32 +47,35 @@ def main_install_cli(mydir, exclude_file):
# Asks for the source directory which should be saved
_print("srcdir1")
- sourcedir = query("srcdir2")
+ sourcedir = query_path("srcdir2")
if not sourcedir:
return False, None, None
- _print("srcdir3_1")
- print(sourcedir)
+ #_print("srcdir3_1")
+ #print(sourcedir)
_print("srcdir3_2")
# asks for the destination directory in which the backup should be saved
- targetdir = query("targetdir1")
+ targetdir = query_path("targetdir1")
+ while paths_are_identical(sourcedir, targetdir):
+ _print("paths_must_differ")
+ targetdir = query_path("targetdir1")
if not targetdir:
- return False, None, None
+ return False, None, None
- _print("targetdir2_1")
- print(targetdir)
+ #_print("targetdir2_1")
+ #print(targetdir)
_print("targetdir2_2")
# collects all the information needed to execute the rsync command and creates it.
- _print("collect")
+ _print("collect", wait=2)
rsync_cmd = f"rsync -aqp --exclude-from={os.path.join(mydir, exclude_file)} {sourcedir} {targetdir}"
print(f"{rsync_cmd}")
# Outro
- _print("outro1")
+ _print("outro1", wait=2)
_print("outro2")
print(EMAIL)
diff --git a/languages/english.py b/languages/english.py
index 367e77a..d903678 100644
--- a/languages/english.py
+++ b/languages/english.py
@@ -9,7 +9,11 @@ Yes="Yes"
No="No"
-welcome="Hello, first of all, which language do you prefer: German [DE] or English [EN]?"
+welcome="Hello, first of all, which language do you prefer: German or English [de/EN]?"
+
+path_not_existing="Specified directory does not exist!"
+
+paths_must_differ="Source dir and target dir must differ!"
languagepack="Perfect, the English language package is now activated. Welcome!"
@@ -17,9 +21,9 @@ intromsg1="Thanks for using Backuppy to make your backups!"
intromsg2="The installer will now ask you a few things to adapt your backup script to your requirements."
-rsyncopt="rsync offers various options, but to simplify the installation process, I have activated the options -a, -q and -p. \n If you want to set more options, you can do thjat in the file 'Backuppy.sh'."
+rsyncopt="rsync offers various options, but to simplify the installation process, I have activated the options -a, -q and -p.\nIf you want to set more options, you can do that in the file 'Backuppy.sh'."
-excludefile1="Now I need to know if you want to exclude one or more files/directories from your backups.\nThen you can adjust this in the 'exclude.txt'.\nThere you can exclude directories and files in the format '/directory' '/file.txt'.\nDo you want to exclude files/directories or not? [Y/N]"
+excludefile1="Now I need to know if you want to exclude one or more files/directories from your backups.\nThen you can adjust this in the 'exclude.txt'.\nThere you can exclude directories and files in the format '/directory' '/file.txt'.\nDo you want to exclude files/directories or not? [y/N]"
excludefile2="Perfect, then you can enter your files/directories to be excluded in the file 'exclude.txt' after completing the installation of Backuppy."
@@ -30,12 +34,12 @@ srcdir1="Now we come to one of the most important parts of installing Backuppy:"
srcdir2="Which directory do you want to save (e.g. the home directory)? Please enter an absolute path (e.g. '/home/username/')."
srcdir3_1="you have typed in the following source path: "
-srcdir3_2="if this path is not correct, adjust it in the file 'Backuppy.sh'."
+srcdir3_2="(You may adjust this any time in the file 'Backuppy.sh'.)"
targetdir1="Now I need to know where Backuppy should save your backups, i.e. the target directory. \n Please enter this carefully and in the same way as for the source directory."
targetdir2_1="you have typed in the following destination path:"
-targetdir2_2="if this path is not correct, adjust it in the file 'Backuppy.sh'."
+targetdir2_2="(You may adjust this any time in the file 'Backuppy.sh'.)"
collect="Now we have almost reached the end of the installer. I will now create the rsync command for you and show it to you.\n If you notice a mistake, just cancel the installer and start again from the beginning.\nNote: I recommend that you download Backuppy completely again in this case."
diff --git a/languages/german.py b/languages/german.py
index 8836f19..acf978e 100644
--- a/languages/german.py
+++ b/languages/german.py
@@ -9,15 +9,19 @@ Yes="Ja"
No="Nein"
+path_not_existing="Der angegebene Pfad existiert nicht!"
+
+paths_must_differ="Quell- and Zielpfad dürfen nicht identisch sein!"
+
languagepack="Perfekt, nun ist das deutsche Sprachpaket aktiviert. Willkommen!"
intromsg1="Danke, dass du Backuppy nutzt, um deine Backups zu erstellen!"
intromsg2="Der Installer wird dich nun einige Dinge abfragen, um dein Backup-Skript an deine Anforderungen anzupassen."
-rsyncopt="rsync bietet verschiedene Optionen an, um das Ganze jedoch zu vereinfachen, habe ich die Optionen -a, -q und -p aktiviert. \n Wenn du mehr einstellen willst, kannst du das in der Datei 'Backuppy.sh' machen."
+rsyncopt="rsync bietet verschiedene Optionen an, um das Ganze jedoch zu vereinfachen, habe ich die Optionen -a, -q und -p aktiviert.\nWenn du mehr einstellen willst, kannst du das in der Datei 'Backuppy.sh' machen."
-excludefile1="Nun muss ich noch wissen, ob du ein oder mehrere Dateien/Verzeichnisse vom Backup ausschliessen möchtest.\nDann kannst du das in der 'exclude.txt' anpassen.\nDort kannst du dann im Format '/Verzeichnis' '/Datei.txt' Verzeichnisse und Dateien ausschliessen.\nMöchtest du Dateien/Verzeichnisse ausschliessen oder nicht? [J/N]"
+excludefile1="Nun muss ich noch wissen, ob du ein oder mehrere Dateien/Verzeichnisse vom Backup ausschliessen möchtest.\nDann kannst du das in der 'exclude.txt' anpassen.\nDort kannst du dann im Format '/Verzeichnis' '/Datei.txt' Verzeichnisse und Dateien ausschliessen.\nMöchtest du Dateien/Verzeichnisse ausschliessen oder nicht? [j/N]"
excludefile2="Perfekt, dann kannst du nach der Fertigstellung der Installation von Backuppy deine auszuschliessenden\nDateien/Verzeichnisse in der Datei 'exclude.txt eintragen."
@@ -28,12 +32,12 @@ srcdir1="Nun kommen wir zu einem der wichtigesten Teile der Installation von Bac
srcdir2="Welches Verzeichnis möchtest du sichern (z.B. das Homeverzeichnis)? Bitte gib einen absoluten Pfad (z.B. '/home/username/') an."
srcdir3_1="du hast folgenden Quellpfad eingetippt: "
-srcdir3_2="wenn dieser Pfad nicht stimmen sollte, dann passe ihn in der Datei 'Backuppy.sh' an."
+srcdir3_2="(Der Pfad kann jederzeit in der Datei 'Backuppy.sh' angepasst werden.)"
targetdir1="Nun muss ich noch wissen, wo Backuppy dein Backup ablegen soll, das Zielverzeichnis also.\nBitte tippe dieses gewissenhaft und auf die Weise wie beim Quellverzeichnis ein."
targetdir2_1="du hast folgenden Zielpfad eingetippt:"
-targetdir2_2="wenn dieser Pfad nicht stimmen sollte, dann passe ihn in der Datei 'Backuppy.sh' an."
+targetdir2_2="(Der Pfad kann jederzeit in der Datei 'Backuppy.sh' angepasst werden.)"
collect="Nun sind wir fast am Ende des Installers angelangt. Ich erstelle nun den rsync-Befehl für dich und zeige ihn\ndir nachher nochmal.\nWenn dir da etwas auffallen sollte, brich den Installer einfach ab und fange nochmal von Vorne an.\nAchtung: ich empfehle dir, Backuppy in diesem Fall nochmal komplett neu zu installieren."
diff --git a/utils.py b/utils.py
index ce6df85..4a8dea6 100644
--- a/utils.py
+++ b/utils.py
@@ -8,6 +8,7 @@ summary: utilities script
# Standard library imports
import time
+import os
# local imports
from languages import english
@@ -25,7 +26,6 @@ class bcolors:
ERROR = '\033[91m' #RED
RESET = '\033[0m' #RESET COLOR
-
def trace(message_txt, prefix_crlf=False, err=False):
""" Print a formatted message to std out.
@@ -49,9 +49,9 @@ def get_lang_text(search_str: str):
return_str = eval("german." + search_str)
return return_str
-def _print(message_txt: str):
+def _print(message_txt: str, wait: int=1):
print("\n" + get_lang_text(message_txt) + "\n")
- time.sleep(1)
+ time.sleep(wait)
def set_language(language):
""" Set global constant "LANGUAGE" to given language ("EN"/"DE"). """
@@ -62,6 +62,20 @@ def set_language(language):
else:
LANGUAGE = LANG_EN
+def paths_are_identical(path1: str, path2: str):
+ if os.path.isdir(path1):
+ if path1 == path2:
+ return True
+ return False
+
+def query_path(question_txt: str):
+ path = query(question_txt)
+ while not os.path.isdir(path):
+ _print("path_not_existing")
+ #path = input("Please retype an existing directory.\n> ")
+ path = query(question_txt)
+ return path
+
def query(question_txt: str):
try:
answer_txt = input(get_lang_text(question_txt) + "\n> ")