Source code for fluidsimfoam.params
"""Base class for the ``params`` object"""
import re
import fluiddyn.util.xmltotext
from fluidsim_core.params import Parameters as _Parameters
[docs]def get_indent_after_tag(text):
return " " * (len(re.match(r"\s*\S*", text).group()) + 1)
[docs]def get_position_first_letter(text):
return len(re.match(r"\s*", text).group())
pattern_entries = re.compile(r'''[\w]+="[^"]*"''')
fluiddyn.util.xmltotext.format_too_long_tagstart = format_too_long_tagstart
table = {
"(": "__opar__",
")": "__cpar__",
",": "__comma__",
"*": "__mul__",
".": "__dot__",
"|": "__bar__",
}
pattern_protect = re.compile(
"(" + "|".join(re.escape(c) for c in table.keys()) + ")"
)
pattern_unprotect = re.compile("(" + "|".join(table.values()) + ")")
table_inverse = {v: k for k, v in table.items()}
[docs]def protect_characters(name):
return pattern_protect.sub(lambda match: table[match.group()], name)
[docs]def unprotect_characters(name):
return pattern_unprotect.sub(lambda match: table_inverse[match.group()], name)
[docs]class Parameters(_Parameters):
def _make_element_xml(self, parentxml=None):
elemxml = super()._make_element_xml(parentxml)
elemxml.attrib = {
protect_characters(name): value
for name, value in elemxml.attrib.items()
}
return elemxml
def _load_from_elemxml(self, elemxml):
elemxml.attrib = {
unprotect_characters(name): value
for name, value in elemxml.attrib.items()
}
super()._load_from_elemxml(elemxml)
def __repr__(self):
return unprotect_characters(super().__repr__())
def _del_attrib(self, key):
del self.__dict__[key]
self._key_attribs.remove(key)
def __getitem__(self, key):
try:
return self.__getattribute__(key)
except AttributeError:
return super().__getitem__(key)
def _update_attribs(self, attribs):
for key, value in attribs.items():
try:
self[key] = value
except AttributeError:
self._set_attrib(key, value)