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.3.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.3-py3-none-any.whl (12.4 kB view details)

Uploaded Python 3

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

Hashes for jesusgraph-0.1.3.tar.gz
Algorithm Hash digest
SHA256 15f29fd8928b9705e383fa13cf966631a1574bd2ff7b6671f24d7aecf96154a1
MD5 5e84435ef1eecc2f5291b43604cff92a
BLAKE2b-256 c869454d460a3891838f2e554d8d588070b3598752cf17ef68e1bbe69e5c79e8

See more details on using hashes here.

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

Hashes for jesusgraph-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 126472ca0db9cbc5b1a436fb2f2c25860dc5467448444fee5477ca459f6293f7
MD5 7834ca825c471226511526eedb6ed7f9
BLAKE2b-256 2c600af4cd67c8405f4f613290931042e06d9f24dc94425921ea8da4b4ba22e2

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