lib.config

This library does the handling and parsing of the configuration of SmartHomeNG.

Warning:

This library is part of the core of SmartHomeNG. It should not be called directly from plugins!

lib.config.add_struct_to_item_template(path, struct_name, template, struct_dict, instance)[Quellcode]

Add the referenced struct to the items_template subtree

Parameter:
  • path – Path of the item which references a struct (template)

  • struct_name – Name of the to use for the item

  • template – Template dict to be merged into the item tree

  • struct_dict – dict with all defined structs (from /etc/structs.yaml and from loaded plugins)

  • instance – For multi instance plugins: instance for which the items work (is derived from item with struct attribute)

Rückgabe:

lib.config.merge(source, destination, source_name='', dest_name='', filename='')[Quellcode]

Merges an OrderedDict Tree into another one

Parameter:
  • source (OrderedDict) – source tree to merge into another one

  • destination (OrderedDict) – destination tree to merge into

Rückgabe:

Merged configuration tree

Rückgabetyp:

OrderedDict

Example:

Run me with nosetests –with-doctest file.py

>>> a = { 'first' : { 'all_rows' : { 'pass' : 'dog', 'number' : '1' } } }
>>> b = { 'first' : { 'all_rows' : { 'fail' : 'cat', 'number' : '5' } } }
>>> merge(b, a) == { 'first' : { 'all_rows' : { 'pass' : 'dog', 'fail' : 'cat', 'number' : '5' } } }
True
lib.config.merge_structlists(l1, l2, key='')[Quellcode]
lib.config.nested_get(input_dict, path)[Quellcode]
lib.config.nested_put(output_dict, path, value)[Quellcode]
Parameter:
  • output_dict – dict structure to write to

  • path – path to write to

  • value – value to write to the nested key

Rückgabe:

lib.config.parse(filename, config=None, addfilenames=False, parseitems=False, struct_dict={})[Quellcode]

Load and parse a configuration file and merge it to the configuration tree Depending on the extension of the filename, the apropriate parser is called

Parameter:
  • filename (str) – Name of the configuration file

  • config (OrderedDict) – Optional OrderedDict tree, into which the configuration should be merged

  • struct_dict – dict with all defined structs (from /etc/structs.yaml and from loaded plugins)

Rückgabe:

The resulting merged OrderedDict tree

Rückgabetyp:

OrderedDict

lib.config.parse_basename(basename, configtype='')[Quellcode]

Load and parse a single configuration and merge it to the configuration tree The configuration is only specified by the basename. At the moment it looks for a .yaml file or a .conf file .yaml files take preference

Parameter:
  • basename (str) – Name of the configuration

  • configtype (str) – Optional string with config type (only used for log output)

Rückgabe:

The resulting merged OrderedDict tree

Rückgabetyp:

OrderedDict

lib.config.parse_conf(filename, config=None)[Quellcode]

Load and parse a configuration file which is in the old .conf format of smarthome.py and merge it to the configuration tree

Parameter:
  • filename (str) – Name of the configuration file

  • config (bool) – Optional OrderedDict tree, into which the configuration should be merged

Rückgabe:

The resulting merged OrderedDict tree

Rückgabetyp:

OrderedDict

The config file should stick to the following setup:

[firstlevel]
    attribute1 = xyz
    attribute2 = foo
    attribute3 = bar

    [[secondlevel]]
        attribute1 = abc
        attribute2 = bar
        attribute3 = foo

        [[[thirdlevel]]]
            attribute1 = def
            attribute2 = barfoo
            attribute3 = foobar

    [[anothersecondlevel]]
        attribute1 = and so on

where firstlevel, secondlevel, thirdlevel and anothersecondlevel are defined as items and attribute are their respective attribute - value pairs

Valid characters for the items are a-z and A-Z plus any digit and underscore as second or further characters. Valid characters for the attributes are the same as for an item plus @ and *

lib.config.parse_itemsdir(itemsdir, item_conf, addfilenames=False, struct_dict={})[Quellcode]

Load and parse item configurations and merge it to the configuration tree The configuration is only specified by the name of the directory. At the moment it looks for .yaml files and a .conf files Both filetypes are read, even if they have the same basename

Parameter:
  • itemsdir (str) – Name of folder containing the configuration files

  • item_conf (OrderedDict) – Optional OrderedDict tree, into which the configuration should be merged

  • addfilenames

  • struct_dict (dict / OrderedDict) – dict with all defined structs (from /etc/structs.yaml and from loaded plugins)

