source.archives
1from dictionary.sql import search_user_archives_quantity, search_user_archives_name 2from dictionary.vars import to_remove_list, to_remove_archive_list 3from functions.query_executor import QueryExecutor 4from functions.login import Login 5from time import sleep 6import streamlit as st 7 8 9class Archives: 10 """ 11 Classe que representa os arquivos, com as quatro funções básicas de um CRUD. 12 """ 13 14 def check_if_archive_name_already_exists(self, archive_name: str): 15 """ 16 Verifica se o nome do arquivo já foi utilizado anteriormente. 17 18 Returns 19 ------- 20 is_archive_name_available (bool): Se o nome do arquivo está disponível ou não. 21 """ 22 is_archive_name_available: bool 23 24 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_login_password") 25 26 cards_with_parameter_name_query = """SELECT COUNT(id_arquivo) FROM arquivo_texto WHERE nome_arquivo = %s AND usuario_associado = %s AND documento_usuario_associado = %s;""" 27 query_values = (archive_name, logged_user_name, logged_user_document) 28 29 archives_with_parameter_name_quantity = QueryExecutor().simple_consult_query(query=cards_with_parameter_name_query, params=query_values) 30 archives_with_parameter_name_quantity = QueryExecutor().treat_simple_result(value_to_treat=archives_with_parameter_name_quantity, values_to_remove=to_remove_list) 31 archives_with_parameter_name_quantity = int(archives_with_parameter_name_quantity) 32 33 if archives_with_parameter_name_quantity == 0: 34 is_archive_name_available = True 35 else: 36 is_archive_name_available = False 37 38 return is_archive_name_available 39 40 def get_user_archives_quantity(self): 41 """ 42 Consulta a quantidade de arquivos registrados pelo usuário. 43 44 Returns 45 ------- 46 user_archives_quantity (int): A quantidade de arquivos registrados pelo usuário. 47 """ 48 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 49 50 user_archives_quantity = QueryExecutor().simple_consult_query(search_user_archives_quantity, params=(logged_user_name, logged_user_document)) 51 user_archives_quantity = QueryExecutor().treat_simple_result(user_archives_quantity, to_remove_list) 52 user_archives_quantity = int(user_archives_quantity) 53 54 return user_archives_quantity 55 56 def get_archives_names(self): 57 """ 58 Consulta o nome dos arquivos. 59 60 Returns 61 ------- 62 archives_names (list): A lista com o nome dos arquivos. 63 """ 64 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 65 66 archives_names = [] 67 user_archives_name = QueryExecutor().complex_consult_query(search_user_archives_name, params=(logged_user_name, logged_user_document)) 68 user_archives_name = QueryExecutor().treat_numerous_simple_result(user_archives_name, to_remove_list) 69 70 for i in range(0, len(user_archives_name)): 71 archives_names.append(user_archives_name[i]) 72 73 return archives_names 74 75 def create_new_archive(self): 76 """ 77 Função para criação de um novo arquivo. 78 """ 79 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 80 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 81 82 col1, col2 = st.columns(2) 83 84 with col1: 85 with st.expander(label="Entrada de Dados", expanded=True): 86 archive_name = st.text_input(label="Nome do arquivo", max_chars=100,help="É necessário definir um nome para identificação e consulta posterior.") 87 uploaded_file = st.file_uploader(label="Escolha um arquivo de texto", type=["txt"], help="São permitidos arquivos de texto, na extensão '.txt'. O tamanho do arquivo não pode exceder 200 MB.") 88 89 content = None 90 91 if uploaded_file: 92 content = uploaded_file.read().decode("utf-8") 93 with col2: 94 with st.spinner(text="Carregando arquivo..."): 95 sleep(2.5) 96 if content != "": 97 with st.expander(label="Conteudo do arquivo carregado", expanded=True): 98 st.info(content) 99 elif content == "": 100 with col2: 101 st.error(body="O Conteudo do arquivo está vazio.") 102 103 register_archive_button = st.button(":floppy_disk: Fazer upload do arquivo") 104 105 if register_archive_button and uploaded_file is not None and content != "" and archive_name != "": 106 is_archive_name_available = self.check_if_archive_name_already_exists(archive_name=archive_name) 107 108 if is_archive_name_available: 109 with col2: 110 with st.expander(label="Validação dos dados", expanded=True): 111 st.success(body="Nome de arquivo disponível.") 112 113 archive_query = "INSERT INTO arquivo_texto (nome_arquivo, conteudo, usuario_associado, documento_usuario_associado) VALUES (%s, %s, %s, %s)" 114 archive_values = (archive_name, content, logged_user_name, logged_user_document) 115 116 if content is not None: 117 QueryExecutor().insert_query(archive_query, archive_values,"Upload do arquivo realizado com sucesso!", "Erro ao fazer upload do arquivo:") 118 119 log_query = """INSERT INTO logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES(%s, %s, %s)""" 120 log_query_values = (logged_user, "Cadastro", "Fez o upload do arquivo {}.".format(archive_name)) 121 QueryExecutor().insert_query(log_query, log_query_values, "Log gravado.", "Erro ao gravar log:") 122 123 else: 124 with col2: 125 with st.expander(label="Validação dos dados", expanded=True): 126 st.error(body="O nome do arquivo já está sendo utilizado.") 127 128 elif register_archive_button and (uploaded_file is None or content == "" or archive_name == ""): 129 130 with col2: 131 with st.spinner(text=""): 132 sleep(2.5) 133 134 if uploaded_file is None: 135 with st.expander(label="Validação dos dados", expanded=True): 136 st.error(body="Não foi feito o upload de um arquivo.") 137 if archive_name == "": 138 with st.expander(label="Validação dos dados", expanded=True): 139 st.error(body="Não foi informado um nome para o arquivo.") 140 141 def read_archive(self): 142 """ 143 Função para a consulta de um arquivo. 144 """ 145 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 146 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 147 148 user_archives_quantity = self.get_user_archives_quantity() 149 150 if user_archives_quantity >= 1: 151 col1, col2 = st.columns(2) 152 153 archives_names = self.get_archives_names() 154 155 with col1: 156 157 with st.expander(label="Consulta", expanded=True): 158 selected_archive = st.selectbox(label="Selecione o arquivo", options=archives_names) 159 safe_password = st.text_input(label="Informe sua senha", type="password", help="Corresponde a senha utilizada para acessar a aplicação.") 160 confirm_safe_password = st.text_input(label="Confirme sua senha", type="password", help="Deve ser idêntica a senha informada acima.") 161 confirm_selection = st.checkbox(label="Confirmar dados", value=False) 162 163 consult_button = st.button(label=":file_folder: Consultar arquivo") 164 165 if consult_button and confirm_selection: 166 167 is_password_valid, hashed_password = Login().check_login(logged_user, safe_password) 168 169 if safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == True: 170 with st.spinner(text="Aguarde..."): 171 sleep(2.5) 172 173 archive_content_query = """ 174 SELECT 175 arquivo_texto.conteudo 176 FROM 177 arquivo_texto 178 INNER JOIN 179 usuarios ON arquivo_texto.usuario_associado = usuarios.nome 180 AND arquivo_texto.documento_usuario_associado = usuarios.documento_usuario 181 WHERE 182 arquivo_texto.nome_arquivo = %s 183 AND 184 arquivo_texto.usuario_associado = %s 185 AND 186 arquivo_texto.documento_usuario_associado = %s;""" 187 188 archive_content = (QueryExecutor().simple_consult_query(archive_content_query, params=(selected_archive, logged_user_name, logged_user_document))) 189 archive_content = (QueryExecutor().treat_simple_result(archive_content, to_remove_archive_list)) 190 archive_content = archive_content.replace("\\n", " ") 191 archive_content = archive_content.replace(" ", " ") 192 archive_content = archive_content.split(" ") 193 194 for i in range(0, len(archive_content)): 195 if archive_content[i] == "": 196 del archive_content[i] 197 198 with col2: 199 with st.expander(label="Conteudo", expanded=True): 200 201 display_content = "" 202 for i in range(0, len(archive_content)): 203 display_content += str(archive_content[i]) + "\n\n" 204 st.code(display_content) 205 206 elif safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == False: 207 with col2: 208 with st.spinner(text="Aguarde..."): 209 sleep(0.5) 210 with st.expander(label="Validação dos dados", expanded=True): 211 st.error(body="A senha informada é inválida.") 212 213 elif safe_password != confirm_safe_password: 214 with col2: 215 with st.spinner(text="Aguarde..."): 216 sleep(0.5) 217 with st.expander(label="Validação dos dados", expanded=True): 218 st.error(body="As senhas informadas não coincidem.") 219 220 elif consult_button and confirm_selection == False: 221 with col2: 222 with st.spinner(text="Aguarde..."): 223 sleep(0.5) 224 with st.expander(label="Validação dos dados", expanded=True): 225 st.warning(body="Confirme a seleção dos dados.") 226 227 elif user_archives_quantity == 0: 228 col1, col2, col3 = st.columns(3) 229 with col2: 230 st.warning(body="Você ainda não possui arquivos registrados.") 231 232 def update_archive(self): 233 """ 234 Função para a atualização de um arquivo. 235 """ 236 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 237 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 238 239 user_archives_quantity = self.get_user_archives_quantity() 240 241 if user_archives_quantity >= 1: 242 col1, col2 = st.columns(2) 243 244 archives_names = self.get_archives_names() 245 246 with col1: 247 248 with st.expander(label="Consulta", expanded=True): 249 selected_archive = st.selectbox(label="Selecione o arquivo", options=archives_names) 250 safe_password = st.text_input(label="Informe sua senha", type="password", help="Corresponde a senha utilizada para acessar a aplicação.") 251 confirm_safe_password = st.text_input(label="Confirme sua senha", type="password", help="Deve ser idêntica a senha informada acima.") 252 confirm_selection = st.checkbox(label="Confirmar dados", value=False) 253 254 if confirm_selection: 255 is_password_valid, hashed_password = Login().check_login(logged_user, safe_password) 256 257 if safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == True: 258 with st.spinner(text="Aguarde..."): 259 sleep(0.5) 260 261 archive_content_query = """ 262 SELECT 263 arquivo_texto.nome_arquivo, 264 arquivo_texto.conteudo 265 FROM 266 arquivo_texto 267 INNER JOIN 268 usuarios ON arquivo_texto.usuario_associado = usuarios.nome 269 AND arquivo_texto.documento_usuario_associado = usuarios.documento_usuario 270 WHERE 271 arquivo_texto.nome_arquivo = %s 272 AND 273 arquivo_texto.usuario_associado = %s 274 AND arquivo_texto.documento_usuario_associado = %s; 275 """ 276 277 archive_content = (QueryExecutor().complex_compund_query(query=archive_content_query, list_quantity=2, params=(selected_archive, logged_user_name, logged_user_document))) 278 archive_content = (QueryExecutor().treat_complex_result(archive_content, to_remove_archive_list)) 279 280 for i in range(0, len(archive_content)): 281 if archive_content[i] == "": 282 del archive_content[i] 283 284 with col1: 285 with st.expander(label="Conteudo", expanded=True): 286 287 display_content = "" 288 for i in range(0, len(archive_content)): 289 display_content += str( 290 archive_content[i]) + "\n\n" 291 292 st.code(display_content) 293 294 with col2: 295 with st.spinner(text="Aguarde..."): 296 sleep(0.5) 297 298 with st.expander(label="Novos dados", expanded=True): 299 new_archive_name = st.text_input(label="Novo nome do arquivo", max_chars=100, help="É necessário definir um nome para identificação e consulta posterior.") 300 new_uploaded_file = st.file_uploader(label="Escolha um arquivo de texto", type=["txt"], help="São permitidos arquivos de texto, na extensão '.txt'. O tamanho do arquivo não pode exceder 200 MB.") 301 confirm_new_data = st.checkbox(label="Confirmar novos dados") 302 303 content = None 304 305 if new_uploaded_file: 306 content = new_uploaded_file.read().decode("utf-8") 307 with col2: 308 with st.spinner(text="Carregando arquivo..."): 309 sleep(0.5) 310 if content != "": 311 with st.expander(label="Conteudo do arquivo carregado", expanded=True): 312 st.info(content) 313 elif content == "": 314 with col2: 315 st.error(body="O Conteudo do arquivo está vazio.") 316 317 update_archive_button = st.button(label=":arrows_counterclockwise: Atualizar arquivo") 318 319 if confirm_new_data and update_archive_button: 320 321 with st.spinner(text="Aguarde..."): 322 sleep(2.5) 323 324 if new_archive_name != "" and content is not None: 325 326 is_archive_name_available = self.check_if_archive_name_already_exists(archive_name=new_archive_name) 327 328 if is_archive_name_available: 329 with col1: 330 with st.expander(label="Validação dos dados", expanded=True): 331 st.success(body="Nome do arquivo disponível.") 332 333 archive_query = "INSERT INTO arquivo_texto (nome_arquivo, conteudo, usuario_associado, documento_usuario_associado) VALUES (%s, %s, %s, %s)" 334 archive_values = (new_archive_name, content, logged_user_name, logged_user_document) 335 336 if content is not None: 337 QueryExecutor().insert_query(archive_query, archive_values, "Upload do arquivo realizado com sucesso!", "Erro ao fazer upload do arquivo:") 338 339 log_query = """INSERT INTO logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES(%s, %s, %s)""" 340 log_query_values = (logged_user, "Atualização", "Atualizou os dados do arquivo {}.".format(new_archive_name)) 341 QueryExecutor().insert_query(log_query, log_query_values,"Log gravado.", "Erro ao gravar log:") 342 343 else: 344 with col1: 345 with st.expander(label="Validação dos dados", expanded=True): 346 st.error(body="O nome do arquivo já está sendo utilizado.") 347 348 elif safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == False: 349 with col2: 350 with st.spinner(text="Aguarde..."): 351 sleep(0.5) 352 with st.expander(label="Validação dos dados", expanded=True): 353 st.error(body="A senha informada é ínválida.") 354 355 if safe_password != confirm_safe_password: 356 with col2: 357 with st.spinner(text="Aguarde..."): 358 sleep(0.5) 359 with st.expander(label="Validação dos dados", expanded=True): 360 st.error(body="As senhas informadas não coincidem.") 361 362 elif user_archives_quantity == 0: 363 col1, col2, col3 = st.columns(3) 364 with col2: 365 st.warning(body="Você ainda não possui arquivos registrados.") 366 367 def delete_archive(self): 368 """ 369 Função para a exclusão de um arquivo. 370 """ 371 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 372 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 373 374 user_archives_quantity = self.get_user_archives_quantity() 375 376 if user_archives_quantity >= 1: 377 col1, col2 = st.columns(2) 378 379 archives_names = self.get_archives_names() 380 381 with col1: 382 383 with st.expander(label="Consulta", expanded=True): 384 selected_archive = st.selectbox(label="Selecione o arquivo", options=archives_names) 385 safe_password = st.text_input(label="Informe sua senha", type="password", help="Corresponde a senha utilizada para acessar a aplicação.") 386 confirm_safe_password = st.text_input(label="Confirme sua senha", type="password", help="Deve ser idêntica a senha informada acima.") 387 confirm_selection = st.checkbox(label="Confirmar dados", value=False) 388 389 if confirm_selection: 390 is_password_valid, hashed_password = Login().check_login(logged_user, safe_password) 391 if safe_password != "" and confirm_safe_password != "" and confirm_safe_password == safe_password and is_password_valid == True: 392 393 with st.spinner(text="Aguarde..."): 394 sleep(0.5) 395 396 archive_content_query = """ 397 SELECT 398 arquivo_texto.nome_arquivo, 399 arquivo_texto.conteudo 400 FROM 401 arquivo_texto 402 INNER JOIN 403 usuarios ON arquivo_texto.usuario_associado = usuarios.nome 404 AND arquivo_texto.documento_usuario_associado = usuarios.documento_usuario 405 WHERE 406 arquivo_texto.nome_arquivo = %s 407 AND 408 arquivo_texto.usuario_associado = %s 409 AND arquivo_texto.documento_usuario_associado = %s; 410 """ 411 412 archive_content = (QueryExecutor().complex_compund_query(query=archive_content_query, list_quantity=2, params=(selected_archive, logged_user_name, logged_user_document))) 413 archive_content = (QueryExecutor().treat_complex_result(archive_content, to_remove_archive_list)) 414 415 for i in range(0, len(archive_content)): 416 if archive_content[i] == "": 417 del archive_content[i] 418 419 with col2: 420 with st.expander(label="Conteudo", expanded=True): 421 422 display_content = "" 423 for i in range(0, len(archive_content)): 424 if "\\n" in archive_content[i]: 425 display_content = str(archive_content[i]) 426 display_content = display_content.replace("\\n", " ") 427 else: 428 display_content += str(archive_content[i]) + "\n\n" 429 430 st.code(display_content) 431 confirm_data_deletion = st.checkbox(label="Confirmar exclusão dos dados") 432 delete_archive_button = st.button(label=":wastebasket: Deletar arquivo") 433 434 if confirm_data_deletion and delete_archive_button: 435 with col2: 436 with st.spinner(text="Aguarde..."): 437 sleep(2.5) 438 439 delete_archive_query = ''' 440 DELETE arquivo_texto FROM arquivo_texto 441 INNER JOIN 442 usuarios ON arquivo_texto.usuario_associado = usuarios.nome 443 AND arquivo_texto.documento_usuario_associado = usuarios.documento_usuario 444 WHERE arquivo_texto.nome_arquivo = %s 445 AND arquivo_texto.usuario_associado = %s 446 AND arquivo_texto.documento_usuario_associado = %s;''' 447 archive_values = (selected_archive, logged_user_name, logged_user_document) 448 449 QueryExecutor().insert_query(delete_archive_query, archive_values,"Arquivo deletado com sucesso!", "Erro ao deletar arquivo:") 450 451 log_query = """INSERT INTO logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES(%s, %s, %s)""" 452 log_query_values = (logged_user, "Exclusão", "Excluiu o arquivo {}.".format(selected_archive)) 453 QueryExecutor().insert_query(log_query, log_query_values,"Log gravado.", "Erro ao gravar log:") 454 455 elif safe_password != "" and confirm_safe_password != "" and confirm_safe_password == safe_password and is_password_valid == False: 456 with col2: 457 with st.spinner(text="Aguarde..."): 458 sleep(0.5) 459 with st.expander(label="Validação dos dados", expanded=True): 460 st.error(body="A senha informada é inválida.") 461 elif safe_password != confirm_safe_password: 462 with col2: 463 with st.spinner(text="Aguarde..."): 464 sleep(0.5) 465 with st.expander(label="Validação dos dados", expanded=True): 466 st.error(body="As senhas informadas não coincidem.") 467 468 elif user_archives_quantity == 0: 469 col1, col2, col3 = st.columns(3) 470 with col2: 471 with st.spinner(text="Aguarde..."): 472 sleep(0.5) 473 st.warning(body="Você ainda não possui arquivos registrados.") 474 475 def main_menu(self): 476 """ 477 Menu principal. 478 """ 479 480 col1, col2, col3 = st.columns(3) 481 482 with col1: 483 st.header(body=":spiral_note_pad: Arquivos") 484 485 with col2: 486 menu_options = ["Registrar arquivo", "Consultar arquivo","Atualizar arquivo", "Deletar arquivo"] 487 488 selected_option = st.selectbox(label="Menu", options=menu_options) 489 490 st.divider() 491 if selected_option == menu_options[0]: 492 self.create_new_archive() 493 elif selected_option == menu_options[1]: 494 self.read_archive() 495 elif selected_option == menu_options[2]: 496 self.update_archive() 497 elif selected_option == menu_options[3]: 498 self.delete_archive()
class
Archives:
10class Archives: 11 """ 12 Classe que representa os arquivos, com as quatro funções básicas de um CRUD. 13 """ 14 15 def check_if_archive_name_already_exists(self, archive_name: str): 16 """ 17 Verifica se o nome do arquivo já foi utilizado anteriormente. 18 19 Returns 20 ------- 21 is_archive_name_available (bool): Se o nome do arquivo está disponível ou não. 22 """ 23 is_archive_name_available: bool 24 25 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_login_password") 26 27 cards_with_parameter_name_query = """SELECT COUNT(id_arquivo) FROM arquivo_texto WHERE nome_arquivo = %s AND usuario_associado = %s AND documento_usuario_associado = %s;""" 28 query_values = (archive_name, logged_user_name, logged_user_document) 29 30 archives_with_parameter_name_quantity = QueryExecutor().simple_consult_query(query=cards_with_parameter_name_query, params=query_values) 31 archives_with_parameter_name_quantity = QueryExecutor().treat_simple_result(value_to_treat=archives_with_parameter_name_quantity, values_to_remove=to_remove_list) 32 archives_with_parameter_name_quantity = int(archives_with_parameter_name_quantity) 33 34 if archives_with_parameter_name_quantity == 0: 35 is_archive_name_available = True 36 else: 37 is_archive_name_available = False 38 39 return is_archive_name_available 40 41 def get_user_archives_quantity(self): 42 """ 43 Consulta a quantidade de arquivos registrados pelo usuário. 44 45 Returns 46 ------- 47 user_archives_quantity (int): A quantidade de arquivos registrados pelo usuário. 48 """ 49 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 50 51 user_archives_quantity = QueryExecutor().simple_consult_query(search_user_archives_quantity, params=(logged_user_name, logged_user_document)) 52 user_archives_quantity = QueryExecutor().treat_simple_result(user_archives_quantity, to_remove_list) 53 user_archives_quantity = int(user_archives_quantity) 54 55 return user_archives_quantity 56 57 def get_archives_names(self): 58 """ 59 Consulta o nome dos arquivos. 60 61 Returns 62 ------- 63 archives_names (list): A lista com o nome dos arquivos. 64 """ 65 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 66 67 archives_names = [] 68 user_archives_name = QueryExecutor().complex_consult_query(search_user_archives_name, params=(logged_user_name, logged_user_document)) 69 user_archives_name = QueryExecutor().treat_numerous_simple_result(user_archives_name, to_remove_list) 70 71 for i in range(0, len(user_archives_name)): 72 archives_names.append(user_archives_name[i]) 73 74 return archives_names 75 76 def create_new_archive(self): 77 """ 78 Função para criação de um novo arquivo. 79 """ 80 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 81 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 82 83 col1, col2 = st.columns(2) 84 85 with col1: 86 with st.expander(label="Entrada de Dados", expanded=True): 87 archive_name = st.text_input(label="Nome do arquivo", max_chars=100,help="É necessário definir um nome para identificação e consulta posterior.") 88 uploaded_file = st.file_uploader(label="Escolha um arquivo de texto", type=["txt"], help="São permitidos arquivos de texto, na extensão '.txt'. O tamanho do arquivo não pode exceder 200 MB.") 89 90 content = None 91 92 if uploaded_file: 93 content = uploaded_file.read().decode("utf-8") 94 with col2: 95 with st.spinner(text="Carregando arquivo..."): 96 sleep(2.5) 97 if content != "": 98 with st.expander(label="Conteudo do arquivo carregado", expanded=True): 99 st.info(content) 100 elif content == "": 101 with col2: 102 st.error(body="O Conteudo do arquivo está vazio.") 103 104 register_archive_button = st.button(":floppy_disk: Fazer upload do arquivo") 105 106 if register_archive_button and uploaded_file is not None and content != "" and archive_name != "": 107 is_archive_name_available = self.check_if_archive_name_already_exists(archive_name=archive_name) 108 109 if is_archive_name_available: 110 with col2: 111 with st.expander(label="Validação dos dados", expanded=True): 112 st.success(body="Nome de arquivo disponível.") 113 114 archive_query = "INSERT INTO arquivo_texto (nome_arquivo, conteudo, usuario_associado, documento_usuario_associado) VALUES (%s, %s, %s, %s)" 115 archive_values = (archive_name, content, logged_user_name, logged_user_document) 116 117 if content is not None: 118 QueryExecutor().insert_query(archive_query, archive_values,"Upload do arquivo realizado com sucesso!", "Erro ao fazer upload do arquivo:") 119 120 log_query = """INSERT INTO logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES(%s, %s, %s)""" 121 log_query_values = (logged_user, "Cadastro", "Fez o upload do arquivo {}.".format(archive_name)) 122 QueryExecutor().insert_query(log_query, log_query_values, "Log gravado.", "Erro ao gravar log:") 123 124 else: 125 with col2: 126 with st.expander(label="Validação dos dados", expanded=True): 127 st.error(body="O nome do arquivo já está sendo utilizado.") 128 129 elif register_archive_button and (uploaded_file is None or content == "" or archive_name == ""): 130 131 with col2: 132 with st.spinner(text=""): 133 sleep(2.5) 134 135 if uploaded_file is None: 136 with st.expander(label="Validação dos dados", expanded=True): 137 st.error(body="Não foi feito o upload de um arquivo.") 138 if archive_name == "": 139 with st.expander(label="Validação dos dados", expanded=True): 140 st.error(body="Não foi informado um nome para o arquivo.") 141 142 def read_archive(self): 143 """ 144 Função para a consulta de um arquivo. 145 """ 146 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 147 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 148 149 user_archives_quantity = self.get_user_archives_quantity() 150 151 if user_archives_quantity >= 1: 152 col1, col2 = st.columns(2) 153 154 archives_names = self.get_archives_names() 155 156 with col1: 157 158 with st.expander(label="Consulta", expanded=True): 159 selected_archive = st.selectbox(label="Selecione o arquivo", options=archives_names) 160 safe_password = st.text_input(label="Informe sua senha", type="password", help="Corresponde a senha utilizada para acessar a aplicação.") 161 confirm_safe_password = st.text_input(label="Confirme sua senha", type="password", help="Deve ser idêntica a senha informada acima.") 162 confirm_selection = st.checkbox(label="Confirmar dados", value=False) 163 164 consult_button = st.button(label=":file_folder: Consultar arquivo") 165 166 if consult_button and confirm_selection: 167 168 is_password_valid, hashed_password = Login().check_login(logged_user, safe_password) 169 170 if safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == True: 171 with st.spinner(text="Aguarde..."): 172 sleep(2.5) 173 174 archive_content_query = """ 175 SELECT 176 arquivo_texto.conteudo 177 FROM 178 arquivo_texto 179 INNER JOIN 180 usuarios ON arquivo_texto.usuario_associado = usuarios.nome 181 AND arquivo_texto.documento_usuario_associado = usuarios.documento_usuario 182 WHERE 183 arquivo_texto.nome_arquivo = %s 184 AND 185 arquivo_texto.usuario_associado = %s 186 AND 187 arquivo_texto.documento_usuario_associado = %s;""" 188 189 archive_content = (QueryExecutor().simple_consult_query(archive_content_query, params=(selected_archive, logged_user_name, logged_user_document))) 190 archive_content = (QueryExecutor().treat_simple_result(archive_content, to_remove_archive_list)) 191 archive_content = archive_content.replace("\\n", " ") 192 archive_content = archive_content.replace(" ", " ") 193 archive_content = archive_content.split(" ") 194 195 for i in range(0, len(archive_content)): 196 if archive_content[i] == "": 197 del archive_content[i] 198 199 with col2: 200 with st.expander(label="Conteudo", expanded=True): 201 202 display_content = "" 203 for i in range(0, len(archive_content)): 204 display_content += str(archive_content[i]) + "\n\n" 205 st.code(display_content) 206 207 elif safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == False: 208 with col2: 209 with st.spinner(text="Aguarde..."): 210 sleep(0.5) 211 with st.expander(label="Validação dos dados", expanded=True): 212 st.error(body="A senha informada é inválida.") 213 214 elif safe_password != confirm_safe_password: 215 with col2: 216 with st.spinner(text="Aguarde..."): 217 sleep(0.5) 218 with st.expander(label="Validação dos dados", expanded=True): 219 st.error(body="As senhas informadas não coincidem.") 220 221 elif consult_button and confirm_selection == False: 222 with col2: 223 with st.spinner(text="Aguarde..."): 224 sleep(0.5) 225 with st.expander(label="Validação dos dados", expanded=True): 226 st.warning(body="Confirme a seleção dos dados.") 227 228 elif user_archives_quantity == 0: 229 col1, col2, col3 = st.columns(3) 230 with col2: 231 st.warning(body="Você ainda não possui arquivos registrados.") 232 233 def update_archive(self): 234 """ 235 Função para a atualização de um arquivo. 236 """ 237 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 238 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 239 240 user_archives_quantity = self.get_user_archives_quantity() 241 242 if user_archives_quantity >= 1: 243 col1, col2 = st.columns(2) 244 245 archives_names = self.get_archives_names() 246 247 with col1: 248 249 with st.expander(label="Consulta", expanded=True): 250 selected_archive = st.selectbox(label="Selecione o arquivo", options=archives_names) 251 safe_password = st.text_input(label="Informe sua senha", type="password", help="Corresponde a senha utilizada para acessar a aplicação.") 252 confirm_safe_password = st.text_input(label="Confirme sua senha", type="password", help="Deve ser idêntica a senha informada acima.") 253 confirm_selection = st.checkbox(label="Confirmar dados", value=False) 254 255 if confirm_selection: 256 is_password_valid, hashed_password = Login().check_login(logged_user, safe_password) 257 258 if safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == True: 259 with st.spinner(text="Aguarde..."): 260 sleep(0.5) 261 262 archive_content_query = """ 263 SELECT 264 arquivo_texto.nome_arquivo, 265 arquivo_texto.conteudo 266 FROM 267 arquivo_texto 268 INNER JOIN 269 usuarios ON arquivo_texto.usuario_associado = usuarios.nome 270 AND arquivo_texto.documento_usuario_associado = usuarios.documento_usuario 271 WHERE 272 arquivo_texto.nome_arquivo = %s 273 AND 274 arquivo_texto.usuario_associado = %s 275 AND arquivo_texto.documento_usuario_associado = %s; 276 """ 277 278 archive_content = (QueryExecutor().complex_compund_query(query=archive_content_query, list_quantity=2, params=(selected_archive, logged_user_name, logged_user_document))) 279 archive_content = (QueryExecutor().treat_complex_result(archive_content, to_remove_archive_list)) 280 281 for i in range(0, len(archive_content)): 282 if archive_content[i] == "": 283 del archive_content[i] 284 285 with col1: 286 with st.expander(label="Conteudo", expanded=True): 287 288 display_content = "" 289 for i in range(0, len(archive_content)): 290 display_content += str( 291 archive_content[i]) + "\n\n" 292 293 st.code(display_content) 294 295 with col2: 296 with st.spinner(text="Aguarde..."): 297 sleep(0.5) 298 299 with st.expander(label="Novos dados", expanded=True): 300 new_archive_name = st.text_input(label="Novo nome do arquivo", max_chars=100, help="É necessário definir um nome para identificação e consulta posterior.") 301 new_uploaded_file = st.file_uploader(label="Escolha um arquivo de texto", type=["txt"], help="São permitidos arquivos de texto, na extensão '.txt'. O tamanho do arquivo não pode exceder 200 MB.") 302 confirm_new_data = st.checkbox(label="Confirmar novos dados") 303 304 content = None 305 306 if new_uploaded_file: 307 content = new_uploaded_file.read().decode("utf-8") 308 with col2: 309 with st.spinner(text="Carregando arquivo..."): 310 sleep(0.5) 311 if content != "": 312 with st.expander(label="Conteudo do arquivo carregado", expanded=True): 313 st.info(content) 314 elif content == "": 315 with col2: 316 st.error(body="O Conteudo do arquivo está vazio.") 317 318 update_archive_button = st.button(label=":arrows_counterclockwise: Atualizar arquivo") 319 320 if confirm_new_data and update_archive_button: 321 322 with st.spinner(text="Aguarde..."): 323 sleep(2.5) 324 325 if new_archive_name != "" and content is not None: 326 327 is_archive_name_available = self.check_if_archive_name_already_exists(archive_name=new_archive_name) 328 329 if is_archive_name_available: 330 with col1: 331 with st.expander(label="Validação dos dados", expanded=True): 332 st.success(body="Nome do arquivo disponível.") 333 334 archive_query = "INSERT INTO arquivo_texto (nome_arquivo, conteudo, usuario_associado, documento_usuario_associado) VALUES (%s, %s, %s, %s)" 335 archive_values = (new_archive_name, content, logged_user_name, logged_user_document) 336 337 if content is not None: 338 QueryExecutor().insert_query(archive_query, archive_values, "Upload do arquivo realizado com sucesso!", "Erro ao fazer upload do arquivo:") 339 340 log_query = """INSERT INTO logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES(%s, %s, %s)""" 341 log_query_values = (logged_user, "Atualização", "Atualizou os dados do arquivo {}.".format(new_archive_name)) 342 QueryExecutor().insert_query(log_query, log_query_values,"Log gravado.", "Erro ao gravar log:") 343 344 else: 345 with col1: 346 with st.expander(label="Validação dos dados", expanded=True): 347 st.error(body="O nome do arquivo já está sendo utilizado.") 348 349 elif safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == False: 350 with col2: 351 with st.spinner(text="Aguarde..."): 352 sleep(0.5) 353 with st.expander(label="Validação dos dados", expanded=True): 354 st.error(body="A senha informada é ínválida.") 355 356 if safe_password != confirm_safe_password: 357 with col2: 358 with st.spinner(text="Aguarde..."): 359 sleep(0.5) 360 with st.expander(label="Validação dos dados", expanded=True): 361 st.error(body="As senhas informadas não coincidem.") 362 363 elif user_archives_quantity == 0: 364 col1, col2, col3 = st.columns(3) 365 with col2: 366 st.warning(body="Você ainda não possui arquivos registrados.") 367 368 def delete_archive(self): 369 """ 370 Função para a exclusão de um arquivo. 371 """ 372 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 373 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 374 375 user_archives_quantity = self.get_user_archives_quantity() 376 377 if user_archives_quantity >= 1: 378 col1, col2 = st.columns(2) 379 380 archives_names = self.get_archives_names() 381 382 with col1: 383 384 with st.expander(label="Consulta", expanded=True): 385 selected_archive = st.selectbox(label="Selecione o arquivo", options=archives_names) 386 safe_password = st.text_input(label="Informe sua senha", type="password", help="Corresponde a senha utilizada para acessar a aplicação.") 387 confirm_safe_password = st.text_input(label="Confirme sua senha", type="password", help="Deve ser idêntica a senha informada acima.") 388 confirm_selection = st.checkbox(label="Confirmar dados", value=False) 389 390 if confirm_selection: 391 is_password_valid, hashed_password = Login().check_login(logged_user, safe_password) 392 if safe_password != "" and confirm_safe_password != "" and confirm_safe_password == safe_password and is_password_valid == True: 393 394 with st.spinner(text="Aguarde..."): 395 sleep(0.5) 396 397 archive_content_query = """ 398 SELECT 399 arquivo_texto.nome_arquivo, 400 arquivo_texto.conteudo 401 FROM 402 arquivo_texto 403 INNER JOIN 404 usuarios ON arquivo_texto.usuario_associado = usuarios.nome 405 AND arquivo_texto.documento_usuario_associado = usuarios.documento_usuario 406 WHERE 407 arquivo_texto.nome_arquivo = %s 408 AND 409 arquivo_texto.usuario_associado = %s 410 AND arquivo_texto.documento_usuario_associado = %s; 411 """ 412 413 archive_content = (QueryExecutor().complex_compund_query(query=archive_content_query, list_quantity=2, params=(selected_archive, logged_user_name, logged_user_document))) 414 archive_content = (QueryExecutor().treat_complex_result(archive_content, to_remove_archive_list)) 415 416 for i in range(0, len(archive_content)): 417 if archive_content[i] == "": 418 del archive_content[i] 419 420 with col2: 421 with st.expander(label="Conteudo", expanded=True): 422 423 display_content = "" 424 for i in range(0, len(archive_content)): 425 if "\\n" in archive_content[i]: 426 display_content = str(archive_content[i]) 427 display_content = display_content.replace("\\n", " ") 428 else: 429 display_content += str(archive_content[i]) + "\n\n" 430 431 st.code(display_content) 432 confirm_data_deletion = st.checkbox(label="Confirmar exclusão dos dados") 433 delete_archive_button = st.button(label=":wastebasket: Deletar arquivo") 434 435 if confirm_data_deletion and delete_archive_button: 436 with col2: 437 with st.spinner(text="Aguarde..."): 438 sleep(2.5) 439 440 delete_archive_query = ''' 441 DELETE arquivo_texto FROM arquivo_texto 442 INNER JOIN 443 usuarios ON arquivo_texto.usuario_associado = usuarios.nome 444 AND arquivo_texto.documento_usuario_associado = usuarios.documento_usuario 445 WHERE arquivo_texto.nome_arquivo = %s 446 AND arquivo_texto.usuario_associado = %s 447 AND arquivo_texto.documento_usuario_associado = %s;''' 448 archive_values = (selected_archive, logged_user_name, logged_user_document) 449 450 QueryExecutor().insert_query(delete_archive_query, archive_values,"Arquivo deletado com sucesso!", "Erro ao deletar arquivo:") 451 452 log_query = """INSERT INTO logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES(%s, %s, %s)""" 453 log_query_values = (logged_user, "Exclusão", "Excluiu o arquivo {}.".format(selected_archive)) 454 QueryExecutor().insert_query(log_query, log_query_values,"Log gravado.", "Erro ao gravar log:") 455 456 elif safe_password != "" and confirm_safe_password != "" and confirm_safe_password == safe_password and is_password_valid == False: 457 with col2: 458 with st.spinner(text="Aguarde..."): 459 sleep(0.5) 460 with st.expander(label="Validação dos dados", expanded=True): 461 st.error(body="A senha informada é inválida.") 462 elif safe_password != confirm_safe_password: 463 with col2: 464 with st.spinner(text="Aguarde..."): 465 sleep(0.5) 466 with st.expander(label="Validação dos dados", expanded=True): 467 st.error(body="As senhas informadas não coincidem.") 468 469 elif user_archives_quantity == 0: 470 col1, col2, col3 = st.columns(3) 471 with col2: 472 with st.spinner(text="Aguarde..."): 473 sleep(0.5) 474 st.warning(body="Você ainda não possui arquivos registrados.") 475 476 def main_menu(self): 477 """ 478 Menu principal. 479 """ 480 481 col1, col2, col3 = st.columns(3) 482 483 with col1: 484 st.header(body=":spiral_note_pad: Arquivos") 485 486 with col2: 487 menu_options = ["Registrar arquivo", "Consultar arquivo","Atualizar arquivo", "Deletar arquivo"] 488 489 selected_option = st.selectbox(label="Menu", options=menu_options) 490 491 st.divider() 492 if selected_option == menu_options[0]: 493 self.create_new_archive() 494 elif selected_option == menu_options[1]: 495 self.read_archive() 496 elif selected_option == menu_options[2]: 497 self.update_archive() 498 elif selected_option == menu_options[3]: 499 self.delete_archive()
Classe que representa os arquivos, com as quatro funções básicas de um CRUD.
def
check_if_archive_name_already_exists(self, archive_name: str):
15 def check_if_archive_name_already_exists(self, archive_name: str): 16 """ 17 Verifica se o nome do arquivo já foi utilizado anteriormente. 18 19 Returns 20 ------- 21 is_archive_name_available (bool): Se o nome do arquivo está disponível ou não. 22 """ 23 is_archive_name_available: bool 24 25 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_login_password") 26 27 cards_with_parameter_name_query = """SELECT COUNT(id_arquivo) FROM arquivo_texto WHERE nome_arquivo = %s AND usuario_associado = %s AND documento_usuario_associado = %s;""" 28 query_values = (archive_name, logged_user_name, logged_user_document) 29 30 archives_with_parameter_name_quantity = QueryExecutor().simple_consult_query(query=cards_with_parameter_name_query, params=query_values) 31 archives_with_parameter_name_quantity = QueryExecutor().treat_simple_result(value_to_treat=archives_with_parameter_name_quantity, values_to_remove=to_remove_list) 32 archives_with_parameter_name_quantity = int(archives_with_parameter_name_quantity) 33 34 if archives_with_parameter_name_quantity == 0: 35 is_archive_name_available = True 36 else: 37 is_archive_name_available = False 38 39 return is_archive_name_available
Verifica se o nome do arquivo já foi utilizado anteriormente.
Returns
- is_archive_name_available (bool) (Se o nome do arquivo está disponível ou não.):
def
get_user_archives_quantity(self):
41 def get_user_archives_quantity(self): 42 """ 43 Consulta a quantidade de arquivos registrados pelo usuário. 44 45 Returns 46 ------- 47 user_archives_quantity (int): A quantidade de arquivos registrados pelo usuário. 48 """ 49 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 50 51 user_archives_quantity = QueryExecutor().simple_consult_query(search_user_archives_quantity, params=(logged_user_name, logged_user_document)) 52 user_archives_quantity = QueryExecutor().treat_simple_result(user_archives_quantity, to_remove_list) 53 user_archives_quantity = int(user_archives_quantity) 54 55 return user_archives_quantity
Consulta a quantidade de arquivos registrados pelo usuário.
Returns
- user_archives_quantity (int) (A quantidade de arquivos registrados pelo usuário.):
def
get_archives_names(self):
57 def get_archives_names(self): 58 """ 59 Consulta o nome dos arquivos. 60 61 Returns 62 ------- 63 archives_names (list): A lista com o nome dos arquivos. 64 """ 65 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 66 67 archives_names = [] 68 user_archives_name = QueryExecutor().complex_consult_query(search_user_archives_name, params=(logged_user_name, logged_user_document)) 69 user_archives_name = QueryExecutor().treat_numerous_simple_result(user_archives_name, to_remove_list) 70 71 for i in range(0, len(user_archives_name)): 72 archives_names.append(user_archives_name[i]) 73 74 return archives_names
Consulta o nome dos arquivos.
Returns
- archives_names (list) (A lista com o nome dos arquivos.):
def
create_new_archive(self):
76 def create_new_archive(self): 77 """ 78 Função para criação de um novo arquivo. 79 """ 80 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 81 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 82 83 col1, col2 = st.columns(2) 84 85 with col1: 86 with st.expander(label="Entrada de Dados", expanded=True): 87 archive_name = st.text_input(label="Nome do arquivo", max_chars=100,help="É necessário definir um nome para identificação e consulta posterior.") 88 uploaded_file = st.file_uploader(label="Escolha um arquivo de texto", type=["txt"], help="São permitidos arquivos de texto, na extensão '.txt'. O tamanho do arquivo não pode exceder 200 MB.") 89 90 content = None 91 92 if uploaded_file: 93 content = uploaded_file.read().decode("utf-8") 94 with col2: 95 with st.spinner(text="Carregando arquivo..."): 96 sleep(2.5) 97 if content != "": 98 with st.expander(label="Conteudo do arquivo carregado", expanded=True): 99 st.info(content) 100 elif content == "": 101 with col2: 102 st.error(body="O Conteudo do arquivo está vazio.") 103 104 register_archive_button = st.button(":floppy_disk: Fazer upload do arquivo") 105 106 if register_archive_button and uploaded_file is not None and content != "" and archive_name != "": 107 is_archive_name_available = self.check_if_archive_name_already_exists(archive_name=archive_name) 108 109 if is_archive_name_available: 110 with col2: 111 with st.expander(label="Validação dos dados", expanded=True): 112 st.success(body="Nome de arquivo disponível.") 113 114 archive_query = "INSERT INTO arquivo_texto (nome_arquivo, conteudo, usuario_associado, documento_usuario_associado) VALUES (%s, %s, %s, %s)" 115 archive_values = (archive_name, content, logged_user_name, logged_user_document) 116 117 if content is not None: 118 QueryExecutor().insert_query(archive_query, archive_values,"Upload do arquivo realizado com sucesso!", "Erro ao fazer upload do arquivo:") 119 120 log_query = """INSERT INTO logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES(%s, %s, %s)""" 121 log_query_values = (logged_user, "Cadastro", "Fez o upload do arquivo {}.".format(archive_name)) 122 QueryExecutor().insert_query(log_query, log_query_values, "Log gravado.", "Erro ao gravar log:") 123 124 else: 125 with col2: 126 with st.expander(label="Validação dos dados", expanded=True): 127 st.error(body="O nome do arquivo já está sendo utilizado.") 128 129 elif register_archive_button and (uploaded_file is None or content == "" or archive_name == ""): 130 131 with col2: 132 with st.spinner(text=""): 133 sleep(2.5) 134 135 if uploaded_file is None: 136 with st.expander(label="Validação dos dados", expanded=True): 137 st.error(body="Não foi feito o upload de um arquivo.") 138 if archive_name == "": 139 with st.expander(label="Validação dos dados", expanded=True): 140 st.error(body="Não foi informado um nome para o arquivo.")
Função para criação de um novo arquivo.
def
read_archive(self):
142 def read_archive(self): 143 """ 144 Função para a consulta de um arquivo. 145 """ 146 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 147 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 148 149 user_archives_quantity = self.get_user_archives_quantity() 150 151 if user_archives_quantity >= 1: 152 col1, col2 = st.columns(2) 153 154 archives_names = self.get_archives_names() 155 156 with col1: 157 158 with st.expander(label="Consulta", expanded=True): 159 selected_archive = st.selectbox(label="Selecione o arquivo", options=archives_names) 160 safe_password = st.text_input(label="Informe sua senha", type="password", help="Corresponde a senha utilizada para acessar a aplicação.") 161 confirm_safe_password = st.text_input(label="Confirme sua senha", type="password", help="Deve ser idêntica a senha informada acima.") 162 confirm_selection = st.checkbox(label="Confirmar dados", value=False) 163 164 consult_button = st.button(label=":file_folder: Consultar arquivo") 165 166 if consult_button and confirm_selection: 167 168 is_password_valid, hashed_password = Login().check_login(logged_user, safe_password) 169 170 if safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == True: 171 with st.spinner(text="Aguarde..."): 172 sleep(2.5) 173 174 archive_content_query = """ 175 SELECT 176 arquivo_texto.conteudo 177 FROM 178 arquivo_texto 179 INNER JOIN 180 usuarios ON arquivo_texto.usuario_associado = usuarios.nome 181 AND arquivo_texto.documento_usuario_associado = usuarios.documento_usuario 182 WHERE 183 arquivo_texto.nome_arquivo = %s 184 AND 185 arquivo_texto.usuario_associado = %s 186 AND 187 arquivo_texto.documento_usuario_associado = %s;""" 188 189 archive_content = (QueryExecutor().simple_consult_query(archive_content_query, params=(selected_archive, logged_user_name, logged_user_document))) 190 archive_content = (QueryExecutor().treat_simple_result(archive_content, to_remove_archive_list)) 191 archive_content = archive_content.replace("\\n", " ") 192 archive_content = archive_content.replace(" ", " ") 193 archive_content = archive_content.split(" ") 194 195 for i in range(0, len(archive_content)): 196 if archive_content[i] == "": 197 del archive_content[i] 198 199 with col2: 200 with st.expander(label="Conteudo", expanded=True): 201 202 display_content = "" 203 for i in range(0, len(archive_content)): 204 display_content += str(archive_content[i]) + "\n\n" 205 st.code(display_content) 206 207 elif safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == False: 208 with col2: 209 with st.spinner(text="Aguarde..."): 210 sleep(0.5) 211 with st.expander(label="Validação dos dados", expanded=True): 212 st.error(body="A senha informada é inválida.") 213 214 elif safe_password != confirm_safe_password: 215 with col2: 216 with st.spinner(text="Aguarde..."): 217 sleep(0.5) 218 with st.expander(label="Validação dos dados", expanded=True): 219 st.error(body="As senhas informadas não coincidem.") 220 221 elif consult_button and confirm_selection == False: 222 with col2: 223 with st.spinner(text="Aguarde..."): 224 sleep(0.5) 225 with st.expander(label="Validação dos dados", expanded=True): 226 st.warning(body="Confirme a seleção dos dados.") 227 228 elif user_archives_quantity == 0: 229 col1, col2, col3 = st.columns(3) 230 with col2: 231 st.warning(body="Você ainda não possui arquivos registrados.")
Função para a consulta de um arquivo.
def
update_archive(self):
233 def update_archive(self): 234 """ 235 Função para a atualização de um arquivo. 236 """ 237 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 238 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 239 240 user_archives_quantity = self.get_user_archives_quantity() 241 242 if user_archives_quantity >= 1: 243 col1, col2 = st.columns(2) 244 245 archives_names = self.get_archives_names() 246 247 with col1: 248 249 with st.expander(label="Consulta", expanded=True): 250 selected_archive = st.selectbox(label="Selecione o arquivo", options=archives_names) 251 safe_password = st.text_input(label="Informe sua senha", type="password", help="Corresponde a senha utilizada para acessar a aplicação.") 252 confirm_safe_password = st.text_input(label="Confirme sua senha", type="password", help="Deve ser idêntica a senha informada acima.") 253 confirm_selection = st.checkbox(label="Confirmar dados", value=False) 254 255 if confirm_selection: 256 is_password_valid, hashed_password = Login().check_login(logged_user, safe_password) 257 258 if safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == True: 259 with st.spinner(text="Aguarde..."): 260 sleep(0.5) 261 262 archive_content_query = """ 263 SELECT 264 arquivo_texto.nome_arquivo, 265 arquivo_texto.conteudo 266 FROM 267 arquivo_texto 268 INNER JOIN 269 usuarios ON arquivo_texto.usuario_associado = usuarios.nome 270 AND arquivo_texto.documento_usuario_associado = usuarios.documento_usuario 271 WHERE 272 arquivo_texto.nome_arquivo = %s 273 AND 274 arquivo_texto.usuario_associado = %s 275 AND arquivo_texto.documento_usuario_associado = %s; 276 """ 277 278 archive_content = (QueryExecutor().complex_compund_query(query=archive_content_query, list_quantity=2, params=(selected_archive, logged_user_name, logged_user_document))) 279 archive_content = (QueryExecutor().treat_complex_result(archive_content, to_remove_archive_list)) 280 281 for i in range(0, len(archive_content)): 282 if archive_content[i] == "": 283 del archive_content[i] 284 285 with col1: 286 with st.expander(label="Conteudo", expanded=True): 287 288 display_content = "" 289 for i in range(0, len(archive_content)): 290 display_content += str( 291 archive_content[i]) + "\n\n" 292 293 st.code(display_content) 294 295 with col2: 296 with st.spinner(text="Aguarde..."): 297 sleep(0.5) 298 299 with st.expander(label="Novos dados", expanded=True): 300 new_archive_name = st.text_input(label="Novo nome do arquivo", max_chars=100, help="É necessário definir um nome para identificação e consulta posterior.") 301 new_uploaded_file = st.file_uploader(label="Escolha um arquivo de texto", type=["txt"], help="São permitidos arquivos de texto, na extensão '.txt'. O tamanho do arquivo não pode exceder 200 MB.") 302 confirm_new_data = st.checkbox(label="Confirmar novos dados") 303 304 content = None 305 306 if new_uploaded_file: 307 content = new_uploaded_file.read().decode("utf-8") 308 with col2: 309 with st.spinner(text="Carregando arquivo..."): 310 sleep(0.5) 311 if content != "": 312 with st.expander(label="Conteudo do arquivo carregado", expanded=True): 313 st.info(content) 314 elif content == "": 315 with col2: 316 st.error(body="O Conteudo do arquivo está vazio.") 317 318 update_archive_button = st.button(label=":arrows_counterclockwise: Atualizar arquivo") 319 320 if confirm_new_data and update_archive_button: 321 322 with st.spinner(text="Aguarde..."): 323 sleep(2.5) 324 325 if new_archive_name != "" and content is not None: 326 327 is_archive_name_available = self.check_if_archive_name_already_exists(archive_name=new_archive_name) 328 329 if is_archive_name_available: 330 with col1: 331 with st.expander(label="Validação dos dados", expanded=True): 332 st.success(body="Nome do arquivo disponível.") 333 334 archive_query = "INSERT INTO arquivo_texto (nome_arquivo, conteudo, usuario_associado, documento_usuario_associado) VALUES (%s, %s, %s, %s)" 335 archive_values = (new_archive_name, content, logged_user_name, logged_user_document) 336 337 if content is not None: 338 QueryExecutor().insert_query(archive_query, archive_values, "Upload do arquivo realizado com sucesso!", "Erro ao fazer upload do arquivo:") 339 340 log_query = """INSERT INTO logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES(%s, %s, %s)""" 341 log_query_values = (logged_user, "Atualização", "Atualizou os dados do arquivo {}.".format(new_archive_name)) 342 QueryExecutor().insert_query(log_query, log_query_values,"Log gravado.", "Erro ao gravar log:") 343 344 else: 345 with col1: 346 with st.expander(label="Validação dos dados", expanded=True): 347 st.error(body="O nome do arquivo já está sendo utilizado.") 348 349 elif safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == False: 350 with col2: 351 with st.spinner(text="Aguarde..."): 352 sleep(0.5) 353 with st.expander(label="Validação dos dados", expanded=True): 354 st.error(body="A senha informada é ínválida.") 355 356 if safe_password != confirm_safe_password: 357 with col2: 358 with st.spinner(text="Aguarde..."): 359 sleep(0.5) 360 with st.expander(label="Validação dos dados", expanded=True): 361 st.error(body="As senhas informadas não coincidem.") 362 363 elif user_archives_quantity == 0: 364 col1, col2, col3 = st.columns(3) 365 with col2: 366 st.warning(body="Você ainda não possui arquivos registrados.")
Função para a atualização de um arquivo.
def
delete_archive(self):
368 def delete_archive(self): 369 """ 370 Função para a exclusão de um arquivo. 371 """ 372 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 373 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 374 375 user_archives_quantity = self.get_user_archives_quantity() 376 377 if user_archives_quantity >= 1: 378 col1, col2 = st.columns(2) 379 380 archives_names = self.get_archives_names() 381 382 with col1: 383 384 with st.expander(label="Consulta", expanded=True): 385 selected_archive = st.selectbox(label="Selecione o arquivo", options=archives_names) 386 safe_password = st.text_input(label="Informe sua senha", type="password", help="Corresponde a senha utilizada para acessar a aplicação.") 387 confirm_safe_password = st.text_input(label="Confirme sua senha", type="password", help="Deve ser idêntica a senha informada acima.") 388 confirm_selection = st.checkbox(label="Confirmar dados", value=False) 389 390 if confirm_selection: 391 is_password_valid, hashed_password = Login().check_login(logged_user, safe_password) 392 if safe_password != "" and confirm_safe_password != "" and confirm_safe_password == safe_password and is_password_valid == True: 393 394 with st.spinner(text="Aguarde..."): 395 sleep(0.5) 396 397 archive_content_query = """ 398 SELECT 399 arquivo_texto.nome_arquivo, 400 arquivo_texto.conteudo 401 FROM 402 arquivo_texto 403 INNER JOIN 404 usuarios ON arquivo_texto.usuario_associado = usuarios.nome 405 AND arquivo_texto.documento_usuario_associado = usuarios.documento_usuario 406 WHERE 407 arquivo_texto.nome_arquivo = %s 408 AND 409 arquivo_texto.usuario_associado = %s 410 AND arquivo_texto.documento_usuario_associado = %s; 411 """ 412 413 archive_content = (QueryExecutor().complex_compund_query(query=archive_content_query, list_quantity=2, params=(selected_archive, logged_user_name, logged_user_document))) 414 archive_content = (QueryExecutor().treat_complex_result(archive_content, to_remove_archive_list)) 415 416 for i in range(0, len(archive_content)): 417 if archive_content[i] == "": 418 del archive_content[i] 419 420 with col2: 421 with st.expander(label="Conteudo", expanded=True): 422 423 display_content = "" 424 for i in range(0, len(archive_content)): 425 if "\\n" in archive_content[i]: 426 display_content = str(archive_content[i]) 427 display_content = display_content.replace("\\n", " ") 428 else: 429 display_content += str(archive_content[i]) + "\n\n" 430 431 st.code(display_content) 432 confirm_data_deletion = st.checkbox(label="Confirmar exclusão dos dados") 433 delete_archive_button = st.button(label=":wastebasket: Deletar arquivo") 434 435 if confirm_data_deletion and delete_archive_button: 436 with col2: 437 with st.spinner(text="Aguarde..."): 438 sleep(2.5) 439 440 delete_archive_query = ''' 441 DELETE arquivo_texto FROM arquivo_texto 442 INNER JOIN 443 usuarios ON arquivo_texto.usuario_associado = usuarios.nome 444 AND arquivo_texto.documento_usuario_associado = usuarios.documento_usuario 445 WHERE arquivo_texto.nome_arquivo = %s 446 AND arquivo_texto.usuario_associado = %s 447 AND arquivo_texto.documento_usuario_associado = %s;''' 448 archive_values = (selected_archive, logged_user_name, logged_user_document) 449 450 QueryExecutor().insert_query(delete_archive_query, archive_values,"Arquivo deletado com sucesso!", "Erro ao deletar arquivo:") 451 452 log_query = """INSERT INTO logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES(%s, %s, %s)""" 453 log_query_values = (logged_user, "Exclusão", "Excluiu o arquivo {}.".format(selected_archive)) 454 QueryExecutor().insert_query(log_query, log_query_values,"Log gravado.", "Erro ao gravar log:") 455 456 elif safe_password != "" and confirm_safe_password != "" and confirm_safe_password == safe_password and is_password_valid == False: 457 with col2: 458 with st.spinner(text="Aguarde..."): 459 sleep(0.5) 460 with st.expander(label="Validação dos dados", expanded=True): 461 st.error(body="A senha informada é inválida.") 462 elif safe_password != confirm_safe_password: 463 with col2: 464 with st.spinner(text="Aguarde..."): 465 sleep(0.5) 466 with st.expander(label="Validação dos dados", expanded=True): 467 st.error(body="As senhas informadas não coincidem.") 468 469 elif user_archives_quantity == 0: 470 col1, col2, col3 = st.columns(3) 471 with col2: 472 with st.spinner(text="Aguarde..."): 473 sleep(0.5) 474 st.warning(body="Você ainda não possui arquivos registrados.")
Função para a exclusão de um arquivo.