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.tomlpara 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
- Altere a tag no
- Instalação:
- Instalar a biblioteca
make instalar-barramento - Atualizar a biblioteca
make atualizar-barramento
- Instalar a biblioteca
Como utilizar
- configuração do celery:
- Necessário para executar tarefas assíncronas.
from aplicacoes.celery import configurar_celery_app
celery_app = criar_celery_app() # <== sua função que cria o celery app
configurar_celery_app(celery_app)
- inicialização do barramento:
- Recomendação: Criar uma classe
UnidadeDeTrabalhoe herdar deUnidadeDeTrabalhoBase
- Recomendação: Criar uma classe
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
bootstrapque retorne abootstrap_base
- Recomendação: Criar uma funcao
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
Dominioque herde deDominioBase. Ela sera usada para definir os repositorios de dominio e de consulta.
- Crie uma classe
from dominio import DominioBase
class Dominio(DominioBase):
# usuario = (UsuarioRepoDominio, UsuarioRepoConsulta)
...
- IMPORTANTE!
- O projeto depende de duas variaveis de ambiente:
TEST_ENV: deve ser setada comtrueao rodar testes. Isso faz eventos darem raise ao quebrar.ENV_CONFIG: caso seja um abiente dealphaouproduction, 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file barramento_de_mensagens-0.1.0.tar.gz.
File metadata
- Download URL: barramento_de_mensagens-0.1.0.tar.gz
- Upload date:
- Size: 8.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ebc5ffb8f775734363a055353c9c5fa0d0eafcfeaa2afb8d7f6fedd6601eddd2
|
|
| MD5 |
388967ed6402a765ae4c85d7aa251434
|
|
| BLAKE2b-256 |
c9a4772542b7da5abd962ae7c7022a3d4c72d05ceea620c81e33824bbb592afc
|
File details
Details for the file barramento_de_mensagens-0.1.0-py3-none-any.whl.
File metadata
- Download URL: barramento_de_mensagens-0.1.0-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.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e979dcb764b41132d64c39d677eccb42541ab6fc94378d9ea8dbc87183786602
|
|
| MD5 |
631176032c34a63d60a04e24a770987b
|
|
| BLAKE2b-256 |
404fd474c454c95895f9b934e217365ed95a19f10c6ef392b144585cef62a4e6
|