diff options
Diffstat (limited to 'reconfigure/parsers')
-rw-r--r-- | reconfigure/parsers/__init__.py | 22 | ||||
-rw-r--r-- | reconfigure/parsers/bind9.py | 3 | ||||
-rw-r--r-- | reconfigure/parsers/ini.py | 9 | ||||
-rw-r--r-- | reconfigure/parsers/iniparse/__init__.py | 28 | ||||
-rw-r--r-- | reconfigure/parsers/iniparse/compat.py | 44 | ||||
-rw-r--r-- | reconfigure/parsers/iniparse/ini.py | 16 | ||||
-rw-r--r-- | reconfigure/parsers/iniparse/utils.py | 4 | ||||
-rw-r--r-- | reconfigure/parsers/jsonparser.py | 3 | ||||
-rw-r--r-- | reconfigure/parsers/nginx.py | 4 |
9 files changed, 82 insertions, 51 deletions
diff --git a/reconfigure/parsers/__init__.py b/reconfigure/parsers/__init__.py index 8de7aeb..af88033 100644 --- a/reconfigure/parsers/__init__.py +++ b/reconfigure/parsers/__init__.py @@ -1,14 +1,14 @@ -from base import BaseParser -from bind9 import BIND9Parser -from exports import ExportsParser -from ini import IniFileParser -from iptables import IPTablesParser -from jsonparser import JsonParser -from nginx import NginxParser -from nsd import NSDParser -from ssv import SSVParser -from squid import SquidParser -from crontab import CrontabParser +from reconfigure.parsers.base import BaseParser +from reconfigure.parsers.bind9 import BIND9Parser +from reconfigure.parsers.exports import ExportsParser +from reconfigure.parsers.ini import IniFileParser +from reconfigure.parsers.iptables import IPTablesParser +from reconfigure.parsers.jsonparser import JsonParser +from reconfigure.parsers.nginx import NginxParser +from reconfigure.parsers.nsd import NSDParser +from reconfigure.parsers.ssv import SSVParser +from reconfigure.parsers.squid import SquidParser +from reconfigure.parsers.crontab import CrontabParser __all__ = [ 'BaseParser', diff --git a/reconfigure/parsers/bind9.py b/reconfigure/parsers/bind9.py index d5c8e01..123a799 100644 --- a/reconfigure/parsers/bind9.py +++ b/reconfigure/parsers/bind9.py @@ -9,7 +9,8 @@ class BIND9Parser (NginxParser): tokens = [ (r"[\w_]+\s*?.*?{", lambda s, t: ('section_start', t)), - (r"[\w\d_:]+?.*?;", lambda s, t: ('option', t)), + (r"[\w\d_:.]+?.*?;", lambda s, t: ('option', t)), + (r"\".*?\"\s*;", lambda s, t: ('option', t)), (r"\s", lambda s, t: 'whitespace'), (r"$^", lambda s, t: 'newline'), (r"\#.*?\n", lambda s, t: ('comment', t)), diff --git a/reconfigure/parsers/ini.py b/reconfigure/parsers/ini.py index dbd0c7c..2f3b82e 100644 --- a/reconfigure/parsers/ini.py +++ b/reconfigure/parsers/ini.py @@ -1,7 +1,11 @@ from reconfigure.nodes import * from reconfigure.parsers import BaseParser -from iniparse import INIConfig -from StringIO import StringIO +from reconfigure.parsers.iniparse import INIConfig + +try: + from StringIO import StringIO +except ImportError: + from io import StringIO class IniFileParser (BaseParser): @@ -48,7 +52,6 @@ class IniFileParser (BaseParser): def stringify(self, tree): cp = INIConfig() - for section in tree.children: if self.sectionless and section.name is None: sectionname = self.nullsection diff --git a/reconfigure/parsers/iniparse/__init__.py b/reconfigure/parsers/iniparse/__init__.py index 618bd20..ca5d579 100644 --- a/reconfigure/parsers/iniparse/__init__.py +++ b/reconfigure/parsers/iniparse/__init__.py @@ -3,17 +3,25 @@ # Copyright (c) 2007 Tim Lauridsen <tla@rasmil.dk> # All Rights Reserved. See LICENSE-PSF & LICENSE for details. -from ini import INIConfig, change_comment_syntax -from config import BasicConfig, ConfigNamespace -from compat import RawConfigParser, ConfigParser, SafeConfigParser -from utils import tidy +from reconfigure.parsers.iniparse.ini import INIConfig, change_comment_syntax +from reconfigure.parsers.iniparse.config import BasicConfig, ConfigNamespace +from reconfigure.parsers.iniparse.compat import RawConfigParser, ConfigParser, SafeConfigParser +from reconfigure.parsers.iniparse.utils import tidy -from ConfigParser import DuplicateSectionError, \ - NoSectionError, NoOptionError, \ - InterpolationMissingOptionError, \ - InterpolationDepthError, \ - InterpolationSyntaxError, \ - DEFAULTSECT, MAX_INTERPOLATION_DEPTH +try: + from ConfigParser import DuplicateSectionError, \ + NoSectionError, NoOptionError, \ + InterpolationMissingOptionError, \ + InterpolationDepthError, \ + InterpolationSyntaxError, \ + DEFAULTSECT, MAX_INTERPOLATION_DEPTH +except ImportError: + from configparser import DuplicateSectionError, \ + NoSectionError, NoOptionError, \ + InterpolationMissingOptionError, \ + InterpolationDepthError, \ + InterpolationSyntaxError, \ + DEFAULTSECT, MAX_INTERPOLATION_DEPTH __all__ = [ 'BasicConfig', 'ConfigNamespace', diff --git a/reconfigure/parsers/iniparse/compat.py b/reconfigure/parsers/iniparse/compat.py index 17c4f67..01df27c 100644 --- a/reconfigure/parsers/iniparse/compat.py +++ b/reconfigure/parsers/iniparse/compat.py @@ -12,19 +12,33 @@ The underlying INIConfig object can be accessed as cfg.data """ import re -from ConfigParser import DuplicateSectionError, \ - NoSectionError, NoOptionError, \ - InterpolationMissingOptionError, \ - InterpolationDepthError, \ - InterpolationSyntaxError, \ - DEFAULTSECT, MAX_INTERPOLATION_DEPTH +try: + from ConfigParser import DuplicateSectionError, \ + NoSectionError, NoOptionError, \ + InterpolationMissingOptionError, \ + InterpolationDepthError, \ + InterpolationSyntaxError, \ + DEFAULTSECT, MAX_INTERPOLATION_DEPTH + + # These are imported only for compatiability. + # The code below does not reference them directly. + from ConfigParser import Error, InterpolationError, \ + MissingSectionHeaderError, ParsingError +except ImportError: + from configparser import DuplicateSectionError, \ + NoSectionError, NoOptionError, \ + InterpolationMissingOptionError, \ + InterpolationDepthError, \ + InterpolationSyntaxError, \ + DEFAULTSECT, MAX_INTERPOLATION_DEPTH + + # These are imported only for compatiability. + # The code below does not reference them directly. + from configparser import Error, InterpolationError, \ + MissingSectionHeaderError, ParsingError + +import reconfigure.parsers.iniparse.ini -# These are imported only for compatiability. -# The code below does not reference them directly. -from ConfigParser import Error, InterpolationError, \ - MissingSectionHeaderError, ParsingError - -import ini class RawConfigParser(object): def __init__(self, defaults=None, dict_type=dict): @@ -56,7 +70,7 @@ class RawConfigParser(object): # The default section is the only one that gets the case-insensitive # treatment - so it is special-cased here. if section.lower() == "default": - raise ValueError, 'Invalid section name: %s' % section + raise ValueError('Invalid section name: %s' % section) if self.has_section(section): raise DuplicateSectionError(section) @@ -143,7 +157,7 @@ class RawConfigParser(object): def getboolean(self, section, option): v = self.get(section, option) if v.lower() not in self._boolean_states: - raise ValueError, 'Not a boolean: %s' % v + raise ValueError('Not a boolean: %s' % v) return self._boolean_states[v.lower()] def has_option(self, section, option): @@ -234,7 +248,7 @@ class ConfigParser(RawConfigParser): if "%(" in value: try: value = value % vars - except KeyError, e: + except KeyError as e: raise InterpolationMissingOptionError( option, section, rawval, e.args[0]) else: diff --git a/reconfigure/parsers/iniparse/ini.py b/reconfigure/parsers/iniparse/ini.py index 7881fd2..84611ba 100644 --- a/reconfigure/parsers/iniparse/ini.py +++ b/reconfigure/parsers/iniparse/ini.py @@ -1,3 +1,4 @@ +from __future__ import unicode_literals """Access and/or modify INI files * Compatiable with ConfigParser @@ -42,9 +43,12 @@ Example: # Backward-compatiable with ConfigParser import re -from ConfigParser import DEFAULTSECT, ParsingError, MissingSectionHeaderError +try: + from ConfigParser import DEFAULTSECT, ParsingError, MissingSectionHeaderError +except ImportError: + from configparser import DEFAULTSECT, ParsingError, MissingSectionHeaderError -import config +from reconfigure.parsers.iniparse import config class LineType(object): line = None @@ -465,7 +469,7 @@ class INIConfig(config.ConfigNamespace): self._sections = {} if defaults is None: defaults = {} self._defaults = INISection(LineContainer(), optionxformsource=self) - for name, value in defaults.iteritems(): + for name, value in defaults.items(): self._defaults[name] = value if fp is not None: self._readfp(fp) @@ -514,7 +518,7 @@ class INIConfig(config.ConfigNamespace): def __str__(self): if self._bom: - fmt = u'\ufeff%s' + fmt = '\ufeff%s' else: fmt = '%s' return fmt % self._data.__str__() @@ -551,8 +555,8 @@ class INIConfig(config.ConfigNamespace): for line in readline_iterator(fp): # Check for BOM on first line - if linecount == 0 and isinstance(line, unicode): - if line[0] == u'\ufeff': + if linecount == 0: + if line[0] == '\ufeff': line = line[1:] self._bom = True diff --git a/reconfigure/parsers/iniparse/utils.py b/reconfigure/parsers/iniparse/utils.py index 9cb7488..bfd4fd7 100644 --- a/reconfigure/parsers/iniparse/utils.py +++ b/reconfigure/parsers/iniparse/utils.py @@ -1,5 +1,5 @@ -import compat -from ini import LineContainer, EmptyLine +from reconfigure.parsers.iniparse import compat +from reconfigure.parsers.iniparse.ini import LineContainer, EmptyLine def tidy(cfg): """Clean up blank lines. diff --git a/reconfigure/parsers/jsonparser.py b/reconfigure/parsers/jsonparser.py index c1eaee6..1c55e97 100644 --- a/reconfigure/parsers/jsonparser.py +++ b/reconfigure/parsers/jsonparser.py @@ -14,7 +14,8 @@ class JsonParser (BaseParser): return node def load_node_rec(self, node, json): - for k, v in json.iteritems(): + for k in sorted(json.keys()): + v = json[k] if isinstance(v, dict): child = Node(k) node.children.append(child) diff --git a/reconfigure/parsers/nginx.py b/reconfigure/parsers/nginx.py index 661cfcd..f0fe202 100644 --- a/reconfigure/parsers/nginx.py +++ b/reconfigure/parsers/nginx.py @@ -9,11 +9,11 @@ class NginxParser (BaseParser): """ tokens = [ + (r"[\w_]+\s*?.*?{", lambda s, t: ('section_start', t)), (r"[\w_]+?.+?;", lambda s, t: ('option', t)), (r"\s", lambda s, t: 'whitespace'), (r"$^", lambda s, t: 'newline'), (r"\#.*?\n", lambda s, t: ('comment', t)), - (r"[\w_]+\s*?.*?{", lambda s, t: ('section_start', t)), (r"\}", lambda s, t: 'section_end'), ] token_comment = '#' @@ -44,7 +44,7 @@ class NginxParser (BaseParser): next_comment += '\n' next_comment += token[1].strip('#/*').strip() if token[0] == 'option': - if ' ' in token[1]: + if ' ' in token[1] and not token[1][0] in ['"', "'"]: k, v = token[1].split(None, 1) else: v = token[1] |