configuration.database_backup

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

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

Realiza o backup dos dados da aplicação.

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

Menu principal.