Skip to content

Commit 56fe7e3

Browse files
committed
removed unused default effector actions, renamed secure to secure manager, restructured sync manager and catch up call in lifecycle, added more docstrings
1 parent ac4fb83 commit 56fe7e3

File tree

12 files changed

+48
-105
lines changed

12 files changed

+48
-105
lines changed

src/koi_net/assembler.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
from enum import StrEnum
21
import inspect
2+
from enum import StrEnum
33
from typing import Any, Protocol
44
from dataclasses import make_dataclass
55

6-
from pydantic import BaseModel
76
import structlog
7+
from pydantic import BaseModel
88

99
from .entrypoints.base import EntryPoint
1010

@@ -38,6 +38,7 @@ def __new__(cls, name: str, bases: tuple, dct: dict[str]):
3838
return cls
3939

4040
class NodeContainer(Protocol):
41+
"""Dummy 'shape' for node containers built by assembler."""
4142
entrypoint = EntryPoint
4243

4344
class NodeAssembler(metaclass=BuildOrderer):
@@ -79,8 +80,6 @@ def _build_deps(
7980

8081
dep_graph[comp_name] = (comp_type, dep_names)
8182

82-
# print(f"{comp_name} ({comp_type}) -> {dep_names}")
83-
8483
return dep_graph
8584

8685
@classmethod

src/koi_net/core.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from .network.event_buffer import EventBuffer
2121
from .processor.pipeline import KnowledgePipeline
2222
from .processor.kobj_queue import KobjQueue
23-
from .secure import Secure
23+
from .secure_manager import SecureManager
2424
from .entrypoints import NodeServer, NodePoller
2525
from .processor.knowledge_handlers import (
2626
basic_manifest_handler,
@@ -54,7 +54,7 @@ class BaseNode(NodeAssembler):
5454
directory_path=config.koi_net.cache_directory_path)
5555
identity = NodeIdentity
5656
graph = NetworkGraph
57-
secure = Secure
57+
secure_manager = SecureManager
5858
handshaker = Handshaker
5959
error_handler = ErrorHandler
6060
request_handler = RequestHandler

src/koi_net/default_actions.py

Lines changed: 0 additions & 23 deletions
This file was deleted.

src/koi_net/effector.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ class Effector:
3232

3333
cache: Cache
3434
resolver: NetworkResolver
35-
kobj_queue: KobjQueue | None
36-
action_context: ActionContext | None
35+
kobj_queue: KobjQueue
36+
action_context: ActionContext
3737
_action_table: dict[
3838
type[RID],
3939
Callable[

src/koi_net/handshaker.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010

1111
class Handshaker:
12+
"""Handles handshaking with other nodes."""
1213
def __init__(
1314
self,
1415
cache: Cache,
@@ -21,9 +22,11 @@ def __init__(
2122

2223
def handshake_with(self, target: KoiNetNode):
2324
"""Initiates a handshake with target node.
25+
2426
Pushes successive `FORGET` and `NEW` events to target node to
2527
reset the target's cache in case it already knew this node.
2628
"""
29+
2730
log.debug(f"Initiating handshake with {target}")
2831
self.event_queue.push(
2932
Event.from_rid(

src/koi_net/identity.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
class NodeIdentity:
1010
"""Represents a node's identity (RID, profile)."""
1111

12-
config: NodeConfig
12+
config: NodeConfig
1313

1414
def __init__(self, config: NodeConfig):
1515
self.config = config
@@ -20,4 +20,4 @@ def rid(self) -> KoiNetNode:
2020

2121
@property
2222
def profile(self) -> NodeProfile:
23-
return self.config.koi_net.node_profile
23+
return self.config.koi_net.node_profile

src/koi_net/lifecycle.py

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from contextlib import contextmanager, asynccontextmanager
33

44
from rid_lib.ext import Bundle
5+
from rid_lib.types import KoiNetNode
56

67
from .sync_manager import SyncManager
78
from .handshaker import Handshaker
@@ -90,31 +91,29 @@ def start(self):
9091
self.event_worker.thread.start()
9192
self.graph.generate()
9293

93-
# refresh to reflect changes (if any) in config.yaml
94-
94+
# refresh to reflect changes (if any) in config.yaml node profile
9595
self.kobj_queue.push(bundle=Bundle.generate(
9696
rid=self.identity.rid,
9797
contents=self.identity.profile.model_dump()
9898
))
9999

100-
log.debug("Waiting for kobj queue to empty")
101100
self.kobj_queue.q.join()
102101

103-
if self.sync_manager.catch_up_with_coordinators():
104-
pass
102+
node_providers = self.graph.get_neighbors(
103+
direction="in",
104+
allowed_type=[KoiNetNode]
105+
)
106+
107+
if node_providers:
108+
log.debug(f"Catching up with `orn:koi-net.node` providers: {node_providers}")
109+
self.sync_manager.catch_up_with(node_providers, [KoiNetNode])
105110

106111
elif self.config.koi_net.first_contact.rid:
107-
log.debug(f"I don't have any edges with coordinators, reaching out to first contact {self.config.koi_net.first_contact.rid!r}")
108-
112+
log.debug(f"No edges with `orn:koi-net.node` providers, reaching out to first contact {self.config.koi_net.first_contact.rid!r}")
109113
self.handshaker.handshake_with(self.config.koi_net.first_contact.rid)
110-
111-
114+
112115
def stop(self):
113-
"""Stops a node.
114-
115-
Finishes processing knowledge object queue.
116-
"""
117-
log.info(f"Waiting for kobj queue to empty ({self.kobj_queue.q.unfinished_tasks} tasks remaining)")
116+
"""Stops a node, send stop signals to workers."""
118117

119118
self.kobj_queue.q.put(STOP_WORKER)
120119
self.event_queue.q.put(STOP_WORKER)

src/koi_net/log_system.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@
8787
)
8888

8989
class LogSystem:
90+
"""Handles initializing the logging system."""
91+
9092
def __init__(self):
9193
file_handler = RotatingFileHandler(
9294
filename="log.ndjson",

src/koi_net/network/request_handler.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
)
2828
from ..protocol.node import NodeProfile, NodeType
2929
from ..protocol.model_map import API_MODEL_MAP
30-
from ..secure import Secure
30+
from ..secure_manager import SecureManager
3131
from .error_handler import ErrorHandler
3232

3333
log = structlog.stdlib.get_logger()
@@ -58,19 +58,19 @@ class RequestHandler:
5858

5959
cache: Cache
6060
identity: NodeIdentity
61-
secure: Secure
61+
secure_manager: SecureManager
6262
error_handler: ErrorHandler
6363

6464
def __init__(
6565
self,
6666
cache: Cache,
6767
identity: NodeIdentity,
68-
secure: Secure,
68+
secure_manager: SecureManager,
6969
error_handler: ErrorHandler
7070
):
7171
self.cache = cache
7272
self.identity = identity
73-
self.secure = secure
73+
self.secure_manager = secure_manager
7474
self.error_handler = error_handler
7575

7676
def get_base_url(self, node_rid: KoiNetNode) -> str:
@@ -105,7 +105,7 @@ def make_request(
105105
url = self.get_base_url(node) + path
106106
log.info(f"Making request to {url}")
107107

108-
signed_envelope = self.secure.create_envelope(
108+
signed_envelope = self.secure_manager.create_envelope(
109109
payload=request,
110110
target=node
111111
)
@@ -131,7 +131,7 @@ def make_request(
131131
return
132132

133133
resp_envelope = resp_env_model.model_validate_json(result.text)
134-
self.secure.validate_envelope(resp_envelope)
134+
self.secure_manager.validate_envelope(resp_envelope)
135135

136136
return resp_envelope.payload
137137

src/koi_net/network/response_handler.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from koi_net.processor.kobj_queue import KobjQueue
99
from koi_net.protocol.consts import BROADCAST_EVENTS_PATH, FETCH_BUNDLES_PATH, FETCH_MANIFESTS_PATH, FETCH_RIDS_PATH, POLL_EVENTS_PATH
1010
from koi_net.protocol.envelope import SignedEnvelope
11-
from koi_net.secure import Secure
11+
from koi_net.secure_manager import SecureManager
1212

1313
from ..protocol.api_models import (
1414
EventsPayload,
@@ -36,15 +36,15 @@ def __init__(
3636
cache: Cache,
3737
kobj_queue: KobjQueue,
3838
poll_event_buf: EventBuffer,
39-
secure: Secure
39+
secure_manager: SecureManager
4040
):
4141
self.cache = cache
4242
self.kobj_queue = kobj_queue
4343
self.poll_event_buf = poll_event_buf
44-
self.secure = secure
44+
self.secure_manager = secure_manager
4545

4646
def handle_response(self, path: str, req: SignedEnvelope):
47-
self.secure.validate_envelope(req)
47+
self.secure_manager.validate_envelope(req)
4848

4949
response_map = {
5050
BROADCAST_EVENTS_PATH: self.broadcast_events_handler,
@@ -59,7 +59,7 @@ def handle_response(self, path: str, req: SignedEnvelope):
5959
if response is None:
6060
return
6161

62-
return self.secure.create_envelope(
62+
return self.secure_manager.create_envelope(
6363
payload=response,
6464
target=req.source_node
6565
)

0 commit comments

Comments
 (0)