10. Exercício prático: versão 2

Esta nova versão introduz o seguinte arquivo [config.py]:
def configure():
import os
# caminho absoluto da pasta deste script
script_dir = os.path.dirname(os.path.abspath(__file__))
# raiz a partir da qual serão calculados alguns caminhos relativos
root_dir = "C:/Data/st-2020/dev/python/cours-2020/python3-flask-2020/impots"
# dependências do aplicativo
absolute_dependencies = [
f"{root_dir}/v01/shared",
]
# configuração do aplicativo
config = {
# caminho absoluto do arquivo dos contribuintes
"taxpayersFilename": f"{script_dir}/../data/taxpayersdata.txt",
# caminho absoluto do arquivo de resultados
"resultsFilename": f"{script_dir}/../data/résultats.txt"
}
# atualização do syspath
from myutils import set_syspath
set_syspath(absolute_dependencies)
# recupera-se a configuração
return config
Comentários
- linha 5: obtém-se o nome absoluto da pasta que contém o script em execução, neste caso, o script [config.py]. Assim, obtém-se o nome absoluto da pasta [main]. Essa mesma pasta também contém o script principal [main.py];
- linha 8: quando um arquivo referenciado não pertence à pasta do aplicativo, não se utilizará [script_dir] para localizá-lo, mas sim [root_dir]. Essa linha deverá ser alterada assim que o aplicativo mudar de local no sistema de arquivos;
- linhas 11-13: listam-se os nomes absolutos de todas as pastas que devem estar no Python Path para que o aplicativo funcione. Na linha 12, é referenciada a pasta [shared] da versão 1 do exercício do aplicativo;
- linhas 16-21: definem a configuração do aplicativo em um dicionário [config]. Aqui, registramos os caminhos absolutos dos arquivos de texto manipulados pela aplicação. Para isso, usamos [script_dir], que, vale lembrar, designa aqui a pasta [main];
- linhas 24-25: define-se o Python Path necessário para o aplicativo;
O script principal [main.py] é o seguinte:
# configurando o aplicativo
import config
config = config.configure()
# o syspath está configurado — já é possível fazer as importações
from impôts_module_01 import calcul_impôt, record_results, get_taxpayers_data
# arquivo dos contribuintes
taxpayers_filename = config['taxpayersFilename']
# arquivo de resultados
results_filename = config['resultsFilename']
# código
try:
# leitura dos dados dos contribuintes
taxpayers = get_taxpayers_data(taxpayers_filename)
# lista de resultados
results = []
# cálculo do imposto dos contribuintes
for taxpayer in taxpayers:
# o cálculo do imposto retorna um dicionário de chaves
# ['marié', 'enfants', 'salaire', 'impôt', 'surcôte', 'décôte', 'réduction', 'taux']
result = calcul_impôt(taxpayer['marié'], taxpayer['enfants'], taxpayer['salaire'])
# o dicionário é adicionado à lista de resultados
results.append(result)
# os resultados são gravados
record_results(results_filename, results)
except BaseException as erreur:
# podem ocorrer diversos erros: arquivo ausente, conteúdo incorreto do arquivo
# exibe-se o erro e encerra-se o aplicativo
print(f"L'erreur suivante s'est produite : {erreur}]\n")
finally:
print("Travail terminé...")
Comentários
- linhas 1-4: a aplicação é configurada;
- linha 7: sabe-se que, após a configuração, o Python Path está correto e contém, entre outros, a pasta [shared], que contém o script [impôts_module_01]. Desse script, importam-se as funções necessárias;
- linhas 9-12: os nomes dos arquivos utilizados são encontrados na configuração. São nomes absolutos;
- linhas 14-35: aqui está o código da versão 1;
A versão 1 não funcionava em um console Python. Nesse mesmo console, a versão 2 apresenta os seguintes resultados:
Agora não ocorre mais nenhum erro.