{"id":15673305,"url":"https://github.com/pawamoy/django-appsettings","last_synced_at":"2025-04-16T05:56:07.195Z","repository":{"id":44478365,"uuid":"85981538","full_name":"pawamoy/django-appsettings","owner":"pawamoy","description":"Application settings helper for Django apps.","archived":false,"fork":false,"pushed_at":"2023-09-07T13:30:06.000Z","size":225,"stargazers_count":15,"open_issues_count":12,"forks_count":5,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-05-02T05:57:01.433Z","etag":null,"topics":["app","apps","django","settings"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pawamoy.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.rst","contributing":"CONTRIBUTING.rst","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.rst","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-03-23T18:01:00.000Z","updated_at":"2024-06-19T22:47:53.423Z","dependencies_parsed_at":"2024-06-19T22:47:46.342Z","dependency_job_id":"4e992f06-ba14-4fe1-b528-60c3f69bea72","html_url":"https://github.com/pawamoy/django-appsettings","commit_stats":{"total_commits":176,"total_committers":9,"mean_commits":"19.555555555555557","dds":0.5227272727272727,"last_synced_commit":"720eb39e5efc7debc2cd6aec7950a5542a7c3044"},"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pawamoy%2Fdjango-appsettings","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pawamoy%2Fdjango-appsettings/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pawamoy%2Fdjango-appsettings/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pawamoy%2Fdjango-appsettings/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pawamoy","download_url":"https://codeload.github.com/pawamoy/django-appsettings/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249205592,"owners_count":21229954,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["app","apps","django","settings"],"created_at":"2024-10-03T15:39:14.844Z","updated_at":"2025-04-16T05:56:07.169Z","avatar_url":"https://github.com/pawamoy.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"==================\nDjango AppSettings\n==================\n\n.. start-badges\n\n\n\n|travis|\n|codacygrade|\n|codacycoverage|\n|version|\n|wheel|\n|gitter|\n\n\n.. |travis| image:: https://travis-ci.org/pawamoy/django-appsettings.svg?branch=master\n    :target: https://travis-ci.org/pawamoy/django-appsettings/\n    :alt: Travis Build Status\n\n.. |codacygrade| image:: https://api.codacy.com/project/badge/Grade/20c775cc36804ddda8a70eb05b64ce92\n    :target: https://www.codacy.com/app/pawamoy/django-appsettings/dashboard\n    :alt: Codacy Grade\n\n.. |codacycoverage| image:: https://api.codacy.com/project/badge/Coverage/20c775cc36804ddda8a70eb05b64ce92\n    :target: https://www.codacy.com/app/pawamoy/django-appsettings/dashboard\n    :alt: Codacy Coverage\n\n.. |version| image:: https://img.shields.io/pypi/v/django-app-settings.svg?style=flat\n    :target: https://pypi.org/project/django-app-settings/\n    :alt: PyPI latest release\n\n.. |wheel| image:: https://img.shields.io/pypi/wheel/django-app-settings.svg?style=flat\n    :target: https://pypi.org/project/django-app-settings/\n    :alt: PyPI Wheel\n\n.. |gitter| image:: https://badges.gitter.im/pawamoy/django-appsettings.svg\n    :target: https://gitter.im/pawamoy/django-appsettings\n    :alt: Join the chat at https://gitter.im/pawamoy/django-appsettings\n\n\n\n.. end-badges\n\nApplication settings helper for Django apps.\n\nWhy another *app settings* app?\nBecause none of the other suited my needs!\n\nThis one is simple to use, and works with unit tests overriding settings.\n\nInstallation\n============\n\n::\n\n    pip install django-app-settings\n\nDocumentation\n=============\n\n`On ReadTheDocs`_\n\n.. _`On ReadTheDocs`: http://django-appsettings.readthedocs.io/\n\nDevelopment\n===========\n\nTo run all the tests: ``tox``. See `CONTRIBUTING`_.\n\n.. _`CONTRIBUTING`: https://github.com/pawamoy/django-appsettings/blob/master/CONTRIBUTING.rst\n\nQuick usage\n===========\n\n.. code:: python\n\n    # Define your settings class\n    import appsettings\n\n\n    class MySettings(appsettings.AppSettings):\n        boolean_setting = appsettings.BooleanSetting(default=False)\n        required_setting = appsettings.StringSetting(required=True)\n        named_setting = appsettings.IntegerSetting(name='integer_setting')\n        prefixed_setting = appsettings.ListSetting(prefix='my_app_')\n\n        class Meta:\n            setting_prefix = 'app_'\n\n\n    # Related settings in settings.py\n    APP_INTEGER_SETTING = -24\n    MY_APP_PREFIXED_SETTING = []\n\n\n    # Instantiate your class wherever you need to\n    appconf = MySettings()\n    assert appconf.boolean_setting is False  # True (default value)\n    assert appconf.required_setting == 'hello'  # raises AttributeError\n    assert appconf.named_setting \u003c 0  # True\n    assert appconf.prefixed_setting  # False (empty list)\n\n\n    # Values are cached to avoid perf issues\n    with override_settings(APP_REQUIRED_SETTING='hello',\n                           APP_INTEGER_SETTING=0):\n        # ...but cache is cleaned on Django's setting_changed signal\n        assert appconf.required_setting == 'hello'  # True\n        assert appconf.named_setting \u003c 0  # False\n\n\n    # You can still access settings through the class itself (values not cached)\n    print(MySettings.boolean_setting.get_value())  # explicit call\n    print(MySettings.boolean_setting.value)  # with property\n\n\n    # Run type checking and required presence on all settings at once\n    MySettings.check()  # raises Django's ImproperlyConfigured (missing required_setting)\n    # MySettings.check() is best called in django.apps.AppConfig's ready method\n\n\nYou can easily create your own Setting classes for more complex settings.\n\n.. code:: python\n\n    import re\n\n    import appsettings\n    from django.core.exceptions import ValidationError\n\n\n    class RegexSetting(appsettings.Setting):\n        def validate(self, value):\n            re_type = type(re.compile(r'^$'))\n            if not isinstance(value, (re_type, str)):\n                # Raise ValidationError\n                raise ValidationError('Value must be a string or a compiled regex (use re.compile)')\n\n        def transform(self, value):\n            # ensure it always returns a compiled regex\n            if isinstance(value, str):\n                value = re.compile(value)\n            return value\n\n\nPlease check the documentation to see even more advanced usage.\n\nLicense\n=======\n\nSoftware licensed under `ISC`_ license.\n\n.. _ISC: https://www.isc.org/downloads/software-support-policy/isc-license/\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpawamoy%2Fdjango-appsettings","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpawamoy%2Fdjango-appsettings","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpawamoy%2Fdjango-appsettings/lists"}