Metadata-Version: 2.4
Name: pymodularizer
Version: 1.0.3
Summary: Gerador de projetos Python modularizados
Author: Hermes A. V. Urquijo
Author-email: "Hermes A. V. Urquijo" <hvurquijo@gmail.com>
License: MIT License
        
        Copyright (c) 2025 Hermes A. V. Urquijo <hvurquijo@gmail.com>
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
        
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: typer[all]
Dynamic: license-file

# 🛠️ PyModularizer - Gerador de Projetos Python Modularizados

`PyModularizer` é uma ferramenta de linha de comando para gerar rapidamente estruturas de projetos Python — desde scripts simples até aplicações modulares com FastAPI ou Flask. Ideal para acelerar a criação de pacotes reutilizáveis, APIs e sistemas organizados por módulos.

---

## ✨ Recursos

- Geração de estruturas de projeto prontas para uso
- Suporte a múltiplos tipos: script simples, pacote, aplicação modular, API com FastAPI ou Flask
- Criação de novos módulos com um único comando
- Estrutura compatível com boas práticas de organização e testes
- CLI interativa via [Typer](https://typer.tiangolo.com/)
- Pronto para publicação no PyPI

---

## 🚀 Instalação

Você pode instalar diretamente via PyPI:

```bash
pip install pymodularizer
```

Ou localmente, após clonar o repositório:

```bash
git clone https://github.com/havurquijo/pymodularizer.git
cd pymodularizer
pip install .
```

---

## ⚙️ Uso

### Criar um novo projeto

```bash
pymodularizer new --name my_app --type modular_application
```
ou 

```bash
pym new --name my_app --type modular_application
```

Opções disponíveis:

| Opção         | Descrição                                 | Padrão       |
|---------------|--------------------------------------------|--------------|
| `--name`      | Nome do projeto                            | `meu_projeto` |
| `--version`   | Versão inicial do projeto                  | `0.1.0`       |
| `--src`       | Nome da pasta de código fonte              | `src`         |
| `--main`      | Nome do arquivo principal                  | `main.py`     |
| `--type`      | Tipo do projeto (`custom`, `simple_script`, etc.) | `custom` |

### Adicionar um módulo

```bash
pym module meu_modulo --path src
```

Cria um módulo com estrutura básica dentro da pasta especificada (`src` por padrão).

### Listar tipos de projetos disponíveis

```bash
pym list_templates
```

Mostra todos os tipos de projetos disponíveis que podem ser usados com o comando `new`.

---

## 🧱 Tipos de projetos disponíveis

```bash
pym list_templates
```

A lista de tipos de projetos é lida automaticamente dos arquivos JSON na pasta `models`.

| Tipo                | Descrição (exemplo)                                              |
|---------------------|------------------------------------------------------------------|
| simple_script       | Projeto com um único script e módulos auxiliares                 |
| python_package      | Pacote instalável com módulos organizados                        |
| modular_application | Aplicação modular com serviços, módulos e configuração separada  |
| fastapi_api         | Estrutura pronta para uma API com FastAPI                        |
| flask_api           | Estrutura pronta para uma API com Flask                          |
| kyvi_app            | Estrutura para aplicações desktop com Kivy                       |
| custom              | Estrutura personalizada definida pelo usuário                    |

> Use `pym list_templates` para ver a lista completa e atualizada conforme os modelos JSON.

---

## 🧪 Testes

Testes automatizados usam `pytest`. Execute com:

```bash
pytest
```

> As funções são testadas sem criar arquivos reais no sistema, usando `tmp_path`.

---

## 📂 Estrutura esperada

Exemplo de estrutura gerada:

```
my_app/
├── src/
│   ├── main.py
│   ├── modules/
│   ├── services/
│   └── config/
├── tests/
├── README.md
├── setup.cfg
├── pyproject.toml
└── requirements.txt
```

Exemplo de estrutura gerada para um projeto Flask:

```
.
flask_api/
│
├── app/
│   ├── __init__.py           # Inicialização da aplicação Flask
│   ├── app.py                # Ponto de entrada da aplicação
│   ├── api/                  # Módulos de API (versões e endpoints)
│   │   └── v1/
│   │       └── example_api.py  # Exemplo de endpoint RESTX
│   ├── config/               # Configurações da aplicação
│   ├── models/               # Modelos de dados
│   ├── routes/               # Rotas adicionais
│   ├── services/             # Lógica de negócio/serviços
│   ├── static/               # Arquivos estáticos (CSS, JS, imagens)
│   ├── templates/            # Templates HTML (Jinja2)
│   └── utils/                # Funções utilitárias
│
├── tests/                    # Testes automatizados (pytest)
│   ├── test_example_api.py   # Testes dos endpoints de exemplo
│   └── test_main.py          # Teste da rota principal
│
├── requirements.txt          # Dependências do projeto
├── pyproject.toml            # Configuração de build
├── setup.cfg                 # Configuração adicional
└── README.md                 # Este arquivo
```
---

## 📦 Publicação no PyPI

Se você quiser clonar e adaptar para publicar seu próprio pacote, basta configurar:

- `pyproject.toml`
- `setup.cfg`
- `README.md`

E executar:

```bash
python -m build
python -m twine upload dist/*
```

---

## 🤝 Contribuindo

Pull requests são bem-vindos! Sinta-se à vontade para sugerir novos tipos de projeto, comandos e melhorias.

---

## 📝 Licença

Distribuído sob a licença MIT. Veja `LICENSE` para mais detalhes.
