{"id":38968606,"url":"https://github.com/prefeitura-rio/pipelines","last_synced_at":"2026-01-17T16:34:28.874Z","repository":{"id":37192887,"uuid":"483259803","full_name":"prefeitura-rio/pipelines","owner":"prefeitura-rio","description":"Gerenciador de fluxos de captura e subida de dados no datalake da Prefeitura do Rio de Janeiro | https://docs.dados.rio/guia-desenvolvedores/pipelines/","archived":false,"fork":false,"pushed_at":"2025-11-10T18:02:10.000Z","size":36053,"stargazers_count":40,"open_issues_count":54,"forks_count":2,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-11-10T20:08:52.248Z","etag":null,"topics":["government","open-data","prefect","python"],"latest_commit_sha":null,"homepage":"https://prefect.dados.rio/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/prefeitura-rio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-04-19T13:33:13.000Z","updated_at":"2025-08-14T14:22:12.000Z","dependencies_parsed_at":"2023-10-17T03:14:29.880Z","dependency_job_id":"3e889f7c-cdd4-4b2f-979b-3cbfd71f705d","html_url":"https://github.com/prefeitura-rio/pipelines","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/prefeitura-rio/pipelines","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prefeitura-rio%2Fpipelines","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prefeitura-rio%2Fpipelines/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prefeitura-rio%2Fpipelines/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prefeitura-rio%2Fpipelines/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/prefeitura-rio","download_url":"https://codeload.github.com/prefeitura-rio/pipelines/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prefeitura-rio%2Fpipelines/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28511868,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T13:38:16.342Z","status":"ssl_error","status_checked_at":"2026-01-17T13:37:44.060Z","response_time":85,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["government","open-data","prefect","python"],"created_at":"2026-01-17T16:34:28.074Z","updated_at":"2026-01-17T16:34:28.866Z","avatar_url":"https://github.com/prefeitura-rio.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Pipelines\n\nEste repositório contém fluxos de captura e subida de dados no datalake\nda Prefeitura do Rio de Janeiro. O repositório é gerido pelo Escritório\nMunicipal de Dados (EMD) e alimentado de forma colaborativa com as equipes de\ndados e tecnologia das Secretarias.\n\n\u003e 💜 Todo o código é desenvolvido em Python utilizando o software livre [Prefect](https://prefect.io/).\n\n## Configuração de ambiente para desenvolvimento\n\n### Requisitos\n\n- Um editor de texto (recomendado VS Code)\n- Python 3.9.x\n- `pip`\n- (Opcional, mas recomendado) Um ambiente virtual para desenvolvimento (`miniconda`, `virtualenv` ou similares)\n\n### Licenças\n\nEste repositório contém parte do código sob a licença GPL-3.0 e parte sob uma licença EULA.\nTodo código sob a licença EULA terá um cabeçalho indicando que é proprietário.\nConsulte os respectivos tópicos em LICENÇA para os termos e condições de cada licença.\n\n### Procedimentos\n\n- Clonar esse repositório\n\n```\ngit clone https://github.com/prefeitura-rio/pipelines\n```\n\n- Abrí-lo no seu editor de texto\n\n- No seu ambiente de desenvolvimento, instalar [poetry](https://python-poetry.org/) para gerenciamento de dependências\n\n```\npip3 install poetry\n```\n\n- Instalar as dependências para desenvolvimento\n\n```\npoetry install\n```\n\n- Instalar os hooks de pré-commit (ver [#127](https://github.com/prefeitura-rio/pipelines/pull/127) para entendimento dos hooks)\n\n```\npre-commit install\n```\n\n- Pronto! Seu ambiente está configurado para desenvolvimento.\n\n---\n\n## Como desenvolver\n\n### Estrutura de diretorios\n\n```\norgao/                       # diretório raiz para o órgão\n|-- projeto1/                # diretório de projeto\n|-- |-- __init__.py          # vazio\n|-- |-- constants.py         # valores constantes para o projeto\n|-- |-- flows.py             # declaração dos flows\n|-- |-- schedules.py         # declaração dos schedules\n|-- |-- tasks.py             # declaração das tasks\n|-- |-- utils.py             # funções auxiliares para o projeto\n...\n|-- __init__.py              # importa todos os flows de todos os projetos\n|-- constants.py             # valores constantes para o órgão\n|-- flows.py                 # declaração de flows genéricos do órgão\n|-- schedules.py             # declaração de schedules genéricos do órgão\n|-- tasks.py                 # declaração de tasks genéricas do órgão\n|-- utils.py                 # funções auxiliares para o órgão\n\norgao2/\n...\n\nutils/\n|-- __init__.py\n|-- flow1/\n|-- |-- __init__.py\n|-- |-- flows.py\n|-- |-- tasks.py\n|-- |-- utils.py\n|-- flows.py                 # declaração de flows genéricos\n|-- tasks.py                 # declaração de tasks genéricas\n|-- utils.py                 # funções auxiliares\n\nconstants.py                 # valores constantes para todos os órgãos\n\n```\n\n### Adicionando órgãos e projetos (descontinuado)\n\nO script `manage.py` é responsável por criar e listar projetos desse repositório. Para usá-lo, no entanto, você deve instalar as dependências em `requirements-cli.txt`:\n\n```\npip3 install -r requirements-cli.txt\n```\n\nVocê pode obter mais informações sobre os comandos com\n\n```\npython manage.py --help\n```\n\nO comando `add-agency` permite que você adicione um novo órgão a partir do template padrão. Para fazê-lo, basta executar\n\n```\npython manage.py add-agency nome-do-orgao\n```\n\nIsso irá criar um novo diretório com o nome `nome-do-orgao` em `pipelines/` com o template padrão, já adaptado ao nome do órgão. O nome do órgão deve estar em [snake case](https://en.wikipedia.org/wiki/Snake_case) e deve ser único. Qualquer conflito com um projeto já existente será reportado.\n\nPara listar os órgão existentes e nomes reservados, basta fazer\n\n```\npython manage.py list-projects\n```\n\nEm seguida, leia com anteção os comentários em cada um dos arquivos do seu projeto, de modo a evitar conflitos e erros.\nLinks para a documentação do Prefect também encontram-se nos comentários.\n\nCaso o órgão para o qual você desenvolverá um projeto já exista, basta fazer\n\n```\npython manage.py add-project nome-do-orgao nome-do-projeto\n```\n\n### Adicionando dependências para execução\n\n- Requisitos de pipelines devem ser adicionados com\n\n```\npoetry add \u003cpackage\u003e\n```\n\n- Requisitos do `manage.py` estão em `requirements-cli.txt`\n\n- Requisitos para a Action de deployment estão em `requirements-deploy.txt`\n\n- Requisitos para testes estão em `requirements-tests.txt`\n\n### Como testar uma pipeline localmente\n\nEscolha a pipeline que deseja executar (exemplo `pipelines.rj_escritorio.template_pipeline.flows.flow`)\n\n```py\nfrom pipelines.utils.utils import run_local\npipelines.rj_escritorio.template_pipeline.flows import flow\n\nrun_local(flow, parameters = {\"param\": \"val\"})\n```\n\n### Como testar uma pipeline na nuvem\n\n1. Configure as variáveis de ambiente num arquivo chamado `.env` na raiz\n   do projeto:\n\n```\nGOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json  # Credenciais do Google Cloud\nPREFECT__BACKEND=cloud\nPREFECT__SERVER__HOST=https://prefect.dados.rio/api\nPREFECT__SERVER__PORT=443\nVAULT_ADDRESS=https://vault.dados.rio/\nVAULT_TOKEN=\u003ctoken\u003e # Valor do token do órgão para o qual você está desenvolvendo. Caso não saiba o token, entre em contato.\n```\n\n- `source .env`\n\n- Também, garanta que o arquivo `$HOME/.prefect/auth.toml` exista e tenha um conteúdo semelhante a:\n\n```toml\n# This file is auto-generated and should not be manually edited\n# Update the Prefect config or use the CLI to login instead\n\n[\"prefect.dados.rio\"]\napi_key = \"\u003csua-api-key\u003e\"\ntenant_id = \"\u003ctenant-id\u003e\"\n```\n\n- Em seguida, tenha certeza que você já tem acesso à UI do Prefect, tanto para realizar a submissão da run, como para\n  acompanhá-la durante o processo de execução. Caso não tenha, verifique o procedimento em https://library-emd.herokuapp.com/infraestrutura/como-acessar-a-ui-do-prefect\n\n2. Crie o arquivo `test.py` com a pipeline que deseja executar e adicione a função `run_cloud`\n   com os parâmetros necessários:\n\n```py\nfrom pipelines.utils import run_cloud\nfrom pipelines.[secretaria].[pipeline].flows import flow # Complete com as infos da sua pipeline\n\nrun_cloud(\n    flow,               # O flow que você deseja executar\n    labels=[\n        \"example\",      # Label para identificar o agente que irá executar a pipeline (ex: rj-sme)\n    ],\n    parameters = {\n        \"param\": \"val\", # Parâmetros que serão passados para a pipeline (opcional)\n    }\n)\n```\n\n3. Rode a pipeline com:\n\n```sh\npython test.py\n```\n\nA saída deve se assemelhar ao exemplo abaixo:\n\n```sh\n[2022-02-19 12:22:57-0300] INFO - prefect.GCS | Uploading xxxxxxxx-development/2022-02-19t15-22-57-694759-00-00 to datario-public\nFlow URL: http://localhost:8080/default/flow/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n └── ID: xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n └── Project: main\n └── Labels: []\nRun submitted, please check it at:\nhttp://prefect-ui.prefect.svc.cluster.local:8080/flow-run/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n```\n\n- (Opcional, mas recomendado) Quando acabar de desenvolver sua pipeline, delete todas as versões da mesma pela UI do Prefect.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprefeitura-rio%2Fpipelines","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprefeitura-rio%2Fpipelines","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprefeitura-rio%2Fpipelines/lists"}