| 22 | |
| 23 | |
| 24 | class ApacheConfigLoader(object): |
| 25 | |
| 26 | def __init__(self, parser, debug=False, **options): |
| 27 | self._parser = parser |
| 28 | self._debug = debug |
| 29 | self._options = dict(options) |
| 30 | if 'reader' in self._options: |
| 31 | self._reader = self._options['reader'] |
| 32 | else: |
| 33 | self._reader = LocalHostReader() |
| 34 | self._stack = [] |
| 35 | self._includes = set() |
| 36 | self._ast_cache = {} |
| 37 | |
| 38 | # Code generation rules |
| 39 | |
| 40 | def g_config(self, ast): |
| 41 | config = {} |
| 42 | |
| 43 | for subtree in ast: |
| 44 | items = self._walkast(subtree) |
| 45 | if items: |
| 46 | config.update(items) |
| 47 | |
| 48 | return config |
| 49 | |
| 50 | @staticmethod |
| 51 | def _unquote_tag(tag): |
| 52 | if tag[0] == '"' and tag[-1] == '"': |
| 53 | tag = tag[1:-1] |
| 54 | if tag[0] == "'" and tag[-1] == "'": |
| 55 | tag = tag[1:-1] |
| 56 | |
| 57 | if not tag: |
| 58 | raise error.ApacheConfigError('Empty block tag not allowed') |
| 59 | |
| 60 | return tag |
| 61 | |
| 62 | def g_block(self, ast): |
| 63 | tag = ast[0] |
| 64 | values = {} |
| 65 | |
| 66 | if not self._options.get('namedblocks', True): |
| 67 | tag = ("".join(tag),) |
| 68 | if len(tag) > 1: |
| 69 | name, _, value = tag |
| 70 | block = { |
| 71 | name: { |
| 72 | value: values |
| 73 | } |
| 74 | } |
| 75 | else: |
| 76 | tag = self._unquote_tag(tag[0]) |
| 77 | |
| 78 | block = { |
| 79 | tag: values |
| 80 | } |
| 81 |
no outgoing calls
searching dependent graphs…