utilities.database_backup

  1from dictionary.vars import operational_system, today, absolute_app_path
  2from dictionary.vars import db_user, db_password, db_database
  3from functions.get_actual_time import GetActualTime
  4from pathlib import Path
  5from time import sleep
  6import os
  7import streamlit as st
  8import subprocess
  9
 10
 11class Backup:
 12    """
 13    Classe com métodos para realização do backup da base de dados da aplicação.
 14    """
 15
 16    def make_backup(self, backup_path: str, operational_system: str = operational_system):
 17        """
 18        Realiza o backup da base de dados da aplicação.
 19
 20        Parameters
 21        ----------
 22        backup_path : str
 23            Diretório em qual o backup será salvo.
 24        operational_system : str
 25            Sistema operacional sobre o qual a aplicação está sendo executado.
 26        """
 27
 28        time = GetActualTime()
 29        actual_time = time.get_actual_time()
 30        actual_time = actual_time.replace(":", "_")
 31
 32        directory_command = "cd " + backup_path
 33        backup_archive_name = "backup_{}_{}_{}.sql".format(
 34            db_database, today, actual_time
 35        )
 36        backup_command = "mysqldump -u{} -p{} --databases {} >> {}".format(
 37            db_user, db_password, db_database, backup_archive_name
 38        )
 39
 40        if operational_system == "posix":
 41            backup_shell_script_name = absolute_app_path + "/services/temp_backup.sh"
 42            with open(backup_shell_script_name, "w") as backup_archive:
 43                backup_archive.write("#!/bin/bash")
 44                backup_archive.write("\n")
 45                backup_archive.write(directory_command)
 46                backup_archive.write("\n")
 47                backup_archive.write("sleep 1")
 48                backup_archive.write("\n")
 49                backup_archive.write(backup_command)
 50                backup_archive.write("\n")
 51                backup_archive.write("sleep 1")
 52
 53            modified_archive = Path(backup_shell_script_name)
 54            modified_archive.chmod(0o777)
 55
 56            with st.spinner(text="Navegando ao diretório {}...".format(backup_path)):
 57                sleep(2.5)
 58            with st.spinner(text="Realizando o backup do arquivo {}...".format(backup_archive_name)):
 59                sleep(2.5)
 60            try:
 61                subprocess.run(["bash", backup_shell_script_name],
 62                               check=True, text=True, capture_output=True)
 63                os.remove(backup_shell_script_name)
 64                absolute_backup_archive_path = backup_path + "/" + backup_archive_name
 65                modified_backup_archive = Path(absolute_backup_archive_path)
 66                modified_backup_archive.chmod(0o777)
 67                st.info(body="O arquivo {} foi salvo no diretório {}.".format(
 68                    backup_archive_name, backup_path))
 69
 70            except subprocess.CalledProcessError as error:
 71                st.error(body="Erro ao executar o script: {}".format(error.stderr))
 72
 73    def main_menu(self):
 74        """
 75        Menu do backup de dados.
 76        """
 77        col4, col5 = st.columns(2)
 78
 79        with col4:
 80            if operational_system == "posix":
 81                placeholder_text = "Ex: /home/'usuario'/Downloads"
 82            elif operational_system == "nt":
 83                placeholder_text = "Ex: C:\\Users\\usuario\\Downloads"
 84            with st.expander(label=":floppy_disk: Backup de dados", expanded=True):
 85                backup_directory = st.text_input(label="Diretório de backup", placeholder=placeholder_text)
 86            backup_confirm_button = st.button(label=":white_check_mark: Confirmar diretório")
 87
 88        if backup_confirm_button:
 89            with col5:
 90                with st.spinner(text="Aguarde..."):
 91                    sleep(2.5)
 92
 93                with st.status(label="Dados", expanded=True):
 94
 95                    if backup_directory != "":
 96                        if os.path.exists(backup_directory):
 97                            self.make_backup(backup_directory)
 98                        else:
 99                            st.error(body="O diretório {} não existe em sua máquina. Informe um diretório real.".format(backup_directory))
