|
|
|
@ -2,7 +2,7 @@
|
|
|
|
|
#
|
|
|
|
|
from pyparsing import originalTextFor, Literal, Word, printables, OneOrMore,\
|
|
|
|
|
Optional
|
|
|
|
|
from .base_format import Format
|
|
|
|
|
from .base_format import Format, FormatError
|
|
|
|
|
from ..template_engine import ParametersContainer
|
|
|
|
|
from collections import OrderedDict
|
|
|
|
|
try:
|
|
|
|
@ -10,6 +10,7 @@ try:
|
|
|
|
|
except ImportError:
|
|
|
|
|
from xml.etree.ElementTree import Element, SubElement, ElementTree, \
|
|
|
|
|
tostring
|
|
|
|
|
from pprint import pprint
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class XMLGConfFormat(Format):
|
|
|
|
@ -80,7 +81,6 @@ class XMLGConfFormat(Format):
|
|
|
|
|
|
|
|
|
|
if 'value' in element_items:
|
|
|
|
|
entry_value = element_items.pop('value')
|
|
|
|
|
|
|
|
|
|
elif 'ltype' in element_items:
|
|
|
|
|
entry_value = []
|
|
|
|
|
for child in xml_element:
|
|
|
|
@ -100,9 +100,9 @@ class XMLGConfFormat(Format):
|
|
|
|
|
('name', parsing_result.name),
|
|
|
|
|
*element_items.items())
|
|
|
|
|
return OrderedDict({element_name: entry_value})
|
|
|
|
|
except Exception:
|
|
|
|
|
# Какая-то обработка ошибки.
|
|
|
|
|
return OrderedDict()
|
|
|
|
|
except Exception as error:
|
|
|
|
|
raise FormatError("Can not parse template tag 'entry':"
|
|
|
|
|
" {str(error)}.")
|
|
|
|
|
|
|
|
|
|
def _gconf(self, xml_element):
|
|
|
|
|
'''Метод для парсинга тега gconf.'''
|
|
|
|
@ -125,9 +125,9 @@ class XMLGConfFormat(Format):
|
|
|
|
|
element_name = (parsing_result.action,
|
|
|
|
|
xml_element.tag,
|
|
|
|
|
('name', parsing_result.name))
|
|
|
|
|
except Exception:
|
|
|
|
|
# Какая-то обработка ошибки.
|
|
|
|
|
return OrderedDict()
|
|
|
|
|
except Exception as error:
|
|
|
|
|
raise FormatError("Can not parse template tag 'dir':"
|
|
|
|
|
f" {str(error)}.")
|
|
|
|
|
|
|
|
|
|
for child in xml_element:
|
|
|
|
|
item_to_add = self._processing_methods.get(child.tag,
|
|
|
|
@ -155,21 +155,20 @@ class XMLGConfFormat(Format):
|
|
|
|
|
element_name = ('', xml_element.tag,
|
|
|
|
|
*xml_element.items())
|
|
|
|
|
|
|
|
|
|
except Exception:
|
|
|
|
|
# Какая-то обработка ошибки.
|
|
|
|
|
return OrderedDict()
|
|
|
|
|
except Exception as error:
|
|
|
|
|
raise FormatError("Can not parse template tag 'local_schema':"
|
|
|
|
|
" {str(error)}.")
|
|
|
|
|
|
|
|
|
|
for child in xml_element:
|
|
|
|
|
item_to_add = self._processing_methods.get(child.tag,
|
|
|
|
|
self._unknown)(child)
|
|
|
|
|
output_dictionary.update(item_to_add)
|
|
|
|
|
|
|
|
|
|
return OrderedDict({element_name: output_dictionary})
|
|
|
|
|
|
|
|
|
|
def _stringvalue(self, xml_element):
|
|
|
|
|
'''Метод для парсинга тега stringvalue.'''
|
|
|
|
|
element_name = ('', 'stringvalue')
|
|
|
|
|
value = xml_element.text
|
|
|
|
|
element_name = ('', xml_element.tag)
|
|
|
|
|
|
|
|
|
|
if value is not None:
|
|
|
|
|
return OrderedDict({element_name: value})
|
|
|
|
@ -179,16 +178,24 @@ class XMLGConfFormat(Format):
|
|
|
|
|
return OrderedDict({element_name: ''})
|
|
|
|
|
|
|
|
|
|
def _default(self, xml_element):
|
|
|
|
|
'''Уже не акутальный метод, вместо него теперь _unknown'''
|
|
|
|
|
output_dictionary = OrderedDict()
|
|
|
|
|
element_name = ('', xml_element.tag, *xml_element.items())
|
|
|
|
|
|
|
|
|
|
for child in xml_element:
|
|
|
|
|
item_to_add = self._processing_methods.get(child.tag,
|
|
|
|
|
self._unknown)(child)
|
|
|
|
|
output_dictionary.update(item_to_add)
|
|
|
|
|
|
|
|
|
|
return OrderedDict({element_name: output_dictionary})
|
|
|
|
|
element_items = {name: value for name, value in xml_element.items()}
|
|
|
|
|
|
|
|
|
|
if element_items['type'] == 'list':
|
|
|
|
|
default_value = []
|
|
|
|
|
for child in xml_element:
|
|
|
|
|
item_to_add = self._processing_methods.get(child.tag,
|
|
|
|
|
self._unknown
|
|
|
|
|
)(child)
|
|
|
|
|
default_value.append(item_to_add)
|
|
|
|
|
else:
|
|
|
|
|
default_value = OrderedDict()
|
|
|
|
|
for child in xml_element:
|
|
|
|
|
item_to_add = self._processing_methods.get(
|
|
|
|
|
child.tag,
|
|
|
|
|
self._unknown)(child)
|
|
|
|
|
default_value.update(item_to_add)
|
|
|
|
|
return OrderedDict({element_name: default_value})
|
|
|
|
|
|
|
|
|
|
def _li(self, xml_element):
|
|
|
|
|
'''Метод для разбора элементов с тегом li.'''
|
|
|
|
@ -230,15 +237,14 @@ class XMLGConfFormat(Format):
|
|
|
|
|
element_attributes = OrderedDict({key: value for key, value in
|
|
|
|
|
dict_element[2:]})
|
|
|
|
|
|
|
|
|
|
if element_tag == 'dir' or element_tag == 'local_schema'\
|
|
|
|
|
or element_tag == 'default':
|
|
|
|
|
if element_tag == 'dir' or element_tag == 'local_schema':
|
|
|
|
|
include_element = SubElement(current_element,
|
|
|
|
|
element_tag,
|
|
|
|
|
**element_attributes)
|
|
|
|
|
self._build_section(include_element,
|
|
|
|
|
dictionary[dict_element])
|
|
|
|
|
|
|
|
|
|
elif element_tag == 'entry':
|
|
|
|
|
elif element_tag == 'entry' or element_tag == 'default':
|
|
|
|
|
if isinstance(dictionary[dict_element], OrderedDict):
|
|
|
|
|
include_element = SubElement(current_element,
|
|
|
|
|
element_tag,
|
|
|
|
|