From 1dfe37a97086c80878219405e13c4bc33fc2ccd7 Mon Sep 17 00:00:00 2001 From: Paul S Date: Thu, 6 May 2021 12:40:12 +0200 Subject: [PATCH 1/2] Ported shell script "install.sh" to Python --- install_cli.py | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 install_cli.py diff --git a/install_cli.py b/install_cli.py new file mode 100644 index 0000000..c3215e3 --- /dev/null +++ b/install_cli.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python3 + +# Dependencies +import os +import time + +# Variables +MYDIR = os.getcwd() +SHELL = os.environ.get("SHELL") +HOME = os.environ.get("HOME") + +# Intro +# language + +language = input("Hello, first of all, which language do you prefer: German [DE] or English [EN]?\n> ") +if language.upper() == "DE": + from languages.german import * + print("Perfekt, nun ist das deutsche Sprachpaket aktiviert. Willkommen!\n") +else: + from languages.english import * + print("Perfect, the English language package is now activated. Welcome!.\n") + +time.sleep(1) + +print("\n" + intromsg1 + "\n") +time.sleep(1) + +print("\n" + intromsg2 + "\n") +time.sleep(1) + +# Installer + +# creates the file 'Backuppy.sh' +fBackuppy = open("Backuppy.sh", "w") +fBackuppy.write("#!/bin/bash") +os.chmod("Backuppy.sh", 0o777) # make file executable + +# which Rsync options are available and which one you want to use +print(rsyncopt + "\n") +time.sleep(1) + +# asks if you want to exclude files/directories from backup and creates an exclude file in case of Yes +exclude = input(excludefile1 + "\n> ") +if exclude.upper() in ("J", "Y"): + print(excludefile2 + "\n") + fExclude = open("exclude.txt", "w") + fExclude.close() +else: + print(excludefile3 + "\n") +time.sleep(1) + +# Asks for the source directory which should be saved +print(srcdir1) +time.sleep(1) +sourcedir = input(srcdir2 + "\n> ") + +print(f"{srcdir3_1} {sourcedir} {srcdir3_2}") +time.sleep(1) + +# asks for the destination directory in which the backup should be saved +targetdir = input(targetdir1 + "\n> ") +print(f"{targetdir2_1} {targetdir} {targetdir2_2}") +time.sleep(1) + +# alias entry in .bashrc or .zshrc +print(SHELL) + +# .zshrc case1 and case2 +if SHELL.upper().find("ZSH") >0: + # Appending to bash config file + fRc = open(os.path.join(HOME, ".zshrc"), "a") # append mode + fRc.write("\n" + f"alias backuppy='sudo {MYDIR}/Backuppy.sh'" + "\n") + fRc.close() + +# .bashrc case1 and case2 +elif SHELL.upper().find("BASH") >0: + # Appending to zsh config file + fRc = open(os.path.join(HOME, ".bashrc"), "a") # append mode + fRc.write("\n" + f"alias backuppy='sudo {MYDIR}/Backuppy.sh'" + "\n") + fRc.close() + +# collects all the information needed to execute the rsync command and creates it. +print(collect + "\n") +time.sleep(1) +print(f"rsync -aqp --exclude-from={MYDIR}/exclude.txt {sourcedir} {targetdir}\n") +time.sleep(1) + +# enter the rsync command in Backuppy.sh +fBackuppy.write("\n" + f"rsync -aqp --exclude-from={MYDIR}/exclude.txt {sourcedir} {targetdir}" + "\n") +fBackuppy.close() + +# Outro +print(outro1) +time.sleep(2) +print(outro2 + " fotocoder@joschu.ch") From 5d367fa1a89376e265fd3616c57cb28232794284 Mon Sep 17 00:00:00 2001 From: Paul S Date: Thu, 6 May 2021 15:14:50 +0200 Subject: [PATCH 2/2] Write alias only if not already existing --- CHANGELOG.md | 10 +++++++--- install.py | 35 +++++++++++++++++++++-------------- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e975aa4..7e5aa15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Changelog Backuppy -## [1.02.000] - 2021-05-05 +## [0.6] - 2021-05-06 +### Added +- Write alias to Backuppy.sh into .bashrc/.zshrc only if not already existing + +## [0.5.2] - 2021-05-05 ### Added - Now fully functional as the shell version @@ -11,11 +15,11 @@ ### Fixed - Fixed problem with the Bash/ZSH config -## [1.01.001] - 2021-05-04 +## [0.5.1] - 2021-05-04 ### Changed - Use E-MAIL constant -## [1.01.000] - 2021-05-04 +## [0.5] - 2021-05-04 ### Added - Graphical installer based on Python3 with PySide2 GUI framework (Qt-bindings for Python) - Changelog.MD diff --git a/install.py b/install.py index e99284f..a586b0b 100644 --- a/install.py +++ b/install.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 """ project: Backuppy -version: 1.02.000 +version: 0.6 file: install.py summary: main entry python file """ @@ -10,16 +10,14 @@ summary: main entry python file import os # Third party imports -from PySide2 import QtCore -from PySide2 import QtGui -from PySide2 import QtCore, QtWidgets +from PySide2 import QtWidgets # local imports from languages import english from languages import german # local globals -VERSION: str = "1.02.000" +VERSION: str = "0.6" EMAIL: str = "fotocoder@joschu.ch" TARGET_SCRIPT: str = "Backuppy.sh" EXCLUDE_FILE: str = "exclude.txt" @@ -44,7 +42,7 @@ def get_lang_text(search_str: str): def trace(message_txt: str): """ Print a formatted message to std out. """ - print(f"[ OK ]", message_txt) + print("[ OK ]" + message_txt) class BackuppyWizard(QtWidgets.QWizard): def __init__(self, parent=None): @@ -295,20 +293,29 @@ def create_shell_script(command_str: str): user_home = os.environ.get("HOME") ## STEP 1: update shell config scripts with alias for backuppy - # .zshrc case1 and case2 - if current_shell in ("/usr/bin/zsh", "/bin/zsh"): - # Appending to bash config file + # Check for installed ZSH + if current_shell.upper().find("ZSH") > 0: rc_filepath = os.path.join(user_home, ".zshrc") - # .bashrc case1 and case2 - elif current_shell in ("/usr/bin/bash", "/bin/bash"): - # Appending to zsh config file + # Check for installed BASH + if current_shell.upper().find("BASH") > 0: rc_filepath = os.path.join(user_home, ".bashrc") + # Append our alias if not already existing if os.path.isfile(rc_filepath): - with open(rc_filepath, 'a') as file1: + fileRc = open(rc_filepath, "r") # open file in read mode + + backuppy_entry_exists = False + for line in fileRc: + if "alias backuppy=" in line: + backuppy_entry_exists = True + break + + if not backuppy_entry_exists: trace(f"Writing {ALIAS_STR} to config file '{rc_filepath}'.") - file1.write("\n# Following line was created by Backuppy\n" + ALIAS_STR + "\n") + fileRc = open(rc_filepath, "a") # open file in append mode + fileRc.write("\n# Following line was created by Backuppy\n" + ALIAS_STR + "\n") + fileRc.close() ## STEP 2: Create the exclude script if desired if EXCLUDE: