added backup system!

This commit is contained in:
Nick Leeman 2022-10-07 22:53:23 +02:00
parent 879ee79a90
commit 87229a654e
5 changed files with 82 additions and 2 deletions

View File

@ -15,6 +15,14 @@ class Database:
Database._init_log_table() Database._init_log_table()
Database._init_user_table() Database._init_user_table()
Database._init_city_table() Database._init_city_table()
@staticmethod
def delete_tables():
cursor = Database.connection.cursor()
cursor.execute("DROP TABLE logs")
cursor.execute("DROP TABLE users")
cursor.execute("DROP TABLE cities")
cursor.close()
@staticmethod @staticmethod
def _init_log_table(): def _init_log_table():

View File

@ -77,7 +77,6 @@ class Search:
payload = [] payload = []
for row in rows: for row in rows:
print(row)
city = City(Database.connection)._set_row_values(row) city = City(Database.connection)._set_row_values(row)
payload.append(city) payload.append(city)

View File

@ -1,7 +1,21 @@
import os import os
from models.database import Database
class Utils: class Utils:
@staticmethod @staticmethod
def clear_screen(): def clear_screen():
os.system('cls' if os.name == 'nt' else 'clear') os.system('cls' if os.name == 'nt' else 'clear')
@staticmethod
def export_db(file):
with open(f"./{file}", 'w') as f:
for line in Database.connection.iterdump():
f.write('%s\n' % line)
@staticmethod
def import_db(file):
with open(f"./{file}", 'r') as f:
str = f.read()
Database.connection.executescript(str)

42
views/backup_menu.py Normal file
View File

@ -0,0 +1,42 @@
from os import path
from models.database import Database
from models.user import User
from services.search import Search
from services.utils import Utils
from ui.input_menu import InputMenu, Validator
from ui.selection_menu import SelectionMenu
class BackupMenu:
@staticmethod
def create_backup():
input_menu = InputMenu("Export Backup File").add_option("FILE", "Filename", "STR", "backup.sql", 1, 50, None).do_input()
backup_name = input_menu.get_value("FILE")
print(f"Exporting database to file: {backup_name}")
Utils.export_db(backup_name)
input(f"Exported database. Press any key to return.")
@staticmethod
def import_backup():
menu = SelectionMenu("Import Backup? This will delete current database!")
menu.add_option("Yes", True)
menu.add_option("No", False)
option = menu.display().input_option()
if option == False:
return
input_menu = InputMenu("Import Backup File").add_option("FILE", "Filename", "STR", "backup.sql", 1, 50, None).do_input()
backup_name = input_menu.get_value("FILE")
if not path.exists(f"./{backup_name}"):
input(f"Backup file not found. Press any key to return.")
return
print("Cleared current database.")
Database.delete_tables()
print(f"Importing database from file: {backup_name}")
Utils.import_db(backup_name)
input(f"Imported database. Press any key to return.")

View File

@ -3,6 +3,7 @@ from services.state import State
from services.utils import Utils from services.utils import Utils
from ui.selection_menu import SelectionMenu from ui.selection_menu import SelectionMenu
from views.advisor_menu import AdvisorMenu from views.advisor_menu import AdvisorMenu
from views.backup_menu import BackupMenu
from views.member_menu import MemberMenu from views.member_menu import MemberMenu
from views.system_admin_menu import SystemAdminMenu from views.system_admin_menu import SystemAdminMenu
@ -24,6 +25,7 @@ class MainMenu:
if State.CURRENT_USER.role == "SUPER_ADMIN": if State.CURRENT_USER.role == "SUPER_ADMIN":
main_menu.add_option("Manage Admins", MainMenu.manage_admins) main_menu.add_option("Manage Admins", MainMenu.manage_admins)
main_menu.add_option("Manage Backups", MainMenu.manage_backups)
main_menu.add_option("Exit...", None) main_menu.add_option("Exit...", None)
@ -84,4 +86,19 @@ class MainMenu:
selected_option() selected_option()
@staticmethod
def manage_backups():
Utils.clear_screen()
menu = SelectionMenu(f"Manage Backups")
menu.add_option("Create Backup", BackupMenu.create_backup)
menu.add_option("Import Backup", BackupMenu.import_backup)
menu.add_option("Back to main menu", None)
selected_option = menu.display().input_option()
if selected_option == None:
return
selected_option()