A Django util for managing app settings.
Project description
Django Zero Settings
a Django util for managing app settings.
when u create a package for Django, usually if your app can be configured, needs to use Django settings. so you will have some defaults which can be overridden by the user.
this package helps you to specify defaults, and the key that users must use for configuring settings, then it will load user settings, update defaults, and import string notations.
this is actually how django-rest-framework configures its settings, but with a few more features.
Install
pip install django-zero-settings
Usages
create a settings object like this:
from zero_settings import ZeroSettings
app_settings = ZeroSettings(
key="APP",
defaults={
"TOKEN": "token"
},
)
then you can import app_settings
and use it:
from app.settings import app_settings
print(app_settings.TOKEN)
Args
ZeroSettings
can get following args:
arg | desc |
---|---|
key |
the settings key which users will define settings with, is required and must be a string. |
defaults |
default settings for the app, required and must be a dict. |
user_settings |
you can also set user settings manually, in this case, user settings with key will not be loaded. is optional and can be a dict. |
import_strings |
a list of setting keys that must be imported, import strings is lazy checked and will raise ImportError on exceptions like: "Could not import 'app.utils.Token' for setting 'APP.TOKEN_CLASS'. ImportError: path does not exist." |
removed_settings |
a dict of settings which had been removed, in {"KEY": "msg"} format. it will raise RuntimeError if a setting is in removed_settings. note that these keys must be also on defaults too, otherwise, it will raise AttributeError instead. the msg part of dict is the error message. on None or empty strings, it generates the default message which is "The 'APP.KEY' setting has been removed." |
settings_doc |
a string that locates the settings document path, the value will be used to generate removed_settings error with a message like: "Please refer to 'https://app.com/doc/settings' for available settings." |
use_cache |
a boolean that defines whether to use cache or not |
strict_defaults |
a boolean that defines whether to be strict on defaults or not, if true, only default keys are valid in user settings |
pre_check_defaults |
a boolean that defines whether to pre check defaults or not |
pre_check_imports |
a boolean that defines whether to pre check imports or not |
pre_check_removed |
a boolean that defines whether to pre check removed or not |
Import Strings
with following class and methods at app.utils
:
class Token:
@staticmethod
def get_token():
return "token"
def validate_value(token):
return token == "token"
def validate_length(token):
return len(token) == 5
you can create an app_settings
like this:
from zero_settings import ZeroSettings
app_settings = ZeroSettings(
key="APP",
defaults={
"TOKEN_CLASS": "app.utils.Token",
"TOKEN_VALIDATORS": [
"app.utils.validate_value",
"app.utils.validate_length",
]
},
import_strings=[
"TOKEN_CLASS",
"TOKEN_VALIDATORS",
]
)
then you can import app_settings
and use it:
from app.settings import app_settings
token = app_setting.TOKEN_CLASS.get_token()
for validator in app_settings.TOKEN_VALIDATORS:
validator(token)
Removed Settings
removed settings can be configured like:
from zero_settings import ZeroSettings
app_settings = ZeroSettings(
key="APP",
defaults={
"TOKEN": "token",
"URL": None, # you need to include the key in defaults too.
},
removed_settings={
"URL": None, # or ""
# or
"URL": "URL had been removed from settings."
}
)
then if user tries to get the URL
key, a RuntimeError
will be raised.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for django-zero-settings-0.1.6.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 03867b6625cb5494cca55f3c962924107e3b5475a8a489bbdc22f2b55c244599 |
|
MD5 | b6b755849b7d511f74985232f71adbf2 |
|
BLAKE2b-256 | de55db9a34c66b933a824840179d5e38e98beaba4e1c4055d904827245829e56 |
Hashes for django_zero_settings-0.1.6-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5c7326db129acf9b14d96c7d3a34a291f9c3888c2103f631f494382070aa016a |
|
MD5 | a761d217d4881efe165032c9a464e8c4 |
|
BLAKE2b-256 | 3bdd2df1a0535b74ff4ba52805d5dded3f507061759241c3182f032662e53c82 |