def test_setting_raw_value(self):
        setting = appsettings.Setting(name="setting")
        setting.check()
        with pytest.raises(AttributeError):
            setting.raw_value
        with override_settings(SETTING="value"):
            setting.check()
            assert setting.raw_value == "value"

        setting.parent_setting = appsettings.NestedDictSetting(
            settings={}, name="parent_setting")
        with override_settings(PARENT_SETTING={}):
            with pytest.raises(KeyError):
                setting.raw_value
        with override_settings(PARENT_SETTING={"SETTING": "value"}):
            setting.check()
            assert setting.raw_value == "value"

        setting.parent_setting = appsettings.NestedListSetting(
            inner_setting=setting, name="parent_setting")
        setting.nested_list_index = 0
        with override_settings(PARENT_SETTING=[]):
            with pytest.raises(IndexError):
                setting.raw_value
        with override_settings(PARENT_SETTING=["value"]):
            setting.check()
            assert setting.raw_value == "value"
예제 #2
0
    def test_setting_required(self):
        setting = appsettings.Setting(name="setting",
                                      prefix="custom_",
                                      required=True,
                                      default=True)
        with pytest.raises(AttributeError,
                           match=self.message_required % setting.full_name):
            assert setting.value
        assert setting.default_value

        setting.parent_setting = appsettings.Setting(name="parent_setting")
        with override_settings(PARENT_SETTING={}):
            with pytest.raises(KeyError,
                               match=self.message_missing_item %
                               setting.parent_setting.full_name):
                assert setting.value
예제 #3
0
    def test_setting_raw_value(self):
        setting = appsettings.Setting(name="setting")
        setting.check()
        with pytest.raises(AttributeError):
            setting.raw_value
        with override_settings(SETTING="value"):
            setting.check()
            assert setting.raw_value == "value"

        setting.parent_setting = appsettings.Setting(name="parent_setting")
        with override_settings(PARENT_SETTING={}):
            with pytest.raises(KeyError):
                setting.raw_value
        with override_settings(PARENT_SETTING={"SETTING": "value"}):
            setting.check()
            assert setting.raw_value == "value"
    def test_setting_validators_pass(self):
        validator = mock.Mock()
        setting = appsettings.Setting(name="INQUISITOR", validators=(validator,))

        with self.settings(INQUISITOR=mock.sentinel.lister):
            setting.check()

        assert validator.mock_calls == [mock.call(mock.sentinel.lister)]
 def test_setting(self):
     setting = appsettings.Setting(name="simple")
     assert setting.name == "simple"
     assert setting.full_name == "SIMPLE"
     assert setting.default_value is None
     assert setting.value is None
     assert setting.get_value() is None
     assert setting.validators == []
     setting.check()
     with pytest.raises(AttributeError, match="SIMPLE"):
         assert setting.raw_value
    def test_setting_validators_fail(self):
        validator = mock.Mock(side_effect=ValidationError("You're not worthy!"))
        setting = appsettings.Setting(name="INQUISITOR", validators=(validator,))

        with self.settings(INQUISITOR=mock.sentinel.lister):
            with pytest.raises(
                ImproperlyConfigured, match="Setting INQUISITOR has an invalid value:.*You're not worthy!"
            ):
                setting.check()

        assert validator.mock_calls == [mock.call(mock.sentinel.lister)]
    def test_setting_required(self):
        setting = appsettings.Setting(name="setting", prefix="custom_", required=True, default=True)
        with pytest.raises(ImproperlyConfigured, match=self.message_required % setting.full_name):
            assert setting.value
        assert setting.default_value

        setting.parent_setting = appsettings.NestedDictSetting(settings={}, name="parent_setting")
        with override_settings(PARENT_SETTING={}):
            with pytest.raises(
                ImproperlyConfigured, match=self.message_missing_item % setting.parent_setting.full_name
            ):
                assert setting.value
예제 #8
0
 def test_setting(self):
     setting = appsettings.Setting()
     assert setting.name == ""
     assert setting.full_name == ""
     assert setting.default_value is None
     assert setting.value is None
     assert setting.get_value() is None
     assert setting.checker is None
     assert setting.validators == []
     setting.check()
     with pytest.raises(AttributeError,
                        match=self.message_no_attr % setting.full_name):
         assert setting.raw_value
    def test_nested_dict_nested_list(self):
        setting = appsettings.NestedDictSetting(
            settings=dict(
                sub=appsettings.NestedListSetting(
                    inner_setting=appsettings.Setting(name="value", default=None), name="sub", default=None
                )
            ),
            name="setting",
            default=None,
        )

        setting.check()
        assert setting.value is None

        with override_settings(SETTING={}):
            setting.check()
            assert setting.value == {"sub": None}

        with override_settings(SETTING={"SUB": ["hello"]}):
            setting.check()
            assert setting.value == {"sub": ("hello",)}
