Source code for djangocodemirror.helper

"""

.. _helper-intro:

Configuration helper
====================

Usually you will want to just use included configurations from default settings
and just add some parameters on them.

``codemirror_settings_update`` function will help you to easily apply these
parameters on many configuration in a single act.

Obviously, this is something to use from your settings.

Examples:

    Sample usage to apply some parameters only every configuration from default
    settings:

    .. sourcecode:: python

        from djangocodemirror.settings import *
        from djangocodemirror.helper import codemirror_settings_update

        CODEMIRROR_SETTINGS = codemirror_settings_update(CODEMIRROR_SETTINGS, {
            'lineNumber': False,
            'indent': 4
        })

    Sample usage to apply some parameters only on configuration ``python`` and
    keeping only two configurations from default settings:

    .. sourcecode:: python

        from djangocodemirror.settings import *
        from djangocodemirror.helper import codemirror_settings_update

        CODEMIRROR_SETTINGS = codemirror_settings_update(CODEMIRROR_SETTINGS, {
            'lineNumber': False,
            'indent': 4
        }, on=['python'], names=['css', 'python'])


.. Note::
    This helper is not able to delete parameters.

"""
import copy


[docs]def codemirror_settings_update(configs, parameters, on=None, names=None): """ Return a new dictionnary of configs updated with given parameters. You may use ``on`` and ``names`` arguments to select config or filter out some configs from returned dict. Arguments: configs (dict): Dictionnary of configurations to update. parameters (dict): Dictionnary of parameters to apply on selected configurations. Keyword Arguments: on (list): List of configuration names to select for update. If empty, all given configurations will be updated. names (list): List of configuration names to keep. If not empty, only those configurations will be in returned dict. Else every configs from original dict will be present. Returns: dict: Dict of configurations with updated parameters. """ # Deep copy of given config output = copy.deepcopy(configs) # Optionnaly filtering config from given names if names: output = {k: output[k] for k in names} # Select every config if selectors is empty if not on: on = output.keys() for k in on: output[k].update(parameters) return output