Usecases¶
Orquestração, regra de negócio e fronteira do inesperado.
py_return_success_or_error.usecases.usecase_executor_base
¶
Base compartilhada pelos casos de uso.
UsecaseExecutorBase
¶
Bases: ABC
Base compartilhada pelos casos de uso.
Concentra o que é comum aos dois fluxos (:class:UsecaseBase e
:class:UsecaseBaseCallData): a medição opcional do tempo e o
despacho opcional do processamento (CPU-bound) a uma thread. As
subclasses definem o fluxo específico e implementam o process.
Attributes:
| Name | Type | Description |
|---|---|---|
run_in_background |
Se verdadeiro, o |
|
monitor_execution_time |
Se verdadeiro, mede o tempo de execução
e o entrega a :meth: |
Source code in src/py_return_success_or_error/usecases/usecase_executor_base.py
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 | |
__init__(*, run_in_background=False, monitor_execution_time=False)
¶
Configura as flags de execução do caso de uso.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
run_in_background
|
bool
|
Despacha o |
False
|
monitor_execution_time
|
bool
|
Habilita a medição de tempo. |
False
|
Source code in src/py_return_success_or_error/usecases/usecase_executor_base.py
38 39 40 41 42 43 44 45 46 47 48 49 50 51 | |
fail(error)
¶
Cria um resultado de falha a partir de um caso concreto do conjunto fechado de erro.
É a forma recomendada de retornar um erro de negócio no
process — resolve a inferência de tipos do resultado.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
error
|
TError
|
Um caso concreto de |
required |
Returns:
| Type | Description |
|---|---|
ReturnSuccessOrError[TValue, TError]
|
|
Source code in src/py_return_success_or_error/usecases/usecase_executor_base.py
110 111 112 113 114 115 116 117 118 119 120 121 122 123 | |
ok(value)
¶
Cria um resultado de sucesso a partir do valor.
Conveniência simétrica a :meth:fail: self.ok(valor) é a
forma recomendada de retornar sucesso dentro do process.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
value
|
TValue
|
O valor de sucesso. |
required |
Returns:
| Type | Description |
|---|---|
ReturnSuccessOrError[TValue, TError]
|
|
Source code in src/py_return_success_or_error/usecases/usecase_executor_base.py
96 97 98 99 100 101 102 103 104 105 106 107 108 | |
on_execution_time_measured(elapsed)
¶
Recebe o tempo medido quando monitor_execution_time está
habilitado.
Virtual: sobrescreva para integrar à sua observabilidade —
a base não impõe dependência de logging. A implementação padrão
registra em logging no nível DEBUG (logger
py_return_success_or_error).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
elapsed
|
timedelta
|
Duração total da execução do caso de uso. |
required |
Source code in src/py_return_success_or_error/usecases/usecase_executor_base.py
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | |
on_unexpected(exception)
abstractmethod
¶
Converte uma exceção inesperada do process (um bug)
num erro do conjunto fechado da feature.
Abstrato: como não há erro universal a fabricar, o caso de
uso decide para qual caso de TError o inesperado é mapeado
(tipicamente um caso "Unexpected"/ErrorGeneric). Garante que
o process nunca lança ao chamador — o resultado é sempre um
dos casos previstos.
Exceção do contrato — cancelamento: um
asyncio.CancelledError não passa por aqui: cancelamento não é
falha de domínio e propaga como exceção, no idioma do asyncio.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
exception
|
Exception
|
A exceção inesperada capturada. |
required |
Returns:
| Type | Description |
|---|---|
TError
|
O erro de domínio correspondente. |
Source code in src/py_return_success_or_error/usecases/usecase_executor_base.py
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | |
py_return_success_or_error.usecases.usecase_base
¶
Caso de uso de lógica pura, sem acesso a dados.
UsecaseBase
¶
Bases: UsecaseExecutorBase[TValue, TError]
Caso de uso de lógica pura: sem datasource/repositório.
A subclasse implementa apenas :meth:process (síncrono, CPU-bound) e
:meth:on_unexpected. O chamador invoca o caso de uso como uma
função assíncrona::
result = await usecase(parameters)
Source code in src/py_return_success_or_error/usecases/usecase_base.py
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | |
__call__(parameters)
async
¶
Orquestra a execução: medição opcional + despacho do process.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
parameters
|
TParams
|
Parâmetros de entrada da feature. |
required |
Returns:
| Type | Description |
|---|---|
ReturnSuccessOrError[TValue, TError]
|
O resultado do |
ReturnSuccessOrError[TValue, TError]
|
via |
Source code in src/py_return_success_or_error/usecases/usecase_base.py
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | |
process(parameters)
abstractmethod
¶
A regra de negócio da feature — síncrona e CPU-bound.
Retorne com self.ok(valor) / self.fail(erro). Não deve
fazer I/O: dados externos entram pelo fluxo
:class:UsecaseBaseCallData.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
parameters
|
TParams
|
Parâmetros de entrada da feature. |
required |
Returns:
| Type | Description |
|---|---|
ReturnSuccessOrError[TValue, TError]
|
|
Source code in src/py_return_success_or_error/usecases/usecase_base.py
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | |
py_return_success_or_error.usecases.usecase_base_call_data
¶
Caso de uso com busca de dados.
UsecaseBaseCallData
¶
Bases: UsecaseExecutorBase[TValue, TError]
Caso de uso que busca dados antes de aplicar a regra.
Depende da abstração :class:Repository (inversão de dependência) e
orquestra três fases:
- FETCH —
await repository(parameters); - CURTO-CIRCUITO — um
Failuredo fetch retorna direto ao chamador, sem executar oprocess; - PROCESS — a regra de negócio recebe o dado limpo.
Source code in src/py_return_success_or_error/usecases/usecase_base_call_data.py
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | |
__call__(parameters)
async
¶
Orquestra FETCH → CURTO-CIRCUITO → PROCESS.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
parameters
|
TParams
|
Parâmetros de entrada da feature. |
required |
Returns:
| Type | Description |
|---|---|
ReturnSuccessOrError[TValue, TError]
|
O |
ReturnSuccessOrError[TValue, TError]
|
|
Source code in src/py_return_success_or_error/usecases/usecase_base_call_data.py
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | |
__init__(repository, *, run_in_background=False, monitor_execution_time=False)
¶
Inicializa com o repositório da feature.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
repository
|
Repository[TData, TParams, TError]
|
A abstração de acesso a dados da feature. |
required |
run_in_background
|
bool
|
Despacha o |
False
|
monitor_execution_time
|
bool
|
Habilita a medição de tempo. |
False
|
Source code in src/py_return_success_or_error/usecases/usecase_base_call_data.py
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | |
process(data, parameters)
abstractmethod
¶
A regra de negócio da feature — síncrona e CPU-bound.
Só é chamada quando o fetch teve sucesso: data chega limpo.
Retorne com self.ok(valor) / self.fail(erro).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
data
|
TData
|
O dado obtido pelo repositório. |
required |
parameters
|
TParams
|
Parâmetros de entrada da feature. |
required |
Returns:
| Type | Description |
|---|---|
ReturnSuccessOrError[TValue, TError]
|
|
Source code in src/py_return_success_or_error/usecases/usecase_base_call_data.py
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | |