1 changed files with 263 additions and 0 deletions
@ -0,0 +1,263 @@ |
|||
# Desenvolvimento – Como contribuir |
|||
|
|||
Para começar, você pode ver as formas básicas de [ajudar o FastAPI e obter ajuda](help-fastapi.md){.internal-link target=_blank}. |
|||
|
|||
## Desenvolvimento |
|||
|
|||
Se você já clonou o <a href="https://github.com/fastapi/fastapi" class="external-link" target="_blank">repositório do FastAPI</a> e deseja se aprofundar no código, aqui estão algumas orientações para configurar seu ambiente. |
|||
|
|||
### Instalar dependências |
|||
|
|||
Crie um ambiente virtual e instale as dependências necessárias com <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">`uv`</a>: |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ uv sync --extra all |
|||
|
|||
---> 100% |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
Isso irá instalar todas as dependências e a versão local do FastAPI no seu ambiente virtual. |
|||
|
|||
### Usando seu FastAPI local |
|||
|
|||
Se você criar um arquivo Python que importe e utilize o FastAPI, e executá-lo com o Python do seu ambiente local, ele usará o código fonte local do FastAPI que você clonou. |
|||
|
|||
E, se você atualizar esse código fonte local do FastAPI, ao executar novamente o arquivo Python, ele utilizará a versão atualizada do FastAPI que você acabou de editar. |
|||
|
|||
Dessa forma, você não precisa “instalar” sua versão local para testar cada alteração. |
|||
|
|||
/// note | Detalhes técnicos |
|||
|
|||
Isso só acontece quando você instala usando `uv sync --extra all` em vez de executar `pip install fastapi` diretamente. |
|||
|
|||
Isso acontece porque `uv sync --extra all` instalará a versão local do FastAPI no modo “editável” por padrão. |
|||
|
|||
/// |
|||
|
|||
### Formatar o código |
|||
|
|||
Há um script que você pode executar para formatar e limpar todo o seu código: |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ bash scripts/format.sh |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
Ele também organizará automaticamente todas as importações. |
|||
|
|||
## Testes |
|||
|
|||
Há um script que você pode executar localmente para testar todo o código e gerar relatórios de cobertura em HTML: |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ bash scripts/test-cov-html.sh |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
Esse comando gera o diretório `./htmlcov/`. Se você abrir o arquivo `./htmlcov/index.html` no navegador, poderá explorar interativamente as partes do código cobertas pelos testes e verificar se há alguma região sem cobertura. |
|||
|
|||
## Documentação |
|||
|
|||
Primeiro, certifique-se de que seu ambiente esteja configurado conforme descrito acima. Isso instalará todas as dependências. |
|||
|
|||
### Documentação ao vivo |
|||
|
|||
Durante o desenvolvimento local, há um script que constrói o site e verifica alterações, recarregando-o automaticamente em tempo real: |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ python ./scripts/docs.py live |
|||
|
|||
<span style="color: green;">[INFO]</span> Serving on http://127.0.0.1:8008 |
|||
<span style="color: green;">[INFO]</span> Start watching changes |
|||
<span style="color: green;">[INFO]</span> Start detecting changes |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
Ele disponibilizará a documentação em http://127.0.0.1:8008. |
|||
|
|||
Dessa forma, você pode editar os arquivos da documentação ou do código fonte e ver as alterações em tempo real. |
|||
|
|||
/// tip |
|||
|
|||
Como alternativa, você pode executar manualmente os mesmos passos que o script realiza. |
|||
|
|||
Entre no diretório do idioma, para a documentação principal em inglês, use `docs/en/`: |
|||
|
|||
```console |
|||
$ cd docs/en/ |
|||
``` |
|||
|
|||
Em seguida, execute `mkdocs` nesse diretório: |
|||
|
|||
```console |
|||
$ mkdocs serve --dev-addr 127.0.0.1:8008 |
|||
``` |
|||
|
|||
/// |
|||
|
|||
#### CLI do Typer (opcional) |
|||
|
|||
As instruções aqui mostram como usar diretamente o script em `./scripts/docs.py` diretamente com o interpretador `python`. |
|||
|
|||
Mas você também pode usar o <a href="https://typer.tiangolo.com/typer-cli/" class="external-link" target="_blank">Typer CLI</a> e obter autocomplete de comandos no terminal após instalar o suporte a completion. |
|||
|
|||
Se você instalar o Typer CLI, poderá instalar o completion com: |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ typer --install-completion |
|||
|
|||
zsh completion installed in /home/user/.bashrc. |
|||
Completion will take effect once you restart the terminal. |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
### Estrutura da documentação |
|||
|
|||
A documentação utiliza o <a href="https://www.mkdocs.org/" class="external-link" target="_blank">MkDocs</a>. |
|||
|
|||
E há ferramentas/scripts adicionais para lidar com as traduções em `./scripts/docs.py`. |
|||
|
|||
/// tip |
|||
|
|||
Você não precisa ver o código em `./scripts/docs.py`, basta usá-lo pela linha de comando. |
|||
|
|||
/// |
|||
|
|||
Toda a documentação está no formato Markdown no diretório `./docs/en/`. |
|||
|
|||
Muitos dos tutoriais possuem blocos de código. |
|||
|
|||
Na maioria dos casos, esses blocos de código são aplicações completas que podem ser executadas como estão. |
|||
|
|||
Na verdade, esses blocos de código não são escritos diretamente no Markdown, eles são arquivos Python no diretório `./docs_src/`. |
|||
|
|||
E esses arquivos Python são incluídos/injetados na documentação durante a geração do site. |
|||
|
|||
|
|||
### Documentação para testes |
|||
|
|||
A maioria dos testes é executada diretamente sobre os arquivos de código de exemplo presentes na documentação. |
|||
|
|||
Isso ajuda a garantir que: |
|||
|
|||
* A documentação esteja atualizada. |
|||
* Os exemplos da documentação possam ser executados como estão. |
|||
* A maior parte das funcionalidades esteja coberta pela documentação, conforme assegurado pela cobertura de testes. |
|||
|
|||
#### Aplicações e documentação ao mesmo tempo |
|||
|
|||
Se você executar os exemplos com o comando abaixo, por exemplo: |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ fastapi dev tutorial001.py |
|||
|
|||
<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
Como o Uvicorn usa a porta `8000` por padrão, a documentação servida na porta `8000` não entrará em conflito. |
|||
|
|||
|
|||
### Traduções |
|||
|
|||
A ajuda com traduções é MUITO apreciada! E isso não seria possível sem o apoio da comunidade. 🌎 🚀 |
|||
|
|||
Pull requests de tradução são gerados por LLMs, orientados por prompts elaborados pela equipe do FastAPI em conjunto com a comunidade de falantes nativos de cada idioma suportado. |
|||
|
|||
#### LLM Prompt por Idioma |
|||
|
|||
Cada idioma possui um diretório: <a href="https://github.com/fastapi/fastapi/tree/master/docs" class="external-link" target="_blank">https://github.com/fastapi/fastapi/tree/master/docs</a>, nele você pode encontrar um arquivo chamado `llm-prompt.md` com o prompt específico para aquele idioma. |
|||
|
|||
Por exemplo, para o espanhol, o prompt está em: <a href="https://github.com/fastapi/fastapi/blob/master/docs/es/llm-prompt.md" class="external-link" target="_blank">`docs/es/llm-prompt.md`</a>. |
|||
|
|||
Se você encontrar erros no seu idioma, pode sugerir melhorias no prompt desse arquivo para a sua língua e solicitar a regeneração das páginas específicas que deseja atualizar após as alterações. |
|||
|
|||
#### Revisando PRs de Tradução |
|||
|
|||
Você também pode verificar os pull requests existentes <a href="https://github.com/fastapi/fastapi/pulls" class="external-link" target="_blank">existing pull requests</a> para o seu idioma. É possível filtrar os pull requests pelos que possuem a label correspondente à sua língua. Por exemplo, para o espanhol, a label é <a href="https://github.com/fastapi/fastapi/pulls?q=is%3Aopen+sort%3Aupdated-desc+label%3Alang-es+label%3Aawaiting-review" class="external-link" target="_blank">`lang-es`</a>. |
|||
|
|||
Ao revisar um pull request, é melhor não sugerir alterações diretamente no mesmo PR, pois ele foi gerado por LLM, e não será possível garantir que pequenas mudanças individuais sejam replicadas em outras seções semelhantes, ou que sejam preservadas quando o mesmo conteúdo for traduzido novamente. |
|||
|
|||
Em vez de adicionar sugestões no PR de tradução, faça as sugestões no arquivo de prompt da LLM para aquele idioma, criando um novo PR. Por exemplo, para o espanhol, o arquivo de prompt da LLM está em: <a href="https://github.com/fastapi/fastapi/blob/master/docs/es/llm-prompt.md" class="external-link" target="_blank">`docs/es/llm-prompt.md`</a>. |
|||
|
|||
/// tip |
|||
|
|||
Consulte a documentação sobre <a href="https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-request-reviews" class="external-link" target="_blank">como adicionar uma revisão de pull request</a> para aprová-lo ou solicitar alterações. |
|||
|
|||
/// |
|||
|
|||
#### Inscreva-se para Receber Notificações do Seu Idioma |
|||
|
|||
Verifique se existe uma <a href="https://github.com/fastapi/fastapi/discussions/categories/translations" class="external-link" target="_blank">Discussão no GitHub</a> para coordenar as traduções do seu idioma. Você pode se inscrever nela e, quando houver um novo pull request para revisar, um comentário automático será adicionado à discussão. |
|||
|
|||
Para verificar o código de 2 letras do idioma que você deseja traduzir, você pode consultar a tabela <a href="https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes" class="external-link" target="_blank">lista de códigos ISO 639-1</a>. |
|||
|
|||
#### Solicitar um Novo Idioma |
|||
|
|||
Vamos supor que você queira solicitar traduções para um idioma que ainda não foi traduzido, nem mesmo parcialmente. Por exemplo, latim. |
|||
|
|||
* O primeiro passo seria encontrar outras 2 pessoas que estejam dispostas a revisar os PRs de tradução desse idioma junto com você. |
|||
* Quando houver pelo menos 3 pessoas dispostas a se comprometer a manter esse idioma, você pode continuar com os próximos passos. |
|||
* Crie uma nova discussão seguindo o template. |
|||
* Marque as outras 2 pessoas que irão ajudar com o idioma e peça que confirmem ali que irão colaborar. |
|||
|
|||
Quando houver várias pessoas participando da discussão, a equipe do FastAPI poderá avaliá-la e torná-la uma tradução oficial. |
|||
|
|||
Em seguida, a documentação será traduzida automaticamente usando LLMs, e a equipe de falantes nativos poderá revisar a tradução e ajudar a ajustar os prompts da LLM. |
|||
|
|||
Sempre que houver uma nova tradução — por exemplo, quando a documentação for atualizada ou uma nova seção for adicionada — será feito um comentário na mesma discussão com o link para a nova tradução a ser revisada. |
|||
|
|||
## Código Automatizado e IA |
|||
|
|||
Você é incentivado a usar todas as ferramentas que desejar para realizar seu trabalho e contribuir da forma mais eficiente possível, incluindo ferramentas de IA (LLMs), etc. Ainda assim, as contribuições devem ter intervenção humana significativa, julgamento, contexto, entre outros aspectos. |
|||
|
|||
Se o **esforço humano** investido em um PR, por exemplo, ao escrever prompts para LLM, for **menor** do que o **esforço que precisaríamos dedicar** para **revisá-lo**, por favor, **não** envie o PR. |
|||
|
|||
Pense da seguinte forma: nós já podemos escrever prompts para LLM ou executar ferramentas automatizadas por conta própria, e isso seria mais rápido do que revisar PRs externos. |
|||
|
|||
### Fechando PRs Automatizados e de IA |
|||
|
|||
Se identificarmos PRs que pareçam ter sido gerados por IA ou automatizados de forma semelhante, iremos sinalizá-los e fechá-los. |
|||
|
|||
O mesmo se aplica a comentários e descrições, por favor, não copie e cole conteúdo gerado por uma LLM. |
|||
|
|||
### Negação de Serviço por Esforço Humano |
|||
|
|||
Usar ferramentas automatizadas e IA para enviar PRs ou comentários que precisemos revisar e tratar cuidadosamente seria o equivalente a <span style="white-space: nowrap;">um <a href="https://en.wikipedia.org/wiki/Denial-of-service_attack" class="external-link" target="_blank">ataque de negação de serviço</a></span> ao nosso esforço humano. |
|||
|
|||
Seria um esforço muito pequeno por parte da pessoa que envia o PR (um prompt para LLM), mas que gera uma grande quantidade de esforço do nosso lado (revisando o código cuidadosamente). |
|||
|
|||
Por favor, não faça isso. |
|||
|
|||
Teremos que bloquear contas que nos enviem repetidamente PRs ou comentários automatizados em excesso. |
|||
|
|||
### Use as Ferramentas com Sabedoria |
|||
|
|||
Como disse o Tio Ben: |
|||
|
|||
<blockquote> |
|||
Com grandes <strike>poderes</strike> <strong>ferramentas</strong> vem grande responsabilidade. |
|||
</blockquote> |
|||
|
|||
Evite causar danos inadvertidamente. |
|||
|
|||
Você tem ferramentas incríveis à sua disposição, use-as com sabedoria para ajudar de forma eficaz. |
|||
Loading…
Reference in new issue