2015-08-08 02:11:30 +00:00
<!DOCTYPE html>
<!-- [if IE 8]><html class="no - js lt - ie9" lang="en" > <![endif] -->
<!-- [if gt IE 8]><! --> < html class = "no-js" lang = "en" > <!-- <![endif] -->
< head >
< meta charset = "utf-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
< title > terminatorlib.configobj.configobj — terminatorlib 0.98 documentation< / title >
< link rel = "stylesheet" href = "../../../_static/css/theme.css" type = "text/css" / >
< link rel = "top" title = "terminatorlib 0.98 documentation" href = "../../../index.html" / >
< link rel = "up" title = "Module code" href = "../../index.html" / >
< script src = "_static/js/modernizr.min.js" > < / script >
< / head >
< body class = "wy-body-for-nav" role = "document" >
< div class = "wy-grid-for-nav" >
< nav data-toggle = "wy-nav-shift" class = "wy-nav-side" >
< div class = "wy-side-nav-search" >
< a href = "../../../index.html" class = "icon icon-home" > terminatorlib
< / a >
< div role = "search" >
< form id = "rtd-search-form" class = "wy-form" action = "../../../search.html" method = "get" >
< input type = "text" name = "q" placeholder = "Search docs" / >
< input type = "hidden" name = "check_keywords" value = "yes" / >
< input type = "hidden" name = "area" value = "default" / >
< / form >
< / div >
< / div >
< div class = "wy-menu wy-menu-vertical" data-spy = "affix" role = "navigation" aria-label = "main navigation" >
< ul >
< li class = "toctree-l1" > < a class = "reference internal" href = "../../../terminatorlib.html" > terminatorlib package< / a > < ul >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#subpackages" > Subpackages< / a > < ul >
< li class = "toctree-l3" > < a class = "reference internal" href = "../../../terminatorlib.configobj.html" > terminatorlib.configobj package< / a > < ul >
< li class = "toctree-l4" > < a class = "reference internal" href = "../../../terminatorlib.configobj.html#submodules" > Submodules< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../../../terminatorlib.configobj.html#module-terminatorlib.configobj.configobj" > terminatorlib.configobj.configobj module< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../../../terminatorlib.configobj.html#module-terminatorlib.configobj.validate" > terminatorlib.configobj.validate module< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../../../terminatorlib.configobj.html#module-terminatorlib.configobj" > Module contents< / a > < / li >
< / ul >
< / li >
< li class = "toctree-l3" > < a class = "reference internal" href = "../../../terminatorlib.plugins.html" > terminatorlib.plugins package< / a > < ul >
< li class = "toctree-l4" > < a class = "reference internal" href = "../../../terminatorlib.plugins.html#submodules" > Submodules< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../../../terminatorlib.plugins.html#module-terminatorlib.plugins.activitywatch" > terminatorlib.plugins.activitywatch module< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../../../terminatorlib.plugins.html#module-terminatorlib.plugins.custom_commands" > terminatorlib.plugins.custom_commands module< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../../../terminatorlib.plugins.html#module-terminatorlib.plugins.logger" > terminatorlib.plugins.logger module< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../../../terminatorlib.plugins.html#module-terminatorlib.plugins.maven" > terminatorlib.plugins.maven module< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../../../terminatorlib.plugins.html#module-terminatorlib.plugins.terminalshot" > terminatorlib.plugins.terminalshot module< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../../../terminatorlib.plugins.html#module-terminatorlib.plugins.testplugin" > terminatorlib.plugins.testplugin module< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../../../terminatorlib.plugins.html#module-terminatorlib.plugins.url_handlers" > terminatorlib.plugins.url_handlers module< / a > < / li >
< li class = "toctree-l4" > < a class = "reference internal" href = "../../../terminatorlib.plugins.html#module-terminatorlib.plugins" > Module contents< / a > < / li >
< / ul >
< / li >
< / ul >
< / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#submodules" > Submodules< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.borg" > terminatorlib.borg module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.config" > terminatorlib.config module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.container" > terminatorlib.container module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.cwd" > terminatorlib.cwd module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.debugserver" > terminatorlib.debugserver module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.editablelabel" > terminatorlib.editablelabel module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.encoding" > terminatorlib.encoding module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.factory" > terminatorlib.factory module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.freebsd" > terminatorlib.freebsd module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.ipc" > terminatorlib.ipc module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.keybindings" > terminatorlib.keybindings module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.layoutlauncher" > terminatorlib.layoutlauncher module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.notebook" > terminatorlib.notebook module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.optionparse" > terminatorlib.optionparse module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.paned" > terminatorlib.paned module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.plugin" > terminatorlib.plugin module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.prefseditor" > terminatorlib.prefseditor module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.searchbar" > terminatorlib.searchbar module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.signalman" > terminatorlib.signalman module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.terminal" > terminatorlib.terminal module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.terminal_popup_menu" > terminatorlib.terminal_popup_menu module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.terminator" > terminatorlib.terminator module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.titlebar" > terminatorlib.titlebar module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.translation" > terminatorlib.translation module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.util" > terminatorlib.util module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.version" > terminatorlib.version module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib.window" > terminatorlib.window module< / a > < / li >
< li class = "toctree-l2" > < a class = "reference internal" href = "../../../terminatorlib.html#module-terminatorlib" > Module contents< / a > < / li >
< / ul >
< / li >
< / ul >
< / div >
< / nav >
< section data-toggle = "wy-nav-shift" class = "wy-nav-content-wrap" >
< nav class = "wy-nav-top" role = "navigation" aria-label = "top navigation" >
< i data-toggle = "wy-nav-top" class = "fa fa-bars" > < / i >
< a href = "../../../index.html" > terminatorlib< / a >
< / nav >
< div class = "wy-nav-content" >
< div class = "rst-content" >
< div role = "navigation" aria-label = "breadcrumbs navigation" >
< ul class = "wy-breadcrumbs" >
< li > < a href = "../../../index.html" > Docs< / a > » < / li >
< li > < a href = "../../index.html" > Module code< / a > » < / li >
< li > terminatorlib.configobj.configobj< / li >
< li class = "wy-breadcrumbs-aside" >
< / li >
< / ul >
< hr / >
< / div >
< div role = "main" class = "document" >
< h1 > Source code for terminatorlib.configobj.configobj< / h1 > < div class = "highlight" > < pre >
< span class = "c" > # configobj.py< / span >
< span class = "c" > # A config file reader/writer that supports nested sections in config files.< / span >
< span class = "c" > # Copyright (C) 2005-2010 Michael Foord, Nicola Larosa< / span >
< span class = "c" > # E-mail: fuzzyman AT voidspace DOT org DOT uk< / span >
< span class = "c" > # nico AT tekNico DOT net< / span >
< span class = "c" > # ConfigObj 4< / span >
< span class = "c" > # http://www.voidspace.org.uk/python/configobj.html< / span >
< span class = "c" > # Released subject to the BSD License< / span >
< span class = "c" > # Please see http://www.voidspace.org.uk/python/license.shtml< / span >
< span class = "c" > # Scripts maintained at http://www.voidspace.org.uk/python/index.shtml< / span >
< span class = "c" > # For information about bugfixes, updates and support, please join the< / span >
< span class = "c" > # ConfigObj mailing list:< / span >
< span class = "c" > # http://lists.sourceforge.net/lists/listinfo/configobj-develop< / span >
< span class = "c" > # Comments, suggestions and bug reports welcome.< / span >
< span class = "kn" > from< / span > < span class = "nn" > __future__< / span > < span class = "kn" > import< / span > < span class = "n" > generators< / span >
< span class = "kn" > import< / span > < span class = "nn" > os< / span >
< span class = "kn" > import< / span > < span class = "nn" > re< / span >
< span class = "kn" > import< / span > < span class = "nn" > sys< / span >
< span class = "kn" > from< / span > < span class = "nn" > codecs< / span > < span class = "kn" > import< / span > < span class = "n" > BOM_UTF8< / span > < span class = "p" > ,< / span > < span class = "n" > BOM_UTF16< / span > < span class = "p" > ,< / span > < span class = "n" > BOM_UTF16_BE< / span > < span class = "p" > ,< / span > < span class = "n" > BOM_UTF16_LE< / span >
< span class = "c" > # imported lazily to avoid startup performance hit if it isn' t used< / span >
< span class = "n" > compiler< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span >
< span class = "c" > # A dictionary mapping BOM to< / span >
< span class = "c" > # the encoding to decode with, and what to set the< / span >
< span class = "c" > # encoding attribute to.< / span >
< span class = "n" > BOMS< / span > < span class = "o" > =< / span > < span class = "p" > {< / span >
< span class = "n" > BOM_UTF8< / span > < span class = "p" > :< / span > < span class = "p" > (< / span > < span class = "s" > ' utf_8' < / span > < span class = "p" > ,< / span > < span class = "bp" > None< / span > < span class = "p" > ),< / span >
< span class = "n" > BOM_UTF16_BE< / span > < span class = "p" > :< / span > < span class = "p" > (< / span > < span class = "s" > ' utf16_be' < / span > < span class = "p" > ,< / span > < span class = "s" > ' utf_16' < / span > < span class = "p" > ),< / span >
< span class = "n" > BOM_UTF16_LE< / span > < span class = "p" > :< / span > < span class = "p" > (< / span > < span class = "s" > ' utf16_le' < / span > < span class = "p" > ,< / span > < span class = "s" > ' utf_16' < / span > < span class = "p" > ),< / span >
< span class = "n" > BOM_UTF16< / span > < span class = "p" > :< / span > < span class = "p" > (< / span > < span class = "s" > ' utf_16' < / span > < span class = "p" > ,< / span > < span class = "s" > ' utf_16' < / span > < span class = "p" > ),< / span >
< span class = "p" > }< / span >
< span class = "c" > # All legal variants of the BOM codecs.< / span >
< span class = "c" > # TODO: the list of aliases is not meant to be exhaustive, is there a< / span >
< span class = "c" > # better way ?< / span >
< span class = "n" > BOM_LIST< / span > < span class = "o" > =< / span > < span class = "p" > {< / span >
< span class = "s" > ' utf_16' < / span > < span class = "p" > :< / span > < span class = "s" > ' utf_16' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' u16' < / span > < span class = "p" > :< / span > < span class = "s" > ' utf_16' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' utf16' < / span > < span class = "p" > :< / span > < span class = "s" > ' utf_16' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' utf-16' < / span > < span class = "p" > :< / span > < span class = "s" > ' utf_16' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' utf16_be' < / span > < span class = "p" > :< / span > < span class = "s" > ' utf16_be' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' utf_16_be' < / span > < span class = "p" > :< / span > < span class = "s" > ' utf16_be' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' utf-16be' < / span > < span class = "p" > :< / span > < span class = "s" > ' utf16_be' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' utf16_le' < / span > < span class = "p" > :< / span > < span class = "s" > ' utf16_le' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' utf_16_le' < / span > < span class = "p" > :< / span > < span class = "s" > ' utf16_le' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' utf-16le' < / span > < span class = "p" > :< / span > < span class = "s" > ' utf16_le' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' utf_8' < / span > < span class = "p" > :< / span > < span class = "s" > ' utf_8' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' u8' < / span > < span class = "p" > :< / span > < span class = "s" > ' utf_8' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' utf' < / span > < span class = "p" > :< / span > < span class = "s" > ' utf_8' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' utf8' < / span > < span class = "p" > :< / span > < span class = "s" > ' utf_8' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' utf-8' < / span > < span class = "p" > :< / span > < span class = "s" > ' utf_8' < / span > < span class = "p" > ,< / span >
< span class = "p" > }< / span >
< span class = "c" > # Map of encodings to the BOM to write.< / span >
< span class = "n" > BOM_SET< / span > < span class = "o" > =< / span > < span class = "p" > {< / span >
< span class = "s" > ' utf_8' < / span > < span class = "p" > :< / span > < span class = "n" > BOM_UTF8< / span > < span class = "p" > ,< / span >
< span class = "s" > ' utf_16' < / span > < span class = "p" > :< / span > < span class = "n" > BOM_UTF16< / span > < span class = "p" > ,< / span >
< span class = "s" > ' utf16_be' < / span > < span class = "p" > :< / span > < span class = "n" > BOM_UTF16_BE< / span > < span class = "p" > ,< / span >
< span class = "s" > ' utf16_le' < / span > < span class = "p" > :< / span > < span class = "n" > BOM_UTF16_LE< / span > < span class = "p" > ,< / span >
< span class = "bp" > None< / span > < span class = "p" > :< / span > < span class = "n" > BOM_UTF8< / span >
< span class = "p" > }< / span >
< span class = "k" > def< / span > < span class = "nf" > match_utf8< / span > < span class = "p" > (< / span > < span class = "n" > encoding< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "n" > BOM_LIST< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "n" > encoding< / span > < span class = "o" > .< / span > < span class = "n" > lower< / span > < span class = "p" > ())< / span > < span class = "o" > ==< / span > < span class = "s" > ' utf_8' < / span >
< span class = "c" > # Quote strings used for writing values< / span >
< span class = "n" > squot< / span > < span class = "o" > =< / span > < span class = "s" > " ' < / span > < span class = "si" > %s< / span > < span class = "s" > ' " < / span >
< span class = "n" > dquot< / span > < span class = "o" > =< / span > < span class = "s" > ' " < / span > < span class = "si" > %s< / span > < span class = "s" > " ' < / span >
< span class = "n" > noquot< / span > < span class = "o" > =< / span > < span class = "s" > " < / span > < span class = "si" > %s< / span > < span class = "s" > " < / span >
< span class = "n" > wspace_plus< / span > < span class = "o" > =< / span > < span class = "s" > ' < / span > < span class = "se" > \r\n\v\t\' < / span > < span class = "s" > " ' < / span >
< span class = "n" > tsquot< / span > < span class = "o" > =< / span > < span class = "s" > ' " " " < / span > < span class = "si" > %s< / span > < span class = "s" > " " " ' < / span >
< span class = "n" > tdquot< / span > < span class = "o" > =< / span > < span class = "s" > " ' ' ' < / span > < span class = "si" > %s< / span > < span class = "s" > ' ' ' " < / span >
< span class = "c" > # Sentinel for use in getattr calls to replace hasattr< / span >
< span class = "n" > MISSING< / span > < span class = "o" > =< / span > < span class = "nb" > object< / span > < span class = "p" > ()< / span >
< span class = "n" > __version__< / span > < span class = "o" > =< / span > < span class = "s" > ' 4.7.2' < / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "nb" > any< / span >
< span class = "k" > except< / span > < span class = "ne" > NameError< / span > < span class = "p" > :< / span >
< span class = "k" > def< / span > < span class = "nf" > any< / span > < span class = "p" > (< / span > < span class = "n" > iterable< / span > < span class = "p" > ):< / span >
< span class = "k" > for< / span > < span class = "n" > entry< / span > < span class = "ow" > in< / span > < span class = "n" > iterable< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > entry< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "bp" > True< / span >
< span class = "k" > return< / span > < span class = "bp" > False< / span >
< span class = "n" > __all__< / span > < span class = "o" > =< / span > < span class = "p" > (< / span >
< span class = "s" > ' __version__' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' DEFAULT_INDENT_TYPE' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' DEFAULT_INTERPOLATION' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' ConfigObjError' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' NestingError' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' ParseError' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' DuplicateError' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' ConfigspecError' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' ConfigObj' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' SimpleVal' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' InterpolationError' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' InterpolationLoopError' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' MissingInterpolationOption' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' RepeatSectionError' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' ReloadError' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' UnreprError' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' UnknownType' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' flatten_errors' < / span > < span class = "p" > ,< / span >
< span class = "s" > ' get_extra_values' < / span >
< span class = "p" > )< / span >
< span class = "n" > DEFAULT_INTERPOLATION< / span > < span class = "o" > =< / span > < span class = "s" > ' configparser' < / span >
< span class = "n" > DEFAULT_INDENT_TYPE< / span > < span class = "o" > =< / span > < span class = "s" > ' ' < / span >
< span class = "n" > MAX_INTERPOL_DEPTH< / span > < span class = "o" > =< / span > < span class = "mi" > 10< / span >
< span class = "n" > OPTION_DEFAULTS< / span > < span class = "o" > =< / span > < span class = "p" > {< / span >
< span class = "s" > ' interpolation' < / span > < span class = "p" > :< / span > < span class = "bp" > True< / span > < span class = "p" > ,< / span >
< span class = "s" > ' raise_errors' < / span > < span class = "p" > :< / span > < span class = "bp" > False< / span > < span class = "p" > ,< / span >
< span class = "s" > ' list_values' < / span > < span class = "p" > :< / span > < span class = "bp" > True< / span > < span class = "p" > ,< / span >
< span class = "s" > ' create_empty' < / span > < span class = "p" > :< / span > < span class = "bp" > False< / span > < span class = "p" > ,< / span >
< span class = "s" > ' file_error' < / span > < span class = "p" > :< / span > < span class = "bp" > False< / span > < span class = "p" > ,< / span >
< span class = "s" > ' configspec' < / span > < span class = "p" > :< / span > < span class = "bp" > None< / span > < span class = "p" > ,< / span >
< span class = "s" > ' stringify' < / span > < span class = "p" > :< / span > < span class = "bp" > True< / span > < span class = "p" > ,< / span >
< span class = "c" > # option may be set to one of (' ' , ' ' , ' \t' )< / span >
< span class = "s" > ' indent_type' < / span > < span class = "p" > :< / span > < span class = "bp" > None< / span > < span class = "p" > ,< / span >
< span class = "s" > ' encoding' < / span > < span class = "p" > :< / span > < span class = "bp" > None< / span > < span class = "p" > ,< / span >
< span class = "s" > ' default_encoding' < / span > < span class = "p" > :< / span > < span class = "bp" > None< / span > < span class = "p" > ,< / span >
< span class = "s" > ' unrepr' < / span > < span class = "p" > :< / span > < span class = "bp" > False< / span > < span class = "p" > ,< / span >
< span class = "s" > ' write_empty_values' < / span > < span class = "p" > :< / span > < span class = "bp" > False< / span > < span class = "p" > ,< / span >
< span class = "p" > }< / span >
< span class = "k" > def< / span > < span class = "nf" > getObj< / span > < span class = "p" > (< / span > < span class = "n" > s< / span > < span class = "p" > ):< / span >
< span class = "k" > global< / span > < span class = "n" > compiler< / span >
< span class = "k" > if< / span > < span class = "n" > compiler< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "kn" > import< / span > < span class = "nn" > compiler< / span >
< span class = "n" > s< / span > < span class = "o" > =< / span > < span class = "s" > " a=" < / span > < span class = "o" > +< / span > < span class = "n" > s< / span >
< span class = "n" > p< / span > < span class = "o" > =< / span > < span class = "n" > compiler< / span > < span class = "o" > .< / span > < span class = "n" > parse< / span > < span class = "p" > (< / span > < span class = "n" > s< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > p< / span > < span class = "o" > .< / span > < span class = "n" > getChildren< / span > < span class = "p" > ()[< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > getChildren< / span > < span class = "p" > ()[< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > getChildren< / span > < span class = "p" > ()[< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span >
< div class = "viewcode-block" id = "UnknownType" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.UnknownType" > [docs]< / a > < span class = "k" > class< / span > < span class = "nc" > UnknownType< / span > < span class = "p" > (< / span > < span class = "ne" > Exception< / span > < span class = "p" > ):< / span >
< span class = "k" > pass< / span >
< / div >
< span class = "k" > class< / span > < span class = "nc" > Builder< / span > < span class = "p" > (< / span > < span class = "nb" > object< / span > < span class = "p" > ):< / span >
< span class = "k" > def< / span > < span class = "nf" > build< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > o< / span > < span class = "p" > ):< / span >
< span class = "n" > m< / span > < span class = "o" > =< / span > < span class = "nb" > getattr< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "s" > ' build_' < / span > < span class = "o" > +< / span > < span class = "n" > o< / span > < span class = "o" > .< / span > < span class = "n" > __class__< / span > < span class = "o" > .< / span > < span class = "n" > __name__< / span > < span class = "p" > ,< / span > < span class = "bp" > None< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > m< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span > < span class = "n" > UnknownType< / span > < span class = "p" > (< / span > < span class = "n" > o< / span > < span class = "o" > .< / span > < span class = "n" > __class__< / span > < span class = "o" > .< / span > < span class = "n" > __name__< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > m< / span > < span class = "p" > (< / span > < span class = "n" > o< / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "nf" > build_List< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > o< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "nb" > map< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > build< / span > < span class = "p" > ,< / span > < span class = "n" > o< / span > < span class = "o" > .< / span > < span class = "n" > getChildren< / span > < span class = "p" > ())< / span >
< span class = "k" > def< / span > < span class = "nf" > build_Const< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > o< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "n" > o< / span > < span class = "o" > .< / span > < span class = "n" > value< / span >
< span class = "k" > def< / span > < span class = "nf" > build_Dict< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > o< / span > < span class = "p" > ):< / span >
< span class = "n" > d< / span > < span class = "o" > =< / span > < span class = "p" > {}< / span >
< span class = "n" > i< / span > < span class = "o" > =< / span > < span class = "nb" > iter< / span > < span class = "p" > (< / span > < span class = "nb" > map< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > build< / span > < span class = "p" > ,< / span > < span class = "n" > o< / span > < span class = "o" > .< / span > < span class = "n" > getChildren< / span > < span class = "p" > ()))< / span >
< span class = "k" > for< / span > < span class = "n" > el< / span > < span class = "ow" > in< / span > < span class = "n" > i< / span > < span class = "p" > :< / span >
< span class = "n" > d< / span > < span class = "p" > [< / span > < span class = "n" > el< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > i< / span > < span class = "o" > .< / span > < span class = "n" > next< / span > < span class = "p" > ()< / span >
< span class = "k" > return< / span > < span class = "n" > d< / span >
< span class = "k" > def< / span > < span class = "nf" > build_Tuple< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > o< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "nb" > tuple< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > build_List< / span > < span class = "p" > (< / span > < span class = "n" > o< / span > < span class = "p" > ))< / span >
< span class = "k" > def< / span > < span class = "nf" > build_Name< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > o< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "n" > o< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "o" > ==< / span > < span class = "s" > ' None' < / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "bp" > None< / span >
< span class = "k" > if< / span > < span class = "n" > o< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "o" > ==< / span > < span class = "s" > ' True' < / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "bp" > True< / span >
< span class = "k" > if< / span > < span class = "n" > o< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "o" > ==< / span > < span class = "s" > ' False' < / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "bp" > False< / span >
< span class = "c" > # An undefined Name< / span >
< span class = "k" > raise< / span > < span class = "n" > UnknownType< / span > < span class = "p" > (< / span > < span class = "s" > ' Undefined Name' < / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "nf" > build_Add< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > o< / span > < span class = "p" > ):< / span >
< span class = "n" > real< / span > < span class = "p" > ,< / span > < span class = "n" > imag< / span > < span class = "o" > =< / span > < span class = "nb" > map< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > build_Const< / span > < span class = "p" > ,< / span > < span class = "n" > o< / span > < span class = "o" > .< / span > < span class = "n" > getChildren< / span > < span class = "p" > ())< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "n" > real< / span > < span class = "o" > =< / span > < span class = "nb" > float< / span > < span class = "p" > (< / span > < span class = "n" > real< / span > < span class = "p" > )< / span >
< span class = "k" > except< / span > < span class = "ne" > TypeError< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span > < span class = "n" > UnknownType< / span > < span class = "p" > (< / span > < span class = "s" > ' Add' < / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > imag< / span > < span class = "p" > ,< / span > < span class = "nb" > complex< / span > < span class = "p" > )< / span > < span class = "ow" > or< / span > < span class = "n" > imag< / span > < span class = "o" > .< / span > < span class = "n" > real< / span > < span class = "o" > !=< / span > < span class = "mf" > 0.0< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span > < span class = "n" > UnknownType< / span > < span class = "p" > (< / span > < span class = "s" > ' Add' < / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > real< / span > < span class = "o" > +< / span > < span class = "n" > imag< / span >
< span class = "k" > def< / span > < span class = "nf" > build_Getattr< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > o< / span > < span class = "p" > ):< / span >
< span class = "n" > parent< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > build< / span > < span class = "p" > (< / span > < span class = "n" > o< / span > < span class = "o" > .< / span > < span class = "n" > expr< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "nb" > getattr< / span > < span class = "p" > (< / span > < span class = "n" > parent< / span > < span class = "p" > ,< / span > < span class = "n" > o< / span > < span class = "o" > .< / span > < span class = "n" > attrname< / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "nf" > build_UnarySub< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > o< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "o" > -< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > build_Const< / span > < span class = "p" > (< / span > < span class = "n" > o< / span > < span class = "o" > .< / span > < span class = "n" > getChildren< / span > < span class = "p" > ()[< / span > < span class = "mi" > 0< / span > < span class = "p" > ])< / span >
< span class = "k" > def< / span > < span class = "nf" > build_UnaryAdd< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > o< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > build_Const< / span > < span class = "p" > (< / span > < span class = "n" > o< / span > < span class = "o" > .< / span > < span class = "n" > getChildren< / span > < span class = "p" > ()[< / span > < span class = "mi" > 0< / span > < span class = "p" > ])< / span >
< span class = "n" > _builder< / span > < span class = "o" > =< / span > < span class = "n" > Builder< / span > < span class = "p" > ()< / span >
< span class = "k" > def< / span > < span class = "nf" > unrepr< / span > < span class = "p" > (< / span > < span class = "n" > s< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > s< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "n" > s< / span >
< span class = "k" > return< / span > < span class = "n" > _builder< / span > < span class = "o" > .< / span > < span class = "n" > build< / span > < span class = "p" > (< / span > < span class = "n" > getObj< / span > < span class = "p" > (< / span > < span class = "n" > s< / span > < span class = "p" > ))< / span >
< div class = "viewcode-block" id = "ConfigObjError" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObjError" > [docs]< / a > < span class = "k" > class< / span > < span class = "nc" > ConfigObjError< / span > < span class = "p" > (< / span > < span class = "ne" > SyntaxError< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > This is the base class for all errors that ConfigObj raises.< / span >
< span class = "sd" > It is a subclass of SyntaxError.< / span >
< span class = "sd" > " " " < / span >
< div class = "viewcode-block" id = "ConfigObjError.__init__" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObjError.__init__" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > __init__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > message< / span > < span class = "o" > =< / span > < span class = "s" > ' ' < / span > < span class = "p" > ,< / span > < span class = "n" > line_number< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span > < span class = "p" > ,< / span > < span class = "n" > line< / span > < span class = "o" > =< / span > < span class = "s" > ' ' < / span > < span class = "p" > ):< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > line< / span > < span class = "o" > =< / span > < span class = "n" > line< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > line_number< / span > < span class = "o" > =< / span > < span class = "n" > line_number< / span >
< span class = "ne" > SyntaxError< / span > < span class = "o" > .< / span > < span class = "n" > __init__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > message< / span > < span class = "p" > )< / span >
< / div > < / div >
< div class = "viewcode-block" id = "NestingError" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.NestingError" > [docs]< / a > < span class = "k" > class< / span > < span class = "nc" > NestingError< / span > < span class = "p" > (< / span > < span class = "n" > ConfigObjError< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > This error indicates a level of nesting that doesn' t match.< / span >
< span class = "sd" > " " " < / span >
< / div >
< div class = "viewcode-block" id = "ParseError" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ParseError" > [docs]< / a > < span class = "k" > class< / span > < span class = "nc" > ParseError< / span > < span class = "p" > (< / span > < span class = "n" > ConfigObjError< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > This error indicates that a line is badly written.< / span >
< span class = "sd" > It is neither a valid ``key = value`` line,< / span >
< span class = "sd" > nor a valid section marker line.< / span >
< span class = "sd" > " " " < / span >
< / div >
< div class = "viewcode-block" id = "ReloadError" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ReloadError" > [docs]< / a > < span class = "k" > class< / span > < span class = "nc" > ReloadError< / span > < span class = "p" > (< / span > < span class = "ne" > IOError< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > A ' reload' operation failed.< / span >
< span class = "sd" > This exception is a subclass of ``IOError``.< / span >
< span class = "sd" > " " " < / span >
< div class = "viewcode-block" id = "ReloadError.__init__" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ReloadError.__init__" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > __init__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "ne" > IOError< / span > < span class = "o" > .< / span > < span class = "n" > __init__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "s" > ' reload failed, filename is not set.' < / span > < span class = "p" > )< / span >
< / div > < / div >
< div class = "viewcode-block" id = "DuplicateError" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.DuplicateError" > [docs]< / a > < span class = "k" > class< / span > < span class = "nc" > DuplicateError< / span > < span class = "p" > (< / span > < span class = "n" > ConfigObjError< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > The keyword or section specified already exists.< / span >
< span class = "sd" > " " " < / span >
< / div >
< div class = "viewcode-block" id = "ConfigspecError" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigspecError" > [docs]< / a > < span class = "k" > class< / span > < span class = "nc" > ConfigspecError< / span > < span class = "p" > (< / span > < span class = "n" > ConfigObjError< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > An error occured whilst parsing a configspec.< / span >
< span class = "sd" > " " " < / span >
< / div >
< div class = "viewcode-block" id = "InterpolationError" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.InterpolationError" > [docs]< / a > < span class = "k" > class< / span > < span class = "nc" > InterpolationError< / span > < span class = "p" > (< / span > < span class = "n" > ConfigObjError< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " Base class for the two interpolation errors." " " < / span >
< / div >
< div class = "viewcode-block" id = "InterpolationLoopError" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.InterpolationLoopError" > [docs]< / a > < span class = "k" > class< / span > < span class = "nc" > InterpolationLoopError< / span > < span class = "p" > (< / span > < span class = "n" > InterpolationError< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " Maximum interpolation depth exceeded in string interpolation." " " < / span >
< div class = "viewcode-block" id = "InterpolationLoopError.__init__" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.InterpolationLoopError.__init__" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > __init__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > option< / span > < span class = "p" > ):< / span >
< span class = "n" > InterpolationError< / span > < span class = "o" > .< / span > < span class = "n" > __init__< / span > < span class = "p" > (< / span >
< span class = "bp" > self< / span > < span class = "p" > ,< / span >
< span class = "s" > ' interpolation loop detected in value " < / span > < span class = "si" > %s< / span > < span class = "s" > " .' < / span > < span class = "o" > %< / span > < span class = "n" > option< / span > < span class = "p" > )< / span >
< / div > < / div >
< div class = "viewcode-block" id = "RepeatSectionError" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.RepeatSectionError" > [docs]< / a > < span class = "k" > class< / span > < span class = "nc" > RepeatSectionError< / span > < span class = "p" > (< / span > < span class = "n" > ConfigObjError< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > This error indicates additional sections in a section with a< / span >
< span class = "sd" > ``__many__`` (repeated) section.< / span >
< span class = "sd" > " " " < / span >
< / div >
< div class = "viewcode-block" id = "MissingInterpolationOption" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.MissingInterpolationOption" > [docs]< / a > < span class = "k" > class< / span > < span class = "nc" > MissingInterpolationOption< / span > < span class = "p" > (< / span > < span class = "n" > InterpolationError< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " A value specified for interpolation was missing." " " < / span >
< div class = "viewcode-block" id = "MissingInterpolationOption.__init__" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.MissingInterpolationOption.__init__" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > __init__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > option< / span > < span class = "p" > ):< / span >
< span class = "n" > msg< / span > < span class = "o" > =< / span > < span class = "s" > ' missing option " < / span > < span class = "si" > %s< / span > < span class = "s" > " in interpolation.' < / span > < span class = "o" > %< / span > < span class = "n" > option< / span >
< span class = "n" > InterpolationError< / span > < span class = "o" > .< / span > < span class = "n" > __init__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > msg< / span > < span class = "p" > )< / span >
< / div > < / div >
< div class = "viewcode-block" id = "UnreprError" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.UnreprError" > [docs]< / a > < span class = "k" > class< / span > < span class = "nc" > UnreprError< / span > < span class = "p" > (< / span > < span class = "n" > ConfigObjError< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " An error parsing in unrepr mode." " " < / span >
< / div >
< span class = "k" > class< / span > < span class = "nc" > InterpolationEngine< / span > < span class = "p" > (< / span > < span class = "nb" > object< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > A helper class to help perform string interpolation.< / span >
< span class = "sd" > This class is an abstract base class; its descendants perform< / span >
< span class = "sd" > the actual work.< / span >
< span class = "sd" > " " " < / span >
< span class = "c" > # compiled regexp to use in self.interpolate()< / span >
< span class = "n" > _KEYCRE< / span > < span class = "o" > =< / span > < span class = "n" > re< / span > < span class = "o" > .< / span > < span class = "n" > compile< / span > < span class = "p" > (< / span > < span class = "s" > r" %\(([^)]*)\)s" < / span > < span class = "p" > )< / span >
< span class = "n" > _cookie< / span > < span class = "o" > =< / span > < span class = "s" > ' %' < / span >
< span class = "k" > def< / span > < span class = "nf" > __init__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > section< / span > < span class = "p" > ):< / span >
< span class = "c" > # the Section instance that " owns" this engine< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > section< / span > < span class = "o" > =< / span > < span class = "n" > section< / span >
< span class = "k" > def< / span > < span class = "nf" > interpolate< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > ):< / span >
< span class = "c" > # short-cut< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _cookie< / span > < span class = "ow" > in< / span > < span class = "n" > value< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "n" > value< / span >
< span class = "k" > def< / span > < span class = "nf" > recursive_interpolate< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > section< / span > < span class = "p" > ,< / span > < span class = "n" > backtrail< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " The function that does the actual work.< / span >
< span class = "sd" > ``value``: the string we' re trying to interpolate.< / span >
< span class = "sd" > ``section``: the section in which that string was found< / span >
< span class = "sd" > ``backtrail``: a dict to keep track of where we' ve been,< / span >
< span class = "sd" > to detect and prevent infinite recursion loops< / span >
< span class = "sd" > This is similar to a depth-first-search algorithm.< / span >
< span class = "sd" > " " " < / span >
< span class = "c" > # Have we been here already?< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "p" > )< / span > < span class = "ow" > in< / span > < span class = "n" > backtrail< / span > < span class = "p" > :< / span >
< span class = "c" > # Yes - infinite loop detected< / span >
< span class = "k" > raise< / span > < span class = "n" > InterpolationLoopError< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > )< / span >
< span class = "c" > # Place a marker on our backtrail so we won' t come back here again< / span >
< span class = "n" > backtrail< / span > < span class = "p" > [(< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "p" > )]< / span > < span class = "o" > =< / span > < span class = "mi" > 1< / span >
< span class = "c" > # Now start the actual work< / span >
< span class = "n" > match< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _KEYCRE< / span > < span class = "o" > .< / span > < span class = "n" > search< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "k" > while< / span > < span class = "n" > match< / span > < span class = "p" > :< / span >
< span class = "c" > # The actual parsing of the match is implementation-dependent,< / span >
< span class = "c" > # so delegate to our helper function< / span >
< span class = "n" > k< / span > < span class = "p" > ,< / span > < span class = "n" > v< / span > < span class = "p" > ,< / span > < span class = "n" > s< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _parse_match< / span > < span class = "p" > (< / span > < span class = "n" > match< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > k< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "c" > # That' s the signal that no further interpolation is needed< / span >
< span class = "n" > replacement< / span > < span class = "o" > =< / span > < span class = "n" > v< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "c" > # Further interpolation may be needed to obtain final value< / span >
< span class = "n" > replacement< / span > < span class = "o" > =< / span > < span class = "n" > recursive_interpolate< / span > < span class = "p" > (< / span > < span class = "n" > k< / span > < span class = "p" > ,< / span > < span class = "n" > v< / span > < span class = "p" > ,< / span > < span class = "n" > s< / span > < span class = "p" > ,< / span > < span class = "n" > backtrail< / span > < span class = "p" > )< / span >
< span class = "c" > # Replace the matched string with its final value< / span >
< span class = "n" > start< / span > < span class = "p" > ,< / span > < span class = "n" > end< / span > < span class = "o" > =< / span > < span class = "n" > match< / span > < span class = "o" > .< / span > < span class = "n" > span< / span > < span class = "p" > ()< / span >
< span class = "n" > value< / span > < span class = "o" > =< / span > < span class = "s" > ' ' < / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > ((< / span > < span class = "n" > value< / span > < span class = "p" > [:< / span > < span class = "n" > start< / span > < span class = "p" > ],< / span > < span class = "n" > replacement< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > [< / span > < span class = "n" > end< / span > < span class = "p" > :]))< / span >
< span class = "n" > new_search_start< / span > < span class = "o" > =< / span > < span class = "n" > start< / span > < span class = "o" > +< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > replacement< / span > < span class = "p" > )< / span >
< span class = "c" > # Pick up the next interpolation key, if any, for next time< / span >
< span class = "c" > # through the while loop< / span >
< span class = "n" > match< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _KEYCRE< / span > < span class = "o" > .< / span > < span class = "n" > search< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > new_search_start< / span > < span class = "p" > )< / span >
< span class = "c" > # Now safe to come back here again; remove marker from backtrail< / span >
< span class = "k" > del< / span > < span class = "n" > backtrail< / span > < span class = "p" > [(< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "p" > )]< / span >
< span class = "k" > return< / span > < span class = "n" > value< / span >
< span class = "c" > # Back in interpolate(), all we have to do is kick off the recursive< / span >
< span class = "c" > # function with appropriate starting values< / span >
< span class = "n" > value< / span > < span class = "o" > =< / span > < span class = "n" > recursive_interpolate< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > section< / span > < span class = "p" > ,< / span > < span class = "p" > {})< / span >
< span class = "k" > return< / span > < span class = "n" > value< / span >
< span class = "k" > def< / span > < span class = "nf" > _fetch< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " Helper function to fetch values from owning section.< / span >
< span class = "sd" > Returns a 2-tuple: the value, and the section where it was found.< / span >
< span class = "sd" > " " " < / span >
< span class = "c" > # switch off interpolation before we try and fetch anything !< / span >
< span class = "n" > save_interp< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > main< / span > < span class = "o" > .< / span > < span class = "n" > interpolation< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > main< / span > < span class = "o" > .< / span > < span class = "n" > interpolation< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "c" > # Start at section that " owns" this InterpolationEngine< / span >
< span class = "n" > current_section< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > section< / span >
< span class = "k" > while< / span > < span class = "bp" > True< / span > < span class = "p" > :< / span >
< span class = "c" > # try the current section first< / span >
< span class = "n" > val< / span > < span class = "o" > =< / span > < span class = "n" > current_section< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > val< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "bp" > None< / span > < span class = "ow" > and< / span > < span class = "ow" > not< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > val< / span > < span class = "p" > ,< / span > < span class = "n" > Section< / span > < span class = "p" > ):< / span >
< span class = "k" > break< / span >
< span class = "c" > # try " DEFAULT" next< / span >
< span class = "n" > val< / span > < span class = "o" > =< / span > < span class = "n" > current_section< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s" > ' DEFAULT' < / span > < span class = "p" > ,< / span > < span class = "p" > {})< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > val< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "bp" > None< / span > < span class = "ow" > and< / span > < span class = "ow" > not< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > val< / span > < span class = "p" > ,< / span > < span class = "n" > Section< / span > < span class = "p" > ):< / span >
< span class = "k" > break< / span >
< span class = "c" > # move up to parent and try again< / span >
< span class = "c" > # top-level' s parent is itself< / span >
< span class = "k" > if< / span > < span class = "n" > current_section< / span > < span class = "o" > .< / span > < span class = "n" > parent< / span > < span class = "ow" > is< / span > < span class = "n" > current_section< / span > < span class = "p" > :< / span >
< span class = "c" > # reached top level, time to give up< / span >
< span class = "k" > break< / span >
< span class = "n" > current_section< / span > < span class = "o" > =< / span > < span class = "n" > current_section< / span > < span class = "o" > .< / span > < span class = "n" > parent< / span >
< span class = "c" > # restore interpolation to previous value before returning< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > main< / span > < span class = "o" > .< / span > < span class = "n" > interpolation< / span > < span class = "o" > =< / span > < span class = "n" > save_interp< / span >
< span class = "k" > if< / span > < span class = "n" > val< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span > < span class = "n" > MissingInterpolationOption< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > val< / span > < span class = "p" > ,< / span > < span class = "n" > current_section< / span >
< span class = "k" > def< / span > < span class = "nf" > _parse_match< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > match< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " Implementation-dependent helper function.< / span >
< span class = "sd" > Will be passed a match object corresponding to the interpolation< / span >
< span class = "sd" > key we just found (e.g., " %(foo)s" or " $foo" ). Should look up that< / span >
< span class = "sd" > key in the appropriate config file section (using the ``_fetch()``< / span >
< span class = "sd" > helper function) and return a 3-tuple: (key, value, section)< / span >
< span class = "sd" > ``key`` is the name of the key we' re looking for< / span >
< span class = "sd" > ``value`` is the value found for that key< / span >
< span class = "sd" > ``section`` is a reference to the section where it was found< / span >
< span class = "sd" > ``key`` and ``section`` should be None if no further< / span >
< span class = "sd" > interpolation should be performed on the resulting value< / span >
< span class = "sd" > (e.g., if we interpolated " $$" and returned " $" ).< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > raise< / span > < span class = "ne" > NotImplementedError< / span > < span class = "p" > ()< / span >
< span class = "k" > class< / span > < span class = "nc" > ConfigParserInterpolation< / span > < span class = "p" > (< / span > < span class = "n" > InterpolationEngine< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " Behaves like ConfigParser." " " < / span >
< span class = "n" > _cookie< / span > < span class = "o" > =< / span > < span class = "s" > ' %' < / span >
< span class = "n" > _KEYCRE< / span > < span class = "o" > =< / span > < span class = "n" > re< / span > < span class = "o" > .< / span > < span class = "n" > compile< / span > < span class = "p" > (< / span > < span class = "s" > r" %\(([^)]*)\)s" < / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "nf" > _parse_match< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > match< / span > < span class = "p" > ):< / span >
< span class = "n" > key< / span > < span class = "o" > =< / span > < span class = "n" > match< / span > < span class = "o" > .< / span > < span class = "n" > group< / span > < span class = "p" > (< / span > < span class = "mi" > 1< / span > < span class = "p" > )< / span >
< span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > section< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _fetch< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > section< / span >
< span class = "k" > class< / span > < span class = "nc" > TemplateInterpolation< / span > < span class = "p" > (< / span > < span class = "n" > InterpolationEngine< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " Behaves like string.Template." " " < / span >
< span class = "n" > _cookie< / span > < span class = "o" > =< / span > < span class = "s" > ' $' < / span >
< span class = "n" > _delimiter< / span > < span class = "o" > =< / span > < span class = "s" > ' $' < / span >
< span class = "n" > _KEYCRE< / span > < span class = "o" > =< / span > < span class = "n" > re< / span > < span class = "o" > .< / span > < span class = "n" > compile< / span > < span class = "p" > (< / span > < span class = "s" > r" " " < / span >
< span class = "s" > \$(?:< / span >
< span class = "s" > (?P< escaped> \$) | # Two $ signs< / span >
< span class = "s" > (?P< named> [_a-z][_a-z0-9]*) | # $name format< / span >
< span class = "s" > {(?P< braced> [^}]*)} # ${name} format< / span >
< span class = "s" > )< / span >
< span class = "s" > " " " < / span > < span class = "p" > ,< / span > < span class = "n" > re< / span > < span class = "o" > .< / span > < span class = "n" > IGNORECASE< / span > < span class = "o" > |< / span > < span class = "n" > re< / span > < span class = "o" > .< / span > < span class = "n" > VERBOSE< / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "nf" > _parse_match< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > match< / span > < span class = "p" > ):< / span >
< span class = "c" > # Valid name (in or out of braces): fetch value from section< / span >
< span class = "n" > key< / span > < span class = "o" > =< / span > < span class = "n" > match< / span > < span class = "o" > .< / span > < span class = "n" > group< / span > < span class = "p" > (< / span > < span class = "s" > ' named' < / span > < span class = "p" > )< / span > < span class = "ow" > or< / span > < span class = "n" > match< / span > < span class = "o" > .< / span > < span class = "n" > group< / span > < span class = "p" > (< / span > < span class = "s" > ' braced' < / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > key< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > section< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _fetch< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > section< / span >
< span class = "c" > # Escaped delimiter (e.g., $$): return single delimiter< / span >
< span class = "k" > if< / span > < span class = "n" > match< / span > < span class = "o" > .< / span > < span class = "n" > group< / span > < span class = "p" > (< / span > < span class = "s" > ' escaped' < / span > < span class = "p" > )< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "c" > # Return None for key and section to indicate it' s time to stop< / span >
< span class = "k" > return< / span > < span class = "bp" > None< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _delimiter< / span > < span class = "p" > ,< / span > < span class = "bp" > None< / span >
< span class = "c" > # Anything else: ignore completely, just return it unchanged< / span >
< span class = "k" > return< / span > < span class = "bp" > None< / span > < span class = "p" > ,< / span > < span class = "n" > match< / span > < span class = "o" > .< / span > < span class = "n" > group< / span > < span class = "p" > (),< / span > < span class = "bp" > None< / span >
< span class = "n" > interpolation_engines< / span > < span class = "o" > =< / span > < span class = "p" > {< / span >
< span class = "s" > ' configparser' < / span > < span class = "p" > :< / span > < span class = "n" > ConfigParserInterpolation< / span > < span class = "p" > ,< / span >
< span class = "s" > ' template' < / span > < span class = "p" > :< / span > < span class = "n" > TemplateInterpolation< / span > < span class = "p" > ,< / span >
< span class = "p" > }< / span >
< span class = "k" > def< / span > < span class = "nf" > __newobj__< / span > < span class = "p" > (< / span > < span class = "n" > cls< / span > < span class = "p" > ,< / span > < span class = "o" > *< / span > < span class = "n" > args< / span > < span class = "p" > ):< / span >
< span class = "c" > # Hack for pickle< / span >
< span class = "k" > return< / span > < span class = "n" > cls< / span > < span class = "o" > .< / span > < span class = "n" > __new__< / span > < span class = "p" > (< / span > < span class = "n" > cls< / span > < span class = "p" > ,< / span > < span class = "o" > *< / span > < span class = "n" > args< / span > < span class = "p" > )< / span >
< span class = "k" > class< / span > < span class = "nc" > Section< / span > < span class = "p" > (< / span > < span class = "nb" > dict< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > A dictionary-like object that represents a section in a config file.< / span >
< span class = "sd" > < / span >
< span class = "sd" > It does string interpolation if the ' interpolation' attribute< / span >
< span class = "sd" > of the ' main' object is set to True.< / span >
< span class = "sd" > < / span >
< span class = "sd" > Interpolation is tried first from this object, then from the ' DEFAULT' < / span >
< span class = "sd" > section of this object, next from the parent and its ' DEFAULT' section,< / span >
< span class = "sd" > and so on until the main object is reached.< / span >
< span class = "sd" > < / span >
< span class = "sd" > A Section will behave like an ordered dictionary - following the< / span >
< span class = "sd" > order of the ``scalars`` and ``sections`` attributes.< / span >
< span class = "sd" > You can use this to change the order of members.< / span >
< span class = "sd" > < / span >
< span class = "sd" > Iteration follows the order: scalars, then sections.< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > def< / span > < span class = "nf" > __setstate__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > state< / span > < span class = "p" > ):< / span >
< span class = "nb" > dict< / span > < span class = "o" > .< / span > < span class = "n" > update< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > state< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ])< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > __dict__< / span > < span class = "o" > .< / span > < span class = "n" > update< / span > < span class = "p" > (< / span > < span class = "n" > state< / span > < span class = "p" > [< / span > < span class = "mi" > 1< / span > < span class = "p" > ])< / span >
< span class = "k" > def< / span > < span class = "nf" > __reduce__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "n" > state< / span > < span class = "o" > =< / span > < span class = "p" > (< / span > < span class = "nb" > dict< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ),< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > __dict__< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "p" > (< / span > < span class = "n" > __newobj__< / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > __class__< / span > < span class = "p" > ,),< / span > < span class = "n" > state< / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "nf" > __init__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > parent< / span > < span class = "p" > ,< / span > < span class = "n" > depth< / span > < span class = "p" > ,< / span > < span class = "n" > main< / span > < span class = "p" > ,< / span > < span class = "n" > indict< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span > < span class = "p" > ,< / span > < span class = "n" > name< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > * parent is the section above< / span >
< span class = "sd" > * depth is the depth level of this section< / span >
< span class = "sd" > * main is the main ConfigObj< / span >
< span class = "sd" > * indict is a dictionary to initialise the section with< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > if< / span > < span class = "n" > indict< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "n" > indict< / span > < span class = "o" > =< / span > < span class = "p" > {}< / span >
< span class = "nb" > dict< / span > < span class = "o" > .< / span > < span class = "n" > __init__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > )< / span >
< span class = "c" > # used for nesting level *and* interpolation< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > parent< / span > < span class = "o" > =< / span > < span class = "n" > parent< / span >
< span class = "c" > # used for the interpolation attribute< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > main< / span > < span class = "o" > =< / span > < span class = "n" > main< / span >
< span class = "c" > # level of nesting depth of this Section< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > depth< / span > < span class = "o" > =< / span > < span class = "n" > depth< / span >
< span class = "c" > # purely for information< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > name< / span > < span class = "o" > =< / span > < span class = "n" > name< / span >
< span class = "c" > #< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _initialise< / span > < span class = "p" > ()< / span >
< span class = "c" > # we do this explicitly so that __setitem__ is used properly< / span >
< span class = "c" > # (rather than just passing to ``dict.__init__``)< / span >
< span class = "k" > for< / span > < span class = "n" > entry< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "ow" > in< / span > < span class = "n" > indict< / span > < span class = "o" > .< / span > < span class = "n" > iteritems< / span > < span class = "p" > ():< / span >
< span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > value< / span >
< span class = "k" > def< / span > < span class = "nf" > _initialise< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "c" > # the sequence of scalar values in this Section< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "c" > # the sequence of sections in this Section< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "c" > # for comments :-)< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > comments< / span > < span class = "o" > =< / span > < span class = "p" > {}< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > inline_comments< / span > < span class = "o" > =< / span > < span class = "p" > {}< / span >
< span class = "c" > # the configspec< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > configspec< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span >
< span class = "c" > # for defaults< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > defaults< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > default_values< / span > < span class = "o" > =< / span > < span class = "p" > {}< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > extra_values< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _created< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "k" > def< / span > < span class = "nf" > _interpolate< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > ):< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "c" > # do we already have an interpolation engine?< / span >
< span class = "n" > engine< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _interpolation_engine< / span >
< span class = "k" > except< / span > < span class = "ne" > AttributeError< / span > < span class = "p" > :< / span >
< span class = "c" > # not yet: first time running _interpolate(), so pick the engine< / span >
< span class = "n" > name< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > main< / span > < span class = "o" > .< / span > < span class = "n" > interpolation< / span >
< span class = "k" > if< / span > < span class = "n" > name< / span > < span class = "o" > ==< / span > < span class = "bp" > True< / span > < span class = "p" > :< / span > < span class = "c" > # note that " if name:" would be incorrect here< / span >
< span class = "c" > # backwards-compatibility: interpolation=True means use default< / span >
< span class = "n" > name< / span > < span class = "o" > =< / span > < span class = "n" > DEFAULT_INTERPOLATION< / span >
< span class = "n" > name< / span > < span class = "o" > =< / span > < span class = "n" > name< / span > < span class = "o" > .< / span > < span class = "n" > lower< / span > < span class = "p" > ()< / span > < span class = "c" > # so that " Template" , " template" , etc. all work< / span >
< span class = "n" > class_< / span > < span class = "o" > =< / span > < span class = "n" > interpolation_engines< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "n" > name< / span > < span class = "p" > ,< / span > < span class = "bp" > None< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > class_< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "c" > # invalid value for self.main.interpolation< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > main< / span > < span class = "o" > .< / span > < span class = "n" > interpolation< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "k" > return< / span > < span class = "n" > value< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "c" > # save reference to engine so we don' t have to do this again< / span >
< span class = "n" > engine< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _interpolation_engine< / span > < span class = "o" > =< / span > < span class = "n" > class_< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > )< / span >
< span class = "c" > # let the engine do the actual work< / span >
< span class = "k" > return< / span > < span class = "n" > engine< / span > < span class = "o" > .< / span > < span class = "n" > interpolate< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "nf" > __getitem__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " Fetch the item and do string interpolation." " " < / span >
< span class = "n" > val< / span > < span class = "o" > =< / span > < span class = "nb" > dict< / span > < span class = "o" > .< / span > < span class = "n" > __getitem__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > main< / span > < span class = "o" > .< / span > < span class = "n" > interpolation< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > val< / span > < span class = "p" > ,< / span > < span class = "nb" > basestring< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _interpolate< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > val< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > val< / span > < span class = "p" > ,< / span > < span class = "nb" > list< / span > < span class = "p" > ):< / span >
< span class = "k" > def< / span > < span class = "nf" > _check< / span > < span class = "p" > (< / span > < span class = "n" > entry< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > entry< / span > < span class = "p" > ,< / span > < span class = "nb" > basestring< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _interpolate< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > entry< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > entry< / span >
< span class = "n" > new< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > _check< / span > < span class = "p" > (< / span > < span class = "n" > entry< / span > < span class = "p" > )< / span > < span class = "k" > for< / span > < span class = "n" > entry< / span > < span class = "ow" > in< / span > < span class = "n" > val< / span > < span class = "p" > ]< / span >
< span class = "k" > if< / span > < span class = "n" > new< / span > < span class = "o" > !=< / span > < span class = "n" > val< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "n" > new< / span >
< span class = "k" > return< / span > < span class = "n" > val< / span >
< span class = "k" > def< / span > < span class = "nf" > __setitem__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > unrepr< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > Correctly set a value.< / span >
< span class = "sd" > < / span >
< span class = "sd" > Making dictionary values Section instances.< / span >
< span class = "sd" > (We have to special case ' Section' instances - which are also dicts)< / span >
< span class = "sd" > < / span >
< span class = "sd" > Keys must be strings.< / span >
< span class = "sd" > Values need only be strings (or lists of strings) if< / span >
< span class = "sd" > ``main.stringify`` is set.< / span >
< span class = "sd" > < / span >
< span class = "sd" > ``unrepr`` must be set when setting a value to a dictionary, without< / span >
< span class = "sd" > creating a new sub-section.< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "nb" > basestring< / span > < span class = "p" > ):< / span >
< span class = "k" > raise< / span > < span class = "ne" > ValueError< / span > < span class = "p" > (< / span > < span class = "s" > ' The key " < / span > < span class = "si" > %s< / span > < span class = "s" > " is not a string.' < / span > < span class = "o" > %< / span > < span class = "n" > key< / span > < span class = "p" > )< / span >
< span class = "c" > # add the comment< / span >
< span class = "k" > if< / span > < span class = "n" > key< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > comments< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > comments< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > inline_comments< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "s" > ' ' < / span >
< span class = "c" > # remove the entry from defaults< / span >
< span class = "k" > if< / span > < span class = "n" > key< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > defaults< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > defaults< / span > < span class = "o" > .< / span > < span class = "n" > remove< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > )< / span >
< span class = "c" > #< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > Section< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "n" > key< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > )< / span >
< span class = "nb" > dict< / span > < span class = "o" > .< / span > < span class = "n" > __setitem__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "k" > elif< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "nb" > dict< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "ow" > not< / span > < span class = "n" > unrepr< / span > < span class = "p" > :< / span >
< span class = "c" > # First create the new depth level,< / span >
< span class = "c" > # then create the section< / span >
< span class = "k" > if< / span > < span class = "n" > key< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > )< / span >
< span class = "n" > new_depth< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > depth< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span >
< span class = "nb" > dict< / span > < span class = "o" > .< / span > < span class = "n" > __setitem__< / span > < span class = "p" > (< / span >
< span class = "bp" > self< / span > < span class = "p" > ,< / span >
< span class = "n" > key< / span > < span class = "p" > ,< / span >
< span class = "n" > Section< / span > < span class = "p" > (< / span >
< span class = "bp" > self< / span > < span class = "p" > ,< / span >
< span class = "n" > new_depth< / span > < span class = "p" > ,< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > main< / span > < span class = "p" > ,< / span >
< span class = "n" > indict< / span > < span class = "o" > =< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span >
< span class = "n" > name< / span > < span class = "o" > =< / span > < span class = "n" > key< / span > < span class = "p" > ))< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > key< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > main< / span > < span class = "o" > .< / span > < span class = "n" > stringify< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "nb" > basestring< / span > < span class = "p" > ):< / span >
< span class = "k" > pass< / span >
< span class = "k" > elif< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "nb" > list< / span > < span class = "p" > ,< / span > < span class = "nb" > tuple< / span > < span class = "p" > )):< / span >
< span class = "k" > for< / span > < span class = "n" > entry< / span > < span class = "ow" > in< / span > < span class = "n" > value< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > entry< / span > < span class = "p" > ,< / span > < span class = "nb" > basestring< / span > < span class = "p" > ):< / span >
< span class = "k" > raise< / span > < span class = "ne" > TypeError< / span > < span class = "p" > (< / span > < span class = "s" > ' Value is not a string " < / span > < span class = "si" > %s< / span > < span class = "s" > " .' < / span > < span class = "o" > %< / span > < span class = "n" > entry< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span > < span class = "ne" > TypeError< / span > < span class = "p" > (< / span > < span class = "s" > ' Value is not a string " < / span > < span class = "si" > %s< / span > < span class = "s" > " .' < / span > < span class = "o" > %< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "nb" > dict< / span > < span class = "o" > .< / span > < span class = "n" > __setitem__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "nf" > __delitem__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " Remove items from the sequence when deleting." " " < / span >
< span class = "nb" > dict< / span > < span class = "o" > .< / span > < span class = "n" > __delitem__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > key< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "o" > .< / span > < span class = "n" > remove< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "o" > .< / span > < span class = "n" > remove< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > )< / span >
< span class = "k" > del< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > comments< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span >
< span class = "k" > del< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > inline_comments< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span >
< span class = "k" > def< / span > < span class = "nf" > get< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > default< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " A version of ``get`` that doesn' t bypass string interpolation." " " < / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span >
< span class = "k" > except< / span > < span class = "ne" > KeyError< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "n" > default< / span >
< span class = "k" > def< / span > < span class = "nf" > update< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > indict< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > A version of update that uses our ``__setitem__``.< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > for< / span > < span class = "n" > entry< / span > < span class = "ow" > in< / span > < span class = "n" > indict< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > indict< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span >
< span class = "k" > def< / span > < span class = "nf" > pop< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > default< / span > < span class = "o" > =< / span > < span class = "n" > MISSING< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > ' D.pop(k[,d]) -> v, remove specified key and return the corresponding value.< / span >
< span class = "sd" > If key is not found, d is returned if given, otherwise KeyError is raised' < / span >
< span class = "sd" > " " " < / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "n" > val< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span >
< span class = "k" > except< / span > < span class = "ne" > KeyError< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > default< / span > < span class = "ow" > is< / span > < span class = "n" > MISSING< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span >
< span class = "n" > val< / span > < span class = "o" > =< / span > < span class = "n" > default< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > del< / span > < span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span >
< span class = "k" > return< / span > < span class = "n" > val< / span >
< span class = "k" > def< / span > < span class = "nf" > popitem< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " Pops the first (key,val)" " " < / span >
< span class = "n" > sequence< / span > < span class = "o" > =< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "o" > +< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > sequence< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span > < span class = "ne" > KeyError< / span > < span class = "p" > (< / span > < span class = "s" > " : ' popitem(): dictionary is empty' " < / span > < span class = "p" > )< / span >
< span class = "n" > key< / span > < span class = "o" > =< / span > < span class = "n" > sequence< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span >
< span class = "n" > val< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span >
< span class = "k" > del< / span > < span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span >
< span class = "k" > return< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > val< / span >
< span class = "k" > def< / span > < span class = "nf" > clear< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > A version of clear that also affects scalars/sections< / span >
< span class = "sd" > Also clears comments and configspec.< / span >
< span class = "sd" > < / span >
< span class = "sd" > Leaves other attributes alone :< / span >
< span class = "sd" > depth/main/parent are not affected< / span >
< span class = "sd" > " " " < / span >
< span class = "nb" > dict< / span > < span class = "o" > .< / span > < span class = "n" > clear< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > )< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > comments< / span > < span class = "o" > =< / span > < span class = "p" > {}< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > inline_comments< / span > < span class = "o" > =< / span > < span class = "p" > {}< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > configspec< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > defaults< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > extra_values< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "k" > def< / span > < span class = "nf" > setdefault< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > default< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " A version of setdefault that sets sequence if appropriate." " " < / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span >
< span class = "k" > except< / span > < span class = "ne" > KeyError< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > default< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span >
< span class = "k" > def< / span > < span class = "nf" > items< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " D.items() -> list of D' s (key, value) pairs, as 2-tuples" " " < / span >
< span class = "k" > return< / span > < span class = "nb" > zip< / span > < span class = "p" > ((< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "o" > +< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > ),< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > values< / span > < span class = "p" > ())< / span >
< span class = "k" > def< / span > < span class = "nf" > keys< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " D.keys() -> list of D' s keys" " " < / span >
< span class = "k" > return< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "o" > +< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "nf" > values< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " D.values() -> list of D' s values" " " < / span >
< span class = "k" > return< / span > < span class = "p" > [< / span > < span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span > < span class = "k" > for< / span > < span class = "n" > key< / span > < span class = "ow" > in< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "o" > +< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > )]< / span >
< span class = "k" > def< / span > < span class = "nf" > iteritems< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " D.iteritems() -> an iterator over the (key, value) items of D" " " < / span >
< span class = "k" > return< / span > < span class = "nb" > iter< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > items< / span > < span class = "p" > ())< / span >
< span class = "k" > def< / span > < span class = "nf" > iterkeys< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " D.iterkeys() -> an iterator over the keys of D" " " < / span >
< span class = "k" > return< / span > < span class = "nb" > iter< / span > < span class = "p" > ((< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "o" > +< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > ))< / span >
< span class = "n" > __iter__< / span > < span class = "o" > =< / span > < span class = "n" > iterkeys< / span >
< span class = "k" > def< / span > < span class = "nf" > itervalues< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " D.itervalues() -> an iterator over the values of D" " " < / span >
< span class = "k" > return< / span > < span class = "nb" > iter< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > values< / span > < span class = "p" > ())< / span >
< span class = "k" > def< / span > < span class = "nf" > __repr__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " x.__repr__() < ==> repr(x)" " " < / span >
< span class = "k" > def< / span > < span class = "nf" > _getval< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ):< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span >
< span class = "k" > except< / span > < span class = "n" > MissingInterpolationOption< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "nb" > dict< / span > < span class = "o" > .< / span > < span class = "n" > __getitem__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "s" > ' {< / span > < span class = "si" > %s< / span > < span class = "s" > }' < / span > < span class = "o" > %< / span > < span class = "s" > ' , ' < / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > ([(< / span > < span class = "s" > ' < / span > < span class = "si" > %s< / span > < span class = "s" > : < / span > < span class = "si" > %s< / span > < span class = "s" > ' < / span > < span class = "o" > %< / span > < span class = "p" > (< / span > < span class = "nb" > repr< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ),< / span > < span class = "nb" > repr< / span > < span class = "p" > (< / span > < span class = "n" > _getval< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ))))< / span >
< span class = "k" > for< / span > < span class = "n" > key< / span > < span class = "ow" > in< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "o" > +< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > )])< / span >
< span class = "n" > __str__< / span > < span class = "o" > =< / span > < span class = "n" > __repr__< / span >
< span class = "n" > __str__< / span > < span class = "o" > .< / span > < span class = "n" > __doc__< / span > < span class = "o" > =< / span > < span class = "s" > " x.__str__() < ==> str(x)" < / span >
< span class = "c" > # Extra methods - not in a normal dictionary< / span >
< span class = "k" > def< / span > < span class = "nf" > dict< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > Return a deepcopy of self as a dictionary.< / span >
< span class = "sd" > < / span >
< span class = "sd" > All members that are ``Section`` instances are recursively turned to< / span >
< span class = "sd" > ordinary dictionaries - by calling their ``dict`` method.< / span >
< span class = "sd" > < / span >
< span class = "sd" > > > > n = a.dict()< / span >
< span class = "sd" > > > > n == a< / span >
< span class = "sd" > 1< / span >
< span class = "sd" > > > > n is a< / span >
< span class = "sd" > 0< / span >
< span class = "sd" > " " " < / span >
< span class = "n" > newdict< / span > < span class = "o" > =< / span > < span class = "p" > {}< / span >
< span class = "k" > for< / span > < span class = "n" > entry< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "p" > :< / span >
< span class = "n" > this_entry< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > this_entry< / span > < span class = "p" > ,< / span > < span class = "n" > Section< / span > < span class = "p" > ):< / span >
< span class = "n" > this_entry< / span > < span class = "o" > =< / span > < span class = "n" > this_entry< / span > < span class = "o" > .< / span > < span class = "n" > dict< / span > < span class = "p" > ()< / span >
< span class = "k" > elif< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > this_entry< / span > < span class = "p" > ,< / span > < span class = "nb" > list< / span > < span class = "p" > ):< / span >
< span class = "c" > # create a copy rather than a reference< / span >
< span class = "n" > this_entry< / span > < span class = "o" > =< / span > < span class = "nb" > list< / span > < span class = "p" > (< / span > < span class = "n" > this_entry< / span > < span class = "p" > )< / span >
< span class = "k" > elif< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > this_entry< / span > < span class = "p" > ,< / span > < span class = "nb" > tuple< / span > < span class = "p" > ):< / span >
< span class = "c" > # create a copy rather than a reference< / span >
< span class = "n" > this_entry< / span > < span class = "o" > =< / span > < span class = "nb" > tuple< / span > < span class = "p" > (< / span > < span class = "n" > this_entry< / span > < span class = "p" > )< / span >
< span class = "n" > newdict< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > this_entry< / span >
< span class = "k" > return< / span > < span class = "n" > newdict< / span >
< span class = "k" > def< / span > < span class = "nf" > merge< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > indict< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > A recursive update - useful for merging config files.< / span >
< span class = "sd" > < / span >
< span class = "sd" > > > > a = ' ' ' [section1]< / span >
< span class = "sd" > ... option1 = True< / span >
< span class = "sd" > ... [[subsection]]< / span >
< span class = "sd" > ... more_options = False< / span >
< span class = "sd" > ... # end of file' ' ' .splitlines()< / span >
< span class = "sd" > > > > b = ' ' ' # File is user.ini< / span >
< span class = "sd" > ... [section1]< / span >
< span class = "sd" > ... option1 = False< / span >
< span class = "sd" > ... # end of file' ' ' .splitlines()< / span >
< span class = "sd" > > > > c1 = ConfigObj(b)< / span >
< span class = "sd" > > > > c2 = ConfigObj(a)< / span >
< span class = "sd" > > > > c2.merge(c1)< / span >
< span class = "sd" > > > > c2< / span >
< span class = "sd" > ConfigObj({' section1' : {' option1' : ' False' , ' subsection' : {' more_options' : ' False' }}})< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > for< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > val< / span > < span class = "ow" > in< / span > < span class = "n" > indict< / span > < span class = "o" > .< / span > < span class = "n" > items< / span > < span class = "p" > ():< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "ow" > and< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ],< / span > < span class = "nb" > dict< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span >
< span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > val< / span > < span class = "p" > ,< / span > < span class = "nb" > dict< / span > < span class = "p" > )):< / span >
< span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > merge< / span > < span class = "p" > (< / span > < span class = "n" > val< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > val< / span >
< span class = "k" > def< / span > < span class = "nf" > rename< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > oldkey< / span > < span class = "p" > ,< / span > < span class = "n" > newkey< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > Change a keyname to another, without changing position in sequence.< / span >
< span class = "sd" > < / span >
< span class = "sd" > Implemented so that transformations can be made on keys,< / span >
< span class = "sd" > as well as on values. (used by encode and decode)< / span >
< span class = "sd" > < / span >
< span class = "sd" > Also renames comments.< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > if< / span > < span class = "n" > oldkey< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "p" > :< / span >
< span class = "n" > the_list< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span >
< span class = "k" > elif< / span > < span class = "n" > oldkey< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > :< / span >
< span class = "n" > the_list< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span > < span class = "ne" > KeyError< / span > < span class = "p" > (< / span > < span class = "s" > ' Key " < / span > < span class = "si" > %s< / span > < span class = "s" > " not found.' < / span > < span class = "o" > %< / span > < span class = "n" > oldkey< / span > < span class = "p" > )< / span >
< span class = "n" > pos< / span > < span class = "o" > =< / span > < span class = "n" > the_list< / span > < span class = "o" > .< / span > < span class = "n" > index< / span > < span class = "p" > (< / span > < span class = "n" > oldkey< / span > < span class = "p" > )< / span >
< span class = "c" > #< / span >
< span class = "n" > val< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > oldkey< / span > < span class = "p" > ]< / span >
< span class = "nb" > dict< / span > < span class = "o" > .< / span > < span class = "n" > __delitem__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > oldkey< / span > < span class = "p" > )< / span >
< span class = "nb" > dict< / span > < span class = "o" > .< / span > < span class = "n" > __setitem__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > newkey< / span > < span class = "p" > ,< / span > < span class = "n" > val< / span > < span class = "p" > )< / span >
< span class = "n" > the_list< / span > < span class = "o" > .< / span > < span class = "n" > remove< / span > < span class = "p" > (< / span > < span class = "n" > oldkey< / span > < span class = "p" > )< / span >
< span class = "n" > the_list< / span > < span class = "o" > .< / span > < span class = "n" > insert< / span > < span class = "p" > (< / span > < span class = "n" > pos< / span > < span class = "p" > ,< / span > < span class = "n" > newkey< / span > < span class = "p" > )< / span >
< span class = "n" > comm< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > comments< / span > < span class = "p" > [< / span > < span class = "n" > oldkey< / span > < span class = "p" > ]< / span >
< span class = "n" > inline_comment< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > inline_comments< / span > < span class = "p" > [< / span > < span class = "n" > oldkey< / span > < span class = "p" > ]< / span >
< span class = "k" > del< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > comments< / span > < span class = "p" > [< / span > < span class = "n" > oldkey< / span > < span class = "p" > ]< / span >
< span class = "k" > del< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > inline_comments< / span > < span class = "p" > [< / span > < span class = "n" > oldkey< / span > < span class = "p" > ]< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > comments< / span > < span class = "p" > [< / span > < span class = "n" > newkey< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > comm< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > inline_comments< / span > < span class = "p" > [< / span > < span class = "n" > newkey< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > inline_comment< / span >
< span class = "k" > def< / span > < span class = "nf" > walk< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > function< / span > < span class = "p" > ,< / span > < span class = "n" > raise_errors< / span > < span class = "o" > =< / span > < span class = "bp" > True< / span > < span class = "p" > ,< / span >
< span class = "n" > call_on_sections< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span > < span class = "p" > ,< / span > < span class = "o" > **< / span > < span class = "n" > keywargs< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > Walk every member and call a function on the keyword and value.< / span >
< span class = "sd" > < / span >
< span class = "sd" > Return a dictionary of the return values< / span >
< span class = "sd" > < / span >
< span class = "sd" > If the function raises an exception, raise the errror< / span >
< span class = "sd" > unless ``raise_errors=False``, in which case set the return value to< / span >
< span class = "sd" > ``False``.< / span >
< span class = "sd" > < / span >
< span class = "sd" > Any unrecognised keyword arguments you pass to walk, will be pased on< / span >
< span class = "sd" > to the function you pass in.< / span >
< span class = "sd" > < / span >
< span class = "sd" > Note: if ``call_on_sections`` is ``True`` then - on encountering a< / span >
< span class = "sd" > subsection, *first* the function is called for the *whole* subsection,< / span >
< span class = "sd" > and then recurses into it' s members. This means your function must be< / span >
< span class = "sd" > able to handle strings, dictionaries and lists. This allows you< / span >
< span class = "sd" > to change the key of subsections as well as for ordinary members. The< / span >
< span class = "sd" > return value when called on the whole subsection has to be discarded.< / span >
< span class = "sd" > < / span >
< span class = "sd" > See the encode and decode methods for examples, including functions.< / span >
< span class = "sd" > < / span >
< span class = "sd" > .. admonition:: caution< / span >
< span class = "sd" > < / span >
< span class = "sd" > You can use ``walk`` to transform the names of members of a section< / span >
< span class = "sd" > but you mustn' t add or delete members.< / span >
< span class = "sd" > < / span >
< span class = "sd" > > > > config = ' ' ' [XXXXsection]< / span >
< span class = "sd" > ... XXXXkey = XXXXvalue' ' ' .splitlines()< / span >
< span class = "sd" > > > > cfg = ConfigObj(config)< / span >
< span class = "sd" > > > > cfg< / span >
< span class = "sd" > ConfigObj({' XXXXsection' : {' XXXXkey' : ' XXXXvalue' }})< / span >
< span class = "sd" > > > > def transform(section, key):< / span >
< span class = "sd" > ... val = section[key]< / span >
< span class = "sd" > ... newkey = key.replace(' XXXX' , ' CLIENT1' )< / span >
< span class = "sd" > ... section.rename(key, newkey)< / span >
< span class = "sd" > ... if isinstance(val, (tuple, list, dict)):< / span >
< span class = "sd" > ... pass< / span >
< span class = "sd" > ... else:< / span >
< span class = "sd" > ... val = val.replace(' XXXX' , ' CLIENT1' )< / span >
< span class = "sd" > ... section[newkey] = val< / span >
< span class = "sd" > > > > cfg.walk(transform, call_on_sections=True)< / span >
< span class = "sd" > {' CLIENT1section' : {' CLIENT1key' : None}}< / span >
< span class = "sd" > > > > cfg< / span >
< span class = "sd" > ConfigObj({' CLIENT1section' : {' CLIENT1key' : ' CLIENT1value' }})< / span >
< span class = "sd" > " " " < / span >
< span class = "n" > out< / span > < span class = "o" > =< / span > < span class = "p" > {}< / span >
< span class = "c" > # scalars first< / span >
< span class = "k" > for< / span > < span class = "n" > i< / span > < span class = "ow" > in< / span > < span class = "nb" > range< / span > < span class = "p" > (< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "p" > )):< / span >
< span class = "n" > entry< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "p" > [< / span > < span class = "n" > i< / span > < span class = "p" > ]< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "n" > val< / span > < span class = "o" > =< / span > < span class = "n" > function< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > entry< / span > < span class = "p" > ,< / span > < span class = "o" > **< / span > < span class = "n" > keywargs< / span > < span class = "p" > )< / span >
< span class = "c" > # bound again in case name has changed< / span >
< span class = "n" > entry< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "p" > [< / span > < span class = "n" > i< / span > < span class = "p" > ]< / span >
< span class = "n" > out< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > val< / span >
< span class = "k" > except< / span > < span class = "ne" > Exception< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > raise_errors< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > entry< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "p" > [< / span > < span class = "n" > i< / span > < span class = "p" > ]< / span >
< span class = "n" > out< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "c" > # then sections< / span >
< span class = "k" > for< / span > < span class = "n" > i< / span > < span class = "ow" > in< / span > < span class = "nb" > range< / span > < span class = "p" > (< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > )):< / span >
< span class = "n" > entry< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > [< / span > < span class = "n" > i< / span > < span class = "p" > ]< / span >
< span class = "k" > if< / span > < span class = "n" > call_on_sections< / span > < span class = "p" > :< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "n" > function< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > entry< / span > < span class = "p" > ,< / span > < span class = "o" > **< / span > < span class = "n" > keywargs< / span > < span class = "p" > )< / span >
< span class = "k" > except< / span > < span class = "ne" > Exception< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > raise_errors< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > entry< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > [< / span > < span class = "n" > i< / span > < span class = "p" > ]< / span >
< span class = "n" > out< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "c" > # bound again in case name has changed< / span >
< span class = "n" > entry< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > [< / span > < span class = "n" > i< / span > < span class = "p" > ]< / span >
< span class = "c" > # previous result is discarded< / span >
< span class = "n" > out< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > walk< / span > < span class = "p" > (< / span >
< span class = "n" > function< / span > < span class = "p" > ,< / span >
< span class = "n" > raise_errors< / span > < span class = "o" > =< / span > < span class = "n" > raise_errors< / span > < span class = "p" > ,< / span >
< span class = "n" > call_on_sections< / span > < span class = "o" > =< / span > < span class = "n" > call_on_sections< / span > < span class = "p" > ,< / span >
< span class = "o" > **< / span > < span class = "n" > keywargs< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > out< / span >
< span class = "k" > def< / span > < span class = "nf" > as_bool< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > Accepts a key as input. The corresponding value must be a string or< / span >
< span class = "sd" > the objects (``True`` or 1) or (``False`` or 0). We allow 0 and 1 to< / span >
< span class = "sd" > retain compatibility with Python 2.2.< / span >
< span class = "sd" > < / span >
< span class = "sd" > If the string is one of ``True``, ``On``, ``Yes``, or ``1`` it returns < / span >
< span class = "sd" > ``True``.< / span >
< span class = "sd" > < / span >
< span class = "sd" > If the string is one of ``False``, ``Off``, ``No``, or ``0`` it returns < / span >
< span class = "sd" > ``False``.< / span >
< span class = "sd" > < / span >
< span class = "sd" > ``as_bool`` is not case sensitive.< / span >
< span class = "sd" > < / span >
< span class = "sd" > Any other input will raise a ``ValueError``.< / span >
< span class = "sd" > < / span >
< span class = "sd" > > > > a = ConfigObj()< / span >
< span class = "sd" > > > > a[' a' ] = ' fish' < / span >
< span class = "sd" > > > > a.as_bool(' a' )< / span >
< span class = "sd" > Traceback (most recent call last):< / span >
< span class = "sd" > ValueError: Value " fish" is neither True nor False< / span >
< span class = "sd" > > > > a[' b' ] = ' True' < / span >
< span class = "sd" > > > > a.as_bool(' b' )< / span >
< span class = "sd" > 1< / span >
< span class = "sd" > > > > a[' b' ] = ' off' < / span >
< span class = "sd" > > > > a.as_bool(' b' )< / span >
< span class = "sd" > 0< / span >
< span class = "sd" > " " " < / span >
< span class = "n" > val< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span >
< span class = "k" > if< / span > < span class = "n" > val< / span > < span class = "o" > ==< / span > < span class = "bp" > True< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "bp" > True< / span >
< span class = "k" > elif< / span > < span class = "n" > val< / span > < span class = "o" > ==< / span > < span class = "bp" > False< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "bp" > False< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > val< / span > < span class = "p" > ,< / span > < span class = "nb" > basestring< / span > < span class = "p" > ):< / span >
< span class = "c" > # TODO: Why do we raise a KeyError here?< / span >
< span class = "k" > raise< / span > < span class = "ne" > KeyError< / span > < span class = "p" > ()< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > main< / span > < span class = "o" > .< / span > < span class = "n" > _bools< / span > < span class = "p" > [< / span > < span class = "n" > val< / span > < span class = "o" > .< / span > < span class = "n" > lower< / span > < span class = "p" > ()]< / span >
< span class = "k" > except< / span > < span class = "ne" > KeyError< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span > < span class = "ne" > ValueError< / span > < span class = "p" > (< / span > < span class = "s" > ' Value " < / span > < span class = "si" > %s< / span > < span class = "s" > " is neither True nor False' < / span > < span class = "o" > %< / span > < span class = "n" > val< / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "nf" > as_int< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > A convenience method which coerces the specified value to an integer.< / span >
< span class = "sd" > < / span >
< span class = "sd" > If the value is an invalid literal for ``int``, a ``ValueError`` will< / span >
< span class = "sd" > be raised.< / span >
< span class = "sd" > < / span >
< span class = "sd" > > > > a = ConfigObj()< / span >
< span class = "sd" > > > > a[' a' ] = ' fish' < / span >
< span class = "sd" > > > > a.as_int(' a' )< / span >
< span class = "sd" > Traceback (most recent call last):< / span >
< span class = "sd" > ValueError: invalid literal for int() with base 10: ' fish' < / span >
< span class = "sd" > > > > a[' b' ] = ' 1' < / span >
< span class = "sd" > > > > a.as_int(' b' )< / span >
< span class = "sd" > 1< / span >
< span class = "sd" > > > > a[' b' ] = ' 3.2' < / span >
< span class = "sd" > > > > a.as_int(' b' )< / span >
< span class = "sd" > Traceback (most recent call last):< / span >
< span class = "sd" > ValueError: invalid literal for int() with base 10: ' 3.2' < / span >
< span class = "sd" > " " " < / span >
< span class = "k" > return< / span > < span class = "nb" > int< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ])< / span >
< span class = "k" > def< / span > < span class = "nf" > as_float< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > A convenience method which coerces the specified value to a float.< / span >
< span class = "sd" > < / span >
< span class = "sd" > If the value is an invalid literal for ``float``, a ``ValueError`` will< / span >
< span class = "sd" > be raised.< / span >
< span class = "sd" > < / span >
< span class = "sd" > > > > a = ConfigObj()< / span >
< span class = "sd" > > > > a[' a' ] = ' fish' < / span >
< span class = "sd" > > > > a.as_float(' a' )< / span >
< span class = "sd" > Traceback (most recent call last):< / span >
< span class = "sd" > ValueError: invalid literal for float(): fish< / span >
< span class = "sd" > > > > a[' b' ] = ' 1' < / span >
< span class = "sd" > > > > a.as_float(' b' )< / span >
< span class = "sd" > 1.0< / span >
< span class = "sd" > > > > a[' b' ] = ' 3.2' < / span >
< span class = "sd" > > > > a.as_float(' b' )< / span >
< span class = "sd" > 3.2000000000000002< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > return< / span > < span class = "nb" > float< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ])< / span >
< span class = "k" > def< / span > < span class = "nf" > as_list< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > A convenience method which fetches the specified value, guaranteeing< / span >
< span class = "sd" > that it is a list.< / span >
< span class = "sd" > < / span >
< span class = "sd" > > > > a = ConfigObj()< / span >
< span class = "sd" > > > > a[' a' ] = 1< / span >
< span class = "sd" > > > > a.as_list(' a' )< / span >
< span class = "sd" > [1]< / span >
< span class = "sd" > > > > a[' a' ] = (1,)< / span >
< span class = "sd" > > > > a.as_list(' a' )< / span >
< span class = "sd" > [1]< / span >
< span class = "sd" > > > > a[' a' ] = [1]< / span >
< span class = "sd" > > > > a.as_list(' a' )< / span >
< span class = "sd" > [1]< / span >
< span class = "sd" > " " " < / span >
< span class = "n" > result< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > result< / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "nb" > tuple< / span > < span class = "p" > ,< / span > < span class = "nb" > list< / span > < span class = "p" > )):< / span >
< span class = "k" > return< / span > < span class = "nb" > list< / span > < span class = "p" > (< / span > < span class = "n" > result< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "p" > [< / span > < span class = "n" > result< / span > < span class = "p" > ]< / span >
< span class = "k" > def< / span > < span class = "nf" > restore_default< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > Restore (and return) default value for the specified key.< / span >
< span class = "sd" > < / span >
< span class = "sd" > This method will only work for a ConfigObj that was created< / span >
< span class = "sd" > with a configspec and has been validated.< / span >
< span class = "sd" > < / span >
< span class = "sd" > If there is no default value for this key, ``KeyError`` is raised.< / span >
< span class = "sd" > " " " < / span >
< span class = "n" > default< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > default_values< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span >
< span class = "nb" > dict< / span > < span class = "o" > .< / span > < span class = "n" > __setitem__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > default< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > key< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > defaults< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > defaults< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > default< / span >
< span class = "k" > def< / span > < span class = "nf" > restore_defaults< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > Recursively restore default values to all members< / span >
< span class = "sd" > that have them.< / span >
< span class = "sd" > < / span >
< span class = "sd" > This method will only work for a ConfigObj that was created< / span >
< span class = "sd" > with a configspec and has been validated.< / span >
< span class = "sd" > < / span >
< span class = "sd" > It doesn' t delete or modify entries without default values.< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > for< / span > < span class = "n" > key< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > default_values< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > restore_default< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > )< / span >
< span class = "k" > for< / span > < span class = "n" > section< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > section< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > restore_defaults< / span > < span class = "p" > ()< / span >
< div class = "viewcode-block" id = "ConfigObj" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj" > [docs]< / a > < span class = "k" > class< / span > < span class = "nc" > ConfigObj< / span > < span class = "p" > (< / span > < span class = "n" > Section< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " An object to read, create, and write config files." " " < / span >
< span class = "n" > _keyword< / span > < span class = "o" > =< / span > < span class = "n" > re< / span > < span class = "o" > .< / span > < span class = "n" > compile< / span > < span class = "p" > (< / span > < span class = "s" > r' ' ' ^ # line start< / span >
< span class = "s" > (\s*) # indentation< / span >
< span class = "s" > ( # keyword< / span >
< span class = "s" > (?:" .*?" )| # double quotes< / span >
< span class = "s" > (?:' .*?' )| # single quotes< / span >
< span class = "s" > (?:[^' " =].*?) # no quotes< / span >
< span class = "s" > )< / span >
< span class = "s" > \s*=\s* # divider< / span >
< span class = "s" > (.*) # value (including list values and comments)< / span >
< span class = "s" > $ # line end< / span >
< span class = "s" > ' ' ' < / span > < span class = "p" > ,< / span >
< span class = "n" > re< / span > < span class = "o" > .< / span > < span class = "n" > VERBOSE< / span > < span class = "p" > )< / span >
< span class = "n" > _sectionmarker< / span > < span class = "o" > =< / span > < span class = "n" > re< / span > < span class = "o" > .< / span > < span class = "n" > compile< / span > < span class = "p" > (< / span > < span class = "s" > r' ' ' ^< / span >
< span class = "s" > (\s*) # 1: indentation< / span >
< span class = "s" > ((?:\[\s*)+) # 2: section marker open< / span >
< span class = "s" > ( # 3: section name open< / span >
< span class = "s" > (?:" \s*\S.*?\s*" )| # at least one non-space with double quotes< / span >
< span class = "s" > (?:' \s*\S.*?\s*' )| # at least one non-space with single quotes< / span >
< span class = "s" > (?:[^' " \s].*?) # at least one non-space unquoted< / span >
< span class = "s" > ) # section name close< / span >
< span class = "s" > ((?:\s*\])+) # 4: section marker close< / span >
< span class = "s" > \s*(\#.*)? # 5: optional comment< / span >
< span class = "s" > $' ' ' < / span > < span class = "p" > ,< / span >
< span class = "n" > re< / span > < span class = "o" > .< / span > < span class = "n" > VERBOSE< / span > < span class = "p" > )< / span >
< span class = "c" > # this regexp pulls list values out as a single string< / span >
< span class = "c" > # or single values and comments< / span >
< span class = "c" > # FIXME: this regex adds a ' ' to the end of comma terminated lists< / span >
< span class = "c" > # workaround in ``_handle_value``< / span >
< span class = "n" > _valueexp< / span > < span class = "o" > =< / span > < span class = "n" > re< / span > < span class = "o" > .< / span > < span class = "n" > compile< / span > < span class = "p" > (< / span > < span class = "s" > r' ' ' ^< / span >
< span class = "s" > (?:< / span >
< span class = "s" > (?:< / span >
< span class = "s" > (< / span >
< span class = "s" > (?:< / span >
< span class = "s" > (?:< / span >
< span class = "s" > (?:" .*?" )| # double quotes< / span >
< span class = "s" > (?:' .*?' )| # single quotes< / span >
< span class = "s" > (?:[^' " ,\#][^,\#]*?) # unquoted< / span >
< span class = "s" > )< / span >
< span class = "s" > \s*,\s* # comma< / span >
< span class = "s" > )* # match all list items ending in a comma (if any)< / span >
< span class = "s" > )< / span >
< span class = "s" > (< / span >
< span class = "s" > (?:" .*?" )| # double quotes< / span >
< span class = "s" > (?:' .*?' )| # single quotes< / span >
< span class = "s" > (?:[^' " ,\#\s][^,]*?)| # unquoted< / span >
< span class = "s" > (?:(?< !,)) # Empty value< / span >
< span class = "s" > )? # last item in a list - or string value< / span >
< span class = "s" > )|< / span >
< span class = "s" > (,) # alternatively a single comma - empty list< / span >
< span class = "s" > )< / span >
< span class = "s" > \s*(\#.*)? # optional comment< / span >
< span class = "s" > $' ' ' < / span > < span class = "p" > ,< / span >
< span class = "n" > re< / span > < span class = "o" > .< / span > < span class = "n" > VERBOSE< / span > < span class = "p" > )< / span >
< span class = "c" > # use findall to get the members of a list value< / span >
< span class = "n" > _listvalueexp< / span > < span class = "o" > =< / span > < span class = "n" > re< / span > < span class = "o" > .< / span > < span class = "n" > compile< / span > < span class = "p" > (< / span > < span class = "s" > r' ' ' < / span >
< span class = "s" > (< / span >
< span class = "s" > (?:" .*?" )| # double quotes< / span >
< span class = "s" > (?:' .*?' )| # single quotes< / span >
< span class = "s" > (?:[^' " ,\#]?.*?) # unquoted< / span >
< span class = "s" > )< / span >
< span class = "s" > \s*,\s* # comma< / span >
< span class = "s" > ' ' ' < / span > < span class = "p" > ,< / span >
< span class = "n" > re< / span > < span class = "o" > .< / span > < span class = "n" > VERBOSE< / span > < span class = "p" > )< / span >
< span class = "c" > # this regexp is used for the value< / span >
< span class = "c" > # when lists are switched off< / span >
< span class = "n" > _nolistvalue< / span > < span class = "o" > =< / span > < span class = "n" > re< / span > < span class = "o" > .< / span > < span class = "n" > compile< / span > < span class = "p" > (< / span > < span class = "s" > r' ' ' ^< / span >
< span class = "s" > (< / span >
< span class = "s" > (?:" .*?" )| # double quotes< / span >
< span class = "s" > (?:' .*?' )| # single quotes< / span >
< span class = "s" > (?:[^' " \#].*?)| # unquoted< / span >
< span class = "s" > (?:) # Empty value< / span >
< span class = "s" > )< / span >
< span class = "s" > \s*(\#.*)? # optional comment< / span >
< span class = "s" > $' ' ' < / span > < span class = "p" > ,< / span >
< span class = "n" > re< / span > < span class = "o" > .< / span > < span class = "n" > VERBOSE< / span > < span class = "p" > )< / span >
< span class = "c" > # regexes for finding triple quoted values on one line< / span >
< span class = "n" > _single_line_single< / span > < span class = "o" > =< / span > < span class = "n" > re< / span > < span class = "o" > .< / span > < span class = "n" > compile< / span > < span class = "p" > (< / span > < span class = "s" > r" ^' ' ' (.*?)' ' ' \s*(#.*)?$" < / span > < span class = "p" > )< / span >
< span class = "n" > _single_line_double< / span > < span class = "o" > =< / span > < span class = "n" > re< / span > < span class = "o" > .< / span > < span class = "n" > compile< / span > < span class = "p" > (< / span > < span class = "s" > r' ^" " " (.*?)" " " \s*(#.*)?$' < / span > < span class = "p" > )< / span >
< span class = "n" > _multi_line_single< / span > < span class = "o" > =< / span > < span class = "n" > re< / span > < span class = "o" > .< / span > < span class = "n" > compile< / span > < span class = "p" > (< / span > < span class = "s" > r" ^(.*?)' ' ' \s*(#.*)?$" < / span > < span class = "p" > )< / span >
< span class = "n" > _multi_line_double< / span > < span class = "o" > =< / span > < span class = "n" > re< / span > < span class = "o" > .< / span > < span class = "n" > compile< / span > < span class = "p" > (< / span > < span class = "s" > r' ^(.*?)" " " \s*(#.*)?$' < / span > < span class = "p" > )< / span >
< span class = "n" > _triple_quote< / span > < span class = "o" > =< / span > < span class = "p" > {< / span >
< span class = "s" > " ' ' ' " < / span > < span class = "p" > :< / span > < span class = "p" > (< / span > < span class = "n" > _single_line_single< / span > < span class = "p" > ,< / span > < span class = "n" > _multi_line_single< / span > < span class = "p" > ),< / span >
< span class = "s" > ' " " " ' < / span > < span class = "p" > :< / span > < span class = "p" > (< / span > < span class = "n" > _single_line_double< / span > < span class = "p" > ,< / span > < span class = "n" > _multi_line_double< / span > < span class = "p" > ),< / span >
< span class = "p" > }< / span >
< span class = "c" > # Used by the ``istrue`` Section method< / span >
< span class = "n" > _bools< / span > < span class = "o" > =< / span > < span class = "p" > {< / span >
< span class = "s" > ' yes' < / span > < span class = "p" > :< / span > < span class = "bp" > True< / span > < span class = "p" > ,< / span > < span class = "s" > ' no' < / span > < span class = "p" > :< / span > < span class = "bp" > False< / span > < span class = "p" > ,< / span >
< span class = "s" > ' on' < / span > < span class = "p" > :< / span > < span class = "bp" > True< / span > < span class = "p" > ,< / span > < span class = "s" > ' off' < / span > < span class = "p" > :< / span > < span class = "bp" > False< / span > < span class = "p" > ,< / span >
< span class = "s" > ' 1' < / span > < span class = "p" > :< / span > < span class = "bp" > True< / span > < span class = "p" > ,< / span > < span class = "s" > ' 0' < / span > < span class = "p" > :< / span > < span class = "bp" > False< / span > < span class = "p" > ,< / span >
< span class = "s" > ' true' < / span > < span class = "p" > :< / span > < span class = "bp" > True< / span > < span class = "p" > ,< / span > < span class = "s" > ' false' < / span > < span class = "p" > :< / span > < span class = "bp" > False< / span > < span class = "p" > ,< / span >
< span class = "p" > }< / span >
< div class = "viewcode-block" id = "ConfigObj.__init__" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj.__init__" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > __init__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > infile< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span > < span class = "p" > ,< / span > < span class = "n" > options< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span > < span class = "p" > ,< / span > < span class = "n" > configspec< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span > < span class = "p" > ,< / span > < span class = "n" > encoding< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span > < span class = "p" > ,< / span >
< span class = "n" > interpolation< / span > < span class = "o" > =< / span > < span class = "bp" > True< / span > < span class = "p" > ,< / span > < span class = "n" > raise_errors< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span > < span class = "p" > ,< / span > < span class = "n" > list_values< / span > < span class = "o" > =< / span > < span class = "bp" > True< / span > < span class = "p" > ,< / span >
< span class = "n" > create_empty< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span > < span class = "p" > ,< / span > < span class = "n" > file_error< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span > < span class = "p" > ,< / span > < span class = "n" > stringify< / span > < span class = "o" > =< / span > < span class = "bp" > True< / span > < span class = "p" > ,< / span >
< span class = "n" > indent_type< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span > < span class = "p" > ,< / span > < span class = "n" > default_encoding< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span > < span class = "p" > ,< / span > < span class = "n" > unrepr< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span > < span class = "p" > ,< / span >
< span class = "n" > write_empty_values< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span > < span class = "p" > ,< / span > < span class = "n" > _inspec< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > Parse a config file or create a config file object.< / span >
< span class = "sd" > " " " < / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _inspec< / span > < span class = "o" > =< / span > < span class = "n" > _inspec< / span >
< span class = "c" > # init the superclass< / span >
< span class = "n" > Section< / span > < span class = "o" > .< / span > < span class = "n" > __init__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "mi" > 0< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "p" > )< / span >
< span class = "n" > infile< / span > < span class = "o" > =< / span > < span class = "n" > infile< / span > < span class = "ow" > or< / span > < span class = "p" > []< / span >
< span class = "n" > _options< / span > < span class = "o" > =< / span > < span class = "p" > {< / span > < span class = "s" > ' configspec' < / span > < span class = "p" > :< / span > < span class = "n" > configspec< / span > < span class = "p" > ,< / span >
< span class = "s" > ' encoding' < / span > < span class = "p" > :< / span > < span class = "n" > encoding< / span > < span class = "p" > ,< / span > < span class = "s" > ' interpolation' < / span > < span class = "p" > :< / span > < span class = "n" > interpolation< / span > < span class = "p" > ,< / span >
< span class = "s" > ' raise_errors' < / span > < span class = "p" > :< / span > < span class = "n" > raise_errors< / span > < span class = "p" > ,< / span > < span class = "s" > ' list_values' < / span > < span class = "p" > :< / span > < span class = "n" > list_values< / span > < span class = "p" > ,< / span >
< span class = "s" > ' create_empty' < / span > < span class = "p" > :< / span > < span class = "n" > create_empty< / span > < span class = "p" > ,< / span > < span class = "s" > ' file_error' < / span > < span class = "p" > :< / span > < span class = "n" > file_error< / span > < span class = "p" > ,< / span >
< span class = "s" > ' stringify' < / span > < span class = "p" > :< / span > < span class = "n" > stringify< / span > < span class = "p" > ,< / span > < span class = "s" > ' indent_type' < / span > < span class = "p" > :< / span > < span class = "n" > indent_type< / span > < span class = "p" > ,< / span >
< span class = "s" > ' default_encoding' < / span > < span class = "p" > :< / span > < span class = "n" > default_encoding< / span > < span class = "p" > ,< / span > < span class = "s" > ' unrepr' < / span > < span class = "p" > :< / span > < span class = "n" > unrepr< / span > < span class = "p" > ,< / span >
< span class = "s" > ' write_empty_values' < / span > < span class = "p" > :< / span > < span class = "n" > write_empty_values< / span > < span class = "p" > }< / span >
< span class = "k" > if< / span > < span class = "n" > options< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "n" > options< / span > < span class = "o" > =< / span > < span class = "n" > _options< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "kn" > import< / span > < span class = "nn" > warnings< / span >
< span class = "n" > warnings< / span > < span class = "o" > .< / span > < span class = "n" > warn< / span > < span class = "p" > (< / span > < span class = "s" > ' Passing in an options dictionary to ConfigObj() is ' < / span >
< span class = "s" > ' deprecated. Use **options instead.' < / span > < span class = "p" > ,< / span >
< span class = "ne" > DeprecationWarning< / span > < span class = "p" > ,< / span > < span class = "n" > stacklevel< / span > < span class = "o" > =< / span > < span class = "mi" > 2< / span > < span class = "p" > )< / span >
< span class = "c" > # TODO: check the values too.< / span >
< span class = "k" > for< / span > < span class = "n" > entry< / span > < span class = "ow" > in< / span > < span class = "n" > options< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > entry< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "n" > OPTION_DEFAULTS< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span > < span class = "ne" > TypeError< / span > < span class = "p" > (< / span > < span class = "s" > ' Unrecognised option " < / span > < span class = "si" > %s< / span > < span class = "s" > " .' < / span > < span class = "o" > %< / span > < span class = "n" > entry< / span > < span class = "p" > )< / span >
< span class = "k" > for< / span > < span class = "n" > entry< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "ow" > in< / span > < span class = "n" > OPTION_DEFAULTS< / span > < span class = "o" > .< / span > < span class = "n" > items< / span > < span class = "p" > ():< / span >
< span class = "k" > if< / span > < span class = "n" > entry< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "n" > options< / span > < span class = "p" > :< / span >
< span class = "n" > options< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > value< / span >
< span class = "n" > keyword_value< / span > < span class = "o" > =< / span > < span class = "n" > _options< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span >
< span class = "k" > if< / span > < span class = "n" > value< / span > < span class = "o" > !=< / span > < span class = "n" > keyword_value< / span > < span class = "p" > :< / span >
< span class = "n" > options< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > keyword_value< / span >
< span class = "c" > # XXXX this ignores an explicit list_values = True in combination< / span >
< span class = "c" > # with _inspec. The user should *never* do that anyway, but still...< / span >
< span class = "k" > if< / span > < span class = "n" > _inspec< / span > < span class = "p" > :< / span >
< span class = "n" > options< / span > < span class = "p" > [< / span > < span class = "s" > ' list_values' < / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _initialise< / span > < span class = "p" > (< / span > < span class = "n" > options< / span > < span class = "p" > )< / span >
< span class = "n" > configspec< / span > < span class = "o" > =< / span > < span class = "n" > options< / span > < span class = "p" > [< / span > < span class = "s" > ' configspec' < / span > < span class = "p" > ]< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _original_configspec< / span > < span class = "o" > =< / span > < span class = "n" > configspec< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _load< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "n" > configspec< / span > < span class = "p" > )< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj._load" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj._load" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > _load< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "n" > configspec< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "nb" > basestring< / span > < span class = "p" > ):< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "o" > =< / span > < span class = "n" > infile< / span >
< span class = "k" > if< / span > < span class = "n" > os< / span > < span class = "o" > .< / span > < span class = "n" > path< / span > < span class = "o" > .< / span > < span class = "n" > isfile< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ):< / span >
< span class = "n" > h< / span > < span class = "o" > =< / span > < span class = "nb" > open< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "s" > ' rb' < / span > < span class = "p" > )< / span >
< span class = "n" > infile< / span > < span class = "o" > =< / span > < span class = "n" > h< / span > < span class = "o" > .< / span > < span class = "n" > read< / span > < span class = "p" > ()< / span > < span class = "ow" > or< / span > < span class = "p" > []< / span >
< span class = "n" > h< / span > < span class = "o" > .< / span > < span class = "n" > close< / span > < span class = "p" > ()< / span >
< span class = "k" > elif< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > file_error< / span > < span class = "p" > :< / span >
< span class = "c" > # raise an error if the file doesn' t exist< / span >
< span class = "k" > raise< / span > < span class = "ne" > IOError< / span > < span class = "p" > (< / span > < span class = "s" > ' Config file not found: " < / span > < span class = "si" > %s< / span > < span class = "s" > " .' < / span > < span class = "o" > %< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "c" > # file doesn' t already exist< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > create_empty< / span > < span class = "p" > :< / span >
< span class = "c" > # this is a good test that the filename specified< / span >
< span class = "c" > # isn' t impossible - like on a non-existent device< / span >
< span class = "n" > h< / span > < span class = "o" > =< / span > < span class = "nb" > open< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "s" > ' w' < / span > < span class = "p" > )< / span >
< span class = "n" > h< / span > < span class = "o" > .< / span > < span class = "n" > write< / span > < span class = "p" > (< / span > < span class = "s" > ' ' < / span > < span class = "p" > )< / span >
< span class = "n" > h< / span > < span class = "o" > .< / span > < span class = "n" > close< / span > < span class = "p" > ()< / span >
< span class = "n" > infile< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "k" > elif< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "nb" > list< / span > < span class = "p" > ,< / span > < span class = "nb" > tuple< / span > < span class = "p" > )):< / span >
< span class = "n" > infile< / span > < span class = "o" > =< / span > < span class = "nb" > list< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > )< / span >
< span class = "k" > elif< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "nb" > dict< / span > < span class = "p" > ):< / span >
< span class = "c" > # initialise self< / span >
< span class = "c" > # the Section class handles creating subsections< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "n" > ConfigObj< / span > < span class = "p" > ):< / span >
< span class = "c" > # get a copy of our ConfigObj< / span >
< span class = "k" > def< / span > < span class = "nf" > set_section< / span > < span class = "p" > (< / span > < span class = "n" > in_section< / span > < span class = "p" > ,< / span > < span class = "n" > this_section< / span > < span class = "p" > ):< / span >
< span class = "k" > for< / span > < span class = "n" > entry< / span > < span class = "ow" > in< / span > < span class = "n" > in_section< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "p" > :< / span >
< span class = "n" > this_section< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > in_section< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span >
< span class = "k" > for< / span > < span class = "n" > section< / span > < span class = "ow" > in< / span > < span class = "n" > in_section< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > :< / span >
< span class = "n" > this_section< / span > < span class = "p" > [< / span > < span class = "n" > section< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "p" > {}< / span >
< span class = "n" > set_section< / span > < span class = "p" > (< / span > < span class = "n" > in_section< / span > < span class = "p" > [< / span > < span class = "n" > section< / span > < span class = "p" > ],< / span > < span class = "n" > this_section< / span > < span class = "p" > [< / span > < span class = "n" > section< / span > < span class = "p" > ])< / span >
< span class = "n" > set_section< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > for< / span > < span class = "n" > entry< / span > < span class = "ow" > in< / span > < span class = "n" > infile< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > infile< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span >
< span class = "k" > del< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _errors< / span >
< span class = "k" > if< / span > < span class = "n" > configspec< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _handle_configspec< / span > < span class = "p" > (< / span > < span class = "n" > configspec< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > configspec< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span >
< span class = "k" > return< / span >
< span class = "k" > elif< / span > < span class = "nb" > getattr< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "s" > ' read' < / span > < span class = "p" > ,< / span > < span class = "n" > MISSING< / span > < span class = "p" > )< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "n" > MISSING< / span > < span class = "p" > :< / span >
< span class = "c" > # This supports file like objects< / span >
< span class = "n" > infile< / span > < span class = "o" > =< / span > < span class = "n" > infile< / span > < span class = "o" > .< / span > < span class = "n" > read< / span > < span class = "p" > ()< / span > < span class = "ow" > or< / span > < span class = "p" > []< / span >
< span class = "c" > # needs splitting into lines - but needs doing *after* decoding< / span >
< span class = "c" > # in case it' s not an 8 bit encoding< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span > < span class = "ne" > TypeError< / span > < span class = "p" > (< / span > < span class = "s" > ' infile must be a filename, file like object, or list of lines.' < / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > infile< / span > < span class = "p" > :< / span >
< span class = "c" > # don' t do it for the empty ConfigObj< / span >
< span class = "n" > infile< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _handle_bom< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > )< / span >
< span class = "c" > # infile is now *always* a list< / span >
< span class = "c" > #< / span >
< span class = "c" > # Set the newlines attribute (first line ending it finds)< / span >
< span class = "c" > # and strip trailing ' \n' or ' \r' from lines< / span >
< span class = "k" > for< / span > < span class = "n" > line< / span > < span class = "ow" > in< / span > < span class = "n" > infile< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "ow" > not< / span > < span class = "n" > line< / span > < span class = "p" > )< / span > < span class = "ow" > or< / span > < span class = "p" > (< / span > < span class = "n" > line< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "p" > (< / span > < span class = "s" > ' < / span > < span class = "se" > \r< / span > < span class = "s" > ' < / span > < span class = "p" > ,< / span > < span class = "s" > ' < / span > < span class = "se" > \n< / span > < span class = "s" > ' < / span > < span class = "p" > ,< / span > < span class = "s" > ' < / span > < span class = "se" > \r\n< / span > < span class = "s" > ' < / span > < span class = "p" > )):< / span >
< span class = "k" > continue< / span >
< span class = "k" > for< / span > < span class = "n" > end< / span > < span class = "ow" > in< / span > < span class = "p" > (< / span > < span class = "s" > ' < / span > < span class = "se" > \r\n< / span > < span class = "s" > ' < / span > < span class = "p" > ,< / span > < span class = "s" > ' < / span > < span class = "se" > \n< / span > < span class = "s" > ' < / span > < span class = "p" > ,< / span > < span class = "s" > ' < / span > < span class = "se" > \r< / span > < span class = "s" > ' < / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "n" > line< / span > < span class = "o" > .< / span > < span class = "n" > endswith< / span > < span class = "p" > (< / span > < span class = "n" > end< / span > < span class = "p" > ):< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > newlines< / span > < span class = "o" > =< / span > < span class = "n" > end< / span >
< span class = "k" > break< / span >
< span class = "k" > break< / span >
< span class = "n" > infile< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > line< / span > < span class = "o" > .< / span > < span class = "n" > rstrip< / span > < span class = "p" > (< / span > < span class = "s" > ' < / span > < span class = "se" > \r\n< / span > < span class = "s" > ' < / span > < span class = "p" > )< / span > < span class = "k" > for< / span > < span class = "n" > line< / span > < span class = "ow" > in< / span > < span class = "n" > infile< / span > < span class = "p" > ]< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _parse< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > )< / span >
< span class = "c" > # if we had any errors, now is the time to raise them< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _errors< / span > < span class = "p" > :< / span >
< span class = "n" > info< / span > < span class = "o" > =< / span > < span class = "s" > " at line < / span > < span class = "si" > %s< / span > < span class = "s" > ." < / span > < span class = "o" > %< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _errors< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > line_number< / span >
< span class = "k" > if< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _errors< / span > < span class = "p" > )< / span > < span class = "o" > > < / span > < span class = "mi" > 1< / span > < span class = "p" > :< / span >
< span class = "n" > msg< / span > < span class = "o" > =< / span > < span class = "s" > " Parsing failed with several errors.< / span > < span class = "se" > \n< / span > < span class = "s" > First error < / span > < span class = "si" > %s< / span > < span class = "s" > " < / span > < span class = "o" > %< / span > < span class = "n" > info< / span >
< span class = "n" > error< / span > < span class = "o" > =< / span > < span class = "n" > ConfigObjError< / span > < span class = "p" > (< / span > < span class = "n" > msg< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > error< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _errors< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span >
< span class = "c" > # set the errors attribute; it' s a list of tuples:< / span >
< span class = "c" > # (error_type, message, line_number)< / span >
< span class = "n" > error< / span > < span class = "o" > .< / span > < span class = "n" > errors< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _errors< / span >
< span class = "c" > # set the config attribute< / span >
< span class = "n" > error< / span > < span class = "o" > .< / span > < span class = "n" > config< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span >
< span class = "k" > raise< / span > < span class = "n" > error< / span >
< span class = "c" > # delete private attributes< / span >
< span class = "k" > del< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _errors< / span >
< span class = "k" > if< / span > < span class = "n" > configspec< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > configspec< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _handle_configspec< / span > < span class = "p" > (< / span > < span class = "n" > configspec< / span > < span class = "p" > )< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj._initialise" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj._initialise" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > _initialise< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > options< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "n" > options< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "n" > options< / span > < span class = "o" > =< / span > < span class = "n" > OPTION_DEFAULTS< / span >
< span class = "c" > # initialise a few variables< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _errors< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > raise_errors< / span > < span class = "o" > =< / span > < span class = "n" > options< / span > < span class = "p" > [< / span > < span class = "s" > ' raise_errors' < / span > < span class = "p" > ]< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > interpolation< / span > < span class = "o" > =< / span > < span class = "n" > options< / span > < span class = "p" > [< / span > < span class = "s" > ' interpolation' < / span > < span class = "p" > ]< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > list_values< / span > < span class = "o" > =< / span > < span class = "n" > options< / span > < span class = "p" > [< / span > < span class = "s" > ' list_values' < / span > < span class = "p" > ]< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > create_empty< / span > < span class = "o" > =< / span > < span class = "n" > options< / span > < span class = "p" > [< / span > < span class = "s" > ' create_empty' < / span > < span class = "p" > ]< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > file_error< / span > < span class = "o" > =< / span > < span class = "n" > options< / span > < span class = "p" > [< / span > < span class = "s" > ' file_error' < / span > < span class = "p" > ]< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > stringify< / span > < span class = "o" > =< / span > < span class = "n" > options< / span > < span class = "p" > [< / span > < span class = "s" > ' stringify' < / span > < span class = "p" > ]< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > indent_type< / span > < span class = "o" > =< / span > < span class = "n" > options< / span > < span class = "p" > [< / span > < span class = "s" > ' indent_type' < / span > < span class = "p" > ]< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span > < span class = "o" > =< / span > < span class = "n" > options< / span > < span class = "p" > [< / span > < span class = "s" > ' encoding' < / span > < span class = "p" > ]< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > default_encoding< / span > < span class = "o" > =< / span > < span class = "n" > options< / span > < span class = "p" > [< / span > < span class = "s" > ' default_encoding' < / span > < span class = "p" > ]< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > BOM< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > newlines< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > write_empty_values< / span > < span class = "o" > =< / span > < span class = "n" > options< / span > < span class = "p" > [< / span > < span class = "s" > ' write_empty_values' < / span > < span class = "p" > ]< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > unrepr< / span > < span class = "o" > =< / span > < span class = "n" > options< / span > < span class = "p" > [< / span > < span class = "s" > ' unrepr' < / span > < span class = "p" > ]< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > initial_comment< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > final_comment< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > configspec< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _inspec< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > list_values< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "c" > # Clear section attributes as well< / span >
< span class = "n" > Section< / span > < span class = "o" > .< / span > < span class = "n" > _initialise< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > )< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj.__repr__" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj.__repr__" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > __repr__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "k" > def< / span > < span class = "nf" > _getval< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ):< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span >
< span class = "k" > except< / span > < span class = "n" > MissingInterpolationOption< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "nb" > dict< / span > < span class = "o" > .< / span > < span class = "n" > __getitem__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "p" > (< / span > < span class = "s" > ' ConfigObj({< / span > < span class = "si" > %s< / span > < span class = "s" > })' < / span > < span class = "o" > %< / span >
< span class = "s" > ' , ' < / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > ([(< / span > < span class = "s" > ' < / span > < span class = "si" > %s< / span > < span class = "s" > : < / span > < span class = "si" > %s< / span > < span class = "s" > ' < / span > < span class = "o" > %< / span > < span class = "p" > (< / span > < span class = "nb" > repr< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ),< / span > < span class = "nb" > repr< / span > < span class = "p" > (< / span > < span class = "n" > _getval< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ))))< / span >
< span class = "k" > for< / span > < span class = "n" > key< / span > < span class = "ow" > in< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "o" > +< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > )]))< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj._handle_bom" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj._handle_bom" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > _handle_bom< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > infile< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > Handle any BOM, and decode if necessary.< / span >
< span class = "sd" > < / span >
< span class = "sd" > If an encoding is specified, that *must* be used - but the BOM should< / span >
< span class = "sd" > still be removed (and the BOM attribute set).< / span >
< span class = "sd" > < / span >
< span class = "sd" > (If the encoding is wrongly specified, then a BOM for an alternative< / span >
< span class = "sd" > encoding won' t be discovered or removed.)< / span >
< span class = "sd" > < / span >
< span class = "sd" > If an encoding is not specified, UTF8 or UTF16 BOM will be detected and< / span >
< span class = "sd" > removed. The BOM attribute will be set. UTF16 will be decoded to< / span >
< span class = "sd" > unicode.< / span >
< span class = "sd" > < / span >
< span class = "sd" > NOTE: This method must not be called with an empty ``infile``.< / span >
< span class = "sd" > < / span >
< span class = "sd" > Specifying the *wrong* encoding is likely to cause a< / span >
< span class = "sd" > ``UnicodeDecodeError``.< / span >
< span class = "sd" > < / span >
< span class = "sd" > ``infile`` must always be returned as a list of lines, but may be< / span >
< span class = "sd" > passed in as a single string.< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > if< / span > < span class = "p" > ((< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "bp" > None< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span >
< span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span > < span class = "o" > .< / span > < span class = "n" > lower< / span > < span class = "p" > ()< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "n" > BOM_LIST< / span > < span class = "p" > )):< / span >
< span class = "c" > # No need to check for a BOM< / span >
< span class = "c" > # the encoding specified doesn' t have one< / span >
< span class = "c" > # just decode< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _decode< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "nb" > list< / span > < span class = "p" > ,< / span > < span class = "nb" > tuple< / span > < span class = "p" > )):< / span >
< span class = "n" > line< / span > < span class = "o" > =< / span > < span class = "n" > infile< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > line< / span > < span class = "o" > =< / span > < span class = "n" > infile< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "c" > # encoding explicitly supplied< / span >
< span class = "c" > # And it could have an associated BOM< / span >
< span class = "c" > # TODO: if encoding is just UTF16 - we ought to check for both< / span >
< span class = "c" > # TODO: big endian and little endian versions.< / span >
< span class = "n" > enc< / span > < span class = "o" > =< / span > < span class = "n" > BOM_LIST< / span > < span class = "p" > [< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span > < span class = "o" > .< / span > < span class = "n" > lower< / span > < span class = "p" > ()]< / span >
< span class = "k" > if< / span > < span class = "n" > enc< / span > < span class = "o" > ==< / span > < span class = "s" > ' utf_16' < / span > < span class = "p" > :< / span >
< span class = "c" > # For UTF16 we try big endian and little endian< / span >
< span class = "k" > for< / span > < span class = "n" > BOM< / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "n" > encoding< / span > < span class = "p" > ,< / span > < span class = "n" > final_encoding< / span > < span class = "p" > )< / span > < span class = "ow" > in< / span > < span class = "n" > BOMS< / span > < span class = "o" > .< / span > < span class = "n" > items< / span > < span class = "p" > ():< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > final_encoding< / span > < span class = "p" > :< / span >
< span class = "c" > # skip UTF8< / span >
< span class = "k" > continue< / span >
< span class = "k" > if< / span > < span class = "n" > infile< / span > < span class = "o" > .< / span > < span class = "n" > startswith< / span > < span class = "p" > (< / span > < span class = "n" > BOM< / span > < span class = "p" > ):< / span >
< span class = "c" > ### BOM discovered< / span >
< span class = "c" > ##self.BOM = True< / span >
< span class = "c" > # Don' t need to remove BOM< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _decode< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "n" > encoding< / span > < span class = "p" > )< / span >
< span class = "c" > # If we get this far, will *probably* raise a DecodeError< / span >
< span class = "c" > # As it doesn' t appear to start with a BOM< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _decode< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span > < span class = "p" > )< / span >
< span class = "c" > # Must be UTF8< / span >
< span class = "n" > BOM< / span > < span class = "o" > =< / span > < span class = "n" > BOM_SET< / span > < span class = "p" > [< / span > < span class = "n" > enc< / span > < span class = "p" > ]< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > line< / span > < span class = "o" > .< / span > < span class = "n" > startswith< / span > < span class = "p" > (< / span > < span class = "n" > BOM< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _decode< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span > < span class = "p" > )< / span >
< span class = "n" > newline< / span > < span class = "o" > =< / span > < span class = "n" > line< / span > < span class = "p" > [< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > BOM< / span > < span class = "p" > ):]< / span >
< span class = "c" > # BOM removed< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "nb" > list< / span > < span class = "p" > ,< / span > < span class = "nb" > tuple< / span > < span class = "p" > )):< / span >
< span class = "n" > infile< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > newline< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > infile< / span > < span class = "o" > =< / span > < span class = "n" > newline< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > BOM< / span > < span class = "o" > =< / span > < span class = "bp" > True< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _decode< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span > < span class = "p" > )< / span >
< span class = "c" > # No encoding specified - so we need to check for UTF8/UTF16< / span >
< span class = "k" > for< / span > < span class = "n" > BOM< / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "n" > encoding< / span > < span class = "p" > ,< / span > < span class = "n" > final_encoding< / span > < span class = "p" > )< / span > < span class = "ow" > in< / span > < span class = "n" > BOMS< / span > < span class = "o" > .< / span > < span class = "n" > items< / span > < span class = "p" > ():< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > line< / span > < span class = "o" > .< / span > < span class = "n" > startswith< / span > < span class = "p" > (< / span > < span class = "n" > BOM< / span > < span class = "p" > ):< / span >
< span class = "k" > continue< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "c" > # BOM discovered< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span > < span class = "o" > =< / span > < span class = "n" > final_encoding< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > final_encoding< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > BOM< / span > < span class = "o" > =< / span > < span class = "bp" > True< / span >
< span class = "c" > # UTF8< / span >
< span class = "c" > # remove BOM< / span >
< span class = "n" > newline< / span > < span class = "o" > =< / span > < span class = "n" > line< / span > < span class = "p" > [< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > BOM< / span > < span class = "p" > ):]< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "nb" > list< / span > < span class = "p" > ,< / span > < span class = "nb" > tuple< / span > < span class = "p" > )):< / span >
< span class = "n" > infile< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > newline< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > infile< / span > < span class = "o" > =< / span > < span class = "n" > newline< / span >
< span class = "c" > # UTF8 - don' t decode< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "nb" > basestring< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "n" > infile< / span > < span class = "o" > .< / span > < span class = "n" > splitlines< / span > < span class = "p" > (< / span > < span class = "bp" > True< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "n" > infile< / span >
< span class = "c" > # UTF16 - have to decode< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _decode< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "n" > encoding< / span > < span class = "p" > )< / span >
< span class = "c" > # No BOM discovered and no encoding specified, just return< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "nb" > basestring< / span > < span class = "p" > ):< / span >
< span class = "c" > # infile read from a file will be a single string< / span >
< span class = "k" > return< / span > < span class = "n" > infile< / span > < span class = "o" > .< / span > < span class = "n" > splitlines< / span > < span class = "p" > (< / span > < span class = "bp" > True< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > infile< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj._a_to_u" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj._a_to_u" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > _a_to_u< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > aString< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " Decode ASCII strings to unicode if a self.encoding is specified." " " < / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "n" > aString< / span > < span class = "o" > .< / span > < span class = "n" > decode< / span > < span class = "p" > (< / span > < span class = "s" > ' ascii' < / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "n" > aString< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj._decode" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj._decode" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > _decode< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "n" > encoding< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > Decode infile to unicode. Using the specified encoding.< / span >
< span class = "sd" > < / span >
< span class = "sd" > if is a string, it also needs converting to a list.< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "nb" > basestring< / span > < span class = "p" > ):< / span >
< span class = "c" > # can' t be unicode< / span >
< span class = "c" > # NOTE: Could raise a ``UnicodeDecodeError``< / span >
< span class = "k" > return< / span > < span class = "n" > infile< / span > < span class = "o" > .< / span > < span class = "n" > decode< / span > < span class = "p" > (< / span > < span class = "n" > encoding< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > splitlines< / span > < span class = "p" > (< / span > < span class = "bp" > True< / span > < span class = "p" > )< / span >
< span class = "k" > for< / span > < span class = "n" > i< / span > < span class = "p" > ,< / span > < span class = "n" > line< / span > < span class = "ow" > in< / span > < span class = "nb" > enumerate< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > line< / span > < span class = "p" > ,< / span > < span class = "nb" > unicode< / span > < span class = "p" > ):< / span >
< span class = "c" > # NOTE: The isinstance test here handles mixed lists of unicode/string< / span >
< span class = "c" > # NOTE: But the decode will break on any non-string values< / span >
< span class = "c" > # NOTE: Or could raise a ``UnicodeDecodeError``< / span >
< span class = "n" > infile< / span > < span class = "p" > [< / span > < span class = "n" > i< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > line< / span > < span class = "o" > .< / span > < span class = "n" > decode< / span > < span class = "p" > (< / span > < span class = "n" > encoding< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > infile< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj._decode_element" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj._decode_element" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > _decode_element< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > line< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " Decode element to unicode if necessary." " " < / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "n" > line< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > line< / span > < span class = "p" > ,< / span > < span class = "nb" > str< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > default_encoding< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "n" > line< / span > < span class = "o" > .< / span > < span class = "n" > decode< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > default_encoding< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > line< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj._str" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj._str" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > _str< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > Used by ``stringify`` within validate, to turn non-string values< / span >
< span class = "sd" > into strings.< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "nb" > basestring< / span > < span class = "p" > ):< / span >
< span class = "k" > return< / span > < span class = "nb" > str< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "n" > value< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj._parse" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj._parse" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > _parse< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > infile< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " Actually parse the config file." " " < / span >
< span class = "n" > temp_list_values< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > list_values< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > unrepr< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > list_values< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "n" > comment_list< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "n" > done_start< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "n" > this_section< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span >
< span class = "n" > maxline< / span > < span class = "o" > =< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > infile< / span > < span class = "p" > )< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span >
< span class = "n" > cur_index< / span > < span class = "o" > =< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span >
< span class = "n" > reset_comment< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "k" > while< / span > < span class = "n" > cur_index< / span > < span class = "o" > < < / span > < span class = "n" > maxline< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > reset_comment< / span > < span class = "p" > :< / span >
< span class = "n" > comment_list< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "n" > cur_index< / span > < span class = "o" > +=< / span > < span class = "mi" > 1< / span >
< span class = "n" > line< / span > < span class = "o" > =< / span > < span class = "n" > infile< / span > < span class = "p" > [< / span > < span class = "n" > cur_index< / span > < span class = "p" > ]< / span >
< span class = "n" > sline< / span > < span class = "o" > =< / span > < span class = "n" > line< / span > < span class = "o" > .< / span > < span class = "n" > strip< / span > < span class = "p" > ()< / span >
< span class = "c" > # do we have anything on the line ?< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > sline< / span > < span class = "ow" > or< / span > < span class = "n" > sline< / span > < span class = "o" > .< / span > < span class = "n" > startswith< / span > < span class = "p" > (< / span > < span class = "s" > ' #' < / span > < span class = "p" > ):< / span >
< span class = "n" > reset_comment< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "n" > comment_list< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > line< / span > < span class = "p" > )< / span >
< span class = "k" > continue< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > done_start< / span > < span class = "p" > :< / span >
< span class = "c" > # preserve initial comment< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > initial_comment< / span > < span class = "o" > =< / span > < span class = "n" > comment_list< / span >
< span class = "n" > comment_list< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "n" > done_start< / span > < span class = "o" > =< / span > < span class = "bp" > True< / span >
< span class = "n" > reset_comment< / span > < span class = "o" > =< / span > < span class = "bp" > True< / span >
< span class = "c" > # first we check if it' s a section marker< / span >
< span class = "n" > mat< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _sectionmarker< / span > < span class = "o" > .< / span > < span class = "n" > match< / span > < span class = "p" > (< / span > < span class = "n" > line< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > mat< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "c" > # is a section line< / span >
< span class = "p" > (< / span > < span class = "n" > indent< / span > < span class = "p" > ,< / span > < span class = "n" > sect_open< / span > < span class = "p" > ,< / span > < span class = "n" > sect_name< / span > < span class = "p" > ,< / span > < span class = "n" > sect_close< / span > < span class = "p" > ,< / span > < span class = "n" > comment< / span > < span class = "p" > )< / span > < span class = "o" > =< / span > < span class = "n" > mat< / span > < span class = "o" > .< / span > < span class = "n" > groups< / span > < span class = "p" > ()< / span >
< span class = "k" > if< / span > < span class = "n" > indent< / span > < span class = "ow" > and< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > indent_type< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > ):< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > indent_type< / span > < span class = "o" > =< / span > < span class = "n" > indent< / span >
< span class = "n" > cur_depth< / span > < span class = "o" > =< / span > < span class = "n" > sect_open< / span > < span class = "o" > .< / span > < span class = "n" > count< / span > < span class = "p" > (< / span > < span class = "s" > ' [' < / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > cur_depth< / span > < span class = "o" > !=< / span > < span class = "n" > sect_close< / span > < span class = "o" > .< / span > < span class = "n" > count< / span > < span class = "p" > (< / span > < span class = "s" > ' ]' < / span > < span class = "p" > ):< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _handle_error< / span > < span class = "p" > (< / span > < span class = "s" > " Cannot compute the section depth at line < / span > < span class = "si" > %s< / span > < span class = "s" > ." < / span > < span class = "p" > ,< / span >
< span class = "n" > NestingError< / span > < span class = "p" > ,< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "n" > cur_index< / span > < span class = "p" > )< / span >
< span class = "k" > continue< / span >
< span class = "k" > if< / span > < span class = "n" > cur_depth< / span > < span class = "o" > < < / span > < span class = "n" > this_section< / span > < span class = "o" > .< / span > < span class = "n" > depth< / span > < span class = "p" > :< / span >
< span class = "c" > # the new section is dropping back to a previous level< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "n" > parent< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _match_depth< / span > < span class = "p" > (< / span > < span class = "n" > this_section< / span > < span class = "p" > ,< / span >
< span class = "n" > cur_depth< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > parent< / span >
< span class = "k" > except< / span > < span class = "ne" > SyntaxError< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _handle_error< / span > < span class = "p" > (< / span > < span class = "s" > " Cannot compute nesting level at line < / span > < span class = "si" > %s< / span > < span class = "s" > ." < / span > < span class = "p" > ,< / span >
< span class = "n" > NestingError< / span > < span class = "p" > ,< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "n" > cur_index< / span > < span class = "p" > )< / span >
< span class = "k" > continue< / span >
< span class = "k" > elif< / span > < span class = "n" > cur_depth< / span > < span class = "o" > ==< / span > < span class = "n" > this_section< / span > < span class = "o" > .< / span > < span class = "n" > depth< / span > < span class = "p" > :< / span >
< span class = "c" > # the new section is a sibling of the current section< / span >
< span class = "n" > parent< / span > < span class = "o" > =< / span > < span class = "n" > this_section< / span > < span class = "o" > .< / span > < span class = "n" > parent< / span >
< span class = "k" > elif< / span > < span class = "n" > cur_depth< / span > < span class = "o" > ==< / span > < span class = "n" > this_section< / span > < span class = "o" > .< / span > < span class = "n" > depth< / span > < span class = "o" > +< / span > < span class = "mi" > 1< / span > < span class = "p" > :< / span >
< span class = "c" > # the new section is a child the current section< / span >
< span class = "n" > parent< / span > < span class = "o" > =< / span > < span class = "n" > this_section< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _handle_error< / span > < span class = "p" > (< / span > < span class = "s" > " Section too nested at line < / span > < span class = "si" > %s< / span > < span class = "s" > ." < / span > < span class = "p" > ,< / span >
< span class = "n" > NestingError< / span > < span class = "p" > ,< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "n" > cur_index< / span > < span class = "p" > )< / span >
< span class = "n" > sect_name< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _unquote< / span > < span class = "p" > (< / span > < span class = "n" > sect_name< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > sect_name< / span > < span class = "ow" > in< / span > < span class = "n" > parent< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _handle_error< / span > < span class = "p" > (< / span > < span class = "s" > ' Duplicate section name at line < / span > < span class = "si" > %s< / span > < span class = "s" > .' < / span > < span class = "p" > ,< / span >
< span class = "n" > DuplicateError< / span > < span class = "p" > ,< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "n" > cur_index< / span > < span class = "p" > )< / span >
< span class = "k" > continue< / span >
< span class = "c" > # create the new section< / span >
< span class = "n" > this_section< / span > < span class = "o" > =< / span > < span class = "n" > Section< / span > < span class = "p" > (< / span >
< span class = "n" > parent< / span > < span class = "p" > ,< / span >
< span class = "n" > cur_depth< / span > < span class = "p" > ,< / span >
< span class = "bp" > self< / span > < span class = "p" > ,< / span >
< span class = "n" > name< / span > < span class = "o" > =< / span > < span class = "n" > sect_name< / span > < span class = "p" > )< / span >
< span class = "n" > parent< / span > < span class = "p" > [< / span > < span class = "n" > sect_name< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > this_section< / span >
< span class = "n" > parent< / span > < span class = "o" > .< / span > < span class = "n" > inline_comments< / span > < span class = "p" > [< / span > < span class = "n" > sect_name< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > comment< / span >
< span class = "n" > parent< / span > < span class = "o" > .< / span > < span class = "n" > comments< / span > < span class = "p" > [< / span > < span class = "n" > sect_name< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > comment_list< / span >
< span class = "k" > continue< / span >
< span class = "c" > #< / span >
< span class = "c" > # it' s not a section marker,< / span >
< span class = "c" > # so it should be a valid ``key = value`` line< / span >
< span class = "n" > mat< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _keyword< / span > < span class = "o" > .< / span > < span class = "n" > match< / span > < span class = "p" > (< / span > < span class = "n" > line< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > mat< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "c" > # it neither matched as a keyword< / span >
< span class = "c" > # or a section marker< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _handle_error< / span > < span class = "p" > (< / span >
< span class = "s" > ' Invalid line at line " < / span > < span class = "si" > %s< / span > < span class = "s" > " .' < / span > < span class = "p" > ,< / span >
< span class = "n" > ParseError< / span > < span class = "p" > ,< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "n" > cur_index< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "c" > # is a keyword value< / span >
< span class = "c" > # value will include any inline comment< / span >
< span class = "p" > (< / span > < span class = "n" > indent< / span > < span class = "p" > ,< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > )< / span > < span class = "o" > =< / span > < span class = "n" > mat< / span > < span class = "o" > .< / span > < span class = "n" > groups< / span > < span class = "p" > ()< / span >
< span class = "k" > if< / span > < span class = "n" > indent< / span > < span class = "ow" > and< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > indent_type< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > ):< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > indent_type< / span > < span class = "o" > =< / span > < span class = "n" > indent< / span >
< span class = "c" > # check for a multiline value< / span >
< span class = "k" > if< / span > < span class = "n" > value< / span > < span class = "p" > [:< / span > < span class = "mi" > 3< / span > < span class = "p" > ]< / span > < span class = "ow" > in< / span > < span class = "p" > [< / span > < span class = "s" > ' " " " ' < / span > < span class = "p" > ,< / span > < span class = "s" > " ' ' ' " < / span > < span class = "p" > ]:< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > comment< / span > < span class = "p" > ,< / span > < span class = "n" > cur_index< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _multiline< / span > < span class = "p" > (< / span >
< span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "n" > cur_index< / span > < span class = "p" > ,< / span > < span class = "n" > maxline< / span > < span class = "p" > )< / span >
< span class = "k" > except< / span > < span class = "ne" > SyntaxError< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _handle_error< / span > < span class = "p" > (< / span >
< span class = "s" > ' Parse error in value at line < / span > < span class = "si" > %s< / span > < span class = "s" > .' < / span > < span class = "p" > ,< / span >
< span class = "n" > ParseError< / span > < span class = "p" > ,< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "n" > cur_index< / span > < span class = "p" > )< / span >
< span class = "k" > continue< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > unrepr< / span > < span class = "p" > :< / span >
< span class = "n" > comment< / span > < span class = "o" > =< / span > < span class = "s" > ' ' < / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "n" > value< / span > < span class = "o" > =< / span > < span class = "n" > unrepr< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "k" > except< / span > < span class = "ne" > Exception< / span > < span class = "p" > ,< / span > < span class = "n" > e< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "nb" > type< / span > < span class = "p" > (< / span > < span class = "n" > e< / span > < span class = "p" > )< / span > < span class = "o" > ==< / span > < span class = "n" > UnknownType< / span > < span class = "p" > :< / span >
< span class = "n" > msg< / span > < span class = "o" > =< / span > < span class = "s" > ' Unknown name or type in value at line < / span > < span class = "si" > %s< / span > < span class = "s" > .' < / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > msg< / span > < span class = "o" > =< / span > < span class = "s" > ' Parse error in value at line < / span > < span class = "si" > %s< / span > < span class = "s" > .' < / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _handle_error< / span > < span class = "p" > (< / span > < span class = "n" > msg< / span > < span class = "p" > ,< / span > < span class = "n" > UnreprError< / span > < span class = "p" > ,< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span >
< span class = "n" > cur_index< / span > < span class = "p" > )< / span >
< span class = "k" > continue< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > unrepr< / span > < span class = "p" > :< / span >
< span class = "n" > comment< / span > < span class = "o" > =< / span > < span class = "s" > ' ' < / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "n" > value< / span > < span class = "o" > =< / span > < span class = "n" > unrepr< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "k" > except< / span > < span class = "ne" > Exception< / span > < span class = "p" > ,< / span > < span class = "n" > e< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > e< / span > < span class = "p" > ,< / span > < span class = "n" > UnknownType< / span > < span class = "p" > ):< / span >
< span class = "n" > msg< / span > < span class = "o" > =< / span > < span class = "s" > ' Unknown name or type in value at line < / span > < span class = "si" > %s< / span > < span class = "s" > .' < / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > msg< / span > < span class = "o" > =< / span > < span class = "s" > ' Parse error in value at line < / span > < span class = "si" > %s< / span > < span class = "s" > .' < / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _handle_error< / span > < span class = "p" > (< / span > < span class = "n" > msg< / span > < span class = "p" > ,< / span > < span class = "n" > UnreprError< / span > < span class = "p" > ,< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span >
< span class = "n" > cur_index< / span > < span class = "p" > )< / span >
< span class = "k" > continue< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "c" > # extract comment and lists< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > comment< / span > < span class = "p" > )< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _handle_value< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "k" > except< / span > < span class = "ne" > SyntaxError< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _handle_error< / span > < span class = "p" > (< / span >
< span class = "s" > ' Parse error in value at line < / span > < span class = "si" > %s< / span > < span class = "s" > .' < / span > < span class = "p" > ,< / span >
< span class = "n" > ParseError< / span > < span class = "p" > ,< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "n" > cur_index< / span > < span class = "p" > )< / span >
< span class = "k" > continue< / span >
< span class = "c" > #< / span >
< span class = "n" > key< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _unquote< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > key< / span > < span class = "ow" > in< / span > < span class = "n" > this_section< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _handle_error< / span > < span class = "p" > (< / span >
< span class = "s" > ' Duplicate keyword name at line < / span > < span class = "si" > %s< / span > < span class = "s" > .' < / span > < span class = "p" > ,< / span >
< span class = "n" > DuplicateError< / span > < span class = "p" > ,< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "n" > cur_index< / span > < span class = "p" > )< / span >
< span class = "k" > continue< / span >
< span class = "c" > # add the key.< / span >
< span class = "c" > # we set unrepr because if we have got this far we will never< / span >
< span class = "c" > # be creating a new section< / span >
< span class = "n" > this_section< / span > < span class = "o" > .< / span > < span class = "n" > __setitem__< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > unrepr< / span > < span class = "o" > =< / span > < span class = "bp" > True< / span > < span class = "p" > )< / span >
< span class = "n" > this_section< / span > < span class = "o" > .< / span > < span class = "n" > inline_comments< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > comment< / span >
< span class = "n" > this_section< / span > < span class = "o" > .< / span > < span class = "n" > comments< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > comment_list< / span >
< span class = "k" > continue< / span >
< span class = "c" > #< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > indent_type< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "c" > # no indentation used, set the type accordingly< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > indent_type< / span > < span class = "o" > =< / span > < span class = "s" > ' ' < / span >
< span class = "c" > # preserve the final comment< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "bp" > self< / span > < span class = "ow" > and< / span > < span class = "ow" > not< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > initial_comment< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > initial_comment< / span > < span class = "o" > =< / span > < span class = "n" > comment_list< / span >
< span class = "k" > elif< / span > < span class = "ow" > not< / span > < span class = "n" > reset_comment< / span > < span class = "p" > :< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > final_comment< / span > < span class = "o" > =< / span > < span class = "n" > comment_list< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > list_values< / span > < span class = "o" > =< / span > < span class = "n" > temp_list_values< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj._match_depth" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj._match_depth" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > _match_depth< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > sect< / span > < span class = "p" > ,< / span > < span class = "n" > depth< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > Given a section and a depth level, walk back through the sections< / span >
< span class = "sd" > parents to see if the depth level matches a previous section.< / span >
< span class = "sd" > < / span >
< span class = "sd" > Return a reference to the right section,< / span >
< span class = "sd" > or raise a SyntaxError.< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > while< / span > < span class = "n" > depth< / span > < span class = "o" > < < / span > < span class = "n" > sect< / span > < span class = "o" > .< / span > < span class = "n" > depth< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > sect< / span > < span class = "ow" > is< / span > < span class = "n" > sect< / span > < span class = "o" > .< / span > < span class = "n" > parent< / span > < span class = "p" > :< / span >
< span class = "c" > # we' ve reached the top level already< / span >
< span class = "k" > raise< / span > < span class = "ne" > SyntaxError< / span > < span class = "p" > ()< / span >
< span class = "n" > sect< / span > < span class = "o" > =< / span > < span class = "n" > sect< / span > < span class = "o" > .< / span > < span class = "n" > parent< / span >
< span class = "k" > if< / span > < span class = "n" > sect< / span > < span class = "o" > .< / span > < span class = "n" > depth< / span > < span class = "o" > ==< / span > < span class = "n" > depth< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "n" > sect< / span >
< span class = "c" > # shouldn' t get here< / span >
< span class = "k" > raise< / span > < span class = "ne" > SyntaxError< / span > < span class = "p" > ()< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj._handle_error" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj._handle_error" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > _handle_error< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > text< / span > < span class = "p" > ,< / span > < span class = "n" > ErrorClass< / span > < span class = "p" > ,< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "n" > cur_index< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > Handle an error according to the error settings.< / span >
< span class = "sd" > < / span >
< span class = "sd" > Either raise the error or store it.< / span >
< span class = "sd" > The error will have occured at ``cur_index``< / span >
< span class = "sd" > " " " < / span >
< span class = "n" > line< / span > < span class = "o" > =< / span > < span class = "n" > infile< / span > < span class = "p" > [< / span > < span class = "n" > cur_index< / span > < span class = "p" > ]< / span >
< span class = "n" > cur_index< / span > < span class = "o" > +=< / span > < span class = "mi" > 1< / span >
< span class = "n" > message< / span > < span class = "o" > =< / span > < span class = "n" > text< / span > < span class = "o" > %< / span > < span class = "n" > cur_index< / span >
< span class = "n" > error< / span > < span class = "o" > =< / span > < span class = "n" > ErrorClass< / span > < span class = "p" > (< / span > < span class = "n" > message< / span > < span class = "p" > ,< / span > < span class = "n" > cur_index< / span > < span class = "p" > ,< / span > < span class = "n" > line< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > raise_errors< / span > < span class = "p" > :< / span >
< span class = "c" > # raise the error - parsing stops here< / span >
< span class = "k" > raise< / span > < span class = "n" > error< / span >
< span class = "c" > # store the error< / span >
< span class = "c" > # reraise when parsing has finished< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _errors< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > error< / span > < span class = "p" > )< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj._unquote" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj._unquote" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > _unquote< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " Return an unquoted version of a value" " " < / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > value< / span > < span class = "p" > :< / span >
< span class = "c" > # should only happen during parsing of lists< / span >
< span class = "k" > raise< / span > < span class = "ne" > SyntaxError< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span > < span class = "o" > ==< / span > < span class = "n" > value< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ])< / span > < span class = "ow" > and< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span > < span class = "ow" > in< / span > < span class = "p" > (< / span > < span class = "s" > ' " ' < / span > < span class = "p" > ,< / span > < span class = "s" > " ' " < / span > < span class = "p" > )):< / span >
< span class = "n" > value< / span > < span class = "o" > =< / span > < span class = "n" > value< / span > < span class = "p" > [< / span > < span class = "mi" > 1< / span > < span class = "p" > :< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span >
< span class = "k" > return< / span > < span class = "n" > value< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj._quote" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj._quote" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > _quote< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > multiline< / span > < span class = "o" > =< / span > < span class = "bp" > True< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > Return a safely quoted version of a value.< / span >
< span class = "sd" > < / span >
< span class = "sd" > Raise a ConfigObjError if the value cannot be safely quoted.< / span >
< span class = "sd" > If multiline is ``True`` (default) then use triple quotes< / span >
< span class = "sd" > if necessary.< / span >
< span class = "sd" > < / span >
< span class = "sd" > * Don' t quote values that don' t need it.< / span >
< span class = "sd" > * Recursively quote members of a list and return a comma joined list.< / span >
< span class = "sd" > * Multiline is ``False`` for lists.< / span >
< span class = "sd" > * Obey list syntax for empty and single member lists.< / span >
< span class = "sd" > < / span >
< span class = "sd" > If ``list_values=False`` then the value is only quoted if it contains< / span >
< span class = "sd" > a ``\\n`` (is multiline) or ' #' .< / span >
< span class = "sd" > < / span >
< span class = "sd" > If ``write_empty_values`` is set, and the value is an empty string, it< / span >
< span class = "sd" > won' t be quoted.< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > if< / span > < span class = "n" > multiline< / span > < span class = "ow" > and< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > write_empty_values< / span > < span class = "ow" > and< / span > < span class = "n" > value< / span > < span class = "o" > ==< / span > < span class = "s" > ' ' < / span > < span class = "p" > :< / span >
< span class = "c" > # Only if multiline is set, so that it is used for values not< / span >
< span class = "c" > # keys, and not values that are part of a list< / span >
< span class = "k" > return< / span > < span class = "s" > ' ' < / span >
< span class = "k" > if< / span > < span class = "n" > multiline< / span > < span class = "ow" > and< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "nb" > list< / span > < span class = "p" > ,< / span > < span class = "nb" > tuple< / span > < span class = "p" > )):< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > value< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "s" > ' ,' < / span >
< span class = "k" > elif< / span > < span class = "nb" > len< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > )< / span > < span class = "o" > ==< / span > < span class = "mi" > 1< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _quote< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ],< / span > < span class = "n" > multiline< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span > < span class = "p" > )< / span > < span class = "o" > +< / span > < span class = "s" > ' ,' < / span >
< span class = "k" > return< / span > < span class = "s" > ' , ' < / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > ([< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _quote< / span > < span class = "p" > (< / span > < span class = "n" > val< / span > < span class = "p" > ,< / span > < span class = "n" > multiline< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span > < span class = "p" > )< / span >
< span class = "k" > for< / span > < span class = "n" > val< / span > < span class = "ow" > in< / span > < span class = "n" > value< / span > < span class = "p" > ])< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "nb" > basestring< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > stringify< / span > < span class = "p" > :< / span >
< span class = "n" > value< / span > < span class = "o" > =< / span > < span class = "nb" > str< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span > < span class = "ne" > TypeError< / span > < span class = "p" > (< / span > < span class = "s" > ' Value " < / span > < span class = "si" > %s< / span > < span class = "s" > " is not a string.' < / span > < span class = "o" > %< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > value< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "s" > ' " " ' < / span >
< span class = "n" > no_lists_no_quotes< / span > < span class = "o" > =< / span > < span class = "ow" > not< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > list_values< / span > < span class = "ow" > and< / span > < span class = "s" > ' < / span > < span class = "se" > \n< / span > < span class = "s" > ' < / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "n" > value< / span > < span class = "ow" > and< / span > < span class = "s" > ' #' < / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "n" > value< / span >
< span class = "n" > need_triple< / span > < span class = "o" > =< / span > < span class = "n" > multiline< / span > < span class = "ow" > and< / span > < span class = "p" > (((< / span > < span class = "s" > " ' " < / span > < span class = "ow" > in< / span > < span class = "n" > value< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "p" > (< / span > < span class = "s" > ' " ' < / span > < span class = "ow" > in< / span > < span class = "n" > value< / span > < span class = "p" > ))< / span > < span class = "ow" > or< / span > < span class = "p" > (< / span > < span class = "s" > ' < / span > < span class = "se" > \n< / span > < span class = "s" > ' < / span > < span class = "ow" > in< / span > < span class = "n" > value< / span > < span class = "p" > ))< / span >
< span class = "n" > hash_triple_quote< / span > < span class = "o" > =< / span > < span class = "n" > multiline< / span > < span class = "ow" > and< / span > < span class = "ow" > not< / span > < span class = "n" > need_triple< / span > < span class = "ow" > and< / span > < span class = "p" > (< / span > < span class = "s" > " ' " < / span > < span class = "ow" > in< / span > < span class = "n" > value< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "p" > (< / span > < span class = "s" > ' " ' < / span > < span class = "ow" > in< / span > < span class = "n" > value< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "p" > (< / span > < span class = "s" > ' #' < / span > < span class = "ow" > in< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "n" > check_for_single< / span > < span class = "o" > =< / span > < span class = "p" > (< / span > < span class = "n" > no_lists_no_quotes< / span > < span class = "ow" > or< / span > < span class = "ow" > not< / span > < span class = "n" > need_triple< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "ow" > not< / span > < span class = "n" > hash_triple_quote< / span >
< span class = "k" > if< / span > < span class = "n" > check_for_single< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > list_values< / span > < span class = "p" > :< / span >
< span class = "c" > # we don' t quote if ``list_values=False``< / span >
< span class = "n" > quot< / span > < span class = "o" > =< / span > < span class = "n" > noquot< / span >
< span class = "c" > # for normal values either single or double quotes will do< / span >
< span class = "k" > elif< / span > < span class = "s" > ' < / span > < span class = "se" > \n< / span > < span class = "s" > ' < / span > < span class = "ow" > in< / span > < span class = "n" > value< / span > < span class = "p" > :< / span >
< span class = "c" > # will only happen if multiline is off - e.g. ' \n' in key< / span >
< span class = "k" > raise< / span > < span class = "n" > ConfigObjError< / span > < span class = "p" > (< / span > < span class = "s" > ' Value " < / span > < span class = "si" > %s< / span > < span class = "s" > " cannot be safely quoted.' < / span > < span class = "o" > %< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "k" > elif< / span > < span class = "p" > ((< / span > < span class = "n" > value< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "n" > wspace_plus< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span >
< span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > [< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "n" > wspace_plus< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span >
< span class = "p" > (< / span > < span class = "s" > ' ,' < / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "n" > value< / span > < span class = "p" > )):< / span >
< span class = "n" > quot< / span > < span class = "o" > =< / span > < span class = "n" > noquot< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > quot< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _get_single_quote< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "c" > # if value has ' \n' or " ' " *and* ' " ' , it will need triple quotes< / span >
< span class = "n" > quot< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _get_triple_quote< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > quot< / span > < span class = "o" > ==< / span > < span class = "n" > noquot< / span > < span class = "ow" > and< / span > < span class = "s" > ' #' < / span > < span class = "ow" > in< / span > < span class = "n" > value< / span > < span class = "ow" > and< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > list_values< / span > < span class = "p" > :< / span >
< span class = "n" > quot< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _get_single_quote< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > quot< / span > < span class = "o" > %< / span > < span class = "n" > value< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj._get_single_quote" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj._get_single_quote" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > _get_single_quote< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "s" > " ' " < / span > < span class = "ow" > in< / span > < span class = "n" > value< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "p" > (< / span > < span class = "s" > ' " ' < / span > < span class = "ow" > in< / span > < span class = "n" > value< / span > < span class = "p" > ):< / span >
< span class = "k" > raise< / span > < span class = "n" > ConfigObjError< / span > < span class = "p" > (< / span > < span class = "s" > ' Value " < / span > < span class = "si" > %s< / span > < span class = "s" > " cannot be safely quoted.' < / span > < span class = "o" > %< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "k" > elif< / span > < span class = "s" > ' " ' < / span > < span class = "ow" > in< / span > < span class = "n" > value< / span > < span class = "p" > :< / span >
< span class = "n" > quot< / span > < span class = "o" > =< / span > < span class = "n" > squot< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > quot< / span > < span class = "o" > =< / span > < span class = "n" > dquot< / span >
< span class = "k" > return< / span > < span class = "n" > quot< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj._get_triple_quote" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj._get_triple_quote" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > _get_triple_quote< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "o" > .< / span > < span class = "n" > find< / span > < span class = "p" > (< / span > < span class = "s" > ' " " " ' < / span > < span class = "p" > )< / span > < span class = "o" > !=< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "o" > .< / span > < span class = "n" > find< / span > < span class = "p" > (< / span > < span class = "s" > " ' ' ' " < / span > < span class = "p" > )< / span > < span class = "o" > !=< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > ):< / span >
< span class = "k" > raise< / span > < span class = "n" > ConfigObjError< / span > < span class = "p" > (< / span > < span class = "s" > ' Value " < / span > < span class = "si" > %s< / span > < span class = "s" > " cannot be safely quoted.' < / span > < span class = "o" > %< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > value< / span > < span class = "o" > .< / span > < span class = "n" > find< / span > < span class = "p" > (< / span > < span class = "s" > ' " " " ' < / span > < span class = "p" > )< / span > < span class = "o" > ==< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > :< / span >
< span class = "n" > quot< / span > < span class = "o" > =< / span > < span class = "n" > tdquot< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > quot< / span > < span class = "o" > =< / span > < span class = "n" > tsquot< / span >
< span class = "k" > return< / span > < span class = "n" > quot< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj._handle_value" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj._handle_value" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > _handle_value< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > Given a value string, unquote, remove comment,< / span >
< span class = "sd" > handle lists. (including empty and single member lists)< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _inspec< / span > < span class = "p" > :< / span >
< span class = "c" > # Parsing a configspec so don' t handle comments< / span >
< span class = "k" > return< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "s" > ' ' < / span > < span class = "p" > )< / span >
< span class = "c" > # do we look for lists in values ?< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > list_values< / span > < span class = "p" > :< / span >
< span class = "n" > mat< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _nolistvalue< / span > < span class = "o" > .< / span > < span class = "n" > match< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > mat< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span > < span class = "ne" > SyntaxError< / span > < span class = "p" > ()< / span >
< span class = "c" > # NOTE: we don' t unquote here< / span >
< span class = "k" > return< / span > < span class = "n" > mat< / span > < span class = "o" > .< / span > < span class = "n" > groups< / span > < span class = "p" > ()< / span >
< span class = "c" > #< / span >
< span class = "n" > mat< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _valueexp< / span > < span class = "o" > .< / span > < span class = "n" > match< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > mat< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "c" > # the value is badly constructed, probably badly quoted,< / span >
< span class = "c" > # or an invalid list< / span >
< span class = "k" > raise< / span > < span class = "ne" > SyntaxError< / span > < span class = "p" > ()< / span >
< span class = "p" > (< / span > < span class = "n" > list_values< / span > < span class = "p" > ,< / span > < span class = "n" > single< / span > < span class = "p" > ,< / span > < span class = "n" > empty_list< / span > < span class = "p" > ,< / span > < span class = "n" > comment< / span > < span class = "p" > )< / span > < span class = "o" > =< / span > < span class = "n" > mat< / span > < span class = "o" > .< / span > < span class = "n" > groups< / span > < span class = "p" > ()< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "n" > list_values< / span > < span class = "o" > ==< / span > < span class = "s" > ' ' < / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "p" > (< / span > < span class = "n" > single< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > ):< / span >
< span class = "c" > # change this if you want to accept empty values< / span >
< span class = "k" > raise< / span > < span class = "ne" > SyntaxError< / span > < span class = "p" > ()< / span >
< span class = "c" > # NOTE: note there is no error handling from here if the regex< / span >
< span class = "c" > # is wrong: then incorrect values will slip through< / span >
< span class = "k" > if< / span > < span class = "n" > empty_list< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "c" > # the single comma - meaning an empty list< / span >
< span class = "k" > return< / span > < span class = "p" > ([],< / span > < span class = "n" > comment< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > single< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "c" > # handle empty values< / span >
< span class = "k" > if< / span > < span class = "n" > list_values< / span > < span class = "ow" > and< / span > < span class = "ow" > not< / span > < span class = "n" > single< / span > < span class = "p" > :< / span >
< span class = "c" > # FIXME: the ' ' is a workaround because our regex now matches< / span >
< span class = "c" > # ' ' at the end of a list if it has a trailing comma< / span >
< span class = "n" > single< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > single< / span > < span class = "o" > =< / span > < span class = "n" > single< / span > < span class = "ow" > or< / span > < span class = "s" > ' " " ' < / span >
< span class = "n" > single< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _unquote< / span > < span class = "p" > (< / span > < span class = "n" > single< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > list_values< / span > < span class = "o" > ==< / span > < span class = "s" > ' ' < / span > < span class = "p" > :< / span >
< span class = "c" > # not a list value< / span >
< span class = "k" > return< / span > < span class = "p" > (< / span > < span class = "n" > single< / span > < span class = "p" > ,< / span > < span class = "n" > comment< / span > < span class = "p" > )< / span >
< span class = "n" > the_list< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _listvalueexp< / span > < span class = "o" > .< / span > < span class = "n" > findall< / span > < span class = "p" > (< / span > < span class = "n" > list_values< / span > < span class = "p" > )< / span >
< span class = "n" > the_list< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _unquote< / span > < span class = "p" > (< / span > < span class = "n" > val< / span > < span class = "p" > )< / span > < span class = "k" > for< / span > < span class = "n" > val< / span > < span class = "ow" > in< / span > < span class = "n" > the_list< / span > < span class = "p" > ]< / span >
< span class = "k" > if< / span > < span class = "n" > single< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "n" > the_list< / span > < span class = "o" > +=< / span > < span class = "p" > [< / span > < span class = "n" > single< / span > < span class = "p" > ]< / span >
< span class = "k" > return< / span > < span class = "p" > (< / span > < span class = "n" > the_list< / span > < span class = "p" > ,< / span > < span class = "n" > comment< / span > < span class = "p" > )< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj._multiline" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj._multiline" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > _multiline< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > infile< / span > < span class = "p" > ,< / span > < span class = "n" > cur_index< / span > < span class = "p" > ,< / span > < span class = "n" > maxline< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " Extract the value, where we are in a multiline situation." " " < / span >
< span class = "n" > quot< / span > < span class = "o" > =< / span > < span class = "n" > value< / span > < span class = "p" > [:< / span > < span class = "mi" > 3< / span > < span class = "p" > ]< / span >
< span class = "n" > newvalue< / span > < span class = "o" > =< / span > < span class = "n" > value< / span > < span class = "p" > [< / span > < span class = "mi" > 3< / span > < span class = "p" > :]< / span >
< span class = "n" > single_line< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _triple_quote< / span > < span class = "p" > [< / span > < span class = "n" > quot< / span > < span class = "p" > ][< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span >
< span class = "n" > multi_line< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _triple_quote< / span > < span class = "p" > [< / span > < span class = "n" > quot< / span > < span class = "p" > ][< / span > < span class = "mi" > 1< / span > < span class = "p" > ]< / span >
< span class = "n" > mat< / span > < span class = "o" > =< / span > < span class = "n" > single_line< / span > < span class = "o" > .< / span > < span class = "n" > match< / span > < span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > mat< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "n" > retval< / span > < span class = "o" > =< / span > < span class = "nb" > list< / span > < span class = "p" > (< / span > < span class = "n" > mat< / span > < span class = "o" > .< / span > < span class = "n" > groups< / span > < span class = "p" > ())< / span >
< span class = "n" > retval< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > cur_index< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > retval< / span >
< span class = "k" > elif< / span > < span class = "n" > newvalue< / span > < span class = "o" > .< / span > < span class = "n" > find< / span > < span class = "p" > (< / span > < span class = "n" > quot< / span > < span class = "p" > )< / span > < span class = "o" > !=< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > :< / span >
< span class = "c" > # somehow the triple quote is missing< / span >
< span class = "k" > raise< / span > < span class = "ne" > SyntaxError< / span > < span class = "p" > ()< / span >
< span class = "c" > #< / span >
< span class = "k" > while< / span > < span class = "n" > cur_index< / span > < span class = "o" > < < / span > < span class = "n" > maxline< / span > < span class = "p" > :< / span >
< span class = "n" > cur_index< / span > < span class = "o" > +=< / span > < span class = "mi" > 1< / span >
< span class = "n" > newvalue< / span > < span class = "o" > +=< / span > < span class = "s" > ' < / span > < span class = "se" > \n< / span > < span class = "s" > ' < / span >
< span class = "n" > line< / span > < span class = "o" > =< / span > < span class = "n" > infile< / span > < span class = "p" > [< / span > < span class = "n" > cur_index< / span > < span class = "p" > ]< / span >
< span class = "k" > if< / span > < span class = "n" > line< / span > < span class = "o" > .< / span > < span class = "n" > find< / span > < span class = "p" > (< / span > < span class = "n" > quot< / span > < span class = "p" > )< / span > < span class = "o" > ==< / span > < span class = "o" > -< / span > < span class = "mi" > 1< / span > < span class = "p" > :< / span >
< span class = "n" > newvalue< / span > < span class = "o" > +=< / span > < span class = "n" > line< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "c" > # end of multiline, process it< / span >
< span class = "k" > break< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "c" > # we' ve got to the end of the config, oops...< / span >
< span class = "k" > raise< / span > < span class = "ne" > SyntaxError< / span > < span class = "p" > ()< / span >
< span class = "n" > mat< / span > < span class = "o" > =< / span > < span class = "n" > multi_line< / span > < span class = "o" > .< / span > < span class = "n" > match< / span > < span class = "p" > (< / span > < span class = "n" > line< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > mat< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "c" > # a badly formed line< / span >
< span class = "k" > raise< / span > < span class = "ne" > SyntaxError< / span > < span class = "p" > ()< / span >
< span class = "p" > (< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > comment< / span > < span class = "p" > )< / span > < span class = "o" > =< / span > < span class = "n" > mat< / span > < span class = "o" > .< / span > < span class = "n" > groups< / span > < span class = "p" > ()< / span >
< span class = "k" > return< / span > < span class = "p" > (< / span > < span class = "n" > newvalue< / span > < span class = "o" > +< / span > < span class = "n" > value< / span > < span class = "p" > ,< / span > < span class = "n" > comment< / span > < span class = "p" > ,< / span > < span class = "n" > cur_index< / span > < span class = "p" > )< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj._handle_configspec" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj._handle_configspec" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > _handle_configspec< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > configspec< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " Parse the configspec." " " < / span >
< span class = "c" > # FIXME: Should we check that the configspec was created with the < / span >
< span class = "c" > # correct settings ? (i.e. ``list_values=False``)< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > configspec< / span > < span class = "p" > ,< / span > < span class = "n" > ConfigObj< / span > < span class = "p" > ):< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "n" > configspec< / span > < span class = "o" > =< / span > < span class = "n" > ConfigObj< / span > < span class = "p" > (< / span > < span class = "n" > configspec< / span > < span class = "p" > ,< / span >
< span class = "n" > raise_errors< / span > < span class = "o" > =< / span > < span class = "bp" > True< / span > < span class = "p" > ,< / span >
< span class = "n" > file_error< / span > < span class = "o" > =< / span > < span class = "bp" > True< / span > < span class = "p" > ,< / span >
< span class = "n" > _inspec< / span > < span class = "o" > =< / span > < span class = "bp" > True< / span > < span class = "p" > )< / span >
< span class = "k" > except< / span > < span class = "n" > ConfigObjError< / span > < span class = "p" > ,< / span > < span class = "n" > e< / span > < span class = "p" > :< / span >
< span class = "c" > # FIXME: Should these errors have a reference< / span >
< span class = "c" > # to the already parsed ConfigObj ?< / span >
< span class = "k" > raise< / span > < span class = "n" > ConfigspecError< / span > < span class = "p" > (< / span > < span class = "s" > ' Parsing configspec failed: < / span > < span class = "si" > %s< / span > < span class = "s" > ' < / span > < span class = "o" > %< / span > < span class = "n" > e< / span > < span class = "p" > )< / span >
< span class = "k" > except< / span > < span class = "ne" > IOError< / span > < span class = "p" > ,< / span > < span class = "n" > e< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span > < span class = "ne" > IOError< / span > < span class = "p" > (< / span > < span class = "s" > ' Reading configspec failed: < / span > < span class = "si" > %s< / span > < span class = "s" > ' < / span > < span class = "o" > %< / span > < span class = "n" > e< / span > < span class = "p" > )< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > configspec< / span > < span class = "o" > =< / span > < span class = "n" > configspec< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj._set_configspec" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj._set_configspec" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > _set_configspec< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > section< / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > Called by validate. Handles setting the configspec on subsections< / span >
< span class = "sd" > including sections to be validated by __many__< / span >
< span class = "sd" > " " " < / span >
< span class = "n" > configspec< / span > < span class = "o" > =< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > configspec< / span >
< span class = "n" > many< / span > < span class = "o" > =< / span > < span class = "n" > configspec< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "s" > ' __many__' < / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > many< / span > < span class = "p" > ,< / span > < span class = "nb" > dict< / span > < span class = "p" > ):< / span >
< span class = "k" > for< / span > < span class = "n" > entry< / span > < span class = "ow" > in< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > entry< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "n" > configspec< / span > < span class = "p" > :< / span >
< span class = "n" > section< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > configspec< / span > < span class = "o" > =< / span > < span class = "n" > many< / span >
< span class = "k" > for< / span > < span class = "n" > entry< / span > < span class = "ow" > in< / span > < span class = "n" > configspec< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > entry< / span > < span class = "o" > ==< / span > < span class = "s" > ' __many__' < / span > < span class = "p" > :< / span >
< span class = "k" > continue< / span >
< span class = "k" > if< / span > < span class = "n" > entry< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "n" > section< / span > < span class = "p" > :< / span >
< span class = "n" > section< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "p" > {}< / span >
< span class = "n" > section< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > _created< / span > < span class = "o" > =< / span > < span class = "bp" > True< / span >
< span class = "k" > if< / span > < span class = "n" > copy< / span > < span class = "p" > :< / span >
< span class = "c" > # copy comments< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > comments< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > configspec< / span > < span class = "o" > .< / span > < span class = "n" > comments< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "n" > entry< / span > < span class = "p" > ,< / span > < span class = "p" > [])< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > inline_comments< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > configspec< / span > < span class = "o" > .< / span > < span class = "n" > inline_comments< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "n" > entry< / span > < span class = "p" > ,< / span > < span class = "s" > ' ' < / span > < span class = "p" > )< / span >
< span class = "c" > # Could be a scalar when we expect a section< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > section< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ],< / span > < span class = "n" > Section< / span > < span class = "p" > ):< / span >
< span class = "n" > section< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > configspec< / span > < span class = "o" > =< / span > < span class = "n" > configspec< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj._write_line" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj._write_line" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > _write_line< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > indent_string< / span > < span class = "p" > ,< / span > < span class = "n" > entry< / span > < span class = "p" > ,< / span > < span class = "n" > this_entry< / span > < span class = "p" > ,< / span > < span class = "n" > comment< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " Write an individual line, for the write method" " " < / span >
< span class = "c" > # NOTE: the calls to self._quote here handles non-StringType values.< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > unrepr< / span > < span class = "p" > :< / span >
< span class = "n" > val< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _decode_element< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _quote< / span > < span class = "p" > (< / span > < span class = "n" > this_entry< / span > < span class = "p" > ))< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > val< / span > < span class = "o" > =< / span > < span class = "nb" > repr< / span > < span class = "p" > (< / span > < span class = "n" > this_entry< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "s" > ' < / span > < span class = "si" > %s%s%s%s%s< / span > < span class = "s" > ' < / span > < span class = "o" > %< / span > < span class = "p" > (< / span > < span class = "n" > indent_string< / span > < span class = "p" > ,< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _decode_element< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _quote< / span > < span class = "p" > (< / span > < span class = "n" > entry< / span > < span class = "p" > ,< / span > < span class = "n" > multiline< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span > < span class = "p" > )),< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _a_to_u< / span > < span class = "p" > (< / span > < span class = "s" > ' = ' < / span > < span class = "p" > ),< / span >
< span class = "n" > val< / span > < span class = "p" > ,< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _decode_element< / span > < span class = "p" > (< / span > < span class = "n" > comment< / span > < span class = "p" > ))< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj._write_marker" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj._write_marker" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > _write_marker< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > indent_string< / span > < span class = "p" > ,< / span > < span class = "n" > depth< / span > < span class = "p" > ,< / span > < span class = "n" > entry< / span > < span class = "p" > ,< / span > < span class = "n" > comment< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " Write a section marker line" " " < / span >
< span class = "k" > return< / span > < span class = "s" > ' < / span > < span class = "si" > %s%s%s%s%s< / span > < span class = "s" > ' < / span > < span class = "o" > %< / span > < span class = "p" > (< / span > < span class = "n" > indent_string< / span > < span class = "p" > ,< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _a_to_u< / span > < span class = "p" > (< / span > < span class = "s" > ' [' < / span > < span class = "o" > *< / span > < span class = "n" > depth< / span > < span class = "p" > ),< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _quote< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _decode_element< / span > < span class = "p" > (< / span > < span class = "n" > entry< / span > < span class = "p" > ),< / span > < span class = "n" > multiline< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span > < span class = "p" > ),< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _a_to_u< / span > < span class = "p" > (< / span > < span class = "s" > ' ]' < / span > < span class = "o" > *< / span > < span class = "n" > depth< / span > < span class = "p" > ),< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _decode_element< / span > < span class = "p" > (< / span > < span class = "n" > comment< / span > < span class = "p" > ))< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj._handle_comment" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj._handle_comment" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > _handle_comment< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > comment< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " Deal with a comment." " " < / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > comment< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "s" > ' ' < / span >
< span class = "n" > start< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > indent_type< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > comment< / span > < span class = "o" > .< / span > < span class = "n" > startswith< / span > < span class = "p" > (< / span > < span class = "s" > ' #' < / span > < span class = "p" > ):< / span >
< span class = "n" > start< / span > < span class = "o" > +=< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _a_to_u< / span > < span class = "p" > (< / span > < span class = "s" > ' # ' < / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "p" > (< / span > < span class = "n" > start< / span > < span class = "o" > +< / span > < span class = "n" > comment< / span > < span class = "p" > )< / span >
< span class = "c" > # Public methods< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj.write" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj.write" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > write< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > outfile< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span > < span class = "p" > ,< / span > < span class = "n" > section< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > Write the current ConfigObj as a file< / span >
< span class = "sd" > < / span >
< span class = "sd" > tekNico: FIXME: use StringIO instead of real files< / span >
< span class = "sd" > < / span >
< span class = "sd" > > > > filename = a.filename< / span >
< span class = "sd" > > > > a.filename = ' test.ini' < / span >
< span class = "sd" > > > > a.write()< / span >
< span class = "sd" > > > > a.filename = filename< / span >
< span class = "sd" > > > > a == ConfigObj(' test.ini' , raise_errors=True)< / span >
< span class = "sd" > 1< / span >
< span class = "sd" > > > > import os< / span >
< span class = "sd" > > > > os.remove(' test.ini' )< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > indent_type< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "c" > # this can be true if initialised from a dictionary< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > indent_type< / span > < span class = "o" > =< / span > < span class = "n" > DEFAULT_INDENT_TYPE< / span >
< span class = "n" > out< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "n" > cs< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _a_to_u< / span > < span class = "p" > (< / span > < span class = "s" > ' #' < / span > < span class = "p" > )< / span >
< span class = "n" > csp< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _a_to_u< / span > < span class = "p" > (< / span > < span class = "s" > ' # ' < / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > section< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "n" > int_val< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > interpolation< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > interpolation< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "n" > section< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span >
< span class = "k" > for< / span > < span class = "n" > line< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > initial_comment< / span > < span class = "p" > :< / span >
< span class = "n" > line< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _decode_element< / span > < span class = "p" > (< / span > < span class = "n" > line< / span > < span class = "p" > )< / span >
< span class = "n" > stripped_line< / span > < span class = "o" > =< / span > < span class = "n" > line< / span > < span class = "o" > .< / span > < span class = "n" > strip< / span > < span class = "p" > ()< / span >
< span class = "k" > if< / span > < span class = "n" > stripped_line< / span > < span class = "ow" > and< / span > < span class = "ow" > not< / span > < span class = "n" > stripped_line< / span > < span class = "o" > .< / span > < span class = "n" > startswith< / span > < span class = "p" > (< / span > < span class = "n" > cs< / span > < span class = "p" > ):< / span >
< span class = "n" > line< / span > < span class = "o" > =< / span > < span class = "n" > csp< / span > < span class = "o" > +< / span > < span class = "n" > line< / span >
< span class = "n" > out< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > line< / span > < span class = "p" > )< / span >
< span class = "n" > indent_string< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > indent_type< / span > < span class = "o" > *< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > depth< / span >
2015-08-26 18:04:39 +00:00
< span class = "c" > # Do a little sorting for convenience< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "o" > =< / span > < span class = "nb" > sorted< / span > < span class = "p" > (< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "p" > )< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "o" > =< / span > < span class = "nb" > sorted< / span > < span class = "p" > (< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "s" > ' default' < / span > < span class = "ow" > in< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "p" > :< / span >
< span class = "c" > # pop it and move to front< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "o" > .< / span > < span class = "n" > remove< / span > < span class = "p" > (< / span > < span class = "s" > ' default' < / span > < span class = "p" > )< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "o" > .< / span > < span class = "n" > insert< / span > < span class = "p" > (< / span > < span class = "mi" > 0< / span > < span class = "p" > ,< / span > < span class = "s" > ' default' < / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "s" > ' default' < / span > < span class = "ow" > in< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > :< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "o" > .< / span > < span class = "n" > remove< / span > < span class = "p" > (< / span > < span class = "s" > ' default' < / span > < span class = "p" > )< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "o" > .< / span > < span class = "n" > insert< / span > < span class = "p" > (< / span > < span class = "mi" > 0< / span > < span class = "p" > ,< / span > < span class = "s" > ' default' < / span > < span class = "p" > )< / span >
2015-08-08 02:11:30 +00:00
< span class = "k" > for< / span > < span class = "n" > entry< / span > < span class = "ow" > in< / span > < span class = "p" > (< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "o" > +< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > ):< / span >
< span class = "k" > if< / span > < span class = "n" > entry< / span > < span class = "ow" > in< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > defaults< / span > < span class = "p" > :< / span >
< span class = "c" > # don' t write out default values< / span >
< span class = "k" > continue< / span >
< span class = "k" > for< / span > < span class = "n" > comment_line< / span > < span class = "ow" > in< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > comments< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]:< / span >
< span class = "n" > comment_line< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _decode_element< / span > < span class = "p" > (< / span > < span class = "n" > comment_line< / span > < span class = "o" > .< / span > < span class = "n" > lstrip< / span > < span class = "p" > ())< / span >
< span class = "k" > if< / span > < span class = "n" > comment_line< / span > < span class = "ow" > and< / span > < span class = "ow" > not< / span > < span class = "n" > comment_line< / span > < span class = "o" > .< / span > < span class = "n" > startswith< / span > < span class = "p" > (< / span > < span class = "n" > cs< / span > < span class = "p" > ):< / span >
< span class = "n" > comment_line< / span > < span class = "o" > =< / span > < span class = "n" > csp< / span > < span class = "o" > +< / span > < span class = "n" > comment_line< / span >
< span class = "n" > out< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > indent_string< / span > < span class = "o" > +< / span > < span class = "n" > comment_line< / span > < span class = "p" > )< / span >
< span class = "n" > this_entry< / span > < span class = "o" > =< / span > < span class = "n" > section< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span >
< span class = "n" > comment< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _handle_comment< / span > < span class = "p" > (< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > inline_comments< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ])< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > this_entry< / span > < span class = "p" > ,< / span > < span class = "nb" > dict< / span > < span class = "p" > ):< / span >
< span class = "c" > # a section< / span >
< span class = "n" > out< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _write_marker< / span > < span class = "p" > (< / span >
< span class = "n" > indent_string< / span > < span class = "p" > ,< / span >
< span class = "n" > this_entry< / span > < span class = "o" > .< / span > < span class = "n" > depth< / span > < span class = "p" > ,< / span >
< span class = "n" > entry< / span > < span class = "p" > ,< / span >
< span class = "n" > comment< / span > < span class = "p" > ))< / span >
< span class = "n" > out< / span > < span class = "o" > .< / span > < span class = "n" > extend< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > write< / span > < span class = "p" > (< / span > < span class = "n" > section< / span > < span class = "o" > =< / span > < span class = "n" > this_entry< / span > < span class = "p" > ))< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > out< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _write_line< / span > < span class = "p" > (< / span >
< span class = "n" > indent_string< / span > < span class = "p" > ,< / span >
< span class = "n" > entry< / span > < span class = "p" > ,< / span >
< span class = "n" > this_entry< / span > < span class = "p" > ,< / span >
< span class = "n" > comment< / span > < span class = "p" > ))< / span >
< span class = "k" > if< / span > < span class = "n" > section< / span > < span class = "ow" > is< / span > < span class = "bp" > self< / span > < span class = "p" > :< / span >
< span class = "k" > for< / span > < span class = "n" > line< / span > < span class = "ow" > in< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > final_comment< / span > < span class = "p" > :< / span >
< span class = "n" > line< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _decode_element< / span > < span class = "p" > (< / span > < span class = "n" > line< / span > < span class = "p" > )< / span >
< span class = "n" > stripped_line< / span > < span class = "o" > =< / span > < span class = "n" > line< / span > < span class = "o" > .< / span > < span class = "n" > strip< / span > < span class = "p" > ()< / span >
< span class = "k" > if< / span > < span class = "n" > stripped_line< / span > < span class = "ow" > and< / span > < span class = "ow" > not< / span > < span class = "n" > stripped_line< / span > < span class = "o" > .< / span > < span class = "n" > startswith< / span > < span class = "p" > (< / span > < span class = "n" > cs< / span > < span class = "p" > ):< / span >
< span class = "n" > line< / span > < span class = "o" > =< / span > < span class = "n" > csp< / span > < span class = "o" > +< / span > < span class = "n" > line< / span >
< span class = "n" > out< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > line< / span > < span class = "p" > )< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > interpolation< / span > < span class = "o" > =< / span > < span class = "n" > int_val< / span >
< span class = "k" > if< / span > < span class = "n" > section< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "bp" > self< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "n" > out< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > )< / span > < span class = "ow" > and< / span > < span class = "p" > (< / span > < span class = "n" > outfile< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > ):< / span >
< span class = "c" > # output a list of lines< / span >
< span class = "c" > # might need to encode< / span >
< span class = "c" > # NOTE: This will *screw* UTF16, each line will start with the BOM< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span > < span class = "p" > :< / span >
< span class = "n" > out< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > l< / span > < span class = "o" > .< / span > < span class = "n" > encode< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span > < span class = "p" > )< / span > < span class = "k" > for< / span > < span class = "n" > l< / span > < span class = "ow" > in< / span > < span class = "n" > out< / span > < span class = "p" > ]< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > BOM< / span > < span class = "ow" > and< / span > < span class = "p" > ((< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > )< / span > < span class = "ow" > or< / span >
< span class = "p" > (< / span > < span class = "n" > BOM_LIST< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span > < span class = "o" > .< / span > < span class = "n" > lower< / span > < span class = "p" > ())< / span > < span class = "o" > ==< / span > < span class = "s" > ' utf_8' < / span > < span class = "p" > ))):< / span >
< span class = "c" > # Add the UTF8 BOM< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > out< / span > < span class = "p" > :< / span >
< span class = "n" > out< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "s" > ' ' < / span > < span class = "p" > )< / span >
< span class = "n" > out< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > BOM_UTF8< / span > < span class = "o" > +< / span > < span class = "n" > out< / span > < span class = "p" > [< / span > < span class = "mi" > 0< / span > < span class = "p" > ]< / span >
< span class = "k" > return< / span > < span class = "n" > out< / span >
< span class = "c" > # Turn the list to a string, joined with correct newlines< / span >
< span class = "n" > newline< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > newlines< / span > < span class = "ow" > or< / span > < span class = "n" > os< / span > < span class = "o" > .< / span > < span class = "n" > linesep< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "nb" > getattr< / span > < span class = "p" > (< / span > < span class = "n" > outfile< / span > < span class = "p" > ,< / span > < span class = "s" > ' mode' < / span > < span class = "p" > ,< / span > < span class = "bp" > None< / span > < span class = "p" > )< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "bp" > None< / span > < span class = "ow" > and< / span > < span class = "n" > outfile< / span > < span class = "o" > .< / span > < span class = "n" > mode< / span > < span class = "o" > ==< / span > < span class = "s" > ' w' < / span >
< span class = "ow" > and< / span > < span class = "n" > sys< / span > < span class = "o" > .< / span > < span class = "n" > platform< / span > < span class = "o" > ==< / span > < span class = "s" > ' win32' < / span > < span class = "ow" > and< / span > < span class = "n" > newline< / span > < span class = "o" > ==< / span > < span class = "s" > ' < / span > < span class = "se" > \r\n< / span > < span class = "s" > ' < / span > < span class = "p" > ):< / span >
< span class = "c" > # Windows specific hack to avoid writing ' \r\r\n' < / span >
< span class = "n" > newline< / span > < span class = "o" > =< / span > < span class = "s" > ' < / span > < span class = "se" > \n< / span > < span class = "s" > ' < / span >
< span class = "n" > output< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _a_to_u< / span > < span class = "p" > (< / span > < span class = "n" > newline< / span > < span class = "p" > )< / span > < span class = "o" > .< / span > < span class = "n" > join< / span > < span class = "p" > (< / span > < span class = "n" > out< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span > < span class = "p" > :< / span >
< span class = "n" > output< / span > < span class = "o" > =< / span > < span class = "n" > output< / span > < span class = "o" > .< / span > < span class = "n" > encode< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > BOM< / span > < span class = "ow" > and< / span > < span class = "p" > ((< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > )< / span > < span class = "ow" > or< / span > < span class = "n" > match_utf8< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span > < span class = "p" > )):< / span >
< span class = "c" > # Add the UTF8 BOM< / span >
< span class = "n" > output< / span > < span class = "o" > =< / span > < span class = "n" > BOM_UTF8< / span > < span class = "o" > +< / span > < span class = "n" > output< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > output< / span > < span class = "o" > .< / span > < span class = "n" > endswith< / span > < span class = "p" > (< / span > < span class = "n" > newline< / span > < span class = "p" > ):< / span >
< span class = "n" > output< / span > < span class = "o" > +=< / span > < span class = "n" > newline< / span >
< span class = "k" > if< / span > < span class = "n" > outfile< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "n" > outfile< / span > < span class = "o" > .< / span > < span class = "n" > write< / span > < span class = "p" > (< / span > < span class = "n" > output< / span > < span class = "p" > )< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > h< / span > < span class = "o" > =< / span > < span class = "nb" > open< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "p" > ,< / span > < span class = "s" > ' wb' < / span > < span class = "p" > )< / span >
< span class = "n" > h< / span > < span class = "o" > .< / span > < span class = "n" > write< / span > < span class = "p" > (< / span > < span class = "n" > output< / span > < span class = "p" > )< / span >
< span class = "n" > h< / span > < span class = "o" > .< / span > < span class = "n" > close< / span > < span class = "p" > ()< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj.validate" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj.validate" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > validate< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > validator< / span > < span class = "p" > ,< / span > < span class = "n" > preserve_errors< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span > < span class = "p" > ,< / span >
< span class = "n" > section< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > Test the ConfigObj against a configspec.< / span >
< span class = "sd" > < / span >
< span class = "sd" > It uses the ``validator`` object from *validate.py*.< / span >
< span class = "sd" > < / span >
< span class = "sd" > To run ``validate`` on the current ConfigObj, call: ::< / span >
< span class = "sd" > < / span >
< span class = "sd" > test = config.validate(validator)< / span >
< span class = "sd" > < / span >
< span class = "sd" > (Normally having previously passed in the configspec when the ConfigObj< / span >
< span class = "sd" > was created - you can dynamically assign a dictionary of checks to the< / span >
< span class = "sd" > ``configspec`` attribute of a section though).< / span >
< span class = "sd" > < / span >
< span class = "sd" > It returns ``True`` if everything passes, or a dictionary of< / span >
< span class = "sd" > pass/fails (True/False). If every member of a subsection passes, it< / span >
< span class = "sd" > will just have the value ``True``. (It also returns ``False`` if all< / span >
< span class = "sd" > members fail).< / span >
< span class = "sd" > < / span >
< span class = "sd" > In addition, it converts the values from strings to their native< / span >
< span class = "sd" > types if their checks pass (and ``stringify`` is set).< / span >
< span class = "sd" > < / span >
< span class = "sd" > If ``preserve_errors`` is ``True`` (``False`` is default) then instead< / span >
< span class = "sd" > of a marking a fail with a ``False``, it will preserve the actual< / span >
< span class = "sd" > exception object. This can contain info about the reason for failure.< / span >
< span class = "sd" > For example the ``VdtValueTooSmallError`` indicates that the value< / span >
< span class = "sd" > supplied was too small. If a value (or section) is missing it will< / span >
< span class = "sd" > still be marked as ``False``.< / span >
< span class = "sd" > < / span >
< span class = "sd" > You must have the validate module to use ``preserve_errors=True``.< / span >
< span class = "sd" > < / span >
< span class = "sd" > You can then use the ``flatten_errors`` function to turn your nested< / span >
< span class = "sd" > results dictionary into a flattened list of failures - useful for< / span >
< span class = "sd" > displaying meaningful error messages.< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > if< / span > < span class = "n" > section< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > configspec< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span > < span class = "ne" > ValueError< / span > < span class = "p" > (< / span > < span class = "s" > ' No configspec supplied.' < / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "n" > preserve_errors< / span > < span class = "p" > :< / span >
< span class = "c" > # We do this once to remove a top level dependency on the validate module< / span >
< span class = "c" > # Which makes importing configobj faster< / span >
< span class = "kn" > from< / span > < span class = "nn" > validate< / span > < span class = "kn" > import< / span > < span class = "n" > VdtMissingValue< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _vdtMissingValue< / span > < span class = "o" > =< / span > < span class = "n" > VdtMissingValue< / span >
< span class = "n" > section< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span >
< span class = "k" > if< / span > < span class = "n" > copy< / span > < span class = "p" > :< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > initial_comment< / span > < span class = "o" > =< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > configspec< / span > < span class = "o" > .< / span > < span class = "n" > initial_comment< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > final_comment< / span > < span class = "o" > =< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > configspec< / span > < span class = "o" > .< / span > < span class = "n" > final_comment< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span > < span class = "o" > =< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > configspec< / span > < span class = "o" > .< / span > < span class = "n" > encoding< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > BOM< / span > < span class = "o" > =< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > configspec< / span > < span class = "o" > .< / span > < span class = "n" > BOM< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > newlines< / span > < span class = "o" > =< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > configspec< / span > < span class = "o" > .< / span > < span class = "n" > newlines< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > indent_type< / span > < span class = "o" > =< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > configspec< / span > < span class = "o" > .< / span > < span class = "n" > indent_type< / span >
< span class = "c" > #< / span >
< span class = "c" > # section.default_values.clear() #??< / span >
< span class = "n" > configspec< / span > < span class = "o" > =< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > configspec< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _set_configspec< / span > < span class = "p" > (< / span > < span class = "n" > section< / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "p" > )< / span >
< span class = "k" > def< / span > < span class = "nf" > validate_entry< / span > < span class = "p" > (< / span > < span class = "n" > entry< / span > < span class = "p" > ,< / span > < span class = "n" > spec< / span > < span class = "p" > ,< / span > < span class = "n" > val< / span > < span class = "p" > ,< / span > < span class = "n" > missing< / span > < span class = "p" > ,< / span > < span class = "n" > ret_true< / span > < span class = "p" > ,< / span > < span class = "n" > ret_false< / span > < span class = "p" > ):< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > default_values< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > (< / span > < span class = "n" > entry< / span > < span class = "p" > ,< / span > < span class = "bp" > None< / span > < span class = "p" > )< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > default_values< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > validator< / span > < span class = "o" > .< / span > < span class = "n" > get_default_value< / span > < span class = "p" > (< / span > < span class = "n" > configspec< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ])< / span >
< span class = "k" > except< / span > < span class = "p" > (< / span > < span class = "ne" > KeyError< / span > < span class = "p" > ,< / span > < span class = "ne" > AttributeError< / span > < span class = "p" > ,< / span > < span class = "n" > validator< / span > < span class = "o" > .< / span > < span class = "n" > baseErrorClass< / span > < span class = "p" > ):< / span >
< span class = "c" > # No default, bad default or validator has no ' get_default_value' < / span >
< span class = "c" > # (e.g. SimpleVal)< / span >
< span class = "k" > pass< / span >
< span class = "k" > try< / span > < span class = "p" > :< / span >
< span class = "n" > check< / span > < span class = "o" > =< / span > < span class = "n" > validator< / span > < span class = "o" > .< / span > < span class = "n" > check< / span > < span class = "p" > (< / span > < span class = "n" > spec< / span > < span class = "p" > ,< / span >
< span class = "n" > val< / span > < span class = "p" > ,< / span >
< span class = "n" > missing< / span > < span class = "o" > =< / span > < span class = "n" > missing< / span >
< span class = "p" > )< / span >
< span class = "k" > except< / span > < span class = "n" > validator< / span > < span class = "o" > .< / span > < span class = "n" > baseErrorClass< / span > < span class = "p" > ,< / span > < span class = "n" > e< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > preserve_errors< / span > < span class = "ow" > or< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > e< / span > < span class = "p" > ,< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _vdtMissingValue< / span > < span class = "p" > ):< / span >
< span class = "n" > out< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "c" > # preserve the error< / span >
< span class = "n" > out< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > e< / span >
< span class = "n" > ret_false< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "n" > ret_true< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > ret_false< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "n" > out< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "bp" > True< / span >
< span class = "k" > if< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > stringify< / span > < span class = "ow" > or< / span > < span class = "n" > missing< / span > < span class = "p" > :< / span >
< span class = "c" > # if we are doing type conversion< / span >
< span class = "c" > # or the value is a supplied default< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > stringify< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > check< / span > < span class = "p" > ,< / span > < span class = "p" > (< / span > < span class = "nb" > list< / span > < span class = "p" > ,< / span > < span class = "nb" > tuple< / span > < span class = "p" > )):< / span >
< span class = "c" > # preserve lists< / span >
< span class = "n" > check< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _str< / span > < span class = "p" > (< / span > < span class = "n" > item< / span > < span class = "p" > )< / span > < span class = "k" > for< / span > < span class = "n" > item< / span > < span class = "ow" > in< / span > < span class = "n" > check< / span > < span class = "p" > ]< / span >
< span class = "k" > elif< / span > < span class = "n" > missing< / span > < span class = "ow" > and< / span > < span class = "n" > check< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "c" > # convert the None from a default to a ' ' < / span >
< span class = "n" > check< / span > < span class = "o" > =< / span > < span class = "s" > ' ' < / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > check< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _str< / span > < span class = "p" > (< / span > < span class = "n" > check< / span > < span class = "p" > )< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "n" > check< / span > < span class = "o" > !=< / span > < span class = "n" > val< / span > < span class = "p" > )< / span > < span class = "ow" > or< / span > < span class = "n" > missing< / span > < span class = "p" > :< / span >
< span class = "n" > section< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > check< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > copy< / span > < span class = "ow" > and< / span > < span class = "n" > missing< / span > < span class = "ow" > and< / span > < span class = "n" > entry< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > defaults< / span > < span class = "p" > :< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > defaults< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > entry< / span > < span class = "p" > )< / span >
< span class = "k" > return< / span > < span class = "n" > ret_true< / span > < span class = "p" > ,< / span > < span class = "n" > ret_false< / span >
< span class = "c" > #< / span >
< span class = "n" > out< / span > < span class = "o" > =< / span > < span class = "p" > {}< / span >
< span class = "n" > ret_true< / span > < span class = "o" > =< / span > < span class = "bp" > True< / span >
< span class = "n" > ret_false< / span > < span class = "o" > =< / span > < span class = "bp" > True< / span >
< span class = "n" > unvalidated< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > k< / span > < span class = "k" > for< / span > < span class = "n" > k< / span > < span class = "ow" > in< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "k" > if< / span > < span class = "n" > k< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "n" > configspec< / span > < span class = "p" > ]< / span >
< span class = "n" > incorrect_sections< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > k< / span > < span class = "k" > for< / span > < span class = "n" > k< / span > < span class = "ow" > in< / span > < span class = "n" > configspec< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "k" > if< / span > < span class = "n" > k< / span > < span class = "ow" > in< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "p" > ]< / span >
< span class = "n" > incorrect_scalars< / span > < span class = "o" > =< / span > < span class = "p" > [< / span > < span class = "n" > k< / span > < span class = "k" > for< / span > < span class = "n" > k< / span > < span class = "ow" > in< / span > < span class = "n" > configspec< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "k" > if< / span > < span class = "n" > k< / span > < span class = "ow" > in< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > ]< / span >
< span class = "k" > for< / span > < span class = "n" > entry< / span > < span class = "ow" > in< / span > < span class = "n" > configspec< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > entry< / span > < span class = "ow" > in< / span > < span class = "p" > (< / span > < span class = "s" > ' __many__' < / span > < span class = "p" > ,< / span > < span class = "s" > ' ___many___' < / span > < span class = "p" > ):< / span >
< span class = "c" > # reserved names< / span >
< span class = "k" > continue< / span >
< span class = "k" > if< / span > < span class = "p" > (< / span > < span class = "ow" > not< / span > < span class = "n" > entry< / span > < span class = "ow" > in< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "p" > )< / span > < span class = "ow" > or< / span > < span class = "p" > (< / span > < span class = "n" > entry< / span > < span class = "ow" > in< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > defaults< / span > < span class = "p" > ):< / span >
< span class = "c" > # missing entries< / span >
< span class = "c" > # or entries from defaults< / span >
< span class = "n" > missing< / span > < span class = "o" > =< / span > < span class = "bp" > True< / span >
< span class = "n" > val< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span >
< span class = "k" > if< / span > < span class = "n" > copy< / span > < span class = "ow" > and< / span > < span class = "n" > entry< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "p" > :< / span >
< span class = "c" > # copy comments< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > comments< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "p" > (< / span >
< span class = "n" > configspec< / span > < span class = "o" > .< / span > < span class = "n" > comments< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "n" > entry< / span > < span class = "p" > ,< / span > < span class = "p" > []))< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > inline_comments< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "p" > (< / span >
< span class = "n" > configspec< / span > < span class = "o" > .< / span > < span class = "n" > inline_comments< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "n" > entry< / span > < span class = "p" > ,< / span > < span class = "s" > ' ' < / span > < span class = "p" > ))< / span >
< span class = "c" > #< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > missing< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "n" > val< / span > < span class = "o" > =< / span > < span class = "n" > section< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span >
< span class = "n" > ret_true< / span > < span class = "p" > ,< / span > < span class = "n" > ret_false< / span > < span class = "o" > =< / span > < span class = "n" > validate_entry< / span > < span class = "p" > (< / span > < span class = "n" > entry< / span > < span class = "p" > ,< / span > < span class = "n" > configspec< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ],< / span > < span class = "n" > val< / span > < span class = "p" > ,< / span >
< span class = "n" > missing< / span > < span class = "p" > ,< / span > < span class = "n" > ret_true< / span > < span class = "p" > ,< / span > < span class = "n" > ret_false< / span > < span class = "p" > )< / span >
< span class = "n" > many< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span >
< span class = "k" > if< / span > < span class = "s" > ' __many__' < / span > < span class = "ow" > in< / span > < span class = "n" > configspec< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "p" > :< / span >
< span class = "n" > many< / span > < span class = "o" > =< / span > < span class = "n" > configspec< / span > < span class = "p" > [< / span > < span class = "s" > ' __many__' < / span > < span class = "p" > ]< / span >
< span class = "k" > elif< / span > < span class = "s" > ' ___many___' < / span > < span class = "ow" > in< / span > < span class = "n" > configspec< / span > < span class = "o" > .< / span > < span class = "n" > scalars< / span > < span class = "p" > :< / span >
< span class = "n" > many< / span > < span class = "o" > =< / span > < span class = "n" > configspec< / span > < span class = "p" > [< / span > < span class = "s" > ' ___many___' < / span > < span class = "p" > ]< / span >
< span class = "k" > if< / span > < span class = "n" > many< / span > < span class = "ow" > is< / span > < span class = "ow" > not< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "k" > for< / span > < span class = "n" > entry< / span > < span class = "ow" > in< / span > < span class = "n" > unvalidated< / span > < span class = "p" > :< / span >
< span class = "n" > val< / span > < span class = "o" > =< / span > < span class = "n" > section< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span >
< span class = "n" > ret_true< / span > < span class = "p" > ,< / span > < span class = "n" > ret_false< / span > < span class = "o" > =< / span > < span class = "n" > validate_entry< / span > < span class = "p" > (< / span > < span class = "n" > entry< / span > < span class = "p" > ,< / span > < span class = "n" > many< / span > < span class = "p" > ,< / span > < span class = "n" > val< / span > < span class = "p" > ,< / span > < span class = "bp" > False< / span > < span class = "p" > ,< / span >
< span class = "n" > ret_true< / span > < span class = "p" > ,< / span > < span class = "n" > ret_false< / span > < span class = "p" > )< / span >
< span class = "n" > unvalidated< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "k" > for< / span > < span class = "n" > entry< / span > < span class = "ow" > in< / span > < span class = "n" > incorrect_scalars< / span > < span class = "p" > :< / span >
< span class = "n" > ret_true< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > preserve_errors< / span > < span class = "p" > :< / span >
< span class = "n" > out< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > ret_false< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "n" > msg< / span > < span class = "o" > =< / span > < span class = "s" > ' Value < / span > < span class = "si" > %r< / span > < span class = "s" > was provided as a section' < / span > < span class = "o" > %< / span > < span class = "n" > entry< / span >
< span class = "n" > out< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > validator< / span > < span class = "o" > .< / span > < span class = "n" > baseErrorClass< / span > < span class = "p" > (< / span > < span class = "n" > msg< / span > < span class = "p" > )< / span >
< span class = "k" > for< / span > < span class = "n" > entry< / span > < span class = "ow" > in< / span > < span class = "n" > incorrect_sections< / span > < span class = "p" > :< / span >
< span class = "n" > ret_true< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "n" > preserve_errors< / span > < span class = "p" > :< / span >
< span class = "n" > out< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > ret_false< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "n" > msg< / span > < span class = "o" > =< / span > < span class = "s" > ' Section < / span > < span class = "si" > %r< / span > < span class = "s" > was provided as a single value' < / span > < span class = "o" > %< / span > < span class = "n" > entry< / span >
< span class = "n" > out< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > validator< / span > < span class = "o" > .< / span > < span class = "n" > baseErrorClass< / span > < span class = "p" > (< / span > < span class = "n" > msg< / span > < span class = "p" > )< / span >
< span class = "c" > # Missing sections will have been created as empty ones when the< / span >
< span class = "c" > # configspec was read.< / span >
< span class = "k" > for< / span > < span class = "n" > entry< / span > < span class = "ow" > in< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > :< / span >
< span class = "c" > # FIXME: this means DEFAULT is not copied in copy mode< / span >
< span class = "k" > if< / span > < span class = "n" > section< / span > < span class = "ow" > is< / span > < span class = "bp" > self< / span > < span class = "ow" > and< / span > < span class = "n" > entry< / span > < span class = "o" > ==< / span > < span class = "s" > ' DEFAULT' < / span > < span class = "p" > :< / span >
< span class = "k" > continue< / span >
< span class = "k" > if< / span > < span class = "n" > section< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > .< / span > < span class = "n" > configspec< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "n" > unvalidated< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > entry< / span > < span class = "p" > )< / span >
< span class = "k" > continue< / span >
< span class = "k" > if< / span > < span class = "n" > copy< / span > < span class = "p" > :< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > comments< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > configspec< / span > < span class = "o" > .< / span > < span class = "n" > comments< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "n" > entry< / span > < span class = "p" > ,< / span > < span class = "p" > [])< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > inline_comments< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > configspec< / span > < span class = "o" > .< / span > < span class = "n" > inline_comments< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "n" > entry< / span > < span class = "p" > ,< / span > < span class = "s" > ' ' < / span > < span class = "p" > )< / span >
< span class = "n" > check< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > validate< / span > < span class = "p" > (< / span > < span class = "n" > validator< / span > < span class = "p" > ,< / span > < span class = "n" > preserve_errors< / span > < span class = "o" > =< / span > < span class = "n" > preserve_errors< / span > < span class = "p" > ,< / span > < span class = "n" > copy< / span > < span class = "o" > =< / span > < span class = "n" > copy< / span > < span class = "p" > ,< / span > < span class = "n" > section< / span > < span class = "o" > =< / span > < span class = "n" > section< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ])< / span >
< span class = "n" > out< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > check< / span >
< span class = "k" > if< / span > < span class = "n" > check< / span > < span class = "o" > ==< / span > < span class = "bp" > False< / span > < span class = "p" > :< / span >
< span class = "n" > ret_true< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "k" > elif< / span > < span class = "n" > check< / span > < span class = "o" > ==< / span > < span class = "bp" > True< / span > < span class = "p" > :< / span >
< span class = "n" > ret_false< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "k" > else< / span > < span class = "p" > :< / span >
< span class = "n" > ret_true< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > extra_values< / span > < span class = "o" > =< / span > < span class = "n" > unvalidated< / span >
< span class = "k" > if< / span > < span class = "n" > preserve_errors< / span > < span class = "ow" > and< / span > < span class = "ow" > not< / span > < span class = "n" > section< / span > < span class = "o" > .< / span > < span class = "n" > _created< / span > < span class = "p" > :< / span >
< span class = "c" > # If the section wasn' t created (i.e. it wasn' t missing)< / span >
< span class = "c" > # then we can' t return False, we need to preserve errors< / span >
< span class = "n" > ret_false< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span >
< span class = "c" > #< / span >
< span class = "k" > if< / span > < span class = "n" > ret_false< / span > < span class = "ow" > and< / span > < span class = "n" > preserve_errors< / span > < span class = "ow" > and< / span > < span class = "n" > out< / span > < span class = "p" > :< / span >
< span class = "c" > # If we are preserving errors, but all< / span >
< span class = "c" > # the failures are from missing sections / values< / span >
< span class = "c" > # then we can return False. Otherwise there is a< / span >
< span class = "c" > # real failure that we need to preserve.< / span >
< span class = "n" > ret_false< / span > < span class = "o" > =< / span > < span class = "ow" > not< / span > < span class = "nb" > any< / span > < span class = "p" > (< / span > < span class = "n" > out< / span > < span class = "o" > .< / span > < span class = "n" > values< / span > < span class = "p" > ())< / span >
< span class = "k" > if< / span > < span class = "n" > ret_true< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "bp" > True< / span >
< span class = "k" > elif< / span > < span class = "n" > ret_false< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "bp" > False< / span >
< span class = "k" > return< / span > < span class = "n" > out< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj.reset" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj.reset" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > reset< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " Clear ConfigObj instance and restore to ' freshly created' state." " " < / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > clear< / span > < span class = "p" > ()< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _initialise< / span > < span class = "p" > ()< / span >
< span class = "c" > # FIXME: Should be done by ' _initialise' , but ConfigObj constructor (and reload)< / span >
< span class = "c" > # requires an empty dictionary< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > configspec< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span >
< span class = "c" > # Just to be sure ;-)< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _original_configspec< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span >
< / div >
< div class = "viewcode-block" id = "ConfigObj.reload" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.ConfigObj.reload" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > reload< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > Reload a ConfigObj from file.< / span >
< span class = "sd" > < / span >
< span class = "sd" > This method raises a ``ReloadError`` if the ConfigObj doesn' t have< / span >
< span class = "sd" > a filename attribute pointing to a file.< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > if< / span > < span class = "ow" > not< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span > < span class = "p" > ,< / span > < span class = "nb" > basestring< / span > < span class = "p" > ):< / span >
< span class = "k" > raise< / span > < span class = "n" > ReloadError< / span > < span class = "p" > ()< / span >
< span class = "n" > filename< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > filename< / span >
< span class = "n" > current_options< / span > < span class = "o" > =< / span > < span class = "p" > {}< / span >
< span class = "k" > for< / span > < span class = "n" > entry< / span > < span class = "ow" > in< / span > < span class = "n" > OPTION_DEFAULTS< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > entry< / span > < span class = "o" > ==< / span > < span class = "s" > ' configspec' < / span > < span class = "p" > :< / span >
< span class = "k" > continue< / span >
< span class = "n" > current_options< / span > < span class = "p" > [< / span > < span class = "n" > entry< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "nb" > getattr< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > entry< / span > < span class = "p" > )< / span >
< span class = "n" > configspec< / span > < span class = "o" > =< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _original_configspec< / span >
< span class = "n" > current_options< / span > < span class = "p" > [< / span > < span class = "s" > ' configspec' < / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > configspec< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > clear< / span > < span class = "p" > ()< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _initialise< / span > < span class = "p" > (< / span > < span class = "n" > current_options< / span > < span class = "p" > )< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > _load< / span > < span class = "p" > (< / span > < span class = "n" > filename< / span > < span class = "p" > ,< / span > < span class = "n" > configspec< / span > < span class = "p" > )< / span >
< / div > < / div >
< div class = "viewcode-block" id = "SimpleVal" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.SimpleVal" > [docs]< / a > < span class = "k" > class< / span > < span class = "nc" > SimpleVal< / span > < span class = "p" > (< / span > < span class = "nb" > object< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > A simple validator.< / span >
< span class = "sd" > Can be used to check that all members expected are present.< / span >
< span class = "sd" > < / span >
< span class = "sd" > To use it, provide a configspec with all your members in (the value given< / span >
< span class = "sd" > will be ignored). Pass an instance of ``SimpleVal`` to the ``validate``< / span >
< span class = "sd" > method of your ``ConfigObj``. ``validate`` will return ``True`` if all< / span >
< span class = "sd" > members are present, or a dictionary with True/False meaning< / span >
< span class = "sd" > present/missing. (Whole missing sections will be replaced with ``False``)< / span >
< span class = "sd" > " " " < / span >
< div class = "viewcode-block" id = "SimpleVal.__init__" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.SimpleVal.__init__" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > __init__< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ):< / span >
< span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > baseErrorClass< / span > < span class = "o" > =< / span > < span class = "n" > ConfigObjError< / span >
< / div >
< div class = "viewcode-block" id = "SimpleVal.check" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.SimpleVal.check" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > check< / span > < span class = "p" > (< / span > < span class = "bp" > self< / span > < span class = "p" > ,< / span > < span class = "n" > check< / span > < span class = "p" > ,< / span > < span class = "n" > member< / span > < span class = "p" > ,< / span > < span class = "n" > missing< / span > < span class = "o" > =< / span > < span class = "bp" > False< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " A dummy check method, always returns the value unchanged." " " < / span >
< span class = "k" > if< / span > < span class = "n" > missing< / span > < span class = "p" > :< / span >
< span class = "k" > raise< / span > < span class = "bp" > self< / span > < span class = "o" > .< / span > < span class = "n" > baseErrorClass< / span > < span class = "p" > ()< / span >
< span class = "k" > return< / span > < span class = "n" > member< / span >
< / div > < / div >
< div class = "viewcode-block" id = "flatten_errors" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.flatten_errors" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > flatten_errors< / span > < span class = "p" > (< / span > < span class = "n" > cfg< / span > < span class = "p" > ,< / span > < span class = "n" > res< / span > < span class = "p" > ,< / span > < span class = "n" > levels< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span > < span class = "p" > ,< / span > < span class = "n" > results< / span > < span class = "o" > =< / span > < span class = "bp" > None< / span > < span class = "p" > ):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > An example function that will turn a nested dictionary of results< / span >
< span class = "sd" > (as returned by ``ConfigObj.validate``) into a flat list.< / span >
< span class = "sd" > < / span >
< span class = "sd" > ``cfg`` is the ConfigObj instance being checked, ``res`` is the results< / span >
< span class = "sd" > dictionary returned by ``validate``.< / span >
< span class = "sd" > < / span >
< span class = "sd" > (This is a recursive function, so you shouldn' t use the ``levels`` or< / span >
< span class = "sd" > ``results`` arguments - they are used by the function.)< / span >
< span class = "sd" > < / span >
< span class = "sd" > Returns a list of keys that failed. Each member of the list is a tuple::< / span >
< span class = "sd" > < / span >
< span class = "sd" > ([list of sections...], key, result)< / span >
< span class = "sd" > < / span >
< span class = "sd" > If ``validate`` was called with ``preserve_errors=False`` (the default)< / span >
< span class = "sd" > then ``result`` will always be ``False``.< / span >
< span class = "sd" > *list of sections* is a flattened list of sections that the key was found< / span >
< span class = "sd" > in.< / span >
< span class = "sd" > < / span >
< span class = "sd" > If the section was missing (or a section was expected and a scalar provided< / span >
< span class = "sd" > - or vice-versa) then key will be ``None``.< / span >
< span class = "sd" > < / span >
< span class = "sd" > If the value (or section) was missing then ``result`` will be ``False``.< / span >
< span class = "sd" > < / span >
< span class = "sd" > If ``validate`` was called with ``preserve_errors=True`` and a value< / span >
< span class = "sd" > was present, but failed the check, then ``result`` will be the exception< / span >
< span class = "sd" > object returned. You can use this as a string that describes the failure.< / span >
< span class = "sd" > < / span >
< span class = "sd" > For example *The value " 3" is of the wrong type*.< / span >
< span class = "sd" > " " " < / span >
< span class = "k" > if< / span > < span class = "n" > levels< / span > < span class = "ow" > is< / span > < span class = "bp" > None< / span > < span class = "p" > :< / span >
< span class = "c" > # first time called< / span >
< span class = "n" > levels< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "n" > results< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "k" > if< / span > < span class = "n" > res< / span > < span class = "o" > ==< / span > < span class = "bp" > True< / span > < span class = "p" > :< / span >
< span class = "k" > return< / span > < span class = "n" > results< / span >
< span class = "k" > if< / span > < span class = "n" > res< / span > < span class = "o" > ==< / span > < span class = "bp" > False< / span > < span class = "ow" > or< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > res< / span > < span class = "p" > ,< / span > < span class = "ne" > Exception< / span > < span class = "p" > ):< / span >
< span class = "n" > results< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > ((< / span > < span class = "n" > levels< / span > < span class = "p" > [:],< / span > < span class = "bp" > None< / span > < span class = "p" > ,< / span > < span class = "n" > res< / span > < span class = "p" > ))< / span >
< span class = "k" > if< / span > < span class = "n" > levels< / span > < span class = "p" > :< / span >
< span class = "n" > levels< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > ()< / span >
< span class = "k" > return< / span > < span class = "n" > results< / span >
< span class = "k" > for< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > val< / span > < span class = "p" > )< / span > < span class = "ow" > in< / span > < span class = "n" > res< / span > < span class = "o" > .< / span > < span class = "n" > items< / span > < span class = "p" > ():< / span >
< span class = "k" > if< / span > < span class = "n" > val< / span > < span class = "o" > ==< / span > < span class = "bp" > True< / span > < span class = "p" > :< / span >
< span class = "k" > continue< / span >
< span class = "k" > if< / span > < span class = "nb" > isinstance< / span > < span class = "p" > (< / span > < span class = "n" > cfg< / span > < span class = "o" > .< / span > < span class = "n" > get< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > ),< / span > < span class = "nb" > dict< / span > < span class = "p" > ):< / span >
< span class = "c" > # Go down one level< / span >
< span class = "n" > levels< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > (< / span > < span class = "n" > key< / span > < span class = "p" > )< / span >
< span class = "n" > flatten_errors< / span > < span class = "p" > (< / span > < span class = "n" > cfg< / span > < span class = "p" > [< / span > < span class = "n" > key< / span > < span class = "p" > ],< / span > < span class = "n" > val< / span > < span class = "p" > ,< / span > < span class = "n" > levels< / span > < span class = "p" > ,< / span > < span class = "n" > results< / span > < span class = "p" > )< / span >
< span class = "k" > continue< / span >
< span class = "n" > results< / span > < span class = "o" > .< / span > < span class = "n" > append< / span > < span class = "p" > ((< / span > < span class = "n" > levels< / span > < span class = "p" > [:],< / span > < span class = "n" > key< / span > < span class = "p" > ,< / span > < span class = "n" > val< / span > < span class = "p" > ))< / span >
< span class = "c" > #< / span >
< span class = "c" > # Go up one level< / span >
< span class = "k" > if< / span > < span class = "n" > levels< / span > < span class = "p" > :< / span >
< span class = "n" > levels< / span > < span class = "o" > .< / span > < span class = "n" > pop< / span > < span class = "p" > ()< / span >
< span class = "c" > #< / span >
< span class = "k" > return< / span > < span class = "n" > results< / span >
< / div >
< div class = "viewcode-block" id = "get_extra_values" > < a class = "viewcode-back" href = "../../../terminatorlib.configobj.html#terminatorlib.configobj.configobj.get_extra_values" > [docs]< / a > < span class = "k" > def< / span > < span class = "nf" > get_extra_values< / span > < span class = "p" > (< / span > < span class = "n" > conf< / span > < span class = "p" > ,< / span > < span class = "n" > _prepend< / span > < span class = "o" > =< / span > < span class = "p" > ()):< / span >
< span class = "sd" > " " " < / span >
< span class = "sd" > Find all the values and sections not in the configspec from a validated< / span >
< span class = "sd" > ConfigObj.< / span >
< span class = "sd" > < / span >
< span class = "sd" > ``get_extra_values`` returns a list of tuples where each tuple represents< / span >
< span class = "sd" > either an extra section, or an extra value.< / span >
< span class = "sd" > < / span >
< span class = "sd" > The tuples contain two values, a tuple representing the section the value < / span >
< span class = "sd" > is in and the name of the extra values. For extra values in the top level< / span >
< span class = "sd" > section the first member will be an empty tuple. For values in the ' foo' < / span >
< span class = "sd" > section the first member will be ``(' foo' ,)``. For members in the ' bar' < / span >
< span class = "sd" > subsection of the ' foo' section the first member will be ``(' foo' , ' bar' )``.< / span >
< span class = "sd" > < / span >
< span class = "sd" > NOTE: If you call ``get_extra_values`` on a ConfigObj instance that hasn' t< / span >
< span class = "sd" > been validated it will return an empty list.< / span >
< span class = "sd" > " " " < / span >
< span class = "n" > out< / span > < span class = "o" > =< / span > < span class = "p" > []< / span >
< span class = "n" > out< / span > < span class = "o" > .< / span > < span class = "n" > extend< / span > < span class = "p" > ([(< / span > < span class = "n" > _prepend< / span > < span class = "p" > ,< / span > < span class = "n" > name< / span > < span class = "p" > )< / span > < span class = "k" > for< / span > < span class = "n" > name< / span > < span class = "ow" > in< / span > < span class = "n" > conf< / span > < span class = "o" > .< / span > < span class = "n" > extra_values< / span > < span class = "p" > ])< / span >
< span class = "k" > for< / span > < span class = "n" > name< / span > < span class = "ow" > in< / span > < span class = "n" > conf< / span > < span class = "o" > .< / span > < span class = "n" > sections< / span > < span class = "p" > :< / span >
< span class = "k" > if< / span > < span class = "n" > name< / span > < span class = "ow" > not< / span > < span class = "ow" > in< / span > < span class = "n" > conf< / span > < span class = "o" > .< / span > < span class = "n" > extra_values< / span > < span class = "p" > :< / span >
< span class = "n" > out< / span > < span class = "o" > .< / span > < span class = "n" > extend< / span > < span class = "p" > (< / span > < span class = "n" > get_extra_values< / span > < span class = "p" > (< / span > < span class = "n" > conf< / span > < span class = "p" > [< / span > < span class = "n" > name< / span > < span class = "p" > ],< / span > < span class = "n" > _prepend< / span > < span class = "o" > +< / span > < span class = "p" > (< / span > < span class = "n" > name< / span > < span class = "p" > ,)))< / span >
< span class = "k" > return< / span > < span class = "n" > out< / span >
< / div >
< span class = "sd" > " " " *A programming language is a medium of expression.* - Paul Graham" " " < / span >
< / pre > < / div >
< / div >
< footer >
< hr / >
< div role = "contentinfo" >
< p >
© Copyright 2015, Stephen Boddy, licensed under the CC-BY-SA..
< / p >
< / div >
Built with < a href = "http://sphinx-doc.org/" > Sphinx< / a > using a < a href = "https://github.com/snide/sphinx_rtd_theme" > theme< / a > provided by < a href = "https://readthedocs.org" > Read the Docs< / a > .
< / footer >
< / div >
< / div >
< / section >
< / div >
< script type = "text/javascript" >
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../../../',
VERSION:'0.98',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true
};
< / script >
< script type = "text/javascript" src = "../../../_static/jquery.js" > < / script >
< script type = "text/javascript" src = "../../../_static/underscore.js" > < / script >
< script type = "text/javascript" src = "../../../_static/doctools.js" > < / script >
< script type = "text/javascript" src = "../../../_static/js/theme.js" > < / script >
< script type = "text/javascript" >
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
< / script >
< / body >
< / html >