Um orquestrador de fluxos inspirado pela fé, propósito e clareza.
Project description
🌟 Recursos Principais 🧩 Modularidade: Divida fluxos complexos em componentes menores e reutilizáveis 🔄 Estado Compartilhado: Transmita dados entre nós de forma consistente 🧠 Flexibilidade: Organize nós em qualquer padrão direcionado 🛡️ Tratamento de Erros: Capture e gerencie falhas em qualquer ponto do fluxo 🔄 Encadeabilidade: Construa grafos através de uma API fluente e elegante 📊 Conceitos Básicos Nós (Nodes) Os nós são as unidades fundamentais de processamento. Cada nó é uma função que:
Recebe um estado atual (BlessingState) Realiza algum processamento Retorna um estado atualizado Arestas (Edges) As arestas definem o fluxo entre os nós, indicando a ordem de execução.
🧠 Casos de Uso Processamento de dados sequenciais Fluxos de trabalho de negócios Pipelines de ETL (Extração, Transformação, Carregamento) Orquestração de microserviços Fluxos de aprovação e validação Integração de APIs Automação de processos 🤝 Contribuição Contribuições são bem-vindas! Veja como contribuir:
Faça um fork do repositório Crie uma branch para sua feature (git checkout -b feature/nova-funcionalidade) Faça commit das suas mudanças (git commit -m 'Adiciona nova funcionalidade') Faça push para a branch (git push origin feature/nova-funcionalidade) Abra um Pull Request 📄 Licença Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.
📚 Documentação Adicional Para documentação detalhada e mais exemplos, visite nossa wiki.
Desenvolvido com ❤️ por Carlos Viana
Estado (BlessingState) O BlessingState é um contêiner para dados compartilhados entre os nós, onde cada valor é uma "bênção".
🔍 Exemplo Básico
from jesusgraph import JesusGraph, BlessingState
# Definir funções de processamento
def cumprimentar(blessing: BlessingState) -> BlessingState:
nome = blessing.getBlessing("nome") or "visitante"
blessing.addBlessing("mensagem", f"Olá, {nome}!")
return blessing
def despedir(blessing: BlessingState) -> BlessingState:
nome = blessing.getBlessing("nome") or "visitante"
blessing.addBlessing("despedida", f"Até logo, {nome}!")
return blessing
# Criar e configurar o grafo
grafo = JesusGraph()
# Adicionar nós
grafo.add_node("cumprimentar", cumprimentar)
grafo.add_node("despedir", despedir)
# Configurar o fluxo
grafo.set_entry_node("cumprimentar") # Define o nó inicial
grafo.connecte("cumprimentar", "despedir") # Conecta os nós
grafo.set_end_node("despedir") # Define o nó final
# Executar o grafo
resultado = grafo.run({"nome": "João"})
# Verificar resultados
print(resultado.getBlessing("mensagem")) # Olá, João!
print(resultado.getBlessing("despedida")) # Até logo, João!
🚢 Exemplo Completo: Sistema de Pedidos Veja como implementar um fluxo de processamento de pedidos:
from jesusgraph import JesusGraph, BlessingState
# Funções de processamento
def receber_pedido(blessing: BlessingState) -> BlessingState:
cliente = blessing.getBlessing("cliente_nome") or "Cliente Anônimo"
blessing.addBlessing("pedido_id", "PED-12345")
blessing.addBlessing("status", "RECEBIDO")
return blessing
def calcular_valor(blessing: BlessingState) -> BlessingState:
itens = blessing.getBlessing("itens") or []
total = sum(item.get("preco", 0) for item in itens)
blessing.addBlessing("valor_total", total)
blessing.addBlessing("status", "CALCULADO")
return blessing
def preparar_pedido(blessing: BlessingState) -> BlessingState:
blessing.addBlessing("status", "PREPARADO")
return blessing
def entregar_pedido(blessing: BlessingState) -> BlessingState:
blessing.addBlessing("status", "ENTREGUE")
blessing.addBlessing("entrega_concluida", True)
return blessing
# Criar grafo
grafo = JesusGraph()
# Adicionar nós e configurar o fluxo
grafo.add_node("receber", receber_pedido)
grafo.add_node("calcular", calcular_valor)
grafo.add_node("preparar", preparar_pedido)
grafo.add_node("entregar", entregar_pedido)
# Configurar o fluxo
grafo.set_entry_node("receber")
grafo.connecte("receber", "calcular")
grafo.connecte("calcular", "preparar")
grafo.connecte("preparar", "entregar")
grafo.set_end_node("entregar")
# Executar com dados iniciais
pedido = {
"cliente_nome": "Maria Silva",
"itens": [
{"nome": "Pizza", "preco": 45.90},
{"nome": "Refrigerante", "preco": 8.50}
]
}
resultado = grafo.run(pedido)
print(f"Status final: {resultado.getBlessing('status')}")
print(f"Pedido entregue: {resultado.getBlessing('entrega_concluida')}")
🔧 API Principal JesusGraph
Criar um novo grafo
grafo = JesusGraph()
Adicionar um nó
grafo.add_node(nome, funcao)
Criar conexões entre nós
grafo.add_edge(origem, destino) grafo.connecte(origem, destino) # Alias para add_edge
Configurar pontos de entrada/saída
grafo.set_entry_node(nome_do_no) grafo.set_end_node(nome_do_no)
Executar o grafo
resultado = grafo.run(estado_inicial)
Retomar a execução de um grafo pausado
resultado = grafo.resume(estado_pausado)
BlessingState
Criar um estado vazio
estado = BlessingState()
Adicionar uma bênção
estado.addBlessing("chave", valor)
Obter o valor de uma bênção
valor = estado.getBlessing("chave")
Verificar se uma bênção existe
if estado.hasBlessing("chave"): # fazer algo
Atualizar uma bênção existente
estado.updateBlessing("chave", novo_valor)
Obter todas as bênçãos como dicionário
todas_bencaos = estado.allBlessings()
Uso como dicionário
estado["chave"] = valor valor = estado["chave"] if "chave" in estado: # fazer algo
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jesusgraph-0.1.3.tar.gz.
File metadata
- Download URL: jesusgraph-0.1.3.tar.gz
- Upload date:
- Size: 12.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
15f29fd8928b9705e383fa13cf966631a1574bd2ff7b6671f24d7aecf96154a1
|
|
| MD5 |
5e84435ef1eecc2f5291b43604cff92a
|
|
| BLAKE2b-256 |
c869454d460a3891838f2e554d8d588070b3598752cf17ef68e1bbe69e5c79e8
|
File details
Details for the file jesusgraph-0.1.3-py3-none-any.whl.
File metadata
- Download URL: jesusgraph-0.1.3-py3-none-any.whl
- Upload date:
- Size: 12.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
126472ca0db9cbc5b1a436fb2f2c25860dc5467448444fee5477ca459f6293f7
|
|
| MD5 |
7834ca825c471226511526eedb6ed7f9
|
|
| BLAKE2b-256 |
2c600af4cd67c8405f4f613290931042e06d9f24dc94425921ea8da4b4ba22e2
|