Skip to content

Commit 6d9c1a2

Browse files
authored
Ignore env_prefix if validation_alias is set (#25)
1 parent 607f1e8 commit 6d9c1a2

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

pydantic_settings/sources.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,7 @@ def _extract_field_info(self, field: FieldInfo, field_name: str) -> List[Tuple[s
129129
(alias[0], self._apply_case_sensitive(alias[0]), True if len(alias) > 1 else False)
130130
)
131131
else: # string validation alias
132-
field_info.append(
133-
(v_alias, self._apply_case_sensitive(self.config.get('env_prefix', '') + v_alias), False)
134-
)
132+
field_info.append((v_alias, self._apply_case_sensitive(v_alias), False))
135133
else:
136134
field_info.append(
137135
(field_name, self._apply_case_sensitive(self.config.get('env_prefix', '') + field_name), False)

tests/test_settings.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,7 @@ def test_env_inheritance_config(env):
418418
env.set('foobar_parent_from_config', 'foobar_parent_from_config')
419419
env.set('foobar_child_from_config', 'foobar_child_from_config')
420420

421-
env.set('prefix_foobar_child_from_field', 'prefix_foobar_child_from_field')
421+
env.set('foobar_child_from_field', 'foobar_child_from_field')
422422

423423
# a. Child class config overrides prefix
424424
class Parent(BaseSettings):
@@ -429,7 +429,7 @@ class Parent(BaseSettings):
429429
class Child(Parent):
430430
model_config = ConfigDict(env_prefix='prefix_')
431431

432-
assert Child().foobar == 'prefix_foobar_parent_from_field'
432+
assert Child().foobar == 'foobar_parent_from_field'
433433

434434
# b. Child class overrides field
435435
class Parent(BaseSettings):
@@ -451,7 +451,7 @@ class Child(Parent):
451451

452452
model_config = ConfigDict(env_prefix='prefix_')
453453

454-
assert Child().foobar == 'prefix_foobar_child_from_field'
454+
assert Child().foobar == 'foobar_child_from_field'
455455

456456

457457
def test_invalid_validation_alias(env):
@@ -498,6 +498,21 @@ class Settings(BaseSettings):
498498
assert Settings().foobar == 'val3'
499499

500500

501+
def test_validation_alias_with_env_prefix(env):
502+
class Settings(BaseSettings):
503+
foobar: str = Field(validation_alias='foo')
504+
505+
model_config = ConfigDict(env_prefix='p_')
506+
507+
env.set('p_foo', 'bar')
508+
with pytest.raises(ValidationError) as exc_info:
509+
Settings()
510+
assert exc_info.value.errors() == [{'type': 'missing', 'loc': ('foo',), 'msg': 'Field required', 'input': {}}]
511+
512+
env.set('foo', 'bar')
513+
assert Settings().foobar == 'bar'
514+
515+
501516
def test_case_sensitive(monkeypatch):
502517
class Settings(BaseSettings):
503518
foo: str

0 commit comments

Comments
 (0)