Rückgabe:

The resulting merged OrderedDict tree

Rückgabetyp:

OrderedDict

lib.config.parse_yaml(filename, config=None, addfilenames=False, parseitems=False, struct_dict={})[Quellcode]

Load and parse a yaml configuration file and merge it to the configuration tree

Parameter:
  • filename (str) – Name of the configuration file

  • config (bool) – Optional OrderedDict tree, into which the configuration should be merged

  • addfilenames (bool) – x

  • parseitems (bool) – x

  • struct_dict (dict) – dictionary with stuct definitions (templates) for reading item tree

Rückgabe:

The resulting merged OrderedDict tree

Rückgabetyp:

OrderedDict

The config file should stick to the following setup:

firstlevel:
    attribute1: xyz
    attribute2: foo
    attribute3: bar

    secondlevel:
        attribute1: abc
        attribute2: bar
        attribute3: foo

        thirdlevel:
            attribute1: def
            attribute2: barfoo
            attribute3: foobar

    anothersecondlevel:
        attribute1: and so on

where firstlevel, secondlevel, thirdlevel and anothersecondlevel are defined as items and attribute are their respective attribute - value pairs

Valid characters for the items are a-z and A-Z plus any digit and underscore as second or further characters. Valid characters for the attributes are the same as for an item plus @ and *

lib.config.remove_comments(ydata, filename='')[Quellcode]

Removes comments from a dict or OrderedDict structure

Parameter:

ydata (OrderedDict) – configuration (sub)tree to work on

lib.config.remove_digits(ydata, filename='')[Quellcode]

Removes keys starting with digits from a dict or OrderedDict structure

Parameter:

ydata (OrderedDict) – configuration (sub)tree to work on

lib.config.remove_invalid(ydata, filename='')[Quellcode]

Removes invalid chars in item from a dict or OrderedDict structure

Parameter:

ydata (OrderedDict) – configuration (sub)tree to work on

lib.config.remove_keys(ydata, func, remove=['attr'], level=0, msg=None, key_prefix='')[Quellcode]

Removes given keys from a dict or OrderedDict structure

Parameter:
  • ydata (OrderedDict) – configuration (sub)tree to work on

  • func (function) – the function to call to check for removal (Example: lambda k: k.startswith(‚comment‘))

  • level (int) – optional subtree level (used for recursion)

lib.config.remove_keyword(ydata, filename='')[Quellcode]

Removes keys that are reserved Python keywords from a dict or OrderedDict structure

Parameter:

ydata (OrderedDict) – configuration (sub)tree to work on

lib.config.remove_reserved(ydata, filename='')[Quellcode]

Removes keys that are reserved keywords from a dict or OrderedDict structure

Parameter:

ydata (OrderedDict) – configuration (sub)tree to work on

lib.config.remove_special_listentries(config, filename='')[Quellcode]
lib.config.replace_struct_instance(path, subtree, instance)[Quellcode]

Replace the constant string @instance‘ in attribute names with the real instance (or remove the constant string @instance‘, if the struct has no instace reference)

Parameter:
  • path

  • subtree

  • instance

Rückgabe:

lib.config.sanitize_items(ydata, filename='')[Quellcode]

Remove all invalid entries from OrderedDict structure

Parameter:

ydata (OrderedDict) – configuration (sub)tree to work on

lib.config.search_for_struct_in_items(items, struct_dict, config, source_name='', parent='', level=0)[Quellcode]

Test if the loaded file contains items with ‚struct‘ attribute.

This function is (recursively) called before merging the loaded file into the item tree

Parameter:
  • items (OrderedDict) – tree content of a single items.yaml file (or part of it during recursion)

  • struct_dict – dict with all defined structs (from /etc/structs.yaml and from loaded plugins)

  • config (OrderedDict) – tree, into which the configuration should be merged

  • parent

Rückgabe:

True, if a struct attribute was expanded

lib.config.set_attr_for_subtree(subtree, attr, value, indent=0)[Quellcode]
Parameter:
  • subtree – dict (subtree) to operate on

  • attr – Attribute to set for every item

  • value – Value to set the attribute to

  • indent – indent level (only for debug-logging)

Rückgabe:

lib.config.strip_quotes(string)[Quellcode]

Strip single-quotes or double-quotes from string beggining and end

Parameter:

string (str) – String to strip the quotes from

Rückgabe:

Stripped string

Rückgabetyp:

str