Skip to main content

Create immutable namedtuple from dict

Project description

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

Project details


Release history Release notifications | RSS feed

This version

1.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

immutable-config-1.0.tar.gz (4.7 kB view hashes)

Uploaded Source

Built Distribution

immutable_config-1.0-py3-none-any.whl (4.9 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page