Skip to content

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

Image

Esta nova versão introduz o seguinte ficheiro [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 determinados caminhos relativos
    root_dir = "C:/Data/st-2020/dev/python/cours-2020/python3-flask-2020/impots"

    # dependências da aplicação
    absolute_dependencies = [
        f"{root_dir}/v01/shared",
    ]

    # configuração da aplicação
    config = {
        # caminho absoluto do ficheiro dos contribuintes
        "taxpayersFilename"f"{script_dir}/../data/taxpayersdata.txt",
        # caminho absoluto do ficheiro 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 que está a ser executado, neste caso o script [config.py]. Obtém-se, assim, o nome absoluto da pasta [main]. É também esta pasta que contém o script principal [main.py];
  • linha 8: quando um ficheiro referenciado não pertence à pasta da aplicação, não se utilizará [script_dir] para o localizar, mas sim [root_dir]. Esta linha deverá ser alterada assim que a aplicação mudar de localização no sistema de ficheiros;
  • linhas 11-13: enumeram-se os nomes absolutos de todas as pastas que devem estar no Python Path para que a aplicação funcione. Na linha 12, faz-se referência à pasta [shared] da versão 1 do exercício da aplicação;
  • linhas 16-21: definem a configuração da aplicação num dicionário [config]. Aqui, indicam-se os caminhos absolutos dos ficheiros de texto manipulados pela aplicação. Para tal, utiliza-se [script_dir] que, recorde-se, designa aqui a pasta [main];
  • linhas 24-25: define-se o Python Path necessário para a aplicação;

O script principal [main.py] é o seguinte:


# configuramos a aplicação
import config

config = config.configure()

# o syspath está configurado — já é possível efetuar as importações
from impôts_module_01 import calcul_impôt, record_results, get_taxpayers_data

# ficheiro dos contribuintes
taxpayers_filename = config['taxpayersFilename']
# ficheiro 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 devolve 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 guardados
    record_results(results_filename, results)
except BaseException as erreur:
    # podem ocorrer vários erros: ficheiro inexistente, conteúdo do ficheiro incorreto
    # é exibido o erro e a aplicação é encerrada
    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, nomeadamente, a pasta [shared], que contém o script [impôts_module_01]. Deste script, importam-se as funções necessárias;
  • linhas 9-12: os nomes dos ficheiros utilizados encontram-se na configuração. Trata-se de nomes absolutos;
  • linhas 14-35: aqui está o código da versão 1;

A versão 1 não funcionava numa consola Python. Nessa mesma consola, a versão 2 apresenta os seguintes resultados:

(venv) C:\Data\st-2020\dev\python\cours-2020\python3-flask-2020\impots\v02>python main/main.py
Travail terminé...

Já não se verifica qualquer erro.