def test_parent_setting_precedence_over_environ_value(self): setting = appsettings.NestedDictSetting( settings=dict(a=appsettings.StringSetting(), b=appsettings.StringSetting(),), name="setting" ) setting.check() assert setting.value["a"] == "A" assert setting.value["b"] == "B"
class AppSettings(aps.AppSettings): """ Application settings class. Settings: - default_response (bool): - skip_implicit (bool): - log_access (bool): - log_privileges (bool): - log_hierarchy (bool): - mapping (tuple): - namespace (str): """ allow_update_own_privileges = aps.BooleanSetting(default=False) default_response = aps.BooleanSetting(default=False) skip_implicit = aps.BooleanSetting(default=False) log_access = aps.BooleanSetting(default=True) log_privileges = aps.BooleanSetting(default=True) log_hierarchy = aps.BooleanSetting(default=True) namespace = aps.StringSetting(default='') mapping = MappingSetting(default=()) access_permission = aps.StringSetting(default='read') class Meta: setting_prefix = 'CERBERUS_'
class AppConf(appsettings.AppSettings): setting = cast( Dict[str, str], appsettings.NestedDictSetting( settings=dict( one=appsettings.StringSetting(required=True), two=appsettings.StringSetting(default="Def_2"), ), required=True, ), )
class PainSettings(appsettings.AppSettings): """Specific settings for django-pain app.""" # Dictionary of names and dotted paths to processor classes setting. processors = NamedClassSetting( 'django_pain.processors.AbstractPaymentProcessor', required=True, key_type=str, value_type=str) # A card payment handler classes. card_payment_handlers = NamedClassSetting( 'django_pain.card_payment_handlers.AbstractCardPaymentHandler', key_type=str, value_type=str) # Location of process_payments command lock file. process_payments_lock_file = appsettings.StringSetting( default='/tmp/pain_process_payments.lock') # Whether variable symbol should be trimmed of leading zeros. trim_varsym = appsettings.BooleanSetting(default=False) # List of dotted paths to callables that takes BankPayment object as their argument and return (possibly) changed # BankPayment. # # These callables are called right before the payment is saved during the import. Especially, these callable can # raise ValidationError in order to avoid saving payment to the database. import_callbacks = CallableListSetting(item_type=str) downloaders = NamedDictSetting( dict(DOWNLOADER=appsettings.ObjectSetting( required=True, validators=[ClassPathValidator(BankStatementDownloader)]), PARSER=appsettings.ObjectSetting( required=True, validators=[ClassPathValidator(BankStatementParser)]), DOWNLOADER_PARAMS=appsettings.DictSetting(required=True, key_type=str))) # CSOB card settings csob_card = appsettings.NestedDictSetting(dict( api_url=appsettings.StringSetting( default='https://api.platebnibrana.csob.cz/api/v1.7/'), api_public_key=appsettings.FileSetting(required=True), merchant_id=appsettings.StringSetting(required=True), merchant_private_key=appsettings.FileSetting(required=True), account_name=appsettings.StringSetting(required=True), ), default=None) class Meta: """Meta class.""" setting_prefix = 'pain_'
class Settings(appsettings.AppSettings): DJANGO_LIVE_DASHBOARD = appsettings.NestedDictSetting( settings=dict( ENABLED=appsettings.BooleanSetting(default=False), WEBSOCKET_HOST=appsettings.StringSetting(default="localhost:8000"), TOTAL_TIME_CUTOFF=appsettings.FloatSetting(default=0.5), REDIS=appsettings.NestedDictSetting( settings=dict( HOST=appsettings.StringSetting(default=REDIS_DEFAULTS["HOST"]), PORT=appsettings.IntegerSetting(default=REDIS_DEFAULTS["PORT"]), DB=appsettings.IntegerSetting(default=REDIS_DEFAULTS["DB"]), PUBSUB_CHANNEL=appsettings.StringSetting( default=REDIS_DEFAULTS["PUBSUB_CHANNEL"] ), ), default=REDIS_DEFAULTS, ), CHART=appsettings.NestedDictSetting( settings=dict( REFRESH=appsettings.IntegerSetting( default=CHART_DEFAULTS["REFRESH"] ), DELAY=appsettings.IntegerSetting(default=CHART_DEFAULTS["DELAY"]), DURATION=appsettings.IntegerSetting( default=CHART_DEFAULTS["DURATION"] ), ), default=CHART_DEFAULTS, ), ), default={ "ENABLED": False, "WEBSOCKET_HOST": "localhost:8000", "TOTAL_TIME_CUTOFF": 0.5, "REDIS": REDIS_DEFAULTS, "CHART": CHART_DEFAULTS, }, )
def test_nested_dict_setting_required_both_inner_and_outer_setting(self): outer_setting = appsettings.NestedDictSetting( name="outer_setting", required=True, settings=dict(inner_setting=appsettings.StringSetting(required=True)) ) # Not passed anything with pytest.raises(ImproperlyConfigured): outer_setting.check() # Pass outer setting with override_settings(OUTER_SETTING={"INNER_FAKE_SETTING": "Fake setting value"}): with pytest.raises(ImproperlyConfigured): outer_setting.check() # Pass inner setting as well with override_settings(OUTER_SETTING={"INNER_SETTING": "Value"}): outer_setting.check() assert len(outer_setting.value.items()) == 1 assert outer_setting.value.get("inner_setting") == "Value"
def test_nested_dict_setting_not_required_anything(self): outer_setting = appsettings.NestedDictSetting( name="outer_setting", settings=dict(inner_setting=appsettings.StringSetting(default="Default")) ) # Not passed anything outer_setting.check() assert len(outer_setting.value.items()) == 0 assert outer_setting.value.get("inner_setting") is None # Pass outer setting with override_settings(OUTER_SETTING={"INNER_FAKE_SETTING": "Fake setting value"}): outer_setting.check() assert len(outer_setting.value.items()) == 1 assert outer_setting.value.get("inner_setting") == "Default" # Pass inner setting as well with override_settings(OUTER_SETTING={"INNER_SETTING": "Value"}): outer_setting.check() assert len(outer_setting.value.items()) == 1 assert outer_setting.value.get("inner_setting") == "Value"
class AppSettings(aps.AppSettings): archan_dsm = ArchanPackagesSetting(default={ 'framework': ('Django', ['django']), 'django-apps': ('Django Apps', ['meerkat']), 'project-apps': ('Project Apps', []), 'project-modules': ('Project Modules', []), 'broker': ('Broker', []), 'data': ('Data', []) }, name='ARCHAN_PACKAGES') logs_file_path_regex = RegexSetting() logs_format_regex = RegexSetting() logs_top_dir = aps.StringSetting(default=None) logs_start_daemon = aps.BooleanSetting(default=False) logs_url_whitelist = URLWhitelistSetting(default={ 'ASSET': { 'PREFIXES': ( 'media/', 'static/', 'assets/', 'cache/', ) }, 'COMMON_ASSET': { 'CONSTANTS': ( 'favicon.ico', 'robots.txt', 'apple-touch-icon.png', 'apple-touch-icon-precomposed.png', 'apple-touch-icon-120x120.png', 'apple-touch-icon-120x120-precomposed.png' ) }, 'OLD_ASSET': {}, 'OLD_PROJECT': {}, 'FALSE_NEGATIVE': {}, 'IGNORED': { 'PREFIXES': ( 'assets/flash/ZeroClipboard.swf', ) } }) class Meta: setting_prefix = 'MEERKAT_'
def test_string_setting(self): setting = appsettings.StringSetting() assert setting.value == ""
class AppConf(appsettings.AppSettings): one = appsettings.StringSetting() two = appsettings.StringSetting() three = appsettings.StringSetting() four = appsettings.StringSetting(default="Def_4")
def test_string_setting_from_environ_pure_value(self): setting = appsettings.StringSetting(name="setting") setting.check() assert setting.value == "pure-string"