Skip to content

Commit

Permalink
Merge pull request #112 from pedohorse/core-refactor-cycle-breaking
Browse files Browse the repository at this point in the history
Core refactor cycle breaking
  • Loading branch information
pedohorse authored Oct 28, 2024
2 parents d4a79f3 + 6836113 commit f6b3390
Show file tree
Hide file tree
Showing 93 changed files with 3,985 additions and 3,948 deletions.
22 changes: 10 additions & 12 deletions src/lifeblood/basenode.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,20 @@
import asyncio
from copy import deepcopy
from typing import Dict, Optional, Any
from logging import Logger
from .nodethings import ProcessingResult
from .uidata import NodeUi, ParameterNotFound, Parameter
from .node_ui import NodeUi
from .node_parameters import ParameterNotFound, Parameter
from .processingcontext import ProcessingContext
from .logging import get_logger
from .plugin_info import PluginInfo, empty_plugin_info
from .nodegraph_holder_base import NodeGraphHolderBase
from .node_ui_callback_receiver_base import NodeUiCallbackReceiverBase

# reexport
from .nodethings import ProcessingError
from typing import Iterable

from typing import TYPE_CHECKING, Iterable

if TYPE_CHECKING:
from logging import Logger


class BaseNode:
class BaseNode(NodeUiCallbackReceiverBase):
_plugin_data = None # To be set on module level by loader, set to empty_plugin_info by default

@classmethod
Expand All @@ -37,6 +34,7 @@ def description(cls) -> str:
return 'this node type does not have a description'

def __init__(self, name: str):
super().__init__()
if BaseNode._plugin_data is None:
BaseNode._plugin_data = empty_plugin_info
self.__parent: NodeGraphHolderBase = None
Expand Down Expand Up @@ -172,7 +170,7 @@ def _process_task_wrapper(self, task_dict, node_config) -> ProcessingResult:
# with self.get_ui().lock_interface_readonly(): # TODO: this is bad, RETHINK!
# TODO: , in case threads do l1---r1 - release2 WILL leave lock in locked state forever, as it remembered it at l2
# TODO: l2---r2
return self.process_task(ProcessingContext(self, task_dict, node_config))
return self.process_task(ProcessingContext(self.name(), self.label(), self.get_ui(), task_dict, node_config))

def process_task(self, context: ProcessingContext) -> ProcessingResult:
"""
Expand All @@ -185,7 +183,7 @@ def process_task(self, context: ProcessingContext) -> ProcessingResult:

def _postprocess_task_wrapper(self, task_dict, node_config) -> ProcessingResult:
# with self.get_ui().lock_interface_readonly(): #TODO: read comment for _process_task_wrapper
return self.postprocess_task(ProcessingContext(self, task_dict, node_config))
return self.postprocess_task(ProcessingContext(self.name(), self.label(), self.get_ui(), task_dict, node_config))

def postprocess_task(self, context: ProcessingContext) -> ProcessingResult:
"""
Expand All @@ -199,7 +197,7 @@ def postprocess_task(self, context: ProcessingContext) -> ProcessingResult:
def copy_ui_to(self, to_node: "BaseNode"):
newui = deepcopy(self._parameters) # nodeUI redefines deepcopy to detach new copy from node
to_node._parameters = newui
newui.attach_to_node(to_node)
newui.set_ui_change_callback_receiver(to_node)

def apply_settings(self, settings: Dict[str, Dict[str, Any]]) -> None:
with self.get_ui().postpone_ui_callbacks():
Expand Down
2 changes: 1 addition & 1 deletion src/lifeblood/basenode_serializer_v2.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from .basenode_serialization import NodeSerializerBase, IncompatibleDeserializationMethod, FailedToApplyNodeState, FailedToApplyParameters
from .basenode import BaseNode
from .enums import NodeParameterType
from .uidata import ParameterFullValue
from .node_parameters import ParameterFullValue

from typing import Optional, Tuple, Union

Expand Down
5 changes: 1 addition & 4 deletions src/lifeblood/broadcasting.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
import asyncio
import socket
from string import ascii_letters
import random
import struct

from . import logging
from .nethelpers import get_localhost
from .defaults import broadcast_port as default_broadcast_port

from . import os_based_cheats
from . import os_based_cheats # import needed for windows

Check warning on line 8 in src/lifeblood/broadcasting.py

