koi-net 1.1.0b2__tar.gz → 1.1.0b3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of koi-net might be problematic. Click here for more details.
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/PKG-INFO +1 -1
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/examples/partial.py +2 -2
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/pyproject.toml +1 -1
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/core.py +53 -35
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/network/response_handler.py +4 -3
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/poller.py +8 -6
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/server.py +4 -4
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/.github/workflows/publish-to-pypi.yml +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/.gitignore +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/LICENSE +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/README.md +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/examples/coordinator.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/requirements.txt +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/__init__.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/config.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/context.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/default_actions.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/effector.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/identity.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/lifecycle.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/network/__init__.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/network/behavior.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/network/error_handler.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/network/event_queue.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/network/graph.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/network/request_handler.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/network/resolver.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/processor/__init__.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/processor/default_handlers.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/processor/handler.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/processor/interface.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/processor/knowledge_object.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/processor/knowledge_pipeline.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/protocol/__init__.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/protocol/api_models.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/protocol/consts.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/protocol/edge.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/protocol/envelope.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/protocol/errors.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/protocol/event.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/protocol/node.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/protocol/secure.py +0 -0
- {koi_net-1.1.0b2 → koi_net-1.1.0b3}/src/koi_net/secure.py +0 -0
|
@@ -17,7 +17,7 @@ logger = logging.getLogger(__name__)
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
class PartialNodeConfig(NodeConfig):
|
|
20
|
-
koi_net: KoiNetConfig
|
|
20
|
+
koi_net: KoiNetConfig = Field(default_factory = lambda:
|
|
21
21
|
KoiNetConfig(
|
|
22
22
|
node_name="partial",
|
|
23
23
|
node_profile=NodeProfile(
|
|
@@ -34,4 +34,4 @@ node = NodeInterface(
|
|
|
34
34
|
)
|
|
35
35
|
|
|
36
36
|
if __name__ == "__main__":
|
|
37
|
-
node.
|
|
37
|
+
node.lifecycle.start()
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from
|
|
2
|
+
from typing import Generic, TypeVar
|
|
3
3
|
from rid_lib.ext import Cache
|
|
4
4
|
from .network.resolver import NetworkResolver
|
|
5
5
|
from .network.event_queue import NetworkEventQueue
|
|
@@ -25,9 +25,10 @@ from . import default_actions
|
|
|
25
25
|
logger = logging.getLogger(__name__)
|
|
26
26
|
|
|
27
27
|
|
|
28
|
+
T = TypeVar("T", bound=NodeConfig)
|
|
28
29
|
|
|
29
|
-
class NodeInterface:
|
|
30
|
-
config:
|
|
30
|
+
class NodeInterface(Generic[T]):
|
|
31
|
+
config: T
|
|
31
32
|
cache: Cache
|
|
32
33
|
identity: NodeIdentity
|
|
33
34
|
resolver: NetworkResolver
|
|
@@ -41,58 +42,75 @@ class NodeInterface:
|
|
|
41
42
|
|
|
42
43
|
def __init__(
|
|
43
44
|
self,
|
|
44
|
-
config:
|
|
45
|
+
config: T,
|
|
45
46
|
use_kobj_processor_thread: bool = False,
|
|
46
47
|
handlers: list[KnowledgeHandler] | None = None,
|
|
47
|
-
|
|
48
|
-
|
|
48
|
+
|
|
49
|
+
CacheOverride: type[Cache] | None = None,
|
|
50
|
+
NodeIdentityOverride: type[NodeIdentity] | None = None,
|
|
51
|
+
EffectorOverride: type[Effector] | None = None,
|
|
52
|
+
NetworkGraphOverride: type[NetworkGraph] | None = None,
|
|
53
|
+
SecureOverride: type[Secure] | None = None,
|
|
54
|
+
RequestHandlerOverride: type[RequestHandler] | None = None,
|
|
55
|
+
ResponseHandlerOverride: type[ResponseHandler] | None = None,
|
|
56
|
+
NetworkResolverOverride: type[NetworkResolver] | None = None,
|
|
57
|
+
NetworkEventQueueOverride: type[NetworkEventQueue] | None = None,
|
|
58
|
+
ActorOverride: type[Actor] | None = None,
|
|
59
|
+
ActionContextOverride: type[ActionContext] | None = None,
|
|
60
|
+
HandlerContextOverride: type[HandlerContext] | None = None,
|
|
61
|
+
KnowledgePipelineOverride: type[KnowledgePipeline] | None = None,
|
|
62
|
+
ProcessorInterfaceOverride: type[ProcessorInterface] | None = None,
|
|
63
|
+
ErrorHandlerOverride: type[ErrorHandler] | None = None,
|
|
64
|
+
NodeLifecycleOverride: type[NodeLifecycle] | None = None,
|
|
65
|
+
NodeServerOverride: type[NodeServer] | None = None,
|
|
66
|
+
NodePollerOverride: type[NodePoller] | None = None,
|
|
49
67
|
):
|
|
50
68
|
self.config = config
|
|
51
|
-
self.cache =
|
|
69
|
+
self.cache = (CacheOverride or Cache)(
|
|
52
70
|
directory_path=self.config.koi_net.cache_directory_path
|
|
53
71
|
)
|
|
54
72
|
|
|
55
|
-
self.identity = NodeIdentity(config=self.config)
|
|
56
|
-
self.effector = Effector(cache=self.cache)
|
|
73
|
+
self.identity = (NodeIdentityOverride or NodeIdentity)(config=self.config)
|
|
74
|
+
self.effector = (EffectorOverride or Effector)(cache=self.cache)
|
|
57
75
|
|
|
58
|
-
self.graph = NetworkGraph(
|
|
59
|
-
cache=self.cache,
|
|
76
|
+
self.graph = (NetworkGraphOverride or NetworkGraph)(
|
|
77
|
+
cache=self.cache,
|
|
60
78
|
identity=self.identity
|
|
61
79
|
)
|
|
62
|
-
|
|
63
|
-
self.secure = Secure(
|
|
64
|
-
identity=self.identity,
|
|
65
|
-
effector=self.effector,
|
|
80
|
+
|
|
81
|
+
self.secure = (SecureOverride or Secure)(
|
|
82
|
+
identity=self.identity,
|
|
83
|
+
effector=self.effector,
|
|
66
84
|
config=self.config
|
|
67
85
|
)
|
|
68
|
-
|
|
69
|
-
self.request_handler = RequestHandler(
|
|
70
|
-
effector=self.effector,
|
|
86
|
+
|
|
87
|
+
self.request_handler = (RequestHandlerOverride or RequestHandler)(
|
|
88
|
+
effector=self.effector,
|
|
71
89
|
identity=self.identity,
|
|
72
90
|
secure=self.secure
|
|
73
91
|
)
|
|
74
|
-
|
|
75
|
-
self.response_handler = ResponseHandler(self.cache, self.effector)
|
|
76
|
-
|
|
77
|
-
self.resolver = NetworkResolver(
|
|
92
|
+
|
|
93
|
+
self.response_handler = (ResponseHandlerOverride or ResponseHandler)(self.cache, self.effector)
|
|
94
|
+
|
|
95
|
+
self.resolver = (NetworkResolverOverride or NetworkResolver)(
|
|
78
96
|
config=self.config,
|
|
79
|
-
cache=self.cache,
|
|
97
|
+
cache=self.cache,
|
|
80
98
|
identity=self.identity,
|
|
81
99
|
graph=self.graph,
|
|
82
100
|
request_handler=self.request_handler,
|
|
83
101
|
effector=self.effector
|
|
84
102
|
)
|
|
85
|
-
|
|
86
|
-
self.event_queue = NetworkEventQueue(
|
|
103
|
+
|
|
104
|
+
self.event_queue = (NetworkEventQueueOverride or NetworkEventQueue)(
|
|
87
105
|
config=self.config,
|
|
88
|
-
cache=self.cache,
|
|
106
|
+
cache=self.cache,
|
|
89
107
|
identity=self.identity,
|
|
90
108
|
graph=self.graph,
|
|
91
109
|
request_handler=self.request_handler,
|
|
92
110
|
effector=self.effector
|
|
93
111
|
)
|
|
94
112
|
|
|
95
|
-
self.actor = Actor(
|
|
113
|
+
self.actor = (ActorOverride or Actor)(
|
|
96
114
|
identity=self.identity,
|
|
97
115
|
effector=self.effector,
|
|
98
116
|
event_queue=self.event_queue
|
|
@@ -107,12 +125,12 @@ class NodeInterface:
|
|
|
107
125
|
|
|
108
126
|
self.use_kobj_processor_thread = use_kobj_processor_thread
|
|
109
127
|
|
|
110
|
-
self.action_context = ActionContext(
|
|
128
|
+
self.action_context = (ActionContextOverride or ActionContext)(
|
|
111
129
|
identity=self.identity,
|
|
112
130
|
effector=self.effector
|
|
113
131
|
)
|
|
114
132
|
|
|
115
|
-
self.handler_context = HandlerContext(
|
|
133
|
+
self.handler_context = (HandlerContextOverride or HandlerContext)(
|
|
116
134
|
identity=self.identity,
|
|
117
135
|
cache=self.cache,
|
|
118
136
|
event_queue=self.event_queue,
|
|
@@ -121,7 +139,7 @@ class NodeInterface:
|
|
|
121
139
|
effector=self.effector
|
|
122
140
|
)
|
|
123
141
|
|
|
124
|
-
self.pipeline = KnowledgePipeline(
|
|
142
|
+
self.pipeline = (KnowledgePipelineOverride or KnowledgePipeline)(
|
|
125
143
|
handler_context=self.handler_context,
|
|
126
144
|
cache=self.cache,
|
|
127
145
|
request_handler=self.request_handler,
|
|
@@ -130,12 +148,12 @@ class NodeInterface:
|
|
|
130
148
|
default_handlers=handlers
|
|
131
149
|
)
|
|
132
150
|
|
|
133
|
-
self.processor =
|
|
151
|
+
self.processor = (ProcessorInterfaceOverride or ProcessorInterface)(
|
|
134
152
|
pipeline=self.pipeline,
|
|
135
153
|
use_kobj_processor_thread=self.use_kobj_processor_thread
|
|
136
154
|
)
|
|
137
155
|
|
|
138
|
-
self.error_handler = ErrorHandler(
|
|
156
|
+
self.error_handler = (ErrorHandlerOverride or ErrorHandler)(
|
|
139
157
|
processor=self.processor,
|
|
140
158
|
actor=self.actor
|
|
141
159
|
)
|
|
@@ -148,7 +166,7 @@ class NodeInterface:
|
|
|
148
166
|
self.effector.set_resolver(self.resolver)
|
|
149
167
|
self.effector.set_action_context(self.action_context)
|
|
150
168
|
|
|
151
|
-
self.lifecycle = NodeLifecycle(
|
|
169
|
+
self.lifecycle = (NodeLifecycleOverride or NodeLifecycle)(
|
|
152
170
|
config=self.config,
|
|
153
171
|
identity=self.identity,
|
|
154
172
|
graph=self.graph,
|
|
@@ -159,7 +177,7 @@ class NodeInterface:
|
|
|
159
177
|
)
|
|
160
178
|
|
|
161
179
|
# if self.config.koi_net.node_profile.node_type == NodeType.FULL:
|
|
162
|
-
self.server = NodeServer(
|
|
180
|
+
self.server = (NodeServerOverride or NodeServer)(
|
|
163
181
|
config=self.config,
|
|
164
182
|
lifecycle=self.lifecycle,
|
|
165
183
|
secure=self.secure,
|
|
@@ -168,7 +186,7 @@ class NodeInterface:
|
|
|
168
186
|
response_handler=self.response_handler
|
|
169
187
|
)
|
|
170
188
|
|
|
171
|
-
self.poller = NodePoller(
|
|
189
|
+
self.poller = (NodePollerOverride or NodePoller)(
|
|
172
190
|
processor=self.processor,
|
|
173
191
|
lifecycle=self.lifecycle,
|
|
174
192
|
resolver=self.resolver,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
from rid_lib import RID
|
|
3
|
+
from rid_lib.types import KoiNetNode
|
|
3
4
|
from rid_lib.ext import Manifest, Cache
|
|
4
5
|
from rid_lib.ext.bundle import Bundle
|
|
5
6
|
|
|
@@ -30,13 +31,13 @@ class ResponseHandler:
|
|
|
30
31
|
self.cache = cache
|
|
31
32
|
self.effector = effector
|
|
32
33
|
|
|
33
|
-
def fetch_rids(self, req: FetchRids) -> RidsPayload:
|
|
34
|
+
def fetch_rids(self, req: FetchRids, source: KoiNetNode) -> RidsPayload:
|
|
34
35
|
logger.info(f"Request to fetch rids, allowed types {req.rid_types}")
|
|
35
36
|
rids = self.cache.list_rids(req.rid_types)
|
|
36
37
|
|
|
37
38
|
return RidsPayload(rids=rids)
|
|
38
39
|
|
|
39
|
-
def fetch_manifests(self, req: FetchManifests) -> ManifestsPayload:
|
|
40
|
+
def fetch_manifests(self, req: FetchManifests, source: KoiNetNode) -> ManifestsPayload:
|
|
40
41
|
logger.info(f"Request to fetch manifests, allowed types {req.rid_types}, rids {req.rids}")
|
|
41
42
|
|
|
42
43
|
manifests: list[Manifest] = []
|
|
@@ -51,7 +52,7 @@ class ResponseHandler:
|
|
|
51
52
|
|
|
52
53
|
return ManifestsPayload(manifests=manifests, not_found=not_found)
|
|
53
54
|
|
|
54
|
-
def fetch_bundles(self, req: FetchBundles) -> BundlesPayload:
|
|
55
|
+
def fetch_bundles(self, req: FetchBundles, source: KoiNetNode) -> BundlesPayload:
|
|
55
56
|
logger.info(f"Request to fetch bundles, requested rids {req.rids}")
|
|
56
57
|
|
|
57
58
|
bundles: list[Bundle] = []
|
|
@@ -22,17 +22,19 @@ class NodePoller:
|
|
|
22
22
|
self.resolver = resolver
|
|
23
23
|
self.config = config
|
|
24
24
|
|
|
25
|
+
def poll(self):
|
|
26
|
+
neighbors = self.resolver.poll_neighbors()
|
|
27
|
+
for node_rid in neighbors:
|
|
28
|
+
for event in neighbors[node_rid]:
|
|
29
|
+
self.processor.handle(event=event, source=node_rid)
|
|
30
|
+
self.processor.flush_kobj_queue()
|
|
31
|
+
|
|
25
32
|
def run(self):
|
|
26
33
|
try:
|
|
27
34
|
self.lifecycle.start()
|
|
28
35
|
while True:
|
|
29
36
|
start_time = time.time()
|
|
30
|
-
|
|
31
|
-
for node_rid in neighbors:
|
|
32
|
-
for event in neighbors[node_rid]:
|
|
33
|
-
self.processor.handle(event=event, source=node_rid)
|
|
34
|
-
self.processor.flush_kobj_queue()
|
|
35
|
-
|
|
37
|
+
self.poll()
|
|
36
38
|
elapsed = time.time() - start_time
|
|
37
39
|
sleep_time = self.config.koi_net.polling_interval - elapsed
|
|
38
40
|
if sleep_time > 0:
|
|
@@ -109,20 +109,20 @@ class NodeServer:
|
|
|
109
109
|
self, req: SignedEnvelope[PollEvents]
|
|
110
110
|
) -> SignedEnvelope[EventsPayload] | ErrorResponse:
|
|
111
111
|
logger.info(f"Request to {POLL_EVENTS_PATH}")
|
|
112
|
-
events = self.event_queue.flush_poll_queue(req.
|
|
112
|
+
events = self.event_queue.flush_poll_queue(req.source_node)
|
|
113
113
|
return EventsPayload(events=events)
|
|
114
114
|
|
|
115
115
|
async def fetch_rids(
|
|
116
116
|
self, req: SignedEnvelope[FetchRids]
|
|
117
117
|
) -> SignedEnvelope[RidsPayload] | ErrorResponse:
|
|
118
|
-
return self.response_handler.fetch_rids(req.payload)
|
|
118
|
+
return self.response_handler.fetch_rids(req.payload, req.source_node)
|
|
119
119
|
|
|
120
120
|
async def fetch_manifests(
|
|
121
121
|
self, req: SignedEnvelope[FetchManifests]
|
|
122
122
|
) -> SignedEnvelope[ManifestsPayload] | ErrorResponse:
|
|
123
|
-
return self.response_handler.fetch_manifests(req.payload)
|
|
123
|
+
return self.response_handler.fetch_manifests(req.payload, req.source_node)
|
|
124
124
|
|
|
125
125
|
async def fetch_bundles(
|
|
126
126
|
self, req: SignedEnvelope[FetchBundles]
|
|
127
127
|
) -> SignedEnvelope[BundlesPayload] | ErrorResponse:
|
|
128
|
-
return self.response_handler.fetch_bundles(req.payload)
|
|
128
|
+
return self.response_handler.fetch_bundles(req.payload, req.source_node)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|