100                    elif backup_directory == "":
101                        st.error(body="O caminho do diretório está vazio ou não preenchido.")
class Backup:
 12class Backup:
 13    """
 14    Classe com métodos para realização do backup da base de dados da aplicação.
 15    """
 16
 17    def make_backup(self, backup_path: str, operational_system: str = operational_system):
 18        """
 19        Realiza o backup da base de dados da aplicação.
 20
 21        Parameters
 22        ----------
 23        backup_path : str
 24            Diretório em qual o backup será salvo.
 25        operational_system : str
 26            Sistema operacional sobre o qual a aplicação está sendo executado.
 27        """
 28
 29        time = GetActualTime()
 30        actual_time = time.get_actual_time()
 31        actual_time = actual_time.replace(":", "_")
 32
 33        directory_command = "cd " + backup_path
 34        backup_archive_name = "backup_{}_{}_{}.sql".format(
 35            db_database, today, actual_time
 36        )
 37        backup_command = "mysqldump -u{} -p{} --databases {} >> {}".format(
 38            db_user, db_password, db_database, backup_archive_name
 39        )
 40
 41        if operational_system == "posix":
 42            backup_shell_script_name = absolute_app_path + "/services/temp_backup.sh"
 43            with open(backup_shell_script_name, "w") as backup_archive:
 44                backup_archive.write("#!/bin/bash")
 45                backup_archive.write("\n")
 46                backup_archive.write(directory_command)
 47                backup_archive.write("\n")
 48                backup_archive.write("sleep 1")
 49                backup_archive.write("\n")
 50                backup_archive.write(backup_command)
 51                backup_archive.write("\n")
 52                backup_archive.write("sleep 1")
 53
 54            modified_archive = Path(backup_shell_script_name)
 55            modified_archive.chmod(0o777)
 56
 57            with st.spinner(text="Navegando ao diretório {}...".format(backup_path)):
 58                sleep(2.5)
 59            with st.spinner(text="Realizando o backup do arquivo {}...".format(backup_archive_name)):
 60                sleep(2.5)
 61            try:
 62                subprocess.run(["bash", backup_shell_script_name],
 63                               check=True, text=True, capture_output=True)
 64                os.remove(backup_shell_script_name)
 65                absolute_backup_archive_path = backup_path + "/" + backup_archive_name
 66                modified_backup_archive = Path(absolute_backup_archive_path)
 67                modified_backup_archive.chmod(0o777)
 68                st.info(body="O arquivo {} foi salvo no diretório {}.".format(
 69                    backup_archive_name, backup_path))
 70
 71            except subprocess.CalledProcessError as error:
 72                st.error(body="Erro ao executar o script: {}".format(error.stderr))
 73
 74    def main_menu(self):
 75        """
 76        Menu do backup de dados.
 77        """
 78        col4, col5 = st.columns(2)
 79
 80        with col4:
 81            if operational_system == "posix":
 82                placeholder_text = "Ex: /home/'usuario'/Downloads"
 83            elif operational_system == "nt":
 84                placeholder_text = "Ex: C:\\Users\\usuario\\Downloads"
 85            with st.expander(label=":floppy_disk: Backup de dados", expanded=True):
 86                backup_directory = st.text_input(label="Diretório de backup", placeholder=placeholder_text)
 87            backup_confirm_button = st.button(label=":white_check_mark: Confirmar diretório")
 88
 89        if backup_confirm_button:
 90            with col5:
 91                with st.spinner(text="Aguarde..."):
 92                    sleep(2.5)
 93
 94                with st.status(label="Dados", expanded=True):
 95
 96                    if backup_directory != "":
 97                        if os.path.exists(backup_directory):
 98                            self.make_backup(backup_directory)
 99                        else:
100                            st.error(body="O diretório {} não existe em sua máquina. Informe um diretório real.".format(backup_directory))
101                    elif backup_directory == "":
102                        st.error(body="O caminho do diretório está vazio ou não preenchido.")

