def get_settings_by_environment(module_name): settings = LazySettings() mock_dict = {key: module_name for key in LazySettings.ENVIRON_KEYS} with patch.dict('os.environ', mock_dict): settings.setup() return settings
def get_settings_by_cmd_line(module_name): settings = LazySettings() with patch.object(sys, 'argv', ['', '--settings={}'.format(module_name)]): settings.setup() return settings
def test_should_override_setting_by_reader_value(self, settings_dict): settings = LazySettings('tests.samples.simple') settings.configure(**settings_dict) assert settings.SIMPLE_STRING == 'simple' settings._dynamic_reader.set('SIMPLE_STRING', 'dynamic') assert settings.SIMPLE_STRING == 'dynamic'
def get_settings_by_environment(module_name): settings = LazySettings() with patch('os.environ.get') as mock: mock.return_value = module_name settings._setup() return settings
def get_settings_by_cmd_line(module_name): settings = LazySettings() with patch.object( sys, 'argv', ['', '--settings={}'.format(module_name)] ): settings.setup() return settings
def test_should_read_environment_settings_value(self, env_var): expect_module = 'tests.samples.complex' settings = LazySettings() with patch.object(sys, 'argv', []): with patch.dict('os.environ', {env_var: expect_module}): settings.setup() assert settings._settings_list == [expect_module]
def test_should_configure_settings_with_new_values(self): settings = LazySettings('tests.samples.simple') assert settings.SIMPLE_STRING == 'simple' settings.configure(SIMPLE_STRING='simple2') assert settings.SIMPLE_STRING == 'simple2' settings.configure(NEW_VALUE='new') assert settings.NEW_VALUE == 'new'
def test_should_read_cmd_line_settings_value(self, cmd_arg): expect_module = 'tests.samples.simple' settings = LazySettings() with patch.object(sys, 'argv', ['', '{}={}'.format(cmd_arg, expect_module)]): settings.setup() assert settings._settings_list == [expect_module]
def get_settings_by_environment(module_name): settings = LazySettings() mock_dict = { key: module_name for key in LazySettings.ENVIRON_KEYS } with patch.dict('os.environ', mock_dict): settings.setup() return settings
def test_should_read_environment_settings_value(self, env_var): expect_module = 'tests.samples.complex' settings = LazySettings() with patch.object(sys, 'argv', []): with patch.dict('os.environ', {env_var: expect_module}): settings.setup() assert settings._settings_list == [expect_module]
def test_dont_overwrite_special_settings_with_environ(self): expect_module = 'tests.samples.special' settings = LazySettings() with patch.object(sys, 'argv', []): with patch.dict('os.environ', {SPECIAL_SETTINGS_KEY: expect_module}): settings.setup() print(settings.as_dict()) assert isinstance(getattr(settings, SPECIAL_SETTINGS_KEY), dict)
def test_should_read_cmd_line_settings_value(self, cmd_arg): expect_module = 'tests.samples.simple' settings = LazySettings() with patch.object( sys, 'argv', ['', '{}={}'.format(cmd_arg, expect_module)] ): settings.setup() assert settings._settings_list == [expect_module]
def test_configure(self): expect_module = 'tests.samples.simple' settings = LazySettings(expect_module) assert settings.SIMPLE_STRING == 'simple' settings.configure(SIMPLE_STRING='simple2') assert settings.SIMPLE_STRING == 'simple2' settings.configure(NEW_VALUE='new') assert settings.NEW_VALUE == 'new'
def test_should_use_s3_reader_with_prefix_with_simple_settings( self, bucket_name, region, s3 ): settings = LazySettings('tests.samples.simple') settings.configure( SIMPLE_SETTINGS={ 'DYNAMIC_SETTINGS': { 'backend': 's3', 'bucket_name': bucket_name, 'region': region, 'prefix': 'MYAPP_' } } ) settings._initialized = False settings.setup() assert settings.SIMPLE_STRING == 'simple' self._set_value_on_s3( s3, bucket_name, 'MYAPP_SIMPLE_STRING', 'dynamic' ) assert settings.SIMPLE_STRING == 'dynamic' settings.configure(SIMPLE_STRING='foo') assert ( self._get_value_from_s3(s3, bucket_name, 'MYAPP_SIMPLE_STRING') == 'foo' )
def test_should_update_setting_by_last_reader_value( self, settings_dict, reader): settings = LazySettings('tests.samples.simple') settings.configure(**settings_dict) assert settings.SIMPLE_STRING == 'simple' settings._dynamic_reader.set('SIMPLE_STRING', 'dynamic') assert settings.SIMPLE_STRING == 'dynamic' del settings._dynamic_reader._dict['SIMPLE_STRING'] assert settings.SIMPLE_STRING == 'dynamic'
def test_should_update_settings_in_dynamic_storage(self, settings_dict): settings = LazySettings('tests.samples.dynamic') settings.configure(**settings_dict) settings._initialized = False # to load dynamic read settings.setup() settings._dynamic_reader.set('SIMPLE_STRING', 'simple') settings.configure(SIMPLE_STRING='dynamic') assert settings.SIMPLE_STRING == 'dynamic' assert settings._dynamic_reader.get('SIMPLE_STRING') == 'dynamic'
def test_should_use_s3_reader_with_prefix_with_simple_settings( self, bucket_name, region, s3 ): settings = LazySettings('tests.samples.simple') settings.configure( SIMPLE_SETTINGS={ 'DYNAMIC_SETTINGS': { 'backend': 's3', 'bucket_name': bucket_name, 'region': region, 'prefix': 'MYAPP_' } } ) settings._initialized = False settings.setup() assert settings.SIMPLE_STRING == 'simple' self._set_value_on_s3( s3, bucket_name, 'MYAPP_SIMPLE_STRING', 'dynamic' ) assert settings.SIMPLE_STRING == 'dynamic' settings.configure(SIMPLE_STRING='foo') assert ( self._get_value_from_s3(s3, bucket_name, 'MYAPP_SIMPLE_STRING') == 'foo' )
def test_should_read_init_multiples_settings_value(self): expect_modules = 'tests.samples.simple,tests.samples.complex' settings = LazySettings(*expect_modules.split(',')) assert settings._settings_list == expect_modules.split(',') assert settings.SIMPLE_STRING == u'simple' assert settings.COMPLEX_DICT['complex'] == 'settings'
def test_should_use_dynamic_setting_only_for_setting_than_match_pattern( self, settings_dict): settings = LazySettings('tests.samples.dynamic') settings_dict['SIMPLE_SETTINGS']['DYNAMIC_SETTINGS'][ 'pattern'] = 'SIMPLE_*' settings.configure(**settings_dict) assert settings.ANOTHER_STRING == 'another' settings._dynamic_reader.set('ANOTHER_STRING', 'dynamic') assert settings.ANOTHER_STRING == 'another' assert settings.SIMPLE_STRING == 'simple' settings._dynamic_reader.set('SIMPLE_STRING', 'dynamic') assert settings.SIMPLE_STRING == 'dynamic'
def test_should_raise_error_if_setting_configured_wrong(self): settings = LazySettings() with patch.object( sys, 'argv', ['', '--settings', 'tests.samples.simple'] ): with pytest.raises(RuntimeError): settings.foo
def test_should_update_settings_in_dynamic_storage(self, settings_dict): settings = LazySettings('tests.samples.dynamic') settings.configure(**settings_dict) settings._initialized = False # to load dynamic read settings.setup() settings._dynamic_reader.set('SIMPLE_STRING', 'simple') settings.configure(SIMPLE_STRING='dynamic') assert settings.SIMPLE_STRING == 'dynamic' assert settings._dynamic_reader.get('SIMPLE_STRING') == 'dynamic'
def test_should_use_redis_reader_with_simple_settings(self, redis): settings = LazySettings('tests.samples.simple') settings.configure( SIMPLE_SETTINGS={'DYNAMIC_SETTINGS': {'backend': 'redis'}} ) settings._initialized = False settings.setup() assert settings.SIMPLE_STRING == 'simple' redis.set('SIMPLE_STRING', 'dynamic') assert settings.SIMPLE_STRING == 'dynamic' settings.configure(SIMPLE_STRING='foo') assert self._get_value_from_redis(redis, 'SIMPLE_STRING') == 'foo'
def test_should_update_settings_in_dynamic_storage_only_if_match_pattern( self, settings_dict): settings = LazySettings('tests.samples.dynamic') settings_dict['SIMPLE_SETTINGS']['DYNAMIC_SETTINGS'][ 'pattern'] = 'SIMPLE_*' settings.configure(**settings_dict) settings._initialized = False # to load dynamic read settings.setup() settings._dynamic_reader._set('ANOTHER_STRING', 'another') settings.configure(ANOTHER_STRING='dynamic') assert settings.ANOTHER_STRING == 'dynamic' assert settings._dynamic_reader._get('ANOTHER_STRING') == 'another'
def test_should_use_consul_reader_with_simple_settings(self, consul): settings = LazySettings('tests.samples.simple') settings.configure( SIMPLE_SETTINGS={'DYNAMIC_SETTINGS': { 'backend': 'consul' }}) settings._initialized = False settings.setup() assert settings.SIMPLE_STRING == 'simple' consul.set('SIMPLE_STRING', 'dynamic') assert settings.SIMPLE_STRING == 'dynamic' settings.configure(SIMPLE_STRING='foo') assert consul.get('SIMPLE_STRING') == 'foo'
def test_should_return_a_zero_value_by_reader_value( self, settings_dict, value): settings = LazySettings('tests.samples.simple') settings.configure(**settings_dict) settings._initialized = False # to load dynamic read settings.setup() assert settings.SIMPLE_STRING == 'simple' settings._dynamic_reader.set('SIMPLE_STRING', value) assert settings.SIMPLE_STRING == value
def pytest_configure(): """ pytest setup. """ try: import django from django.conf import settings settings.configure(POOL_OF_RAMOS=POOL_OF_RAMOS) django.setup() except ImportError: from simple_settings.core import LazySettings settings = LazySettings('conftest') settings.configure()
def test_should_use_consul_reader_with_simple_settings(self, consul): settings = LazySettings('tests.samples.simple') settings.configure( SIMPLE_SETTINGS={'DYNAMIC_SETTINGS': {'backend': 'consul'}} ) settings._initialized = False settings.setup() assert settings.SIMPLE_STRING == 'simple' consul.set('SIMPLE_STRING', 'dynamic') assert settings.SIMPLE_STRING == 'dynamic' settings.configure(SIMPLE_STRING='foo') assert consul.get('SIMPLE_STRING') == 'foo'
def test_should_configure_settings_with_new_values(self): settings = LazySettings('tests.samples.simple') assert settings.SIMPLE_STRING == 'simple' settings.configure(SIMPLE_STRING='simple2') assert settings.SIMPLE_STRING == 'simple2' settings.configure(NEW_VALUE='new') assert settings.NEW_VALUE == 'new'
def test_should_use_database_reader_with_simple_settings( self, database, sqlite_db): settings = LazySettings('tests.samples.simple') settings.configure( SIMPLE_SETTINGS={ 'DYNAMIC_SETTINGS': { 'backend': 'database', 'sqlalchemy.url': sqlite_db } }) settings._initialized = False settings.setup() assert settings.SIMPLE_STRING == 'simple' database.set('SIMPLE_STRING', 'dynamic') assert settings.SIMPLE_STRING == 'dynamic' settings.configure(SIMPLE_STRING='foo') assert database.get('SIMPLE_STRING') == 'foo'
def test_should_update_settings_in_dynamic_storage_only_if_match_pattern( self, settings_dict ): settings = LazySettings('tests.samples.dynamic') settings_dict[ 'SIMPLE_SETTINGS' ]['DYNAMIC_SETTINGS']['pattern'] = 'SIMPLE_*' settings.configure(**settings_dict) settings._initialized = False # to load dynamic read settings.setup() settings._dynamic_reader._set('ANOTHER_STRING', 'another') settings.configure(ANOTHER_STRING='dynamic') assert settings.ANOTHER_STRING == 'dynamic' assert settings._dynamic_reader._get('ANOTHER_STRING') == 'another'
def test_should_override_setting_by_reader_value(self, settings_dict): settings = LazySettings('tests.samples.simple') settings.configure(**settings_dict) settings._initialized = False # to load dynamic read settings.setup() assert settings.SIMPLE_STRING == 'simple' settings._dynamic_reader.set('SIMPLE_STRING', 'dynamic') assert settings.SIMPLE_STRING == 'dynamic'
def test_should_use_memcached_reader_with_simple_settings( self, memcached, dynamic_settings ): settings = LazySettings('tests.samples.simple') settings.configure( SIMPLE_SETTINGS={'DYNAMIC_SETTINGS': dynamic_settings} ) settings._initialized = False settings.setup() assert settings.SIMPLE_STRING == 'simple' memcached.set('SIMPLE_STRING', 'dynamic', noreply=False) assert settings.SIMPLE_STRING == 'dynamic' settings.configure(SIMPLE_STRING='foo') assert self._get_value_from_memcached( memcached, 'SIMPLE_STRING' ) == 'foo'
def test_should_return_a_zero_value_by_reader_value( self, settings_dict, value ): settings = LazySettings('tests.samples.simple') settings.configure(**settings_dict) settings._initialized = False # to load dynamic read settings.setup() assert settings.SIMPLE_STRING == 'simple' settings._dynamic_reader.set('SIMPLE_STRING', value) assert settings.SIMPLE_STRING == value
def test_should_use_database_reader_with_simple_settings( self, database, sqlite_db ): settings = LazySettings('tests.samples.simple') settings.configure( SIMPLE_SETTINGS={'DYNAMIC_SETTINGS': { 'backend': 'database', 'sqlalchemy.url': sqlite_db }} ) settings._initialized = False settings.setup() assert settings.SIMPLE_STRING == 'simple' database.set('SIMPLE_STRING', 'dynamic') assert settings.SIMPLE_STRING == 'dynamic' settings.configure(SIMPLE_STRING='foo') assert database.get('SIMPLE_STRING') == 'foo'
def test_should_use_memcached_reader_with_simple_settings( self, memcached, dynamic_settings ): settings = LazySettings('tests.samples.simple') settings.configure( SIMPLE_SETTINGS={'DYNAMIC_SETTINGS': dynamic_settings} ) settings._initialized = False settings.setup() assert settings.SIMPLE_STRING == 'simple' memcached.set('SIMPLE_STRING', 'dynamic', noreply=False) assert settings.SIMPLE_STRING == 'dynamic' settings.configure(SIMPLE_STRING='foo') assert self._get_value_from_memcached( memcached, 'SIMPLE_STRING' ) == 'foo'
def test_should_use_dynamic_setting_only_for_setting_than_match_pattern( self, settings_dict ): settings = LazySettings('tests.samples.dynamic') settings_dict[ 'SIMPLE_SETTINGS' ]['DYNAMIC_SETTINGS']['pattern'] = 'SIMPLE_*' settings.configure(**settings_dict) settings._initialized = False # to load dynamic read settings.setup() assert settings.ANOTHER_STRING == 'another' settings._dynamic_reader.set('ANOTHER_STRING', 'dynamic') assert settings.ANOTHER_STRING == 'another' assert settings.SIMPLE_STRING == 'simple' settings._dynamic_reader.set('SIMPLE_STRING', 'dynamic') assert settings.SIMPLE_STRING == 'dynamic'
def test_should_override_a_setting_without_accessing_it_first(self): expect_module = 'tests.samples.simple' settings = LazySettings(expect_module) settings.configure(SIMPLE_STRING='overridden') assert settings.SIMPLE_STRING == 'overridden'
def test_should_return_a_nice_repr(self): settings = LazySettings('tests.samples.simple') assert repr(settings) == '<SIMPLE-SETTINGS ({})>'.format( settings.as_dict() )
def test_should_return_a_nice_repr(self): settings = LazySettings('tests.samples.simple') assert repr(settings) == '<SIMPLE-SETTINGS ({})>'.format( settings.as_dict())
def test_should_read_init_settings_value(self): expect_module = 'tests.samples.simple' settings = LazySettings(expect_module) assert settings._settings_list == [expect_module] assert settings.SIMPLE_STRING == u'simple'
def test_should_override_a_setting_without_accessing_it_first(self): expect_module = 'tests.samples.simple' settings = LazySettings(expect_module) settings.configure(SIMPLE_STRING='overridden') assert settings.SIMPLE_STRING == 'overridden'
def test_should_raise_error_if_dont_have_strategy_for_an_file(self): settings = LazySettings() with patch.object(sys, 'argv', ['', '--settings=foo.bar']): with pytest.raises(RuntimeError): settings.foo
def test_should_raise_error_if_setting_not_found(self): settings = LazySettings() with patch.object(sys, 'argv', ['', '--settings=foo']): with pytest.raises(RuntimeError): settings.foo
def test_misconfigured_object_path(self): settings = LazySettings('tests.samples.non_existing_module.Config') settings.add_strategy(SettingsLoadStrategyPythonObj) with pytest.raises(RuntimeError): settings.as_dict() settings = LazySettings('tests.samples.python_obj.non_existing_class') settings.add_strategy(SettingsLoadStrategyPythonObj) with pytest.raises(RuntimeError): settings.as_dict()
def test_should_raise_error_if_setting_are_not_configured(self): settings = LazySettings() with patch.object(sys, 'argv', []): with pytest.raises(RuntimeError): settings.foo
def test_should_read_class_settings_value(self): settings = LazySettings('tests.samples.python_obj.MyConfig') settings.add_strategy(SettingsLoadStrategyPythonObj) assert settings.START_URLS == ['https://www.google.com'] assert settings.AUTO_CONNECT == True
def test_should_not_read_non_class_settings_value(self): settings = LazySettings('tests.samples.python_obj.config_invalid') settings.add_strategy(SettingsLoadStrategyPythonObj) with pytest.raises(RuntimeError): settings.as_dict()