View workflow job for this annotation

GitHub Actions / flake8

F401 '.os_based_cheats' imported but unused

from typing import Tuple, Union, Optional, Callable, Coroutine, Any

Expand Down
2 changes: 0 additions & 2 deletions src/lifeblood/core_nodes/environment_resolver_setter.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
from lifeblood.processingcontext import ProcessingContext
from lifeblood.enums import NodeParameterType
from lifeblood.environment_resolver import EnvironmentResolverArguments
from lifeblood.uidata import NodeUi, MultiGroupLayout, Parameter
from lifeblood.node_visualization_classes import NodeColorScheme

from typing import Iterable

Expand Down
4 changes: 0 additions & 4 deletions src/lifeblood/core_nodes/mod_attrib.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
from lifeblood.node_plugin_base import BaseNode
from lifeblood.nodethings import ProcessingResult
from lifeblood.taskspawn import TaskSpawn
from lifeblood.exceptions import NodeNotReadyToProcess
from lifeblood.enums import NodeParameterType
from lifeblood.uidata import NodeUi, MultiGroupLayout, Parameter
from lifeblood.node_visualization_classes import NodeColorScheme

from typing import Iterable

Expand Down
11 changes: 2 additions & 9 deletions src/lifeblood/core_nodes/parent_children_waiter.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,13 @@
import dataclasses
from dataclasses import dataclass
from lifeblood.attribute_serialization import deserialize_attributes_core
from lifeblood.node_plugin_base import BaseNode, ProcessingError
from lifeblood.node_plugin_base import BaseNode
from lifeblood.nodethings import ProcessingResult
from lifeblood.taskspawn import TaskSpawn
from lifeblood.exceptions import NodeNotReadyToProcess
from lifeblood.enums import NodeParameterType
from lifeblood.uidata import NodeUi
from lifeblood.processingcontext import ProcessingContext

from threading import Lock

from typing import Any, Dict, Iterable, List, Optional, Set, TypedDict , TYPE_CHECKING

if TYPE_CHECKING:
from lifeblood.scheduler import Scheduler
from typing import Dict, Iterable, List, Set


def node_class():
Expand Down
11 changes: 4 additions & 7 deletions src/lifeblood/core_nodes/python.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
import re
import time

from lifeblood.node_plugin_base import BaseNodeWithTaskRequirements
from lifeblood.invocationjob import InvocationJob, InvocationEnvironment
from lifeblood.invocationjob import InvocationJob
from lifeblood.processingcontext import ProcessingContext
from lifeblood.nodethings import ProcessingResult, ProcessingError
from lifeblood.uidata import NodeParameterType
from lifeblood.enums import NodeParameterType

from typing import Iterable

from types import MappingProxyType
from typing import TYPE_CHECKING, Iterable
if TYPE_CHECKING:
from lifeblood.scheduler import Scheduler


def node_class():
Expand Down
3 changes: 0 additions & 3 deletions src/lifeblood/core_nodes/rename_attrib.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
from lifeblood.node_plugin_base import BaseNode
from lifeblood.nodethings import ProcessingResult, ProcessingError
from lifeblood.taskspawn import TaskSpawn
from lifeblood.exceptions import NodeNotReadyToProcess
from lifeblood.enums import NodeParameterType
from lifeblood.uidata import NodeUi

from typing import Iterable

Expand Down
8 changes: 1 addition & 7 deletions src/lifeblood/core_nodes/split_waiter.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,12 @@
from dataclasses import dataclass
from lifeblood.node_plugin_base import BaseNode
from lifeblood.nodethings import ProcessingResult
from lifeblood.taskspawn import TaskSpawn
from lifeblood.exceptions import NodeNotReadyToProcess
from lifeblood.enums import NodeParameterType
from lifeblood.uidata import NodeUi
from lifeblood.processingcontext import ProcessingContext

from threading import Lock

from typing import Dict, TypedDict, Set, Iterable, Optional, Any, TYPE_CHECKING

if TYPE_CHECKING:
from lifeblood.scheduler import Scheduler
from typing import Dict, Set, Iterable, Optional


