Skip to content

Commit

Permalink
Settings config inheritance fix #1091
Browse files Browse the repository at this point in the history
  • Loading branch information
samuelcolvin committed Dec 9, 2019
1 parent 33fee6d commit 8f2e2ab
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 1 deletion.
2 changes: 1 addition & 1 deletion pydantic/env_settings.py
Expand Up @@ -66,7 +66,7 @@ class Config:
@classmethod
def prepare_field(cls, field: ModelField) -> None:
env_names: Iterable[str]
env = field.field_info.extra.pop('env', None)
env = field.field_info.extra.get('env')
if env is None:
if field.has_alias:
warnings.warn(
Expand Down
1 change: 1 addition & 0 deletions pydantic/fields.py
Expand Up @@ -280,6 +280,7 @@ def infer(
def set_config(self, config: Type['BaseConfig']) -> None:
self.model_config = config
info_from_config = config.get_field_info(self.name)
config.prepare_field(self)
if info_from_config:
self.field_info.alias = info_from_config.get('alias') or self.field_info.alias or self.name
self.alias = cast(str, self.field_info.alias)
Expand Down
15 changes: 15 additions & 0 deletions tests/test_settings.py
Expand Up @@ -376,3 +376,18 @@ class SubSettings(Settings):
assert SubSettings().dict() == {'foo': 'fff', 'bar': 'bbb', 'spam': 'spam default'}
env.set('spam', 'sss')
assert SubSettings().dict() == {'foo': 'fff', 'bar': 'bbb', 'spam': 'sss'}


def test_prefix_on_parent(env):
class MyBaseSettings(BaseSettings):
var: str = 'old'

class MySubSettings(MyBaseSettings):
class Config:
env_prefix = 'PREFIX_'

assert MyBaseSettings().dict() == {'var': 'old'}
assert MySubSettings().dict() == {'var': 'old'}
env.set('PREFIX_VAR', 'new')
assert MyBaseSettings().dict() == {'var': 'old'}
assert MySubSettings().dict() == {'var': 'new'}

0 comments on commit 8f2e2ab

Please sign in to comment.