A validação do arquivo zip é realizado por um aplicativo externo, o
Validador,
e gerenciado por .private.upload_file.process.py
que consta dos seguintes módulos:
Ao lado do nome da unidade é mostrado [módulo python e o Código Base de Erro (
CBE), ver.helpers.error_helper.py]
-
- Cria o formulário para o usuário informar:
- Nome do arquivo
- ou
- Link a um arquivo em Google Drive
- Valida que seja enviado somente um dado
- Se enviou um link (download)
- Valida o link
- Faz download do arquivo na pasta apropriada (ver estrutura de pastas)
- Se enviou um arquivo (upload)
- Valida o nome, tamanho
- Revisa o tipo de conteúdo (que é salvo localmente durante o registro)
- Inicia o process
- Cria o formulário para o usuário informar:
-
- Chama os módulos sequencialmente:
- Revisar
- Registrar no DB
- Descompactar
- Submeter a validação
- Enviar resultado
- Cuida dos parâmetros e retornos entre eles
- Supervisiona o andamento de cada passo
- Em caso de erro:
- Se o processo ja foi registrado, grava a mensagens, códigos, exceções e módulo ativo
- Abandona a iteração
- Informa ao usuário
- Fecha o registro do processo, anotando as mensagens de erro
- Em caso de sucesso:
- Fecha o registro do processo, anotando as mensagens recebidas
- Atualiza o formulário do usuário com o resultado
- Se ocorrer excepção durante a execução de um módulos, é somado
RECEIVE_FILE_EXCEPTION100 ao código de erro. Assim, os possíveis códigos de erro são:RECEIVE_FILE_*=> [200...270] + 100
- Chama os módulos sequencialmente:
-
- Corrobora a presencia das configurações:
config.pyconfiguração geralconfig_upload.pyespecifica do processo
- Revisa as variáveis e o arquivos necessários
- Examina a existência das pastas e as criar caso não existam
- Valida o nome, tamanho e extensão do arquivo
- Verifica a disponibilidade dos scripts de execução do
Validatore se eles estão atualizados - Confirma se os dados do usuário estão completos, incluindo e-mail
- Corrobora a presencia das configurações:
-
- Cria o ticket (chave única) e o número de protocolo do processo
- Se enviou um arquivo (upload), salva o conteúdo localmente.
- Coleta informações do arquivo como
crc32e tamanho - Insere registro na tabela (
user_data_files) com os dados do usuário e do arquivo submetido
-
- Valida se é o arquivo está no formato
zip - Extrai o conteúdo na pasta do usuário que e compartilhada com o aplicativo validador.
- Valida se é o arquivo está no formato
[Projeto]
│
├── data_validate
│ ├── main.py > inicia a validação
│ │
: :
:
├── canoa
: ├── main.py > prepara e inicia o App
├── carranca > a pasta principal do App
│ ├── shared.py » variáveis compartilhadas
│ └── ...
├── user_files > contem os arquivos dos usuários
│ ├── downloaded » baixados da nuvem
│ │ ├── cod_1 · do usuário 1
│ │ ├── cod_2 · do usuário 2
│ │ :
│ │ └── cod_N · do usuário n
│ └── uploaded » subidos da maquina do usuário
│ │ ├── cod_1 · do usuário 1
│ │ ├── cod_2 · do usuário 2
│ │ :
│ │ └── cod_N · do usuário n
Para manter a privacidade e a segurança das informações confidenciais, são usadas
variáveis de ambiente (envvars Environment Variables). As principais são:
CANOA_APP_MODEseleciona o modo da aplicação, selecionando configurações diferentes. Atualmente temosProductioneDebug. Para maiores detalhes e novas configurações ver o módulo./config.py.CANOA_DEBUGconfigura o modo da aplicação:FalseouTrue. Para ativar o modo depuração em Flask, deve usarFLASK_DEBUG;CANOA_EMAIL_API_KEYA chave da API para o envio de e-mails (o app usa sendgrid);CANOA_EMAIL_ORIGINATORO endereço de e-mail do remetente, quem envia correios em nome de Canoa e está registrado na API de envio;CANOA_SQLALCHEMY_DATABASE_URIO URI do banco de dados que deve ser usado para a conexão usando Flask−SQLAlchemy;
Qualquer atributo da configuração base (BaseConfig em .config.py) pode ser configurado por meio de uma envvar.
Basta adicionar o nome do atributo antecedido com CANOA na lista (ver .config.get_os_env)
É possível atribuir um valor fixo para a envvar SECRET_KEY,
mas se é deixado em branco, o sistema gerara um nova valor a cada variação da versão do aplicativo.