Commit 2434650e authored by Daniel's avatar Daniel Committed by oroulet

run crawling requests in parallel with asyncio gather

parent 72c36356
...@@ -9,6 +9,7 @@ import typing ...@@ -9,6 +9,7 @@ import typing
from typing import Union, List, TYPE_CHECKING, Tuple, Any, Dict, Set from typing import Union, List, TYPE_CHECKING, Tuple, Any, Dict, Set
from dataclasses import dataclass, field from dataclasses import dataclass, field
import asyncio
from asyncua import ua from asyncua import ua
from asyncua import Node from asyncua import Node
from asyncua.common.manage_nodes import create_encoding, create_data_type from asyncua.common.manage_nodes import create_encoding, create_data_type
...@@ -337,20 +338,28 @@ class DataTypeSorter: ...@@ -337,20 +338,28 @@ class DataTypeSorter:
def __str__(self): def __str__(self):
return f"<{self.__class__.__name__}: {self.name!r}>" return f"<{self.__class__.__name__}: {self.name!r}>"
async def _recursive_parse(server, base_node, dtypes, parent_sdef=None, add_existing=True):
async def _recursive_parse(server, base_node, dtypes, parent_sdef=None, add_existing=False):
ch = await base_node.get_children_descriptions(refs=ua.ObjectIds.HasSubtype) ch = await base_node.get_children_descriptions(refs=ua.ObjectIds.HasSubtype)
requests = []
for desc in ch: for desc in ch:
sdef = await _read_data_type_definition(server, desc, read_existing=add_existing)
if sdef:
name = clean_name(desc.BrowseName.Name) name = clean_name(desc.BrowseName.Name)
requests.append(_read_data_type_definition(server, desc, read_existing=add_existing))
results = await asyncio.gather(*requests)
requests = []
for sdef, desc in zip(results, ch):
name = clean_name(desc.BrowseName.Name)
if sdef:
if parent_sdef: if parent_sdef:
for sfield in reversed(parent_sdef.Fields): for sfield in reversed(parent_sdef.Fields):
sdef.Fields.insert(0, sfield) sdef.Fields.insert(0, sfield)
dtypes.append(DataTypeSorter(desc.NodeId, name, desc, sdef)) dtypes.append(DataTypeSorter(desc.NodeId, name, desc, sdef))
await _recursive_parse(server, server.get_node(desc.NodeId), dtypes, parent_sdef=sdef, add_existing=add_existing) requests.append(_recursive_parse(server, server.get_node(desc.NodeId), dtypes, parent_sdef=sdef, add_existing=add_existing,))
else: else:
await _recursive_parse(server, server.get_node(desc.NodeId), dtypes, parent_sdef, add_existing=add_existing) requests.append(_recursive_parse(server, server.get_node(desc.NodeId), dtypes, parent_sdef, add_existing=add_existing,))
await asyncio.gather(*requests)
async def _get_parent_types(node: Node): async def _get_parent_types(node: Node):
......
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