From 35e19c59e9fb5de7432c12ed353dd5b1a672ca86 Mon Sep 17 00:00:00 2001 From: keven Date: Wed, 8 Oct 2025 07:50:28 -0300 Subject: [PATCH] Teste de Ferramentas --- abstracts/action.py | 3 +- abstracts/repository.py | 3 +- actions/config/config.py | 6 +- actions/dynamic_import/dynamic_import.py | 6 +- actions/file/file.py | 10 +- actions/jwt/create_token.py | 24 +- actions/jwt/get_current_user.py | 12 +- actions/jwt/verify_token.py | 30 +- actions/log/log.py | 10 +- actions/security/security.py | 6 +- actions/system/exceptions.py | 2 +- actions/system/handlers.py | 74 ++-- actions/validations/cep.py | 3 +- actions/validations/cnpj.py | 4 +- actions/validations/cpf.py | 6 +- actions/validations/email.py | 2 +- actions/validations/phone.py | 3 +- actions/validations/text.py | 37 +- database/firebird.py | 3 +- main.py | 42 +- .../c_caixa_item_delete_action.py | 10 +- .../c_caixa_item/c_caixa_item_index_action.py | 4 +- .../c_caixa_item/c_caixa_item_save_action.py | 9 +- .../c_caixa_item/c_caixa_item_show_action.py | 10 +- .../c_caixa_item_update_action.py | 10 +- .../c_caixa_servico_delete_action.py | 10 +- ...c_caixa_servico_get_by_descricao_action.py | 11 +- .../c_caixa_servico_index_action.py | 6 +- .../c_caixa_servico_save_action.py | 10 +- .../c_caixa_servico_show_action.py | 11 +- .../c_caixa_servico_update_action.py | 12 +- .../g_cidade/g_cidade_delete_action.py | 5 +- .../g_cidade/g_cidade_get_by_nome_action.py | 8 +- .../actions/g_cidade/g_cidade_index_action.py | 6 +- .../actions/g_cidade/g_cidade_save_action.py | 9 +- .../actions/g_cidade/g_cidade_show_action.py | 8 +- .../g_cidade/g_cidade_update_action.py | 12 +- .../g_marcacao_tipo_delete_action.py | 10 +- ...g_marcacao_tipo_get_by_descricao_action.py | 10 +- .../g_marcacao_tipo_index_action.py | 6 +- .../g_marcacao_tipo_save_action.py | 11 +- .../g_marcacao_tipo_show_action.py | 13 +- .../g_marcacao_tipo_update_action.py | 18 +- .../g_medida_tipo_delete_action.py | 8 +- .../g_medida_tipo_get_by_descricao_action.py | 8 +- .../g_medida_tipo_index_action.py | 6 +- .../g_medida_tipo_save_action.py | 9 +- .../g_medida_tipo_show_action.py | 11 +- .../g_medida_tipo_update_action.py | 12 +- .../g_natureza/g_natureza_delete_action.py | 8 +- .../g_natureza_get_by_descricao_action.py | 8 +- .../g_natureza/g_natureza_index_action.py | 6 +- .../g_natureza/g_natureza_save_action.py | 9 +- .../g_natureza/g_natureza_show_action.py | 11 +- .../g_natureza/g_natureza_update_action.py | 12 +- .../g_tb_bairro/g_tb_bairro_delete_action.py | 8 +- .../g_tb_bairro_get_by_descricao_action.py | 8 +- .../g_tb_bairro/g_tb_bairro_index_action.py | 6 +- .../g_tb_bairro/g_tb_bairro_save_action.py | 9 +- .../g_tb_bairro/g_tb_bairro_show_action.py | 11 +- .../g_tb_bairro/g_tb_bairro_update_action.py | 12 +- .../g_tb_documentotipo_delete_action.py | 8 +- ...b_documentotipo_get_by_descricao_action.py | 8 +- .../g_tb_documentotipo_index_action.py | 6 +- .../g_tb_documentotipo_save_action.py | 9 +- .../g_tb_documentotipo_show_action.py | 11 +- .../g_tb_documentotipo_update_action.py | 18 +- .../g_tb_estadocivil_delete_action.py | 8 +- ..._tb_estadocivil_get_by_descricao_action.py | 8 +- .../g_tb_estadocivil_index_action.py | 6 +- .../g_tb_estadocivil_save_action.py | 9 +- .../g_tb_estadocivil_show_action.py | 11 +- .../g_tb_estadocivil_update_action.py | 16 +- .../g_tb_profissao_delete_action.py | 8 +- .../g_tb_profissao_get_by_descricao_action.py | 9 +- .../g_tb_profissao_index_action.py | 6 +- .../g_tb_profissao_save_action.py | 11 +- .../g_tb_profissao_show_action.py | 11 +- .../g_tb_profissao_update_action.py | 12 +- .../g_tb_regimebens_delete_action.py | 8 +- ...g_tb_regimebens_get_by_descricao_action.py | 9 +- .../g_tb_regimebens_index_action.py | 6 +- .../g_tb_regimebens_save_action.py | 11 +- .../g_tb_regimebens_show_action.py | 11 +- .../g_tb_regimebens_update_action.py | 18 +- .../g_tb_regimecomunhao_delete_action.py | 8 +- ..._regimecomunhao_get_by_descricao_action.py | 8 +- .../g_tb_regimecomunhao_index_action.py | 5 +- .../g_tb_regimecomunhao_save_action.py | 8 +- .../g_tb_regimecomunhao_show_action.py | 8 +- .../g_tb_regimecomunhao_update_action.py | 18 +- .../g_tb_tipologradouro_delete_action.py | 8 +- ..._tipologradouro_get_by_descricao_action.py | 8 +- .../g_tb_tipologradouro_index_action.py | 6 +- .../g_tb_tipologradouro_save_action.py | 9 +- .../g_tb_tipologradouro_show_action.py | 11 +- .../g_tb_tipologradouro_update_action.py | 18 +- .../g_tb_txmodelogrupo_delete_action.py | 9 +- ...b_txmodelogrupo_get_by_descricao_action.py | 8 +- .../g_tb_txmodelogrupo_index_action.py | 5 +- .../g_tb_txmodelogrupo_save_action.py | 8 +- .../g_tb_txmodelogrupo_show_action.py | 8 +- .../g_tb_txmodelogrupo_update_action.py | 14 +- .../actions/g_uf/g_uf_index_action.py | 6 +- .../g_usuario/g_usuario_delete_action.py | 10 +- .../g_usuario_get_by_authenticate_action.py | 8 +- .../g_usuario/g_usuario_get_by_cpf_action.py | 9 +- .../g_usuario_get_by_email_action.py | 9 +- .../g_usuario_get_by_login_action.py | 9 +- .../g_usuario_get_by_usuario_id_action.py | 6 +- .../g_usuario/g_usuario_index_action.py | 6 +- .../g_usuario/g_usuario_save_action.py | 10 +- .../g_usuario/g_usuario_show_action.py | 8 +- .../g_usuario/g_usuario_update_action.py | 10 +- .../t_censec/t_censec_delete_action.py | 5 +- .../t_censec_get_by_descricao_action.py | 8 +- .../actions/t_censec/t_censec_index_action.py | 6 +- .../actions/t_censec/t_censec_save_action.py | 9 +- .../actions/t_censec/t_censec_show_action.py | 8 +- .../t_censec/t_censec_update_action.py | 12 +- .../t_censec_naturezalitigio_delete_action.py | 8 +- ...naturezalitigio_get_by_descricao_action.py | 12 +- .../t_censec_naturezalitigio_index_action.py | 6 +- .../t_censec_naturezalitigio_save_action.py | 9 +- .../t_censec_naturezalitigio_show_action.py | 9 +- .../t_censec_naturezalitigio_update_action.py | 20 +- .../t_censec_qualidade_delete_action.py | 8 +- ...ensec_qualidade_get_by_descricao_action.py | 8 +- .../t_censec_qualidade_index_action.py | 6 +- .../t_censec_qualidade_save_action.py | 9 +- .../t_censec_qualidade_show_action.py | 11 +- .../t_censec_qualidade_update_action.py | 14 +- .../t_imovel/t_imovel_delete_action.py | 10 +- .../actions/t_imovel/t_imovel_index_action.py | 9 +- .../actions/t_imovel/t_imovel_save_action.py | 9 +- .../actions/t_imovel/t_imovel_show_action.py | 11 +- .../t_imovel/t_imovel_update_action.py | 8 +- .../t_imovel_unidade_delete_action.py | 8 +- .../t_imovel_unidade_index_action.py | 9 +- .../t_imovel_unidade_save_action.py | 13 +- .../t_imovel_unidade_show_action.py | 11 +- .../t_imovel_unidade_update_action.py | 10 +- .../t_minuta/t_minuta_delete_action.py | 5 +- .../t_minuta_get_by_descricao_action.py | 8 +- .../actions/t_minuta/t_minuta_index_action.py | 6 +- .../actions/t_minuta/t_minuta_save_action.py | 9 +- .../actions/t_minuta/t_minuta_show_action.py | 8 +- .../t_minuta/t_minuta_update_action.py | 8 +- .../t_pessoa/t_pessoa_delete_action.py | 8 +- .../t_pessoa/t_pessoa_get_by_name_action.py | 6 +- .../actions/t_pessoa/t_pessoa_index_action.py | 11 +- .../actions/t_pessoa/t_pessoa_save_action.py | 11 +- .../actions/t_pessoa/t_pessoa_show_action.py | 11 +- .../t_pessoa/t_pessoa_update_action.py | 14 +- .../t_servico_etiqueta_delete_action.py | 8 +- .../t_servico_etiqueta_index_action.py | 6 +- .../t_servico_etiqueta_save_action.py | 9 +- .../t_servico_etiqueta_show_action.py | 11 +- .../t_servico_etiqueta_update_action.py | 18 +- .../t_servico_tipo_delete_action.py | 8 +- .../t_servico_tipo_get_by_descricao_action.py | 8 +- .../t_servico_tipo_index_action.py | 6 +- .../t_servico_tipo_save_action.py | 9 +- .../t_servico_tipo_show_action.py | 11 +- .../t_servico_tipo_update_action.py | 16 +- .../t_tb_andamentoservico_delete_action.py | 8 +- ...ndamentoservico_get_by_descricao_action.py | 9 +- .../t_tb_andamentoservico_index_action.py | 6 +- .../t_tb_andamentoservico_save_action.py | 11 +- .../t_tb_andamentoservico_show_action.py | 11 +- .../t_tb_andamentoservico_update_action.py | 22 +- .../t_tb_reconhecimentotipo_delete_action.py | 6 +- ...onhecimentotipo_get_by_descricao_action.py | 7 +- .../t_tb_reconhecimentotipo_index_action.py | 4 +- .../t_tb_reconhecimentotipo_save_action.py | 9 +- .../t_tb_reconhecimentotipo_show_action.py | 9 +- .../t_tb_reconhecimentotipo_update_action.py | 22 +- .../controllers/c_caixa_item_controller.py | 51 ++- .../controllers/c_caixa_servico_controller.py | 104 ++--- .../controllers/g_cidade_controller.py | 84 ++-- .../controllers/g_marcacao_tipo_controller.py | 90 +++-- .../controllers/g_medida_tipo_controller.py | 84 ++-- .../controllers/g_natureza_controller.py | 84 ++-- .../controllers/g_tb_bairro_controller.py | 83 ++-- .../g_tb_documentotipo_controller.py | 95 +++-- .../g_tb_estadocivil_controller.py | 90 +++-- .../controllers/g_tb_profissao_controller.py | 92 +++-- .../controllers/g_tb_regimebens_controller.py | 104 ++--- .../g_tb_regimecomunhao_controller.py | 74 ++-- .../g_tb_tipologradouro_controller.py | 95 +++-- .../g_tb_txmodelogrupo_controller.py | 69 ++-- .../controllers/g_uf_controller.py | 13 +- .../controllers/g_usuario_controller.py | 164 ++++---- .../controllers/t_censec_controller.py | 84 ++-- .../t_censec_naturezalitigio_controller.py | 99 +++-- .../t_censec_qualidade_controller.py | 99 +++-- .../controllers/t_imovel_controller.py | 69 ++-- .../t_imovel_unidade_controller.py | 79 ++-- .../controllers/t_minuta_controller.py | 86 ++-- .../controllers/t_pessoa_controller.py | 100 +++-- .../t_servico_etiqueta_controller.py | 83 ++-- .../controllers/t_servico_tipo_controller.py | 90 +++-- .../t_tb_andamentoservico_controller.py | 113 +++--- .../t_tb_reconhecimentotipo_controller.py | 112 ++--- .../endpoints/c_caixa_item_endpoint.py | 73 ++-- .../endpoints/c_caixa_servico_endpoint.py | 97 +++-- .../endpoints/g_cidade_endpoint.py | 91 +++-- .../endpoints/g_marcacao_tipo_endpoint.py | 93 +++-- .../endpoints/g_medida_tipo_endpoint.py | 93 +++-- .../endpoints/g_natureza_endpoint.py | 92 +++-- .../endpoints/g_tb_bairro_endpoint.py | 92 +++-- .../endpoints/g_tb_documentotipo_endpoint.py | 111 +++-- .../endpoints/g_tb_estadocivil_endpoint.py | 97 +++-- .../endpoints/g_tb_profissao_endpoint.py | 97 +++-- .../endpoints/g_tb_regimebens_endpoint.py | 95 +++-- .../endpoints/g_tb_regimecomunhao_endpoint.py | 112 +++-- .../endpoints/g_tb_tipologradouro_endpoint.py | 111 +++-- .../endpoints/g_tb_txmodelogrupo_endpoint.py | 93 +++-- .../administrativo/endpoints/g_uf_endpoint.py | 18 +- .../endpoints/g_usuario_endpoint.py | 153 ++++--- .../endpoints/t_censec_endpoint.py | 91 +++-- .../t_censec_naturezalitigio_endpoint.py | 115 ++++-- .../endpoints/t_censec_qualidade_endpoint.py | 113 ++++-- .../endpoints/t_imovel_endpoint.py | 81 ++-- .../endpoints/t_imovel_unidade_endpoint.py | 91 +++-- .../endpoints/t_minuta_endpoint.py | 95 +++-- .../endpoints/t_pessoa_endpoint.py | 93 +++-- .../endpoints/t_servico_etiqueta_endpoint.py | 97 +++-- .../endpoints/t_servico_tipo_endpoint.py | 93 +++-- .../t_tb_andamentoservico_endpoint.py | 115 ++++-- .../t_tb_reconhecimentotipo_endpoint.py | 113 ++++-- .../c_caixa_item/c_caixa_item_delete.py | 17 +- .../c_caixa_item/c_caixa_item_index.py | 3 +- .../c_caixa_item/c_caixa_item_save.py | 39 +- .../c_caixa_item/c_caixa_item_show.py | 9 +- .../c_caixa_item_update_repository.py | 38 +- .../c_caixa_servico_delete_repository.py | 23 +- ...ixa_servico_get_by_descricao_repository.py | 14 +- .../c_caixa_servico_index_repository.py | 3 +- .../c_caixa_servico_save_repository.py | 40 +- .../c_caixa_servico_show_repository.py | 14 +- .../c_caixa_servico_update_repository.py | 33 +- .../g_cidade/g_cidade_delete_repository.py | 14 +- .../g_cidade_get_by_nome_repository.py | 10 +- .../g_cidade/g_cidade_index_repository.py | 5 +- .../g_cidade/g_cidade_save_repository.py | 24 +- .../g_cidade/g_cidade_show_repository.py | 14 +- .../g_cidade/g_cidade_update_repository.py | 24 +- .../g_marcacao_tipo_delete_action.py | 10 +- .../g_marcacao_tipo_delete_repository.py | 17 +- ...rcacao_tipo_get_by_descricao_repository.py | 10 +- .../g_marcacao_tipo_index_repository.py | 5 +- .../g_marcacao_tipo_save_repository.py | 48 +-- .../g_marcacao_tipo_show_repository.py | 17 +- .../g_marcacao_tipo_update_repository.py | 33 +- .../g_medida_tipo_delete_repository.py | 21 +- ...medida_tipo_get_by_descricao_repository.py | 10 +- .../g_medida_tipo_index_repository.py | 5 +- .../g_medida_tipo_save_repository.py | 20 +- .../g_medida_tipo_show_repository.py | 17 +- .../g_medida_tipo_update_repository.py | 20 +- .../g_natureza_delete_repository.py | 17 +- .../g_natureza_get_by_descricao_repository.py | 10 +- .../g_natureza/g_natureza_index_repository.py | 5 +- .../g_natureza/g_natureza_save_repository.py | 26 +- .../g_natureza/g_natureza_show_repository.py | 17 +- .../g_natureza_update_repository.py | 27 +- .../g_tb_bairro_delete_repository.py | 17 +- ...g_tb_bairro_get_by_descricao_repository.py | 10 +- .../g_tb_bairro_index_repository.py | 5 +- .../g_tb_bairro_save_repository.py | 22 +- .../g_tb_bairro_show_repository.py | 17 +- .../g_tb_bairro_update_repository.py | 16 +- .../g_tb_documentotipo_delete_repository.py | 17 +- ...cumentotipo_get_by_descricao_repository.py | 10 +- .../g_tb_documentotipo_index_repository.py | 5 +- .../g_tb_documentotipo_save_repository.py | 32 +- .../g_tb_documentotipo_show_repository.py | 17 +- .../g_tb_documentotipo_update_repository.py | 37 +- .../g_tb_estadocivil_delete_repository.py | 17 +- ...estadocivil_get_by_descricao_repository.py | 10 +- .../g_tb_estadocivil_index_repository.py | 5 +- .../g_tb_estadocivil_save_repository.py | 24 +- .../g_tb_estadocivil_show_repository.py | 17 +- .../g_tb_estadocivil_update_repository.py | 25 +- .../g_tb_profissao_delete_repository.py | 17 +- ...b_profissao_get_by_descricao_repository.py | 10 +- .../g_tb_profissao_index_repository.py | 5 +- .../g_tb_profissao_save_repository.py | 22 +- .../g_tb_profissao_show_repository.py | 21 +- .../g_tb_profissao_update_repository.py | 25 +- .../g_tb_regimebens_delete_repository.py | 17 +- ..._regimebens_get_by_descricao_repository.py | 10 +- .../g_tb_regimebens_index_repository.py | 5 +- .../g_tb_regimebens_save_repository.py | 14 +- .../g_tb_regimebens/g_tb_regimebens_schema.py | 34 +- .../g_tb_regimebens_show_repository.py | 17 +- .../g_tb_regimebens_update_repository.py | 17 +- .../g_tb_regimecomunhao_delete_repository.py | 9 +- ...imecomunhao_get_by_descricao_repository.py | 10 +- .../g_tb_regimecomunhao_index_repository.py | 3 +- .../g_tb_regimecomunhao_save_repository.py | 22 +- .../g_tb_regimecomunhao_show_repository.py | 10 +- .../g_tb_regimecomunhao_update_repository.py | 20 +- .../g_tb_tipologradouro_delete_repository.py | 17 +- ...ologradouro_get_by_descricao_repository.py | 10 +- .../g_tb_tipologradouro_index_repository.py | 5 +- .../g_tb_tipologradouro_save_repository.py | 26 +- .../g_tb_tipologradouro_show_repository.py | 15 +- .../g_tb_tipologradouro_update_repository.py | 26 +- .../g_tb_txmodelogrupo_delete_repository.py | 14 +- ...modelogrupo_get_by_descricao_repository.py | 10 +- .../g_tb_txmodelogrupo_index_repository.py | 8 +- .../g_tb_txmodelogrupo_save_repository.py | 16 +- .../g_tb_txmodelogrupo_show_repository.py | 12 +- .../g_tb_txmodelogrupo_update_repository.py | 25 +- .../g_uf/g_uf_index_repository.py | 5 +- .../g_usuario/g_usuario_delete_repository.py | 22 +- ..._usuario_get_by_authenticate_repository.py | 12 +- .../g_usuario_get_by_cpf_repository.py | 17 +- .../g_usuario_get_by_email_repository.py | 11 +- .../g_usuario_get_by_login_repository.py | 11 +- .../g_usuario_get_by_usuario_id_repository.py | 10 +- .../g_usuario/g_usuario_index_repository.py | 3 +- .../g_usuario/g_usuario_save_repository.py | 38 +- .../g_usuario/g_usuario_show_repository.py | 11 +- .../g_usuario/g_usuario_update_repository.py | 20 +- .../t_censec/t_censec_delete_repository.py | 14 +- .../t_censec_get_by_descricao_repository.py | 10 +- .../t_censec/t_censec_index_repository.py | 5 +- .../t_censec/t_censec_save_repository.py | 20 +- .../t_censec/t_censec_show_repository.py | 14 +- .../t_censec/t_censec_update_repository.py | 21 +- ...ensec_naturezalitigio_delete_repository.py | 13 +- ...rezalitigio_get_by_descricao_repository.py | 18 +- ...censec_naturezalitigio_index_repository.py | 5 +- ..._censec_naturezalitigio_save_repository.py | 20 +- ..._censec_naturezalitigio_show_repository.py | 15 +- ...ensec_naturezalitigio_update_repository.py | 25 +- .../t_censec_qualidade_delete_repository.py | 13 +- ...c_qualidade_get_by_descricao_repository.py | 10 +- .../t_censec_qualidade_index_repository.py | 5 +- .../t_censec_qualidade_save_repository.py | 22 +- .../t_censec_qualidade_show_repository.py | 15 +- .../t_censec_qualidade_update_repository.py | 27 +- .../t_imovel/t_imovel_delete_repository.py | 16 +- .../t_imovel/t_imovel_index_repository.py | 12 +- .../t_imovel/t_imovel_save_repository.py | 12 +- .../t_imovel/t_imovel_show_repository.py | 17 +- .../t_imovel/t_imovel_update_repository.py | 12 +- .../t_imovel_unidade_delete_repository.py | 17 +- .../t_imovel_unidade_index_repository.py | 12 +- .../t_imovel_unidade_save_repository.py | 82 ++-- .../t_imovel_unidade_show_repository.py | 17 +- .../t_imovel_unidade_update_repository.py | 25 +- .../t_minuta/t_minuta_delete_repository.py | 14 +- .../t_minuta_get_by_descricao_repository.py | 10 +- .../t_minuta/t_minuta_index_repository.py | 5 +- .../t_minuta/t_minuta_save_repository.py | 22 +- .../t_minuta/t_minuta_show_repository.py | 14 +- .../t_minuta/t_minuta_update_repository.py | 27 +- .../t_pessoa/t_pessoa_delete_repository.py | 17 +- .../t_pessoa/t_pessoa_index_repository.py | 16 +- .../t_pessoa/t_pessoa_save_repository.py | 130 +++--- .../t_pessoa/t_pessoa_show_repository.py | 17 +- .../t_pessoa/t_pessoa_update_repository.py | 14 +- .../t_servico_etiqueta_delete_repository.py | 13 +- .../t_servico_etiqueta_index_repository.py | 5 +- .../t_servico_etiqueta_save_repository.py | 13 +- .../t_servico_etiqueta_show_repository.py | 19 +- .../t_servico_etiqueta_update_repository.py | 41 +- .../t_servico_tipo_delete_repository.py | 17 +- ...ervico_tipo_get_by_descricao_repository.py | 12 +- .../t_servico_tipo_index_repository.py | 5 +- .../t_servico_tipo_save_repository.py | 84 ++-- .../t_servico_tipo_show_repository.py | 23 +- .../t_servico_tipo_update_repository.py | 49 ++- ...t_tb_andamentoservico_delete_repository.py | 13 +- ...entoservico_get_by_descricao_repository.py | 10 +- .../t_tb_andamentoservico_index_repository.py | 5 +- .../t_tb_andamentoservico_save_repository.py | 24 +- .../t_tb_andamentoservico_show_repository.py | 15 +- ...t_tb_andamentoservico_update_repository.py | 25 +- ...tb_reconhecimentotipo_delete_repository.py | 11 +- ...cimentotipo_get_by_descricao_repository.py | 8 +- ..._tb_reconhecimentotipo_index_repository.py | 3 +- ...t_tb_reconhecimentotipo_save_repository.py | 18 +- ...t_tb_reconhecimentotipo_show_repository.py | 13 +- ...tb_reconhecimentotipo_update_repository.py | 23 +- .../schemas/c_caixa_item_schema.py | 6 +- .../schemas/c_caixa_servico_schema.py | 172 +++++--- .../administrativo/schemas/g_cidade_schema.py | 62 +-- .../schemas/g_marcacao_tipo_schema.py | 172 ++++---- .../schemas/g_medida_tipo_schema.py | 41 +- .../schemas/g_natureza_schema.py | 42 +- .../schemas/g_tb_bairro_schema.py | 40 +- .../schemas/g_tb_documentotipo_schema.py | 158 +++++--- .../schemas/g_tb_estadocivil_schema.py | 49 ++- .../schemas/g_tb_profissao_schema.py | 68 +++- .../schemas/g_tb_regimebens_schema.py | 33 +- .../schemas/g_tb_regimecomunhao_schema.py | 36 +- .../schemas/g_tb_tipologradouro_schema.py | 42 +- .../schemas/g_tb_txmodelogrupo_schema.py | 38 +- .../v1/administrativo/schemas/g_uf_schema.py | 6 +- .../schemas/g_usuario_schema.py | 156 +++---- .../t_censec_naturezalitigio_schema.py | 42 +- .../schemas/t_censec_qualidade_schema.py | 60 +-- .../administrativo/schemas/t_censec_schema.py | 42 +- .../administrativo/schemas/t_imovel_schema.py | 88 +++- .../schemas/t_imovel_unidade_schema.py | 76 +++- .../administrativo/schemas/t_minuta_schema.py | 68 ++-- .../administrativo/schemas/t_pessoa_schema.py | 71 +++- .../schemas/t_servico_etiqueta_schema.py | 84 ++-- .../schemas/t_servico_tipo_schema.py | 381 ++++++++++-------- .../schemas/t_tb_andamentoservico_schema.py | 71 ++-- .../schemas/t_tb_reconhecimentotipo_schema.py | 40 +- .../go/c_caixa_item_delete_service.py | 14 +- .../go/c_caixa_item_index_service.py | 8 +- .../go/c_caixa_item_save_service.py | 14 +- .../go/c_caixa_item_show_service.py | 10 +- .../go/c_caixa_item_update_service.py | 10 +- .../go/c_caixa_servico_delete_service.py | 9 +- .../c_caixa_servico_get_descricao_service.py | 17 +- .../go/c_caixa_servico_index_service.py | 14 +- .../go/c_caixa_servico_save_service.py | 49 ++- .../go/c_caixa_servico_show_service.py | 11 +- .../go/c_caixa_servico_update_service.py | 15 +- .../g_cidade/go/g_cidade_delete_service.py | 6 +- .../g_cidade/go/g_cidade_get_nome_service.py | 14 +- .../g_cidade/go/g_cidade_index_service.py | 11 +- .../g_cidade/go/g_cidade_save_service.py | 39 +- .../g_cidade/go/g_cidade_show_service.py | 9 +- .../g_cidade/go/g_cidade_update_service.py | 12 +- .../go/g_marcacao_tipo_delete_service.py | 9 +- ..._marcacao_tipo_get_by_descricao_service.py | 20 +- .../go/g_marcacao_tipo_index_service.py | 11 +- .../go/g_marcacao_tipo_save_service.py | 54 ++- .../go/g_marcacao_tipo_show_service.py | 14 +- .../go/g_marcacao_tipo_update_service.py | 14 +- .../go/g_medida_tipo_delete_service.py | 9 +- .../go/g_medida_tipo_get_descricao_service.py | 18 +- .../go/g_medida_tipo_index_service.py | 11 +- .../go/g_medida_tipo_save_service.py | 39 +- .../go/g_medida_tipo_show_service.py | 12 +- .../go/g_medida_tipo_update_service.py | 12 +- .../go/g_natureza_delete_service.py | 9 +- .../go/g_natureza_get_descricao_service.py | 14 +- .../g_natureza/go/g_natureza_index_service.py | 11 +- .../g_natureza/go/g_natureza_save_service.py | 39 +- .../g_natureza/go/g_natureza_show_service.py | 12 +- .../go/g_natureza_update_service.py | 12 +- .../go/g_tb_bairro_delete_service.py | 9 +- .../go/g_tb_bairro_get_descricao_service.py | 14 +- .../go/g_tb_bairro_index_service.py | 11 +- .../go/g_tb_bairro_save_service.py | 39 +- .../go/g_tb_bairro_show_service.py | 12 +- .../go/g_tb_bairro_update_service.py | 12 +- .../go/g_tb_documentotipo_delete_service.py | 9 +- ..._documentotipo_get_by_descricao_service.py | 20 +- .../go/g_tb_documentotipo_index_service.py | 11 +- .../go/g_tb_documentotipo_save_service.py | 40 +- .../go/g_tb_documentotipo_show_service.py | 12 +- .../go/g_tb_documentotipo_update_service.py | 16 +- .../go/g_tb_estadocivil_delete_service.py | 9 +- .../g_tb_estadocivil_get_descricao_service.py | 18 +- .../go/g_tb_estadocivil_index_service.py | 11 +- .../go/g_tb_estadocivil_save_service.py | 40 +- .../go/g_tb_estadocivil_show_service.py | 12 +- .../go/g_tb_estadocivil_update_service.py | 14 +- .../go/g_tb_profissao_delete_service.py | 9 +- .../g_tb_profissao_get_descricao_service.py | 18 +- .../go/g_tb_profissao_index_service.py | 11 +- .../go/g_tb_profissao_save_service.py | 39 +- .../go/g_tb_profissao_show_service.py | 12 +- .../go/g_tb_profissao_update_service.py | 14 +- .../go/g_tb_regimebens_delete_service.py | 9 +- .../g_tb_regimebens_get_descricao_service.py | 16 +- .../go/g_tb_regimebens_index_service.py | 9 +- .../go/g_tb_regimebens_save_service.py | 39 +- .../go/g_tb_regimebens_show_service.py | 12 +- .../go/g_tb_regimebens_update_service.py | 14 +- .../go/g_tb_regimecomunhao_delete_service.py | 9 +- ...regimecomunhao_get_by_descricao_service.py | 19 +- .../go/g_tb_regimecomunhao_index_service.py | 14 +- .../go/g_tb_regimecomunhao_save_service.py | 47 ++- .../go/g_tb_regimecomunhao_show_service.py | 12 +- .../go/g_tb_regimecomunhao_update_service.py | 17 +- .../go/g_tb_tipologradouro_delete_service.py | 9 +- ...tb_tipologradouro_get_descricao_service.py | 20 +- .../go/g_tb_tipologradouro_index_service.py | 11 +- .../go/g_tb_tipologradouro_save_service.py | 40 +- .../go/g_tb_tipologradouro_show_service.py | 12 +- .../go/g_tb_tipologradouro_update_service.py | 16 +- .../go/g_tb_txmodelogrupo_delete_service.py | 9 +- ..._txmodelogrupo_get_by_descricao_service.py | 18 +- .../go/g_tb_txmodelogrupo_index_service.py | 11 +- .../go/g_tb_txmodelogrupo_save_service.py | 40 +- .../go/g_tb_txmodelogrupo_show_service.py | 12 +- .../go/g_tb_txmodelogrupo_update_service.py | 15 +- .../services/g_uf/go/g_uf_index_service.py | 11 +- .../go/g_usuario_authenticate_service.py | 51 ++- .../g_usuario/go/g_usuario_delete_service.py | 9 +- .../g_usuario/go/g_usuario_get_cpf_service.py | 11 +- .../go/g_usuario_get_email_service.py | 11 +- .../go/g_usuario_get_login_service.py | 11 +- .../g_usuario/go/g_usuario_index_service.py | 11 +- .../g_usuario/go/g_usuario_me_service.py | 10 +- .../g_usuario/go/g_usuario_save_service.py | 76 ++-- .../g_usuario/go/g_usuario_show_service.py | 8 +- .../g_usuario/go/g_usuario_update_service.py | 13 +- .../t_censec/go/t_censec_delete_service.py | 6 +- .../go/t_censec_get_descricao_service.py | 14 +- .../t_censec/go/t_censec_index_service.py | 11 +- .../t_censec/go/t_censec_save_service.py | 39 +- .../t_censec/go/t_censec_show_service.py | 9 +- .../t_censec/go/t_censec_update_service.py | 12 +- ...t_censec_naturezalitigio_delete_service.py | 9 +- ...c_naturezalitigio_get_descricao_service.py | 20 +- .../t_censec_naturezalitigio_index_service.py | 11 +- .../t_censec_naturezalitigio_save_service.py | 46 ++- .../t_censec_naturezalitigio_show_service.py | 12 +- ...t_censec_naturezalitigio_update_service.py | 18 +- .../go/t_censec_qualidade_delete_service.py | 9 +- ..._censec_qualidade_get_descricao_service.py | 20 +- .../go/t_censec_qualidade_index_service.py | 11 +- .../go/t_censec_qualidade_save_service.py | 42 +- .../go/t_censec_qualidade_show_service.py | 12 +- .../go/t_censec_qualidade_update_service.py | 16 +- .../t_imovel/go/t_imovel_delete_service.py | 10 +- .../t_imovel/go/t_imovel_index_service.py | 14 +- .../t_imovel/go/t_imovel_save_service.py | 25 +- .../t_imovel/go/t_imovel_show_service.py | 12 +- .../t_imovel/go/t_imovel_update_service.py | 10 +- .../go/t_imovel_unidade_delete_service.py | 8 +- .../go/t_imovel_unidade_index_service.py | 14 +- .../go/t_imovel_unidade_save_service.py | 19 +- .../go/t_imovel_unidade_show_service.py | 12 +- .../go/t_imovel_unidade_update_service.py | 10 +- .../t_minuta/go/t_minuta_delete_service.py | 6 +- .../go/t_minuta_get_descricao_service.py | 14 +- .../t_minuta/go/t_minuta_index_service.py | 11 +- .../t_minuta/go/t_minuta_save_service.py | 39 +- .../t_minuta/go/t_minuta_show_service.py | 9 +- .../t_minuta/go/t_minuta_update_service.py | 12 +- .../t_pessoa/go/t_pessoa_delete_service.py | 9 +- .../t_pessoa/go/t_pessoa_get_name_service.py | 16 +- .../t_pessoa/go/t_pessoa_index_service.py | 11 +- .../t_pessoa/go/t_pessoa_save_service.py | 14 +- .../t_pessoa/go/t_pessoa_show_service.py | 11 +- .../t_pessoa/go/t_pessoa_update_service.py | 9 +- .../go/t_servico_etiqueta_delete_service.py | 17 +- .../go/t_servico_etiqueta_index_service.py | 11 +- .../go/t_servico_etiqueta_save_service.py | 40 +- .../go/t_servico_etiqueta_show_service.py | 24 +- .../go/t_servico_etiqueta_update_service.py | 18 +- .../go/t_servico_tipo_delete_service.py | 15 +- ...t_servico_tipo_get_by_descricao_service.py | 20 +- .../go/t_servico_tipo_index_service.py | 11 +- .../go/t_servico_tipo_save_service.py | 53 ++- .../go/t_servico_tipo_show_service.py | 20 +- .../go/t_servico_tipo_update_service.py | 16 +- .../t_tb_andamentoservico_delete_service.py | 9 +- ..._andamentoservico_get_descricao_service.py | 20 +- .../go/t_tb_andamentoservico_index_service.py | 11 +- .../go/t_tb_andamentoservico_save_service.py | 42 +- .../go/t_tb_andamentoservico_show_service.py | 12 +- .../t_tb_andamentoservico_update_service.py | 16 +- .../t_tb_reconhecimentotipo_delete_service.py | 7 +- ...econhecimentotipo_get_descricao_service.py | 18 +- .../t_tb_reconhecimentotipo_index_service.py | 9 +- .../t_tb_reconhecimentotipo_save_service.py | 40 +- .../t_tb_reconhecimentotipo_show_service.py | 10 +- .../t_tb_reconhecimentotipo_update_service.py | 18 +- packages/v1/api.py | 121 +++--- .../actions/g_sequencia/checkout_action.py | 6 +- .../actions/g_sequencia/get_action.py | 6 +- .../actions/g_sequencia/save_action.py | 6 +- .../repositories/g_sequencia/checkout.py | 31 +- .../sequencia/repositories/g_sequencia/get.py | 10 +- .../repositories/g_sequencia/save.py | 10 +- packages/v1/sequencia/schemas/g_sequencia.py | 2 +- .../services/g_sequencia/checkout_service.py | 14 +- .../services/g_sequencia/generate_service.py | 9 +- .../services/g_sequencia/save_service.py | 7 +- .../connections/firebird_check_action.py | 10 +- .../v1/system/actions/disk/get_size_action.py | 14 +- .../system/service/startup_check_service.py | 1 - 587 files changed, 8856 insertions(+), 5846 deletions(-) diff --git a/abstracts/action.py b/abstracts/action.py index da31d8a..2642a82 100644 --- a/abstracts/action.py +++ b/abstracts/action.py @@ -2,7 +2,6 @@ from abc import ABC, abstractmethod class BaseAction: - """ Classe abstrata base para todos as actions do sistema. Obriga implementação de um método execute(). @@ -14,4 +13,4 @@ class BaseAction: Método abstrato obrigatório a ser implementado pelas subclasses. Deve conter a lógica principal do repositório. """ - pass \ No newline at end of file + pass diff --git a/abstracts/repository.py b/abstracts/repository.py index 59d6507..babe4c0 100644 --- a/abstracts/repository.py +++ b/abstracts/repository.py @@ -22,7 +22,7 @@ class BaseRepository: def run(self, sql: str, params: Optional[dict] = None): """Executa um SQL sem retorno de dados (ex: INSERT, UPDATE, DELETE)""" return self._execute(sql, params, fetch="none") - + def run_and_return(self, sql: str, params: Optional[dict] = None): """Executa SQL com RETURNING e retorna o primeiro registro como dict""" return self._execute(sql, params, fetch="one") @@ -47,4 +47,3 @@ class BaseRepository: except SQLAlchemyError as e: print(f"[ERRO SQL]: {e}") raise - \ No newline at end of file diff --git a/actions/config/config.py b/actions/config/config.py index 177b551..dbaba2e 100644 --- a/actions/config/config.py +++ b/actions/config/config.py @@ -11,10 +11,10 @@ class Config: base_dir = Path(__file__).resolve().parent # Caminho absoluto para o config.json (subindo dois níveis e entrando em config/) - config_path = base_dir.parent.parent / 'config' / name + config_path = base_dir.parent.parent / "config" / name # Carrega o JSON como objeto acessível por ponto - with open(config_path, 'r') as f: + with open(config_path, "r") as f: config = json.load(f, object_hook=lambda d: SimpleNamespace(**d)) - return config \ No newline at end of file + return config diff --git a/actions/dynamic_import/dynamic_import.py b/actions/dynamic_import/dynamic_import.py index fddc643..9df5ec0 100644 --- a/actions/dynamic_import/dynamic_import.py +++ b/actions/dynamic_import/dynamic_import.py @@ -1,7 +1,7 @@ import importlib -from actions.config.config import Config -from typing import Optional, Any, Type +from typing import Any, Optional, Type +from actions.config.config import Config class DynamicImport: @@ -18,7 +18,7 @@ class DynamicImport: def set_table(self, table: str): self.table = table - def service(self, name: str, class_name : str) -> Type[Any]: + def service(self, name: str, class_name: str) -> Type[Any]: try: # Define o nome do Módulo module_file = f"{name}" diff --git a/actions/file/file.py b/actions/file/file.py index 0915c98..019ba21 100644 --- a/actions/file/file.py +++ b/actions/file/file.py @@ -4,14 +4,14 @@ import os class File: - def create(self, data, caminho_arquivo='storage/temp.json'): + def create(self, data, caminho_arquivo="storage/temp.json"): try: # Garante que a pasta existe os.makedirs(os.path.dirname(caminho_arquivo), exist_ok=True) # Lê dados existentes (ou cria nova lista) if os.path.exists(caminho_arquivo): - with open(caminho_arquivo, 'r', encoding='utf-8') as arquivo: + with open(caminho_arquivo, "r", encoding="utf-8") as arquivo: try: dados_existentes = json.load(arquivo) if not isinstance(dados_existentes, list): @@ -25,8 +25,8 @@ class File: dados_existentes.append(data) # Salva novamente no arquivo com indentação - with open(caminho_arquivo, 'w', encoding='utf-8') as arquivo: + with open(caminho_arquivo, "w", encoding="utf-8") as arquivo: json.dump(dados_existentes, arquivo, indent=4, ensure_ascii=False) - + except Exception as e: - print(f"❌ Erro ao salvar o dado: {e}") \ No newline at end of file + print(f"❌ Erro ao salvar o dado: {e}") diff --git a/actions/jwt/create_token.py b/actions/jwt/create_token.py index caca25d..c0deae1 100644 --- a/actions/jwt/create_token.py +++ b/actions/jwt/create_token.py @@ -1,36 +1,34 @@ from datetime import datetime, timedelta + from jose import jwt from pytz import timezone from abstracts.action import BaseAction from actions.config.config import Config + class CreateToken(BaseAction): def __init__(self): # Busca as configurações da aplicação - self.config = Config.get('app.json') + self.config = Config.get("app.json") # Cria o timedelta com base na config self.access_token_expire = timedelta( minutes=self.config.jwt.expire.minute, hours=self.config.jwt.expire.hours, - days=self.config.jwt.expire.days + days=self.config.jwt.expire.days, ) - def execute(self, tipo_token: str, data : str) -> str: - - sp = timezone('America/Sao_Paulo') + def execute(self, tipo_token: str, data: str) -> str: + + sp = timezone("America/Sao_Paulo") agora = datetime.now(tz=sp) expira = agora + self.access_token_expire # Define os dados do token - payload = { - 'type' : tipo_token, - 'exp' : expira, - 'iat' : agora, - 'data' : str(data) - } + payload = {"type": tipo_token, "exp": expira, "iat": agora, "data": str(data)} # Retorna os dados codificados - return jwt.encode(payload, self.config.jwt.token, algorithm=self.config.jwt.algorithm) - \ No newline at end of file + return jwt.encode( + payload, self.config.jwt.token, algorithm=self.config.jwt.algorithm + ) diff --git a/actions/jwt/get_current_user.py b/actions/jwt/get_current_user.py index e70674d..79e3f62 100644 --- a/actions/jwt/get_current_user.py +++ b/actions/jwt/get_current_user.py @@ -1,10 +1,12 @@ -from fastapi import Depends, HTTPException, status, Request +from fastapi import Depends, HTTPException, Request, status from fastapi.security import OAuth2PasswordBearer -from actions.jwt.verify_token import VerifyToken # A classe que criamos anteriormente +from actions.jwt.verify_token import \ + VerifyToken # A classe que criamos anteriormente oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") # Apenas requerido pelo FastAPI + def get_current_user(token: str = Depends(oauth2_scheme)): # Ação que válida o tokne @@ -13,12 +15,12 @@ def get_current_user(token: str = Depends(oauth2_scheme)): result = verify_token.execute(token) # Verifica se a resposta é diferente de inválida - if result['status'] != 'valid': + if result["status"] != "valid": raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, - detail=result.get('message', 'Token inválido ou expirado'), + detail=result.get("message", "Token inválido ou expirado"), headers={"WWW-Authenticate": "Bearer"}, ) # Retorna apenas os dados do token - return result['payload'] + return result["payload"] diff --git a/actions/jwt/verify_token.py b/actions/jwt/verify_token.py index 8c8d935..b20f5b1 100644 --- a/actions/jwt/verify_token.py +++ b/actions/jwt/verify_token.py @@ -1,5 +1,6 @@ from datetime import datetime -from jose import jwt, JWTError, ExpiredSignatureError + +from jose import ExpiredSignatureError, JWTError, jwt from pytz import timezone from actions.config.config import Config @@ -8,15 +9,13 @@ from actions.config.config import Config class VerifyToken: def __init__(self): # Carrega configurações - self.config = Config.get('app.json') + self.config = Config.get("app.json") - def execute(self, token: str, expected_type: str = 'access-token') -> dict: + def execute(self, token: str, expected_type: str = "access-token") -> dict: try: # Decodifica o token payload = jwt.decode( - token, - self.config.jwt.token, - algorithms=[self.config.jwt.algorithm] + token, self.config.jwt.token, algorithms=[self.config.jwt.algorithm] ) # Valida expiração @@ -33,25 +32,16 @@ class VerifyToken: if "data" not in payload: raise ValueError("Token malformado: campo 'data' ausente.") - return { - "status": "valid", - "payload": payload - } + return {"status": "valid", "payload": payload} except ExpiredSignatureError: - return { - "status": "expired", - "message": "O token expirou." - } + return {"status": "expired", "message": "O token expirou."} except JWTError as e: - return { - "status": "invalid", - "message": f"Token inválido: {str(e)}" - } + return {"status": "invalid", "message": f"Token inválido: {str(e)}"} except Exception as e: return { "status": "error", - "message": f"Erro na validação do token: {str(e)}" - } \ No newline at end of file + "message": f"Erro na validação do token: {str(e)}", + } diff --git a/actions/log/log.py b/actions/log/log.py index 3fe4298..e15950e 100644 --- a/actions/log/log.py +++ b/actions/log/log.py @@ -4,14 +4,14 @@ import os class Log: - def register(self, data, caminho_arquivo='storage/temp.json'): + def register(self, data, caminho_arquivo="storage/temp.json"): try: # Garante que a pasta existe os.makedirs(os.path.dirname(caminho_arquivo), exist_ok=True) # Lê dados existentes (ou cria nova lista) if os.path.exists(caminho_arquivo): - with open(caminho_arquivo, 'r', encoding='utf-8') as arquivo: + with open(caminho_arquivo, "r", encoding="utf-8") as arquivo: try: dados_existentes = json.load(arquivo) if not isinstance(dados_existentes, list): @@ -25,8 +25,8 @@ class Log: dados_existentes.append(data) # Salva novamente no arquivo com indentação - with open(caminho_arquivo, 'w', encoding='utf-8') as arquivo: + with open(caminho_arquivo, "w", encoding="utf-8") as arquivo: json.dump(dados_existentes, arquivo, indent=4, ensure_ascii=False) - + except Exception as e: - print(f"❌ Erro ao salvar o dado: {e}") \ No newline at end of file + print(f"❌ Erro ao salvar o dado: {e}") diff --git a/actions/security/security.py b/actions/security/security.py index e23c3a6..8e46663 100644 --- a/actions/security/security.py +++ b/actions/security/security.py @@ -6,7 +6,7 @@ from passlib.context import CryptContext # Cria uma instância do contexto de criptografia # O esquema usado é 'bcrypt', que é seguro e amplamente aceito # O parâmetro 'deprecated="auto"' marca versões antigas como inseguras, se aplicável -CRYPTO = CryptContext(schemes=['bcrypt'], deprecated='auto') +CRYPTO = CryptContext(schemes=["bcrypt"], deprecated="auto") class Security: @@ -19,19 +19,17 @@ class Security: """ return CRYPTO.identify(senha) - # Verifica se uma senha fornecida corresponde ao hash armazenado def verify_senha_api(plain_senha_api: str, hashed_senha_api: str) -> bool: """ Compara a senha fornecida em texto puro com o hash armazenado. - + :param plain_senha_api: Senha digitada pelo usuário :param hashed_senha_api: Hash da senha armazenado no banco de dados :return: True se corresponder, False se não """ return CRYPTO.verify(plain_senha_api, hashed_senha_api) - # Gera o hash de uma senha fornecida def hash_senha_api(plain_senha_api: str) -> str: """ diff --git a/actions/system/exceptions.py b/actions/system/exceptions.py index ec151c9..741dbb5 100644 --- a/actions/system/exceptions.py +++ b/actions/system/exceptions.py @@ -1,4 +1,4 @@ # exceptions.py class BusinessRuleException(Exception): def __init__(self, message: str): - self.message = message \ No newline at end of file + self.message = message diff --git a/actions/system/handlers.py b/actions/system/handlers.py index 3e2cfe4..bbd8834 100644 --- a/actions/system/handlers.py +++ b/actions/system/handlers.py @@ -7,80 +7,64 @@ from fastapi.exceptions import RequestValidationError from fastapi.responses import JSONResponse from starlette.exceptions import HTTPException as StarletteHTTPException -from actions.system.exceptions import BusinessRuleException from actions.log.log import Log +from actions.system.exceptions import BusinessRuleException def register_exception_handlers(app): - def __init__ (self): + def __init__(self): log = Log() @app.exception_handler(BusinessRuleException) - async def business_rule_exception_handler(request: Request, exc: BusinessRuleException): + async def business_rule_exception_handler( + request: Request, exc: BusinessRuleException + ): + + response = {"status": "422", "error": "Regra de negócio", "detail": exc.message} - response = { - "status": "422", - "error": "Regra de negócio", - "detail": exc.message - } - # Salva o log em disco - Log.register(response, 'storage/temp/business_rule_exception_handler.json') + Log.register(response, "storage/temp/business_rule_exception_handler.json") - return JSONResponse( - status_code=422, - content=response - ) + return JSONResponse(status_code=422, content=response) @app.exception_handler(StarletteHTTPException) async def http_exception_handler(request: Request, exc: StarletteHTTPException): response = { - "status": exc.status_code, - "error": "HTTP Error", - "detail": exc.detail - } + "status": exc.status_code, + "error": "HTTP Error", + "detail": exc.detail, + } # Salva o log em disco - Log.register(response, 'storage/temp/http_exception_handler.json') + Log.register(response, "storage/temp/http_exception_handler.json") - return JSONResponse( - status_code=exc.status_code, - content=response - ) + return JSONResponse(status_code=exc.status_code, content=response) @app.exception_handler(RequestValidationError) - async def validation_exception_handler(request: Request, exc: RequestValidationError): + async def validation_exception_handler( + request: Request, exc: RequestValidationError + ): - response = { - "status": 400, - "error": "Erro de validação", - "detail": exc.errors() - } + response = {"status": 400, "error": "Erro de validação", "detail": exc.errors()} # Salva o log em disco - Log.register(response, 'storage/temp/validation_exception_handler.json') + Log.register(response, "storage/temp/validation_exception_handler.json") - return JSONResponse( - status_code=400, - content=response - ) + return JSONResponse(status_code=400, content=response) @app.exception_handler(Exception) async def global_exception_handler(request: Request, exc: Exception): response = { - "status": 500, - "error": "Erro Interno do Servidor", - "type": type(exc).__name__, - "message": str(exc), - "trace": traceback.format_exc() - } + "status": 500, + "error": "Erro Interno do Servidor", + "type": type(exc).__name__, + "message": str(exc), + "trace": traceback.format_exc(), + } # Salva o log em disco - Log.register(response, 'storage/temp/validation_exception_handler.json') + Log.register(response, "storage/temp/validation_exception_handler.json") - return JSONResponse( - status_code=500, - content=response - ) + return JSONResponse(status_code=500, content=response) diff --git a/actions/validations/cep.py b/actions/validations/cep.py index 025eefc..21bf1c4 100644 --- a/actions/validations/cep.py +++ b/actions/validations/cep.py @@ -1,8 +1,7 @@ - class CEP: @staticmethod def validate(data: str) -> bool: # Valida e retorna a informação - return len(data) == 8 \ No newline at end of file + return len(data) == 8 diff --git a/actions/validations/cnpj.py b/actions/validations/cnpj.py index 2d5b190..8f48707 100644 --- a/actions/validations/cnpj.py +++ b/actions/validations/cnpj.py @@ -7,7 +7,7 @@ class CNPJ: def validate(data: str) -> bool: # Remove caracteres não numéricos - data = re.sub(r'\D', '', data) + data = re.sub(r"\D", "", data) # Verifica se tem 14 dígitos if len(data) != 14: @@ -21,7 +21,7 @@ class CNPJ: def calcular_digito(data, peso): soma = sum(int(a) * b for a, b in zip(data, peso)) resto = soma % 11 - return '0' if resto < 2 else str(11 - resto) + return "0" if resto < 2 else str(11 - resto) # Primeiro dígito verificador peso1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] diff --git a/actions/validations/cpf.py b/actions/validations/cpf.py index 2083800..6b06390 100644 --- a/actions/validations/cpf.py +++ b/actions/validations/cpf.py @@ -6,7 +6,7 @@ class CPF: @staticmethod def is_valid_cpf(data: str) -> bool: # Remove caracteres não numéricos - data = re.sub(r'\D', '', data) + data = re.sub(r"\D", "", data) # Verifica se tem 11 dígitos if len(data) != 11: @@ -20,7 +20,7 @@ class CPF: def calcular_digito(digitos, peso): soma = sum(int(a) * b for a, b in zip(digitos, peso)) resto = soma % 11 - return '0' if resto < 2 else str(11 - resto) + return "0" if resto < 2 else str(11 - resto) # Primeiro dígito verificador peso1 = range(10, 1, -1) @@ -31,4 +31,4 @@ class CPF: digito2 = calcular_digito(data[:10], peso2) # Verifica se os dígitos batem - return data[-2:] == digito1 + digito2 \ No newline at end of file + return data[-2:] == digito1 + digito2 diff --git a/actions/validations/email.py b/actions/validations/email.py index 4839b95..9786935 100644 --- a/actions/validations/email.py +++ b/actions/validations/email.py @@ -6,4 +6,4 @@ class Email: @staticmethod def is_valid_email(email: str) -> bool: """Check if email has a valid structure""" - return bool(re.match(r"^[\w\.-]+@[\w\.-]+\.\w+$", email)) \ No newline at end of file + return bool(re.match(r"^[\w\.-]+@[\w\.-]+\.\w+$", email)) diff --git a/actions/validations/phone.py b/actions/validations/phone.py index b509c7f..07b9885 100644 --- a/actions/validations/phone.py +++ b/actions/validations/phone.py @@ -1,4 +1,3 @@ - class Phone: @staticmethod @@ -9,4 +8,4 @@ class Phone: @staticmethod def validate_telephone(data: str) -> bool: # Verifica e retorna se o numero de telefone é igual a 11 - return len(data) == 10 \ No newline at end of file + return len(data) == 10 diff --git a/actions/validations/text.py b/actions/validations/text.py index 51438bc..20fd338 100644 --- a/actions/validations/text.py +++ b/actions/validations/text.py @@ -7,16 +7,15 @@ class Text: # Remove as mascaras de números @staticmethod def just_numbers(data: str) -> str: - """ Mantêm apenas os numeros """ + """Mantêm apenas os numeros""" data = re.sub(r"[^\d]", "", data) return data - + # Verifica se um e-mail é válido @staticmethod def is_valid_email(email: str) -> bool: """Check if email has a valid structure""" return bool(re.match(r"^[\w\.-]+@[\w\.-]+\.\w+$", email)) - """ Sanitiza entradas de texto contra XSS e SQL Injection básicos. @@ -25,6 +24,7 @@ class Text: - Remove padrões suspeitos de XSS e SQL Injection - Normaliza múltiplos espaços em um só """ + @staticmethod def sanitize_input(data: str) -> str: @@ -41,23 +41,36 @@ class Text: data = re.sub(r"\s+", " ", data) # 4) Remove tags