Skip to main content

Biblioteca para barramento de mensagens

This project has been archived.

The maintainers of this project have marked this project as archived. No new releases are expected.

Project description

Barramento de mensagens

Desenvolvimento de um sistema de barramento de mesagens para ser utilizado em varios projetos.

Arquitetura do sistema

  • UnidadeDeTrabalho para gerenciamento de transações.
  • Barramento de mensagens para comunicação entre comandos, eventos e executores.
  • Bootstrap para inicialização do sistema do barramento.

como manusear o projeto

  • Manutenções:
    • Altere a tag no pyproject.toml para a versão que deseja publicar.
    • Buildar o pacote make build
    • Add e commite suas alteracoes
    • crie uma tag git: git tag v0.1.0 # <== sua tag, altere conforme o versionamento
    • publique a tag: git push origin master --tags
  • Instalação:
    • Instalar a biblioteca make instalar-barramento
    • Atualizar a biblioteca make atualizar-barramento

Como utilizar

  • configuração do celery:
    • Necessário para executar tarefas assíncronas.
    • É necessário configurar no inicializador do celery e na api.
@asynccontextmanager
async def lifespan(app: FastAPI) -> AsyncGenerator[None, Any]:
    from barramento_de_mensagens.aplicacoes.celery import configurar_celery_app
    from infra.aplicacoes.celery import celery_app  # <= seu app celery
    
    configurar_celery_app(celery_app)
    yield
  • inicialização do barramento:
    • Recomendação: Criar uma classe UnidadeDeTrabalho e herdar de UnidadeDeTrabalhoBase
from unidade_de_trabalho import UnidadeDeTrabalhoBase

class UnidadeDeTrabalho(UnidadeDeTrabalhoBase, Generic[REPO_ESCRITA, REPO_LEITURA]):
    domain_repo: RepositorioDominioBase
    view_repo: RepositorioConsultaBase
    
    def __init__(
       self,
       session_factory: Callable,  # <== defina um session factory padrão
       engine_factory: Callable,  # <== defina um engine factory padrão
       base: type[DeclarativeBase],  # <== defina um base padrão
       usuario: UsuarioBase | None = None,
       schema: str | None = None,
       somente_leitura: bool = False,
       criar_schema: bool = False,
    ):
       self.somente_leitura = somente_leitura
       self.engine_factory = engine_factory
       self.base = base
       
       super().__init__(
         session_factory=session_factory,
         engine_factory=engine_factory,
         base=base,
         usuario=usuario,
         schema=schema,
         criar_schema=criar_schema,
       )
  • Inicialização dos manipuladores:
    • Crie duas estruturas de dicionario para guardar manipuladores de eventos e de comandos.
EVENT_HANDLERS: ManipuladoresDeEventos = ManipuladoresDeEventos({
   # EventoTeste: [evento_teste],
   ...
})

COMMAND_HANDLERS: ManipuladoresDeComandos = ManipuladoresDeComandos({
   # ComandoTeste: comando_teste,
   ...
})
  • Inicialização do bootstrap:
    • Recomendação: Criar uma funcao bootstrap que retorne a bootstrap_base
from bootstrap import bootstrap_base

def bootstrap(
   session_factory: Callable | None = None,  # <== defina um session factory padrão
   engine_factory: Callable | None = None,  # <== defina um engine factory padrão
   base: type[DeclarativeBase] | None = None,  # <== defina um base padrão
   event_handlers: ManipuladoresDeEventos | None = None,
   command_handlers: ManipuladoresDeComandos | None = None,
   uow: UnidadeDeTrabalhoBase | None = None,
   usuario: UsuarioBase | None = None,
   schema: str | None = None,
   subir_erros_de_eventos: bool = False,
   permitir_execucoes_assincronas: bool = True,
   somente_leitura: bool = False,
   criar_schema: bool = False,
) -> BarramentoDeMensagens:
   # importe seus manipuladores
   from origem.dos.maipuladores import EVENT_HANDLERS, COMMAND_HANDLERS
   
   # defina seus manipuladores         
   command_handlers = command_handlers or COMMAND_HANDLERS
   event_handlers = event_handlers or EVENT_HANDLERS
   
   return bootstrap_base(
      uow=uow,
      session_factory=session_factory,
      engine_factory=engine_factory,
      base=base,
      event_handlers=event_handlers,
      command_handlers=command_handlers,
      usuario=usuario,
      schema=schema,
      subir_erros_de_eventos=subir_erros_de_eventos,
      permitir_execucoes_assincronas=permitir_execucoes_assincronas,
      somente_leitura=somente_leitura,
      criar_schema=criar_schema,
   )
  • Definicao dos Dominios
    • Crie uma classe Dominio que herde de DominioBase. Ela sera usada para definir os repositorios de dominio e de consulta.
from dominio import DominioBase

class Dominio(DominioBase):
   # usuario = (UsuarioRepoDominio, UsuarioRepoConsulta)
   ...
  • IMPORTANTE!
  • O projeto depende de duas variaveis de ambiente:
    • TEST_ENV: deve ser setada com true ao rodar testes. Isso faz eventos darem raise ao quebrar.
    • ENV_CONFIG: caso seja um abiente de alpha ou production, vai enviar o erro para o sentry.

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

barramento_de_mensagens-0.1.3.tar.gz (9.1 kB view details)

Uploaded Source

Built Distribution

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

barramento_de_mensagens-0.1.3-py3-none-any.whl (13.0 kB view details)

Uploaded Python 3

File details

Details for the file barramento_de_mensagens-0.1.3.tar.gz.

File metadata

  • Download URL: barramento_de_mensagens-0.1.3.tar.gz
  • Upload date:
  • Size: 9.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for barramento_de_mensagens-0.1.3.tar.gz
Algorithm Hash digest
SHA256 607265312998768ca4d47f463f0d4d3635ec8e7c2631119e763a378c7b813b83
MD5 4e7ace2451c8944af538fdbe011eeb3d
BLAKE2b-256 67d0b9d4f449df9b77d33747372e2c24ff28531076ec3948664b0d31e56857cb

See more details on using hashes here.

File details

Details for the file barramento_de_mensagens-0.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for barramento_de_mensagens-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 39c60a525a51f077ee309e4c7637e115640c8c0212f1edf9182a05d86a1dd10f
MD5 d04026dc41f939d36c778ef70bac68c1
BLAKE2b-256 5ef1bc8d2da22a5575bd1e5d9c0c9f910f68f850bd530ba40edf7944f9a043c8

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