Create immutable namedtuple from dict
Project description
Immutable
Immutable library helps to convert python dictionary to namedtuples and converting values to immutable datastructure recursively. Namedtuples, by default, are immutable. You can’t modify them. But If you have nested data structures, you can still modify them.
Immutable library tries to provides a function to convert them immutable and creates namedtuple from the converted dict.
Dict -> MappingProxyType
List -> Tuple
Set -> Frozenset
UseCase
When “global variables as configuration” should be shared across the project, library will help to make config immutable.
Code Example
from immutable.immutable import immutable
LOGGING = {
'formatters': {
'verbose': {
'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',
'style': '{',
},
'simple': {
'format': '{levelname} {message}',
'style': '{',
},
},
'loggers': {
'django': {
'handlers': ['console'],
'propagate': True,
},
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': False,
},
'myproject.custom': {
'handlers': {'console', 'mail_admins'},
'level': 'INFO',
'filters': ['special']
}
}
}
config = immutable('LoggingConfig', LOGGING, only_const=False, recursive=True)
Options
only_const (default = False)
It will create namedtuple from all dictionary keys. When it is set to True
,
it will only create namedtuple from constants
(all caps variables).
recursive (default = False)
Only first level of key-vales are immuted, when it is set to False
. When it is set to True
,
all the key-values are traversed and converted to immutable.
clone (default = True)
Clone the given dictionary and mutates it. deepcopy is a costly operation when dictionary is to many levels of nested with basic python data structure (list, tuple, set, dict).
Setting it to False
will improve the performance, but it will mutate the data given to immutable function.
So use False
, when you do not need to access the data after making it immutable.
properties
Immutable function takes all the key from data given and creates namedtuple from that. If you want to create namedtuple
with selected keys, you can pass properties iterable
to filter from data.
License
This project is licensed under the MIT License - see the LICENSE file for details
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
File details
Details for the file immutable-config-1.0.tar.gz
.
File metadata
- Download URL: immutable-config-1.0.tar.gz
- Upload date:
- Size: 4.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9ce4cdec94596f9433ebfdf20c43ecccd94dfe647d1c5e5f96cd3363363bff61 |
|
MD5 | aab4ff888c9eb75c11324c5de6411ad2 |
|
BLAKE2b-256 | a215d12b8460a51d076f63ac67bfad012bec4691a30c8e33d6ca9d828fc256b2 |
File details
Details for the file immutable_config-1.0-py3-none-any.whl
.
File metadata
- Download URL: immutable_config-1.0-py3-none-any.whl
- Upload date:
- Size: 4.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9e5b609443d07a195fc8e38b2fa8d6e6ea88ec1ff04f0bdfd8e24f1a5c464c53 |
|
MD5 | 088bd8ff51923fd6c35924c2440de0eb |
|
BLAKE2b-256 | 9a692b734c339751990d13b8bd9fe43f7b8c5cbdbbfe16117137bde9065e23b3 |