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

Uploaded Python 3

File details

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

File metadata

  • Download URL: barramento_de_mensagens-0.1.2.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.2.tar.gz
Algorithm Hash digest
SHA256 11bcad0607eeccd5149d74375aef3567b794865c45c37dc511f1e66540641165
MD5 e7003c9a2d091b87c3dd86002aff496e
BLAKE2b-256 46b8c941249c0596c93b65b72a8d9edd459aec50d04bac94cff2c8707ca2b056

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for barramento_de_mensagens-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 23c3044ddf509a416960527255cc7616c95e44189f4e0af532f9d8a181df7170
MD5 ec9eaee86a393317f08e0b09690e856f
BLAKE2b-256 b022e18a8f0d587142720af4075ed73d84824d7ff593bbcf84363ef19c97364d

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