Skip to content

fazedordecodigo/PyFlunt

Repository files navigation

PORTUGUÊS | ENGLISH

🐍 PyFlunt: Domain Notification Pattern

Implementação Python inspirada no Flunt (.NET)

Último Lançamento no PyPI python Downloads License: MIT Discord

Avaliação de Segurança Avaliação de Confiabilidade Avaliação de Manutenibilidade Bugs Vulnerabilidades Code Smells

Flunt te auxilia a implementar Domain Notification Pattern em sua aplicação para centralizar erros e mudanças em determinadas ações e entidades.

Flunt surgiu de duas necessidades: implementar o Domain Notification Pattern para substituir exceções no nível de domínio da aplicação e reduzir a quantidade de IFs (complexidade) usando uma abordagem baseada em contratos.

Assim, basicamente o que o Flunt faz é adicionar uma lista de Notificações à sua classe e vários métodos para interagir com ela.

➡️ Como usar

🔧 Instalação

pip install flunt

🔔 Notifiable

from flunt.notifications.notifiable import Notifiable
from flunt.validations.contract import Contract

class Nome(Notifiable):
    def __init__(self, nome):
        super().__init__()

        if len(nome) > 3:
            self.add_notification(
                Notification(field='nome', message='nome inválido')
            )

        self._nome = nome

📜 Contract

"""Módulo Objetos de Valor."""
from flunt.notifications.notifiable import Notifiable
from flunt.validations.contract import Contract


class Nome(Notifiable):
    """Classe Objeto de Valor Nome."""

    def __init__(self, primeiro_nome, ultimo_nome):
        """Encontrar 'Construtor'."""
        super().__init__()
        self.primeiro_nome = primeiro_nome
        self.ultimo_nome = ultimo_nome
        self.add_notifications(
            Contract()
            .requires(self.primeiro_nome, 'primeiro nome')
            .requires(self.ultimo_nome, 'último nome')
            .is_greater_than(
                value=self.primeiro_nome,
                comparer=3,
                key="primeiro_nome",
                message="Mínimo de 3 caracteres",
            )
            .is_greater_than(
                value=self.ultimo_nome,
                comparer=3,
                key="ultimo_nome",
                message="Mínimo de 3 caracteres",
            )
            .get_notifications()
        )


nome = Nome('Emerson', 'Delatorre')
if not nome.is_valid():
    for notification in nome.get_notifications():
        print(notification)

Contribuindo

Consulte nosso DevGuide no link a seguir: CONTRIBUTING

Registro de Alterações

Consulte nosso registro de alterações no link a seguir: CHANGELOG

📄 Licença

Este projeto contém a licença MIT. Consulte o arquivo LICENSE.

Mods