Skip to main content
Travis CI codecov test coverage MIT License

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

Release files for immutable-config 1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for immutable-config 1.0
File Size Uploaded
immutable-config-1.0.tar.gz 4.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for immutable-config 1.0
File Interpreter ABI Platform
immutable_config-1.0-py3-none-any.whl Python 3 none any Details

Total release size: 9.6 kB

Release files / immutable-config-1.0.tar.gz

Download URL immutable-config-1.0.tar.gz
Size 4.7 kB
Tags Source
SHA-256 checksum
How to use checksums
9ce4cdec94596f9433ebfdf20c43ecccd94dfe647d1c5e5f96cd3363363bff61
BLAKE2b-256 checksum
How to use checksums
a215d12b8460a51d076f63ac67bfad012bec4691a30c8e33d6ca9d828fc256b2
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / immutable_config-1.0-py3-none-any.whl

Download URL immutable_config-1.0-py3-none-any.whl
Size 4.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9e5b609443d07a195fc8e38b2fa8d6e6ea88ec1ff04f0bdfd8e24f1a5c464c53
BLAKE2b-256 checksum
How to use checksums
9a692b734c339751990d13b8bd9fe43f7b8c5cbdbbfe16117137bde9065e23b3
Upload date
Uploaded using Trusted Publishing?
What is 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

Release history Release notifications | RSS feed

This release

1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page