Skip to content

Commit 09bfd98

Browse files
committed
model
1 parent 2709d4e commit 09bfd98

13 files changed

+348
-402
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from dataclasses import dataclass
2+
3+
from flask_inputfilter import InputFilter
4+
from flask_inputfilter.declarative import field
5+
from flask_inputfilter.validators import IsIntegerValidator, IsStringValidator
6+
7+
8+
@dataclass
9+
class User:
10+
name: str
11+
age: int
12+
email: str
13+
14+
15+
class UserWithModelInputFilter(InputFilter):
16+
name: str = field(required=True, validators=[IsStringValidator()])
17+
age: int = field(required=True, validators=[IsIntegerValidator()])
18+
email: str = field(required=True, validators=[IsStringValidator()])
19+
20+
_model = User
Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,7 @@
1-
"""
2-
Declarative API components for flask-inputfilter.
3-
4-
This package provides descriptors and factory functions for declarative
5-
InputFilter field definition using decorators.
6-
"""
7-
8-
from .condition_descriptor import ConditionDescriptor
9-
from .factory_functions import (
10-
condition,
11-
field,
12-
global_filter,
13-
global_validator,
14-
)
1+
from .factory_functions import field
152
from .field_descriptor import FieldDescriptor
16-
from .global_filter_descriptor import GlobalFilterDescriptor
17-
from .global_validator_descriptor import GlobalValidatorDescriptor
183

194
__all__ = [
20-
"ConditionDescriptor",
215
"FieldDescriptor",
22-
"GlobalFilterDescriptor",
23-
"GlobalValidatorDescriptor",
24-
"condition",
256
"field",
26-
"global_filter",
27-
"global_validator",
287
]

flask_inputfilter/declarative/condition_descriptor.py

Lines changed: 0 additions & 31 deletions
This file was deleted.
Lines changed: 0 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,11 @@
1-
"""Factory functions for creating descriptors."""
2-
31
from __future__ import annotations
42

53
from typing import TYPE_CHECKING, Any, Optional, Union
64

7-
from .condition_descriptor import ConditionDescriptor
85
from .field_descriptor import FieldDescriptor
9-
from .global_filter_descriptor import GlobalFilterDescriptor
10-
from .global_validator_descriptor import GlobalValidatorDescriptor
116

127
if TYPE_CHECKING:
138
from flask_inputfilter.models import (
14-
BaseCondition,
159
BaseFilter,
1610
BaseValidator,
1711
ExternalApiConfig,
@@ -77,98 +71,3 @@ class UserInputFilter(InputFilter):
7771
external_api=external_api,
7872
copy=copy,
7973
)
80-
81-
82-
def condition(cond: BaseCondition) -> ConditionDescriptor:
83-
"""
84-
Create a condition descriptor for declarative condition definition.
85-
86-
This function creates a ConditionDescriptor that can be used to
87-
register conditions declaratively using class attributes.
88-
89-
**Parameters:**
90-
91-
- **cond** (*BaseCondition*): The condition to register.
92-
93-
**Returns:**
94-
95-
A condition descriptor with the given condition.
96-
97-
**Example:**
98-
99-
.. code-block:: python
100-
101-
from flask_inputfilter import InputFilter
102-
from flask_inputfilter.declarative import condition
103-
from flask_inputfilter.conditions import ExactlyOneOfCondition
104-
105-
class ContactInputFilter(InputFilter):
106-
_conditions = [
107-
ExactlyOneOfCondition(['phone', 'email'])
108-
]
109-
"""
110-
return ConditionDescriptor(cond)
111-
112-
113-
def global_validator(
114-
validators: Union[BaseValidator, list[BaseValidator]]
115-
) -> GlobalValidatorDescriptor:
116-
"""
117-
Create a global validator descriptor for declarative global validator definition.
118-
119-
This function creates a GlobalValidatorDescriptor that can be used to
120-
register global validators declaratively using class attributes.
121-
122-
**Parameters:**
123-
124-
- **validators** (*Union[BaseValidator, list[BaseValidator]]*): The validator(s) to register globally.
125-
Can be a single validator or a list of validators.
126-
127-
**Returns:**
128-
129-
A global validator descriptor.
130-
131-
**Example:**
132-
133-
.. code-block:: python
134-
135-
from flask_inputfilter import InputFilter
136-
from flask_inputfilter.declarative import global_validator
137-
from flask_inputfilter.validators import IsStringValidator
138-
139-
class FormInputFilter(InputFilter):
140-
_global_validators = [IsStringValidator()]
141-
"""
142-
return GlobalValidatorDescriptor(validators)
143-
144-
145-
def global_filter(
146-
filters: Union[BaseFilter, list[BaseFilter]]
147-
) -> GlobalFilterDescriptor:
148-
"""
149-
Create a global filter descriptor for declarative global filter definition.
150-
151-
This function creates a GlobalFilterDescriptor that can be used to
152-
register global filters declaratively using class attributes.
153-
154-
**Parameters:**
155-
156-
- **filters** (*Union[BaseFilter, list[BaseFilter]]*): The filter(s) to register globally.
157-
Can be a single filter or a list of filters.
158-
159-
**Returns:**
160-
161-
A global filter descriptor.
162-
163-
**Example:**
164-
165-
.. code-block:: python
166-
167-
from flask_inputfilter import InputFilter
168-
from flask_inputfilter.declarative import global_filter
169-
from flask_inputfilter.filters import StringTrimFilter
170-
171-
class FormInputFilter(InputFilter):
172-
_global_filters = [StringTrimFilter()]
173-
"""
174-
return GlobalFilterDescriptor(filters)

flask_inputfilter/declarative/field_descriptor.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
"""Field descriptor for declarative field definition."""
2-
31
from __future__ import annotations
42

53
from typing import TYPE_CHECKING, Any, Optional, Union

flask_inputfilter/declarative/global_filter_descriptor.py

Lines changed: 0 additions & 36 deletions
This file was deleted.

flask_inputfilter/declarative/global_validator_descriptor.py

Lines changed: 0 additions & 38 deletions
This file was deleted.

flask_inputfilter/decorators.py

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,9 @@
11
from .declarative import (
2-
ConditionDescriptor,
32
FieldDescriptor,
4-
GlobalFilterDescriptor,
5-
GlobalValidatorDescriptor,
6-
condition,
73
field,
8-
global_filter,
9-
global_validator,
104
)
115

126
__all__ = [
13-
"ConditionDescriptor",
147
"FieldDescriptor",
15-
"GlobalFilterDescriptor",
16-
"GlobalValidatorDescriptor",
17-
"condition",
188
"field",
19-
"global_filter",
20-
"global_validator",
219
]

flask_inputfilter/input_filter.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,9 @@ def _register_decorator_components(self) -> None:
247247
if filter not in self.global_filters:
248248
self.global_filters.append(filter)
249249

250+
if hasattr(self.__class__, "_decorator_model") and self.__class__._decorator_model:
251+
self.model_class = self.__class__._decorator_model
252+
250253
def get_conditions(self) -> list[BaseCondition]:
251254
"""
252255
Retrieve the list of all registered conditions.

0 commit comments

Comments
 (0)