Executando verificação de segurança...
8

Criei uma ferramenta CLI em Python pra me ajudar no dia a dia (e pra aprender mais)

Pessoal,

Sabe aquelas tarefas repetitivas que a gente faz quase todo dia como dev? Criar a mesma estrutura de pastas pra um projeto novo, documentar a arquitetura de um diretório que já existe, ou juntar vários arquivos de código pra mandar pra uma IA analisar... Pois é.

Eu venho do mundo do C# e .NET, e sempre resolvi meus problemas por lá. Mas eu queria mergulhar mais fundo em Python, criar algo prático, que fosse útil de verdade. Foi daí que nasceu o caze-tools, um pequeno canivete suíço em linha de comando que estou construindo pra me ajudar nessas pequenas tarefas.

A ideia é simples: ter um comando rápido, que eu chamei de cz, pra automatizar essas rotinas. Queria compartilhar um pouco do que ele já faz.

Pra começar: Criando estruturas de projeto num piscar de olhos com o mkstruct

Quantas vezes você já não teve que criar a mesma estrutura básica de pastas e arquivos __init__.py pra um projeto Python? Eu fazia isso na mão toda vez.

Aí pensei: e se eu pudesse só "desenhar" a estrutura num arquivo de texto e mandar a ferramenta criar tudo pra mim? Melhor, se um llm me desse essa estrutura e eu apenas rodasse um comando?

Foi assim que surgiu o cz mkstruct. Você cria um arquivo, tipo um estrutura.md, com o seguinte conteúdo:

meu-projeto/
├── src/
│   ├── __init__.py
│   └── app/
│       ├── __init__.py
│       └── routes.py
├── tests/
│   └── test_app.py
└── README.md

E aí é só rodar o comando:

cz mkstruct estrutura.md

Pronto! A ferramenta lê esse "desenho" e cria todas as pastas e arquivos vazios no lugar certo. Simples assim. Chega de mkdir e touch repetitivos.

E estou usando isso não apenas para projetos python em que estou estudando, mas estou usando em projetos novos (de estudo também) para asp.net e .net core.

E o caminho inverso? O ls-struct

Beleza, criar a estrutura é útil. Mas e quando você pega um projeto que já existe e precisa documentar a estrutura dele? Fazer aquela árvore de diretórios na mão é um trabalho chato demais.

Pra isso, criei o cz ls-struct. Ele faz exatamente o contrário: lê um diretório e gera aquela representação em árvore.

# Roda na pasta do projeto e salva a saída em um arquivo
cz ls-struct -o documentacao.md

Isso gera um arquivo documentacao.md com a árvore de diretórios bonitinha, pronta pra colar no seu README.md.

Uma jornada de aprendizado (e um convite)

Como eu disse, venho de um background diferente, e esse projeto é, acima de tudo, uma forma de eu aprender Python de verdade, entendendo como empacotar um projeto, como criar uma CLI com a biblioteca click, e como interagir com o sistema de arquivos. É um projeto pra resolver um problema meu, mas também pra estudar.

O código é relativamente simples e está todo aberto no GitHub. Eu adoraria receber feedbacks, sugestões de novos comandos ou até mesmo contribuições de quem estiver a fim de ajudar. Se você tem uma tarefa repetitiva que acha que poderia ser automatizada, abre uma issue lá!

Espero que esse relato inspire alguém. Às vezes, o melhor jeito de aprender uma tecnologia nova é criando uma ferramenta pra coçar uma coceira sua.

O projeto está aqui:
https://github.com/dsscaze/caze-tools

Fiquem à vontade para clonar, testar e dar suas opiniões.

Um grande abraço

Carregando publicação patrocinada...
4

Muito bacana. Poderia expandir para outras linguagens, usando templates baseados nas melhores práticas de cada linguagem. Nem todas as linguagens possuem uma ferramenta como cargo ou uv.

1

Isso seria maravilhoso, algo como

mkstruct <template>

Com template podendo ser algo como

  • python
  • asp core
  • web api

Quem sabe você poder criar seus próprios templates

3
1

Legal, eu pensei exatamente nisso.

Eu fui criar uma solução em .net core, e tinha uma estrutura de pastas em mente, pedi pro chatgpt me devolver um arquivo markdown.

Rodei o comando mkstruct e pronto!
Depois ja fui direto pra o projeto .net iniciar cada projeto em si.

Claro que isso é muito básico ainda, mas esse projeto deve evoluir sim.

Se quiser sugerir algum comando de exemplo, eu ficarei muito grato

-3

Mania do povo querer reinventar a roda.

Catálogo de templates ja existe, um exemplo disso é o backstage.io, que suporta qualquer tipo de template e serve pra qualquer linguagem. Na verdade serve até pra documentos.

Nele voce pode criar formulários que coletam informações que são injetadas diretamente no template.

1

Qual o problema de reinventar a roda às vezes? Pode ser bem divertido e útil, ainda mais no caso do rapz, o próprio título menciona: a ferramenta foi criada para resolver uma dor pessoal dele e também para aprendizado

1
1

"Quem conta um conto aumenta um ponto". Acho que vale a pena. A ferramenta uv faz sucesso hoje, mas é uma melhoria de Webpack, que por sua vez é uma melhoria do Gulp/Grunt. Não dá pra satisfazer todo mundo, mas fazendo algo diferente, ainda que mais do mesmo, acaba ajudando alguém.

1
2

Sim, pode gerar mesmo.

O comando longo é caze-tools, e eu pesquisei antes de criar o comando curto e nao achei nenhuma referência pra cz, por isso deixei cz.

Vou melhorar isso antes de publicar o pacote final.

Obrigado pelo alerta.

1
1