Commit aa1514b8 authored by Alexander Schrode's avatar Alexander Schrode Committed by oroulet

add strict_mode

In non strict_mode most errors are just logged an the import continues.
parent 0702ad2f
......@@ -639,11 +639,11 @@ class Client:
async def delete_nodes(self, nodes, recursive=False) -> Coroutine:
return await delete_nodes(self.uaclient, nodes, recursive)
async def import_xml(self, path=None, xmlstring=None) -> Coroutine:
async def import_xml(self, path=None, xmlstring=None, strict_mode=True) -> Coroutine:
"""
Import nodes defined in xml
"""
importer = XmlImporter(self)
importer = XmlImporter(self, strict_mode=strict_mode)
return await importer.import_xml(path, xmlstring)
async def export_xml(self, nodes, path, export_values: bool = False):
......
......@@ -18,13 +18,19 @@ def _parse_version(version_string: str) -> List[int]:
return [int(v) for v in version_string.split('.')]
class XmlImporter:
def __init__(self, server):
def __init__(self, server, strict_mode=True):
'''
strict_mode: stop on a error, if False only a error message is logged,
but the import continues
'''
self.parser = None
self.server = server
self.namespaces: Dict[int, int] = {} # Dict[IndexInXml, IndexInServer]
self.aliases: Dict[str, ua.NodeId] = {}
self._unmigrated_aliases: Dict[str, str] = {} # Dict[name, nodeId string]
self.refs = None
self.strict_mode = strict_mode
async def _map_namespaces(self):
"""
......@@ -110,8 +116,10 @@ class XmlImporter:
for nodedata in nodes_parsed: # self.parser:
try:
node = await self._add_node_data(nodedata, no_namespace_migration=True)
except Exception:
_logger.warning("failure adding node %s", nodedata)
raise Exception('test')
except Exception as e:
_logger.warning("failure adding node %s %s", nodedata, e)
if self.strict_mode:
raise
nodes.append(node)
self.refs, remaining_refs = [], self.refs
......
......@@ -582,11 +582,11 @@ class Server:
await custom_t.add_method(idx, method[0], method[1], method[2], method[3])
return custom_t
async def import_xml(self, path=None, xmlstring=None) -> Coroutine:
async def import_xml(self, path=None, xmlstring=None, strict_mode=True) -> Coroutine:
"""
Import nodes defined in xml
"""
importer = XmlImporter(self)
importer = XmlImporter(self, strict_mode)
return await importer.import_xml(path, xmlstring)
async def export_xml(self, nodes, path, export_values: bool = False):
......
......@@ -330,7 +330,7 @@ class Server:
return SyncNode(self.tloop, self.aio_obj.get_node(nodeid))
@syncmethod
def import_xml(self, path=None, xmlstring=None):
def import_xml(self, path=None, xmlstring=None, strict_mode=True):
pass
@syncmethod
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment