Nesse projeto, irei:
- irei aplicar paradigmas de programação
- aplicar conceitos de OO na prática, criando classes e instâncias
- Leitura e escria de arquivos
Neste projeto irei desenvolver funçõesq ue leem e escrevem em aquivos JSON e CSV mas utilizando a Programação Orientada a Objetos! irei implementar um gerador de relatórios que recebe como entrada arquivos com dados de um estoque e gera, como saída, um relatório acerca destes dados.
Esses dados de estoque poderão ser obtidos de diversas fontes:
-
Através da importação de um arquivo
CSV
; -
Através da importação de um arquivo
JSON
; -
Através da importação de um arquivo
XML
;
Além disso, o relatório final deverá poder ser gerado em duas versões: simples e completa.
Este repositório já contém um template com a estrutura de diretórios e arquivos, tanto de código quanto de teste criados. Veja abaixo:
.
├── dev-requirements.txt
├── inventory_report
│ ├── data
│ │ ├── inventory.csv
│ │ ├── inventory.json
│ │ └── inventory.xml
│ ├── importer
│ │ ├── csv_importer.py
│ │ ├── importer.py
│ │ ├── json_importer.py
│ │ └── xml_importer.py
│ ├── inventory
│ │ ├── inventory_iterator.py
│ │ └── inventory.py
│ ├── main.py
│ └── reports
│ ├── complete_report.py
│ └── simple_report.py
├── pyproject.toml
├── README.md
├── requirements.txt
├── setup.cfg
├── setup.py
└── tests
├── __init__.py
├── test_complete_report.py
├── test_csv_importer.py
├── test_importer.py
├── test_inventory.py
├── test_json_importer.py
├── test_main.py
├── test_simple_report.py
└── test_xml_importer.py
Apesar do projeto já possuir uma estrutura base, você quem deve implementar as classes. Novos arquivos podem ser criados conforme a necessidade.
Para executar os testes, lembre-se de primeiro criar e ativar o ambiente virtual, além de também instalar as dependências do projeto. Isso pode ser feito através dos comandos:
$ python3 -m venv .venv
$ source .venv/bin/activate
$ python3 -m pip install -r dev-requirements.txt
O arquivo dev-requirements.txt
contém todos as dependências que serão utilizadas no projeto, ele está agindo como se fosse um package.json
de um projeto Node.js
. Com as dependências já instaladas, para executar os testes basta usar o comando:
$ python3 -m pytest
Se quiser saber mais sobre a instalação de dependências com pip
, veja esse artigo: https://medium.com/python-pandemonium/better-python-dependency-and-package-management-b5d8ea29dff1
Para verificar se você está seguindo o guia de estilo do Python corretamente, você pode executá-lo com o seguinte comando:
$ python3 -m flake8
Arquivos de exemplo nos três formatos de importação estão disponíveis no diretório data
dentro do diretório inventory_report
.
Os arquivos CSV são separados por vírgula, como no exemplo abaixo:
id,nome_do_produto,nome_da_empresa,data_de_fabricacao,data_de_validade,numero_de_serie,instrucoes_de_armazenamento
1,Nicotine Polacrilex,Target Corporation,2020-02-18,2022-09-17,CR25 1551 4467 2549 4402 1,morbi ut odio cras mi pede malesuada in imperdiet et commodo vulputate justo in blandit
2,fentanyl citrate,"Galena Biopharma, Inc.",2019-12-06,2022-12-25,FR29 5951 7573 74OY XKGX 6CSG D20,bibendum morbi non quam nec dui luctus rutrum nulla tellus in
3,NITROUS OXIDE,Keen Compressed Gas Co. Inc.,2019-12-22,2023-11-07,CZ09 8588 0858 8435 9140 2695,ipsum dolor sit amet consectetuer adipiscing elit proin risus praesent
Os arquivos JSON seguem o seguinte modelo:
[
{
"id":1,
"nome_do_produto":"CALENDULA OFFICINALIS FLOWERING TOP, GERANIUM MACULATUM ROOT, SODIUM CHLORIDE, THUJA OCCIDENTALIS LEAFY TWIG, ZINC, and ECHINACEA ANGUSTIFOLIA",
"nome_da_empresa":"Forces of Nature",
"data_de_fabricacao":"2020-07-04",
"data_de_validade":"2023-02-09",
"numero_de_serie":"FR48 2002 7680 97V4 W6FO LEBT 081",
"instrucoes_de_armazenamento":"in blandit ultrices enim lorem ipsum dolor sit amet consectetuer adipiscing elit proin interdum mauris non ligula pellentesque ultrices phasellus"
}
]
Os arquivos XML seguem o seguinte modelo:
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
<record>
<id>1</id>
<nome_do_produto>valsartan and hydrochlorothiazide</nome_do_produto>
<nome_da_empresa>Lake Erie Medical & Surgical Supply DBA Quality Care Products LLC</nome_da_empresa>
<data_de_fabricacao>2019-10-27</data_de_fabricacao>
<data_de_validade>2022-08-31</data_de_validade>
<numero_de_serie>MT08 VVDN 2131 9NFL C1JG KTDV RS1L LOZ</numero_de_serie>
<instrucoes_de_armazenamento>at lorem integer tincidunt ante vel ipsum praesent blandit lacinia erat</instrucoes_de_armazenamento>
</record>
</dataset>
- Clone o repositório
git clone
.- Entre na pasta do repositório que você acabou de clonar:
- Crie o ambiente virtual para o projeto
python3 -m venv .venv && source .venv/bin/activate
Nota: após terminar o trabalho, para desativar o ambiente virtual digite deactivate
- Instale as dependências
python3 -m pip install -r dev-requirements.txt