Passed
Pull Request — master (#144)
by
unknown
03:01
created

asyncua.server.standard_address_space.standard_address_space   A

Complexity

Total Complexity 15

Size/Duplication

Total Lines 64
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 48
dl 0
loc 64
rs 10
c 0
b 0
f 0
wmc 15

1 Function

Rating   Name   Duplication   Size   Complexity  
A fill_address_space() 0 10 2

5 Methods

Rating   Name   Duplication   Size   Complexity  
A PostponeReferences.add_nodes() 0 3 2
B PostponeReferences.__aexit__() 0 14 7
A PostponeReferences.__init__() 0 4 1
A PostponeReferences.add_references() 0 4 2
A PostponeReferences.__aenter__() 0 5 1
1
import asyncio
2
from .standard_address_space_part3 import create_standard_address_space_Part3
3
from .standard_address_space_part4 import create_standard_address_space_Part4
4
from .standard_address_space_part5 import create_standard_address_space_Part5
5
from .standard_address_space_part8 import create_standard_address_space_Part8
6
from .standard_address_space_part9 import create_standard_address_space_Part9
7
from .standard_address_space_part10 import create_standard_address_space_Part10
8
from .standard_address_space_part11 import create_standard_address_space_Part11
9
from .standard_address_space_part13 import create_standard_address_space_Part13
10
11
12
13
14
15
class PostponeReferences:
16
    def __init__(self, server):
17
        self.server = server
18
        self.postponed_refs = None
19
        self.postponed_nodes = None
20
        #self.add_nodes = self.server.add_nodes
21
22
    async def add_nodes(self, nodes):
23
        async for node in self.server.try_add_nodes(nodes, check=False):
24
            self.postponed_nodes.append(node)
25
26
    async def add_references(self, refs):
27
        async for ref in self.server.try_add_references(refs):
28
        #g = self.server.try_add_references(refs)
29
            self.postponed_refs.append(ref)
30
            # no return
31
32
    async def __aenter__(self):
33
        self.postponed_refs = []
34
        self.postponed_nodes = []
35
        await asyncio.sleep(0)
36
        return self
37
38
    async def __aexit__(self, exc_type, exc_val, exc_tb):
39
        if exc_type is None and exc_val is None:
40
            remaining_nodes = []
41
            remaining_refs = []
42
            async for remaining_node in self.server.try_add_nodes(self.postponed_nodes, check=False):
43
                remaining_nodes.append(remaining_node)
44
            #remaining_nodes = self.server.try_add_nodes(self.postponed_nodes, check=False)
45
            if len(remaining_nodes):
46
                raise RuntimeError(f"There are remaining nodes: {remaining_nodes!r}")
47
            async for remaining_reference in self.server.try_add_references(self.postponed_refs):
48
                remaining_refs.append(remaining_reference)
49
            #remaining_refs = list(await self.server.try_add_references(self.postponed_refs))
50
            if len(remaining_refs):
51
                raise RuntimeError(f"There are remaining refs: {remaining_refs!r}")
52
53
54
async def fill_address_space(nodeservice):
55
    async with PostponeReferences(nodeservice) as server:
56
        await create_standard_address_space_Part3(server)
57
        await create_standard_address_space_Part4(server)
58
        await create_standard_address_space_Part5(server)
59
        await create_standard_address_space_Part8(server)
60
        await create_standard_address_space_Part9(server)
61
        await create_standard_address_space_Part10(server)
62
        await create_standard_address_space_Part11(server)
63
        await create_standard_address_space_Part13(server)
64