8000 Fix master (#1682) · ag-python/pydantic@a913c37 · GitHub
[go: up one dir, main page]

Skip to content

Commit a913c37

Browse files
Fix master (pydantic#1682)
* Fix master * Fix master 2 (pydantic#1694) * test: add regression test with wrong type default * fix: remove always on conlist and conset * fix: use utf8 as default encoding on all OS * conset invalid defualt test * add change Co-authored-by: PrettyWood <em.jolibois@gmail.com>
1 parent dac6764 commit a913c37

File tree

4 files changed

+28
-15
lines changed

4 files changed

+28
-15
lines changed

changes/1682-samuelcolvin.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Modify validators for `conlist` and `conset` to not have `always=True`.

pydantic/env_settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ def read_env_file(file_path: Path, *, encoding: str = None, case_sensitive: bool
129129
except ImportError as e:
130130
raise ImportError('python-dotenv is not installed, run `pip install pydantic[dotenv]`') from e
131131

132-
file_vars: Dict[str, Optional[str]] = dotenv_values(file_path, encoding=encoding)
132+
file_vars: Dict[str, Optional[str]] = dotenv_values(file_path, encoding=encoding or 'utf8')
133133
if not case_sensitive:
134134
return {k.lower(): v for k, v in file_vars.items()}
135135
else:

pydantic/fields.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -451,10 +451,7 @@ def _type_analysis(self) -> None: # noqa: C901 (ignore complexity)
451451
get_validators = getattr(self.type_, '__get_validators__', None)
452452
8000 if get_validators:
453453
self.class_validators.update(
454-
{
455-
f'list_{i}': Validator(validator, pre=True, always=True)
456-
for i, validator in enumerate(get_validators())
457-
}
454+
{f'list_{i}': Validator(validator, pre=True) for i, validator in enumerate(get_validators())}
458455
)
459456

460457
self.type_ = self.type_.__args__[0]
@@ -464,10 +461,7 @@ def _type_analysis(self) -> None: # noqa: C901 (ignore complexity)
464461
get_validators = getattr(self.type_, '__get_validators__', None)
465462
if get_validators:
466463
self.class_validators.update(
467-
{
468-
f'set_{i}': Validator(validator, pre=True, always=True)
469-
for i, validator in enumerate(get_validators())
470-
}
464+
{f'set_{i}': Validator(validator, pre=True) for i, validator in enumerate(get_validators())}
471465
)
472466

473467
self.type_ = self.type_.__args__[0]

tests/test_types.py

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -239,20 +239,38 @@ class Model(BaseModel):
239239
assert exc_info.value.errors() == [{'loc': ('foo',), 'msg': 'value is not a valid list', 'type': 'type_error.list'}]
240240

241241

242+
def test_conlist_wrong_type_default():
243+
"""It should not validate default value by default"""
244+
245+
class Model(BaseModel):
246+
v: conlist(int) = 'a'
247+
248+
m = Model()
249+
assert m.v == 'a'
250+
251+
242252
def test_constrained_set_good():
243-
class ConSetModelMax(BaseModel):
253+
class Model(BaseModel):
244254
v: conset(int) = []
245255

246-
m = ConSetModelMax(v=[1, 2, 3])
256+
m = Model(v=[1, 2, 3])
247257
assert m.v == {1, 2, 3}
248258

249259

250260
def test_constrained_set_default():
251-
class ConSetModelMax(BaseModel):
252-
v: conset(int) = {}
261+
class Model(BaseModel):
262+
v: conset(int) = set()
263+
264+
m = Model()
265+
assert m.v == set()
266+
267+
268+
def test_constrained_set_default_invalid():
269+
class Model(BaseModel):
270+
v: conset(int) = 'not valid, not validated'
253271

254-
m = ConSetModelMax()
255-
assert m.v == {}
272+
m = Model()
273+
assert m.v == 'not valid, not validated'
256274

257275

258276
def test_constrained_set_too_long():

0 commit comments

Comments
 (0)
0