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"
示例#2
0
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,
         ),
     )
示例#4
0
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_'
示例#5
0
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"
示例#8
0
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_'
示例#9
0
 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"