From 0bfc9302749284d48dc407cf78f75b9bb8828dc7 Mon Sep 17 00:00:00 2001 From: layday <31134424+layday@users.noreply.github.com> Date: Tue, 11 May 2021 17:03:51 +0300 Subject: [PATCH] Allow passing json_encoders in class kwargs (#2523) * Test that `json_encoders` are respected from class kwargs * Allow passing `json_encoders` in class kwargs Fixes #2521. --- changes/2521-layday.md | 1 + pydantic/main.py | 1 + tests/test_main.py | 7 +++++++ 3 files changed, 9 insertions(+) create mode 100644 changes/2521-layday.md diff --git a/changes/2521-layday.md b/changes/2521-layday.md new file mode 100644 index 0000000..3c02f4d --- /dev/null +++ b/changes/2521-layday.md @@ -0,0 +1 @@ +Allow passing `json_encoders` in class kwargs diff --git a/pydantic/main.py b/pydantic/main.py index e7711ba..a67237c 100644 --- a/pydantic/main.py +++ b/pydantic/main.py @@ -184,6 +184,7 @@ def inherit_config(self_config: 'ConfigType', parent_config: 'ConfigType', **nam namespace['json_encoders'] = { **getattr(parent_config, 'json_encoders', {}), **getattr(self_config, 'json_encoders', {}), + **namespace.get('json_encoders', {}), } return type('Config', base_classes, namespace) diff --git a/tests/test_main.py b/tests/test_main.py index 2557433..d95ba2f 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -1997,6 +1997,13 @@ def test_class_kwargs_config(): assert Model.__fields__['b'].alias == 'B' # alias_generator still works +def test_class_kwargs_config_json_encoders(): + class Model(BaseModel, json_encoders={int: str}): + pass + + assert Model.__config__.json_encoders == {int: str} + + def test_class_kwargs_config_and_attr_conflict(): with pytest.raises(