Skip to content

Commit aae753f

Browse files
committed
hacked type annotation return from node assembler to give a better dynamic representation of the node container to the type checker, added write through option on deref function
1 parent 3857f10 commit aae753f

File tree

4 files changed

+35
-36
lines changed

4 files changed

+35
-36
lines changed

src/koi_net/assembler.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import inspect
22
from enum import StrEnum
3-
from typing import Any, Protocol
3+
from typing import Any, Protocol, Self
44
from dataclasses import make_dataclass
55

66
import structlog
@@ -42,7 +42,7 @@ class NodeContainer(Protocol):
4242
entrypoint = EntryPoint
4343

4444
class NodeAssembler(metaclass=BuildOrderer):
45-
def __new__(self) -> NodeContainer:
45+
def __new__(self) -> Self:
4646
"""Returns assembled node container."""
4747
return self._build()
4848

src/koi_net/core.py

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from .assembler import NodeAssembler
66
from .config.core import NodeConfig
77
from .processor.context import HandlerContext
8-
from .effector import Effector
8+
from .effector import DerefHandler, Effector
99
from .handshaker import Handshaker
1010
from .sync_manager import SyncManager
1111
from .identity import NodeIdentity
@@ -20,6 +20,7 @@
2020
from .network.event_buffer import EventBuffer
2121
from .processor.pipeline import KnowledgePipeline
2222
from .processor.kobj_queue import KobjQueue
23+
from .processor.handler import KnowledgeHandler
2324
from .secure_manager import SecureManager
2425
from .entrypoints import NodeServer, NodePoller
2526
from .processor.knowledge_handlers import (
@@ -34,14 +35,14 @@
3435

3536

3637
class BaseNode(NodeAssembler):
37-
log_system = LogSystem
38-
config_cls = NodeConfig
39-
kobj_queue = KobjQueue
40-
event_queue = EventQueue
41-
poll_event_buf = EventBuffer
42-
broadcast_event_buf = EventBuffer
43-
config = ConfigLoader
44-
knowledge_handlers = [
38+
log_system: LogSystem = LogSystem
39+
config_cls: NodeConfig = NodeConfig
40+
kobj_queue: KobjQueue = KobjQueue
41+
event_queue: EventQueue = EventQueue
42+
poll_event_buf: EventBuffer = EventBuffer
43+
broadcast_event_buf: EventBuffer = EventBuffer
44+
config: ConfigLoader = ConfigLoader
45+
knowledge_handlers: list[KnowledgeHandler] = [
4546
basic_rid_handler,
4647
basic_manifest_handler,
4748
secure_profile_handler,
@@ -50,27 +51,27 @@ class BaseNode(NodeAssembler):
5051
basic_network_output_filter,
5152
forget_edge_on_node_deletion
5253
]
53-
deref_handlers = []
54-
cache = lambda config: Cache(
54+
deref_handlers: list[DerefHandler] = []
55+
cache: Cache = lambda config: Cache(
5556
directory_path=config.koi_net.cache_directory_path)
56-
identity = NodeIdentity
57-
graph = NetworkGraph
58-
secure_manager = SecureManager
59-
handshaker = Handshaker
60-
error_handler = ErrorHandler
61-
request_handler = RequestHandler
62-
sync_manager = SyncManager
63-
response_handler = ResponseHandler
64-
resolver = NetworkResolver
65-
handler_context = HandlerContext
66-
effector = Effector
67-
pipeline = KnowledgePipeline
68-
kobj_worker = KnowledgeProcessingWorker
69-
event_worker = EventProcessingWorker
70-
lifecycle = NodeLifecycle
57+
identity: NodeIdentity = NodeIdentity
58+
graph: NetworkGraph = NetworkGraph
59+
secure_manager: SecureManager = SecureManager
60+
handshaker: Handshaker = Handshaker
61+
error_handler: ErrorHandler = ErrorHandler
62+
request_handler: RequestHandler = RequestHandler
63+
sync_manager: SyncManager = SyncManager
64+
response_handler: ResponseHandler = ResponseHandler
65+
resolver: NetworkResolver = NetworkResolver
66+
handler_context: HandlerContext = HandlerContext
67+
effector: Effector = Effector
68+
pipeline: KnowledgePipeline = KnowledgePipeline
69+
kobj_worker: KnowledgeProcessingWorker = KnowledgeProcessingWorker
70+
event_worker: EventProcessingWorker = EventProcessingWorker
71+
lifecycle: NodeLifecycle = NodeLifecycle
7172

7273
class FullNode(BaseNode):
73-
entrypoint = NodeServer
74+
entrypoint: NodeServer = NodeServer
7475

7576
class PartialNode(BaseNode):
76-
entrypoint = NodePoller
77+
entrypoint: NodePoller = NodePoller

src/koi_net/effector.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ def deref(
117117
refresh_cache: skips cache read when `True`
118118
use_network: enables fetching from other nodes when `True`
119119
handle_result: sends resulting bundle to kobj queue when `True`
120+
write_through: waits for kobj queue to empty when `True`
120121
"""
121122

122123
log.debug(f"Dereferencing {rid!r}")
@@ -142,8 +143,5 @@ def deref(
142143

143144
if write_through:
144145
self.kobj_queue.q.join()
145-
146-
# TODO: refactor for general solution, param to write through to cache before continuing
147-
# like `self.processor.kobj_queue.join()``
148-
146+
149147
return bundle

src/koi_net/processor/handler.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ class KnowledgeHandler:
3737

3838
func: Callable[[HandlerContext, KnowledgeObject], None | KnowledgeObject | StopChain]
3939
handler_type: HandlerType
40-
rid_types: tuple[RIDType]
41-
event_types: tuple[EventType | None]
40+
rid_types: tuple[RIDType] = ()
41+
event_types: tuple[EventType | None] = ()
4242

4343
def __call__(
4444
self,

0 commit comments

Comments
 (0)