Skip to main content

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

jesusgraph-0.1.4.tar.gz (12.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jesusgraph-0.1.4-py3-none-any.whl (12.4 kB view details)

Uploaded Python 3

File details

Details for the file jesusgraph-0.1.4.tar.gz.

File metadata

  • Download URL: jesusgraph-0.1.4.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

Hashes for jesusgraph-0.1.4.tar.gz
Algorithm Hash digest
SHA256 481a08840ddadb8b81b6707f3e3e76fc1942036f9dfe06997ae740fac776e338
MD5 1aa5c23ba44d6b9bdc34d062b4338134
BLAKE2b-256 b737f9411470ef343099810e974d5a52a1ed3012a7fa632e0d48473448e218eb

See more details on using hashes here.

File details

Details for the file jesusgraph-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: jesusgraph-0.1.4-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

Hashes for jesusgraph-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 69222f7cebc2c3dfc48003be649fbe1f2ce20de406cab674e62eed0f7c2b9075
MD5 623cc28547843625321088ce2b8b7feb
BLAKE2b-256 dbdead454aff9a4fcd6f87db20798ec8ca9f00bab542da167ce6288463716e76

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page