2
2
from olink .core .types import Base , LogLevel , Name
3
3
from olink .core .node import BaseNode
4
4
5
- from typing import Any , Callable , Optional , Protocol as ProtocolType
5
+ from typing import Any , Protocol as ProtocolType
6
6
7
7
class IObjectSource (ProtocolType ):
8
8
def olink_object_name () -> str :
@@ -25,80 +25,79 @@ class SourceToNodeEntry:
25
25
source : IObjectSource = None
26
26
nodes : set ["RemoteNode" ] = set ()
27
27
28
- def __init__ (self , source ):
28
+ def __init__ (self , source = None ):
29
29
self .source = source
30
+ self .nodes = set ()
30
31
31
32
32
33
33
34
class RemoteRegistry (Base ):
34
35
entries : dict [str , SourceToNodeEntry ] = {}
35
36
36
37
def add_object_source (self , source : IObjectSource ):
37
- resource = Name .resourceFromName (source .olink_object_name ())
38
- self .emit_log (LogLevel .DEBUG , f"RemoteRegistry.add_object_source: { resource } " )
39
- if not resource in self .entries :
40
- self .entries [resource ] = SourceToNodeEntry (source )
41
- else :
42
- self .emit_log (LogLevel .DEBUG , f"source already added: { resource } " )
43
-
38
+ name = source .olink_object_name ()
39
+ self .emit_log (LogLevel .DEBUG , f"RemoteRegistry.add_object_source: { name } " )
40
+ self .entry (name ).source = source
41
+
44
42
def remove_object_source (self , source : IObjectSource ):
45
- resource = Name .resourceFromName (source .olink_object_name ())
46
- self .emit_log (LogLevel .DEBUG , f"RemoteRegistry.remove_object_source: { resource } " )
47
- if resource in self .entries :
48
- del self .entries [resource ]
49
- else :
50
- self .emit_log (LogLevel .DEBUG , f'remove object source failed, no source exists: { resource } ' )
43
+ name = source .olink_object_name ()
44
+ self .remove_entry (name )
51
45
52
46
def get_object_source (self , name : str ):
53
- resource = Name .resourceFromName (name )
54
- if resource in self .entries :
55
- source = self .entries [resource ].source
56
- if not source :
57
- self .emit_log (LogLevel .DEBUG , f"no source at: { resource } " )
58
- return source
59
- else :
60
- self .emit_log (LogLevel .DEBUG , f"no source registered at: { name } " )
47
+ return self .entry (name ).source
61
48
62
49
def get_remote_nodes (self , name : str ):
63
- resource = Name .resourceFromName (name )
64
- if resource in self .entries :
65
- nodes = self .entries [resource ].nodes
66
- if not nodes :
67
- self .emit_log (LogLevel .DEBUG , f"no nodes at: { resource } " )
68
- return nodes
69
- else :
70
- self .emit_log (LogLevel .DEBUG , f"no source registered at: { name } " )
50
+ return self .entry (name ).nodes
71
51
72
52
def attach_remote_node (self , node : "RemoteNode" ):
73
53
self .emit_log (LogLevel .DEBUG , "RemoteRegistry.attach_remote_node" )
74
54
75
55
def detach_remote_node (self , node : "RemoteNode" ):
76
56
self .emit_log (LogLevel .DEBUG , "RemoteRegistry.detach_remote_node" )
77
- for entry in self .entries .items ():
57
+ for entry in self .entries .values ():
78
58
if node in entry .nodes :
79
59
entry .nodes .remove (node )
80
60
81
61
def link_remote_node (self , name : str , node : "RemoteNode" ):
82
- resource = Name .resourceFromName (name )
83
- self .emit_log (LogLevel .DEBUG , f'RemoteRegistry.link_remote_node: { resource } ' )
84
- if resource in self .entries :
85
- self .entries [resource ].nodes .add (node )
86
- else :
87
- self .emit_log (LogLevel .DEBUG , f"no source registered at: { name } " )
62
+ self .entry (name ).nodes .add (node )
88
63
89
64
def unlink_remote_node (self , name : str , node : "RemoteNode" ):
90
- resource = Name .resourceFromName (name )
91
- self .emit_log (LogLevel .DEBUG , f'RemoteRegistry.unlink_remote_node: { resource } ' )
65
+ self .entry (name ).nodes .remove (node )
66
+
67
+ def entry (self , name : str ) -> SourceToNodeEntry :
68
+ resource = Name .resource_from_name (name )
69
+ if not resource in self .entries :
70
+ self .emit_log (LogLevel .DEBUG , f"add new resource: { resource } " )
71
+ self .entries [resource ] = SourceToNodeEntry ()
72
+ return self .entries [resource ]
73
+
74
+ def remove_entry (self , name : str ) -> None :
75
+ resource = Name .resource_from_name (name )
92
76
if resource in self .entries :
93
- self .entries [resource ]. nodes . remove ( node )
77
+ del self .entries [resource ]
94
78
else :
95
- self .emit_log (LogLevel .DEBUG , f"no source registered at: { name } " )
79
+ self .emit_log (LogLevel .DEBUG , f'remove resource failed, resource not exists: { resource } ' )
80
+
81
+
82
+ def has_entry (self , name : str ) -> SourceToNodeEntry :
83
+ resource = Name .resource_from_name (name )
84
+ return resource in self .entries
85
+
86
+ def init_entry (self , name : str ):
87
+ resource = Name .resource_from_name (name )
88
+ if resource in self .entries :
89
+ self .entries [resource ] = SourceToNodeEntry ()
90
+
91
+
92
+
93
+ def clear (self ):
94
+ self .entries = {}
96
95
97
96
_registry = RemoteRegistry ()
98
97
99
98
class RemoteNode (BaseNode ):
100
99
def __init__ (self ):
101
- super ().__init__ (self )
100
+ super ().__init__ ()
102
101
_registry .attach_remote_node (self )
103
102
104
103
def detach (self ):
@@ -131,7 +130,7 @@ def handle_unlink(self, name: str):
131
130
if source :
132
131
self .registry ().unlink_remote_node (name , self )
133
132
134
- def handle_set_properties (self , name : str , value : Any ):
133
+ def handle_set_property (self , name : str , value : Any ):
135
134
source = self .get_object_source (name )
136
135
if source :
137
136
source .olink_set_property (name , value )
0 commit comments