Classe com métodos para realização do backup da base de dados da aplicação.

def make_backup(self, backup_path: str, operational_system: str = 'posix'):
17    def make_backup(self, backup_path: str, operational_system: str = operational_system):
18        """
19        Realiza o backup da base de dados da aplicação.
20
21        Parameters
22        ----------
23        backup_path : str
24            Diretório em qual o backup será salvo.
25        operational_system : str
26            Sistema operacional sobre o qual a aplicação está sendo executado.
27        """
28
29        time = GetActualTime()
30        actual_time = time.get_actual_time()
31        actual_time = actual_time.replace(":", "_")
32
33        directory_command = "cd " + backup_path
34        backup_archive_name = "backup_{}_{}_{}.sql".format(
35            db_database, today, actual_time
36        )
37        backup_command = "mysqldump -u{} -p{} --databases {} >> {}".format(
38            db_user, db_password, db_database, backup_archive_name
39        )
40
41        if operational_system == "posix":
42            backup_shell_script_name = absolute_app_path + "/services/temp_backup.sh"
43            with open(backup_shell_script_name, "w") as backup_archive:
44                backup_archive.write("#!/bin/bash")
45                backup_archive.write("\n")
46                backup_archive.write(directory_command)
47                backup_archive.write("\n")
48                backup_archive.write("sleep 1")
49                backup_archive.write("\n")
50                backup_archive.write(backup_command)
51                backup_archive.write("\n")
52                backup_archive.write("sleep 1")
53
54            modified_archive = Path(backup_shell_script_name)
55            modified_archive.chmod(0o777)
56
57            with st.spinner(text="Navegando ao diretório {}...".format(backup_path)):
58                sleep(2.5)
59            with st.spinner(text="Realizando o backup do arquivo {}...".format(backup_archive_name)):
60                sleep(2.5)
61            try:
62                subprocess.run(["bash", backup_shell_script_name],
63                               check=True, text=True, capture_output=True)
64                os.remove(backup_shell_script_name)
65                absolute_backup_archive_path = backup_path + "/" + backup_archive_name
66                modified_backup_archive = Path(absolute_backup_archive_path)
67                modified_backup_archive.chmod(0o777)
68                st.info(body="O arquivo {} foi salvo no diretório {}.".format(
69                    backup_archive_name, backup_path))
70
71            except subprocess.CalledProcessError as error:
72                st.error(body="Erro ao executar o script: {}".format(error.stderr))

Realiza o backup da base de dados da aplicação.

Parameters
  • backup_path (str): Diretório em qual o backup será salvo.
  • operational_system (str): Sistema operacional sobre o qual a aplicação está sendo executado.
def main_menu(self):
 74    def main_menu(self):
 75        """
 76        Menu do backup de dados.
 77        """
 78        col4, col5 = st.columns(2)
 79
 80        with col4:
 81            if operational_system == "posix":
 82                placeholder_text = "Ex: /home/'usuario'/Downloads"
 83            elif operational_system == "nt":
 84                placeholder_text = "Ex: C:\\Users\\usuario\\Downloads"
 85            with st.expander(label=":floppy_disk: Backup de dados", expanded=True):
 86                backup_directory = st.text_input(label="Diretório de backup", placeholder=placeholder_text)
 87            backup_confirm_button = st.button(label=":white_check_mark: Confirmar diretório")
 88
 89        if backup_confirm_button:
 90            with col5:
 91                with st.spinner(text="Aguarde..."):
 92                    sleep(2.5)
 93
 94                with st.status(label="Dados", expanded=True):
 95
 96                    if backup_directory != "":
 97                        if os.path.exists(backup_directory):
 98                            self.make_backup(backup_directory)
 99                        else:
100                            st.error(body="O diretório {} não existe em sua máquina. Informe um diretório real.".format(backup_directory))
101                    elif backup_directory == "":
102                        st.error(body="O caminho do diretório está vazio ou não preenchido.")

Menu do backup de dados.