@dataclass
Expand Down
4 changes: 1 addition & 3 deletions src/lifeblood/core_nodes/switch.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
from lifeblood.node_plugin_base import BaseNode
from lifeblood.nodethings import ProcessingResult, ProcessingError
from lifeblood.nodethings import ProcessingResult
from lifeblood.processingcontext import ProcessingContext
from lifeblood.enums import NodeParameterType
from lifeblood.uidata import NodeUi, Parameter, VerticalParametersLayout, ParameterHierarchyItem, ParametersLayoutBase
from lifeblood.node_visualization_classes import NodeColorScheme

from typing import Iterable

Expand Down
6 changes: 2 additions & 4 deletions src/lifeblood/core_nodes/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,9 @@
from lifeblood.node_plugin_base import BaseNode
from lifeblood.invocationjob import InvocationJob, InvocationEnvironment
from lifeblood.nodethings import ProcessingResult
from lifeblood.uidata import NodeParameterType
from lifeblood.enums import NodeParameterType

from typing import TYPE_CHECKING, Iterable
if TYPE_CHECKING:
from lifeblood.scheduler import Scheduler
from typing import Iterable


def node_class():
Expand Down
3 changes: 0 additions & 3 deletions src/lifeblood/core_nodes/wait_for_task.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,8 @@
import shlex
from lifeblood.node_plugin_base import BaseNode
from lifeblood.nodethings import ProcessingResult, ProcessingContext
from lifeblood.taskspawn import TaskSpawn
from lifeblood.exceptions import NodeNotReadyToProcess
from lifeblood.enums import NodeParameterType
from lifeblood.uidata import NodeUi, MultiGroupLayout, Parameter
from lifeblood.node_visualization_classes import NodeColorScheme

from typing import Dict, Iterable, List, Optional, Set

Expand Down
1 change: 0 additions & 1 deletion src/lifeblood/core_nodes/wedge.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from lifeblood.node_plugin_base import BaseNode
from lifeblood.nodethings import ProcessingResult, ProcessingError
from lifeblood.enums import NodeParameterType
from lifeblood.uidata import NodeUi, MultiGroupLayout, Parameter

from typing import Iterable

Expand Down
6 changes: 6 additions & 0 deletions src/lifeblood/expression_locals_provider_base.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from typing import Any, Dict


class ExpressionLocalsProviderBase:
def locals(self) -> Dict[str, Any]:
raise NotImplementedError()
6 changes: 2 additions & 4 deletions src/lifeblood/hardware_resources.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import psutil
import copy
import re
import json
from .misc import get_unique_machine_id
Expand Down Expand Up @@ -128,11 +126,11 @@ def __repr__(self):
parts = []
for res_name, res in self.__resources.items():
parts.append(f'{res_name}: {res.value}')
for dev_type, dev_res in self.__dev_resources.items():
for dev_type, dev_name, dev_res in self.__dev_resources:
dev_parts = []
for res_name, res in dev_res.items():
dev_parts.append(f'{res_name}: {res.value}')
parts.append(f'device({dev_type})[{", ".join(dev_parts)}]')
parts.append(f'device(type:"{dev_type}" name:"{dev_name}")[{", ".join(dev_parts)}]')

return f'<hwid={self.hwid}, {", ".join(parts)}>'

Expand Down
3 changes: 1 addition & 2 deletions src/lifeblood/local_notifier.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,9 @@
import json
import uuid
from . import broadcasting
from . import logging
from .nethelpers import get_localhost

from typing import Optional, Tuple, Callable, Coroutine, Any
from typing import Optional, Tuple, Callable, Coroutine
from .logging import get_logger


Expand Down
4 changes: 2 additions & 2 deletions src/lifeblood/main_scheduler.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
import signal
from .config import get_config, create_default_user_config_file
from .pluginloader import PluginNodeDataProvider
from .scheduler import Scheduler
from .scheduler.scheduler import Scheduler
from .basenode_serializer_v1 import NodeSerializerV1
from .basenode_serializer_v2 import NodeSerializerV2
from .scheduler_config_provider_base import SchedulerConfigProviderBase
from .scheduler_config_provider_file import SchedulerConfigProviderFileOverrides
from . import logging

from typing import Iterable, List, Optional, Tuple, Union
from typing import Iterable, List, Tuple, Union


def __construct_plugin_paths(custom_plugins_path: Union[None, str, Path], plugin_search_locations: Iterable[Union[str, Path]]) -> List[Tuple[Path, str]]:
Expand Down
4 changes: 2 additions & 2 deletions src/lifeblood/main_workerpool.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import sys
import argparse

