Skip to main content

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.

✨ Destaques

  • Compatível com Python 3.11+ e sem dependências de runtime.
  • Validações fluentes encadeáveis baseadas no Domain Notification Pattern.
  • Contratos especializados para números, datas/horas, URLs e documentos brasileiros (CPF/CNPJ).
  • Notificações centralizadas via Notifiable, evitando ifs espalhados e exceções de domínio.
  • Documentação completa em docs/ e no site (link abaixo).

Novos contratos de validação

Além do contrato base, a biblioteca agora inclui contratos especializados para cenários comuns:

  • NumericValidationContract para valores numéricos (faixas, limites, sinal)
  • DateTimeValidationContract para datas/horas (intervalos, mínimos/máximos)
  • UrlValidationContract para URLs
  • BrazilianDocumentValidationContract para documentos brasileiros (CPF/CNPJ)

Consulte a documentação em docs/validations/ para exemplos detalhados.

➡️ Como usar

🔑 Requisitos

  • Python 3.11 ou superior
  • Sem dependências de runtime (ferramentas de dev opcionais: uv, ruff, mypy, pytest)

🔧 Instalação

pip install flunt

🔔 Notifiable

O Notifiable é a classe base que fornece funcionalidades para armazenar e gerenciar notificações:

from flunt.notifications.notifiable import Notifiable

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

        if len(nome) < 3:
            self.add_notification(
                field='nome',
                message='Nome deve ter pelo menos 3 caracteres',
            )
        self._nome = nome

📜 Contract

O Contract fornece métodos para validações encadeadas:

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


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

    def __init__(self, primeiro_nome, ultimo_nome, email):
        """Construtor da classe."""
        super().__init__()
        self.primeiro_nome = primeiro_nome
        self.ultimo_nome = ultimo_nome
        self.email = email

        # Criando um contrato de validação
        contract = (
            Contract()
            .requires(self.primeiro_nome, "primeiro nome", "Nome é obrigatório")
            .requires(self.ultimo_nome, "ultimo nome", "Sobrenome é obrigatório")
            .requires(self.email, "email", "E-mail é obrigatório")
            .is_lower_than(
                self.primeiro_nome,
                3,
                "primeiro_nome",
                "Nome deve ter no mínimo 3 caracteres",
            )
            .is_lower_than(
                self.ultimo_nome,
                3,
                "ultimo_nome",
                "Sobrenome deve ter no mínimo 3 caracteres",
            )
            .is_email(self.email, "email", "E-mail inválido")
        )

        # Adicionando as notificações do contrato à entidade
        self.add_notifications(contract.get_notifications())


# Exemplo de uso
pessoa = Pessoa("Alfredo", "Biscoito", "alfredo@biscoito.com")
if not pessoa.is_valid:
    for notification in pessoa.get_notifications():
        print(notification)
else:
    print("Validado com sucesso!")

Contribuindo

Consulte nosso DevGuide no link a seguir: CONTRIBUTING

📚 Documentação

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

Metadata

Release files for Flunt 3.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for Flunt 3.1.0
File Size Uploaded
flunt-3.1.0.tar.gz 327.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for Flunt 3.1.0
File Interpreter ABI Platform
flunt-3.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 351.6 kB

Release files / flunt-3.1.0.tar.gz

Download URL flunt-3.1.0.tar.gz
Size 327.0 kB
Tags Source
SHA-256 checksum
How to use checksums
c4c109e022193b6a9273a6f2b1b8ef0802b901b02d3f07879dd2d261cc5918be
BLAKE2b-256 checksum
How to use checksums
2fee3224f1147bbc442752b9cf09bbc9330462445bfd1d91d44633ccde2726ff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.15 {"installer":{"name":"uv","version":"0.9.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / flunt-3.1.0-py3-none-any.whl

Download URL flunt-3.1.0-py3-none-any.whl
Size 24.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
29be4a2309b5d56ec3415cf247751c486e2d5cda61bbe0bd6f80ee827250b60e
BLAKE2b-256 checksum
How to use checksums
5e797f39b5f3d40e70661dc4ea60865c102510638b0fc04e7b14c8bd49f2967a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.15 {"installer":{"name":"uv","version":"0.9.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

3.1.0 This release

2 release files

3.0.1

2 release files

3.0.0

2 release files

2.3.0

2 release files

2.2.0

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.2.0

3 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page