예제 #10
0
    def test_setting_checker(self):
        class Setting(appsettings.Setting):
            def checker(self, name, value):
                if isinstance(value, int):
                    raise ValueError(name)

        setting = Setting(name="check_test")
        with override_settings(CHECK_TEST=0):
            with pytest.raises(ValueError):
                setting.check()
        with override_settings(CHECK_TEST="ok"):
            setting.check()

        def checker(name, value):
            if isinstance(value, str):
                raise ValueError(name)

        setting = Setting(name="check_test2", checker=checker)
        with override_settings(CHECK_TEST2="not ok"):
            with pytest.raises(ValueError):
                setting.check()
        with override_settings(CHECK_TEST2=1):
            setting.check()

        class SettingNoChecker(appsettings.Setting):
            pass

        setting = SettingNoChecker(name="check_test3")
        with override_settings(CHECK_TEST3=list(range(1, 10))):
            setting.check()

        setting = appsettings.NestedSetting(
            name="check_test3",
            settings=dict(inner=appsettings.Setting(checker=checker)))
        setting.check()
        with override_settings(CHECK_TEST3={"INNER": True}):
            setting.check()
        with override_settings(CHECK_TEST3={"INNER": "AAA"}):
            with pytest.raises(ValueError):
                setting.check()
    def test_nested_dict_nested_dict(self):
        setting = appsettings.NestedDictSetting(
            settings=dict(
                sub=appsettings.NestedDictSetting(settings=dict(value=appsettings.Setting(name="value")), name="sub")
            ),
            name="setting",
        )

        setting.check()
        assert setting.value == {}

        with override_settings(SETTING={}):
            setting.check()
            assert setting.value == {"sub": {}}

        with override_settings(SETTING={"SUB": {}}):
            setting.check()
            assert setting.value == {"sub": {"value": None}}

        with override_settings(SETTING={"SUB": {"VALUE": "Value"}}):
            setting.check()
            assert setting.value == {"sub": {"value": "Value"}}
예제 #12
0
 class AppConf(appsettings.AppSettings):
     setting = appsettings.Setting()
예제 #13
0
        class AppConf(appsettings.AppSettings):
            setting = appsettings.Setting(name="name")

            class Meta:
                setting_prefix = "prefix_"
예제 #14
0
        class MetaAppConf(appsettings.AppSettings):
            without_prefix = appsettings.Setting()
            with_prefix = appsettings.Setting(prefix="got_a_prefix")

            class Meta:
                setting_prefix = "meta_prefix_"
예제 #15
0
 class NoMetaAppConf(appsettings.AppSettings):
     without_prefix = appsettings.Setting()
     with_prefix = appsettings.Setting(prefix="got_a_prefix")
예제 #16
0
 class AppConf(appsettings.AppSettings):
     without_name = appsettings.Setting()
     with_name = appsettings.Setting(name="got_a_name")
 def test_json_from_environ_value(self):
     setting = appsettings.Setting(name="setting")
     setting.check()
     assert setting.value == {"key": ["v", "a", "l"]}
 def test_nested_dict_setting_from_environ_value(self):
     setting = appsettings.NestedDictSetting(
         settings=dict(a=appsettings.Setting(), b=appsettings.Setting(),), name="setting"
     )
     setting.check()
     assert setting.value == {"a": "A", "b": "B"}
예제 #19
0
 def test_setting_default_callable(self):
     setting = appsettings.Setting(default=lambda: 1, call_default=True)
     assert setting.value == 1
     setting.call_default = False
     assert callable(setting.value)
     assert setting.value() == 1
예제 #20
0
 def test_setting_name(self):
     setting = appsettings.Setting(name="Name", prefix="Prefix_")
     assert setting.name == "Name"
     assert setting.prefix == "Prefix_"
     assert setting.full_name == "PREFIX_NAME"
 def test_preference_of_environ_values(self):
     setting = appsettings.Setting(name="preference_setting")
     with override_settings(PREFERENCE_SETTING="__OVER__"):
         setting.check()
         assert setting.value == "__ENV__"