from . import simple_worker_pool
from . import simple_worker_pool_main


def main(argv):
Expand All @@ -14,7 +14,7 @@ def main(argv):
opts = parser.parse_args(argv[:1])
remaining_args = argv[1:]

known_types = {'simple': simple_worker_pool}
known_types = {'simple': simple_worker_pool_main}
if opts.list:
print('known pool types:\n' + '\n'.join(f'\t{x}' for x in known_types))
return
Expand Down
3 changes: 1 addition & 2 deletions src/lifeblood/misc.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import os
import asyncio
import random
import uuid
import time
import psutil
from time import perf_counter
from contextlib import contextmanager, asynccontextmanager
from .logging import get_logger, logging

from typing import List, Optional, Union
from typing import Union


class DummyLock:
Expand Down
2 changes: 0 additions & 2 deletions src/lifeblood/names.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import re

from lifeblood.logging import get_logger
from typing import Iterable

Expand Down
5 changes: 1 addition & 4 deletions src/lifeblood/net_messages/impl/message_protocol.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
import asyncio
import uuid
import struct

from ..logging import get_logger
from ..stream_wrappers import MessageReceiveStream
from ..messages import Message
from ..queue import MessageQueue
from ..address import DirectAddress
from ..exceptions import MessageReceivingError, NoMessageError, MessageTransferError, MessageTransferTimeoutError
from ..interfaces import MessageStreamFactory
from ..exceptions import NoMessageError, MessageTransferError, MessageTransferTimeoutError

from typing import Callable, Awaitable, Tuple

Expand Down
1 change: 0 additions & 1 deletion src/lifeblood/net_messages/impl/tcp_message_processor.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import asyncio
from ..message_processor import MessageProcessorBase
from ..message_handler import MessageHandlerBase
from ..messages import Message
Expand Down
2 changes: 1 addition & 1 deletion src/lifeblood/net_messages/impl/tcp_message_receiver.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import asyncio
from .message_protocol import MessageProtocol, IProtocolInstanceCounter
from ..interfaces import MessageReceiver, MessageStreamFactory
from ..interfaces import MessageReceiver
from ..messages import Message
from ..address import DirectAddress
from ..logging import get_logger
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from ..exceptions import MessageTransferError, MessageTransferTimeoutError
from ..interfaces import MessageStreamFactory
from ..stream_wrappers import MessageSendStream, MessageSendStreamBase
from ..address import DirectAddress, AddressChain
from ..address import DirectAddress
from ..defaults import default_stream_timeout
from ..messages import Message

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
from .clients import JsonMessageClientFactory, CommandJsonMessageClientFactory
from ..address import DirectAddress
from ..message_handler import MessageHandlerBase
from .tcp_message_processor import TcpMessageProcessor

from typing import Iterable, Optional, Sequence, Tuple, Union


class TcpJsonMessageProcessor(TcpMessageProcessor):
def __init__(self, listening_address_or_addresses: Union[Tuple[str, int], Iterable[Tuple[str, int]]], *,
def __init__(self, listening_address_or_addresses: Union[Tuple[str, int], Iterable[Tuple[str, int]], DirectAddress, Iterable[DirectAddress]], *,
backlog=4096,
connection_pool_cache_time=300,
message_client_factory: Optional[JsonMessageClientFactory] = None,
Expand All @@ -19,7 +20,7 @@ def __init__(self, listening_address_or_addresses: Union[Tuple[str, int], Iterab


class TcpCommandMessageProcessor(TcpJsonMessageProcessor):
def __init__(self, listening_address_or_addresses: Union[Tuple[str, int], Iterable[Tuple[str, int]]], *,
def __init__(self, listening_address_or_addresses: Union[Tuple[str, int], Iterable[Tuple[str, int]], DirectAddress, Iterable[DirectAddress]], *,
backlog=4096,
connection_pool_cache_time=300,
message_handlers: Sequence[MessageHandlerBase] = ()):
Expand Down
4 changes: 2 additions & 2 deletions src/lifeblood/net_messages/interfaces.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from .messages import Message
from .message_stream import MessageSendStreamBase, MessageReceiveStreamBase
from .address import DirectAddress, AddressChain
from .message_stream import MessageSendStreamBase
from .address import DirectAddress

from typing import Callable, Awaitable

Expand Down
Loading

0 comments on commit f6b3390

Please sign in to comment.