From 47367da401984891ba9768f3870c155a7859ba5c Mon Sep 17 00:00:00 2001 From: tudorvaran Date: Wed, 12 Feb 2020 16:37:44 +0200 Subject: [PATCH 1/5] Accept callables as values in fields --- localized_fields/value.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/localized_fields/value.py b/localized_fields/value.py index 5ee971f..ef2685d 100644 --- a/localized_fields/value.py +++ b/localized_fields/value.py @@ -90,6 +90,9 @@ class LocalizedValue(dict): for lang_code, _ in settings.LANGUAGES: self.set(lang_code, self.default_value) + if callable(value): + value = value() + if isinstance(value, str): self.set(settings.LANGUAGE_CODE, value) From 598b8ca65e4e417fe17660b73dbaccb9713f6a46 Mon Sep 17 00:00:00 2001 From: tudorvaran Date: Wed, 12 Feb 2020 16:51:34 +0200 Subject: [PATCH 2/5] Add test --- tests/test_integer_field.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/test_integer_field.py b/tests/test_integer_field.py index 8084ea4..e96d886 100644 --- a/tests/test_integer_field.py +++ b/tests/test_integer_field.py @@ -197,6 +197,17 @@ class LocalizedIntegerFieldTestCase(TestCase): obj.refresh_from_db() assert obj.score.get(settings.LANGUAGE_CODE) == 75 + def test_callable_default_value(self): + output = {'en': 5} + + def func(): + return output + + Model = get_fake_model(dict(test=LocalizedIntegerValue(default=func))) + obj = Model() + + assert obj.test['en'] == output['en'] + def test_order_by(self): """Tests whether ordering by a :see:LocalizedIntegerField key works expected.""" @@ -226,3 +237,4 @@ class LocalizedIntegerFieldTestCase(TestCase): ) ) assert res == [1331, 982, 382] + From a9a5add30311f5c7ebd4a4e09be4d6616590bb8c Mon Sep 17 00:00:00 2001 From: tudorvaran Date: Wed, 12 Feb 2020 16:55:39 +0200 Subject: [PATCH 3/5] Manual code format --- tests/test_integer_field.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_integer_field.py b/tests/test_integer_field.py index e96d886..e7f0cb4 100644 --- a/tests/test_integer_field.py +++ b/tests/test_integer_field.py @@ -203,8 +203,8 @@ class LocalizedIntegerFieldTestCase(TestCase): def func(): return output - Model = get_fake_model(dict(test=LocalizedIntegerValue(default=func))) - obj = Model() + model = get_fake_model({"test": LocalizedIntegerValue(default=func)}) + obj = model() assert obj.test['en'] == output['en'] From 905bfd435397e06451477cad5036382aabb70921 Mon Sep 17 00:00:00 2001 From: tudorvaran Date: Wed, 12 Feb 2020 17:05:17 +0200 Subject: [PATCH 4/5] Format with black --- localized_fields/fields/integer_field.py | 2 +- tests/test_integer_field.py | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/localized_fields/fields/integer_field.py b/localized_fields/fields/integer_field.py index 4b800be..6e94713 100644 --- a/localized_fields/fields/integer_field.py +++ b/localized_fields/fields/integer_field.py @@ -105,7 +105,7 @@ class LocalizedIntegerField(LocalizedField): @staticmethod def _convert_localized_value( - value: LocalizedValue + value: LocalizedValue, ) -> LocalizedIntegerValue: """Converts from :see:LocalizedValue to :see:LocalizedIntegerValue.""" diff --git a/tests/test_integer_field.py b/tests/test_integer_field.py index e7f0cb4..aba330d 100644 --- a/tests/test_integer_field.py +++ b/tests/test_integer_field.py @@ -198,15 +198,15 @@ class LocalizedIntegerFieldTestCase(TestCase): assert obj.score.get(settings.LANGUAGE_CODE) == 75 def test_callable_default_value(self): - output = {'en': 5} + output = {"en": 5} def func(): return output model = get_fake_model({"test": LocalizedIntegerValue(default=func)}) - obj = model() + obj = model.objects.create() - assert obj.test['en'] == output['en'] + assert obj.test["en"] == output["en"] def test_order_by(self): """Tests whether ordering by a :see:LocalizedIntegerField key works @@ -237,4 +237,3 @@ class LocalizedIntegerFieldTestCase(TestCase): ) ) assert res == [1331, 982, 382] - From bc63c57598e5a83280c8400f12bf7fcaf7d9650e Mon Sep 17 00:00:00 2001 From: tudorvaran Date: Wed, 12 Feb 2020 17:11:14 +0200 Subject: [PATCH 5/5] LocalizedIntegerField not LocalizedIntegerValue --- tests/test_integer_field.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_integer_field.py b/tests/test_integer_field.py index aba330d..5e0d22a 100644 --- a/tests/test_integer_field.py +++ b/tests/test_integer_field.py @@ -203,7 +203,7 @@ class LocalizedIntegerFieldTestCase(TestCase): def func(): return output - model = get_fake_model({"test": LocalizedIntegerValue(default=func)}) + model = get_fake_model({"test": LocalizedIntegerField(default=func)}) obj = model.objects.create() assert obj.test["en"] == output["en"]