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

Uploaded Python 3

File details

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

File metadata

  • Download URL: barramento_de_mensagens-0.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 bf9ababb3f1a385210e3f53211e67f24d8523ba28b69c5c58f7cddb2b3b4b117
MD5 3f86b0c12d72e4acebdb868bfd45cc7b
BLAKE2b-256 24911e8b8f5efc587962510a0ba3a473f5ae3de1fbf9272e205b0359cc587fce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for barramento_de_mensagens-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d3e8918e009311a65430a7e2e8e8306acecd9dbcef3516e34077e3368c8c4cb7
MD5 e86d7a7baa602049cf6903e57a67f8b5
BLAKE2b-256 3b8e9b37ca7d9697541e404794611dc8698391865e26bb3db83cb1c65f1a1bcd

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