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.4.tar.gz (10.2 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.4-py3-none-any.whl (13.0 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for barramento_de_mensagens-0.1.4.tar.gz
Algorithm Hash digest
SHA256 3ab13dc76506877dbda458b8f11f36e3edef901b00f8a49a0f6f711da43c432c
MD5 b16a9786b3a9e29b8fc4c377137a9b74
BLAKE2b-256 c00cf600683d90e0f419759a2da9ff65dbabf9f4e01a8b0c91df45a5bc4ff813

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for barramento_de_mensagens-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 6156ef97a1f7dc8f703409d6da186a732206cd45b29722730f9c694d0ab6ec3a
MD5 3caac96731dcedde25f16c343758e210
BLAKE2b-256 518ca2e725da2f0416705072037f84d14d7432fb22423ca874f157613e56ee26

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