diff --git a/examples/cameraDiscoveryExample.py b/examples/cameraDiscoveryExample.py index 16cc7da..831e9e4 100644 --- a/examples/cameraDiscoveryExample.py +++ b/examples/cameraDiscoveryExample.py @@ -12,10 +12,10 @@ def main() -> None: shutdown_event = setup_shutdown() # Define the group to discover camera services on - group = Group(name='effectiverange/sniper', url='udp://239.0.1.1:5555') + group = Group(name='effective-range/sniper', url='udp://239.0.1.1:5555') # Define the query to discover matching camera services - query = ServiceQuery(name_filter='.+', role_filter='camera') + query = ServiceQuery(name='.+', role='camera') # Use a discoverer to find camera services with Hello.builder().discoverer().default() as discoverer: diff --git a/examples/cameraServiceExample.py b/examples/cameraServiceExample.py index 2299d60..65efb14 100644 --- a/examples/cameraServiceExample.py +++ b/examples/cameraServiceExample.py @@ -14,7 +14,7 @@ def main() -> None: shutdown_event = setup_shutdown() # Define the group to advertise the camera service on - group = Group(name='effectiverange/sniper', url='udp://239.0.1.1:5555') + group = Group(name='effective-range/sniper', url='udp://239.0.1.1:5555') # Define the service information for the camera info = ServiceInfo(uuid=uuid4(), name='er-sniper-camera-1', role='camera', urls={ diff --git a/hello/advertizer.py b/hello/advertizer.py index 3aea6af..ef7f1f4 100644 --- a/hello/advertizer.py +++ b/hello/advertizer.py @@ -9,7 +9,7 @@ from common_utility import IReusableTimer from context_logger import get_logger -from hello import ServiceInfo, Group, Sender, Receiver, ServiceMatcher, ServiceQuery, DefaultScheduler +from hello import ServiceInfo, Group, Sender, Receiver, ServiceMatcher, ServiceQuery, AbstractScheduler log = get_logger('Advertizer') @@ -49,10 +49,9 @@ def stop(self) -> None: self._sender.stop() def advertise(self, info: ServiceInfo | None = None) -> None: - if info: - self._info = info - if self._group: + if info: + self._info = info if self._info: self._sender.send(self._info) log.info('Service advertised', service=self._info, group=self._group) @@ -97,7 +96,7 @@ def _handle_query(self, matcher: ServiceMatcher, info: ServiceInfo) -> None: self.advertise(info) -class ScheduledAdvertizer(DefaultScheduler[ServiceInfo], Advertizer): +class ScheduledAdvertizer(AbstractScheduler[ServiceInfo], Advertizer): def __init__(self, advertizer: Advertizer, timer: IReusableTimer) -> None: super().__init__(timer) diff --git a/hello/discoverer.py b/hello/discoverer.py index e99e62f..0e7b179 100644 --- a/hello/discoverer.py +++ b/hello/discoverer.py @@ -11,7 +11,7 @@ from common_utility import IReusableTimer from context_logger import get_logger -from hello import Group, ServiceQuery, Sender, Receiver, ServiceInfo, ServiceMatcher, DefaultScheduler +from hello import Group, ServiceQuery, Sender, Receiver, ServiceInfo, ServiceMatcher, AbstractScheduler log = get_logger('Discoverer') @@ -87,10 +87,9 @@ def stop(self) -> None: self._receiver.stop() def discover(self, query: ServiceQuery | None = None) -> None: - if query: - self._matcher = ServiceMatcher(query) - if self._group: + if query: + self._matcher = ServiceMatcher(query) if self._matcher: self._sender.send(self._matcher.query) log.info('Service discovery initiated', group=self._group, query=self._matcher.query) @@ -150,7 +149,7 @@ def _execute_handler(self, handler: OnDiscoveryEvent, event: DiscoveryEvent) -> log.warn('Error in event handler execution', event=event, error=error) -class ScheduledDiscoverer(DefaultScheduler[ServiceQuery], Discoverer): +class ScheduledDiscoverer(AbstractScheduler[ServiceQuery], Discoverer): def __init__(self, discoverer: Discoverer, timer: IReusableTimer) -> None: super().__init__(timer) diff --git a/hello/scheduler.py b/hello/scheduler.py index 2517a66..ac72a3a 100644 --- a/hello/scheduler.py +++ b/hello/scheduler.py @@ -14,14 +14,14 @@ class Scheduler(Generic[T]): - def stop(self) -> None: + def schedule(self, data: T | None = None, interval: float = 60, one_shot: bool = False) -> None: raise NotImplementedError() - def schedule(self, data: T | None = None, interval: float = 60, one_shot: bool = False) -> None: + def stop(self) -> None: raise NotImplementedError() -class DefaultScheduler(Scheduler[T]): +class AbstractScheduler(Scheduler[T]): def __init__(self, timer: IReusableTimer) -> None: self._timer = timer @@ -32,9 +32,6 @@ def __enter__(self) -> Scheduler[T]: def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None: self.stop() - def stop(self) -> None: - self._timer.cancel() - def schedule(self, data: T | None = None, interval: float = 60, one_shot: bool = False) -> None: if one_shot: self._timer.start(interval, self._execute, [data]) @@ -43,6 +40,9 @@ def schedule(self, data: T | None = None, interval: float = 60, one_shot: bool = self._timer.start(interval, self._execute_and_restart, [data]) log.info('Periodic execution scheduled', data=data, interval=interval) + def stop(self) -> None: + self._timer.cancel() + def _execute(self, data: T | None = None) -> None: raise NotImplementedError() diff --git a/hello/service.py b/hello/service.py index 663a1c3..153de98 100644 --- a/hello/service.py +++ b/hello/service.py @@ -29,16 +29,16 @@ def to_dict(self) -> dict[str, Any]: @dataclass class ServiceQuery(object): - name_filter: str - role_filter: str + name: str + role: str class ServiceMatcher(object): def __init__(self, query: ServiceQuery) -> None: self.query = query - self._name_matcher = re.compile(self.query.name_filter) - self._role_matcher = re.compile(self.query.role_filter) + self._name_matcher = re.compile(self.query.name) + self._role_matcher = re.compile(self.query.role) def matches(self, info: ServiceInfo) -> bool: name_match = self._name_matcher.match(info.name) diff --git a/tests/defaultSchedulerTest.py b/tests/abstractSchedulerTest.py similarity index 94% rename from tests/defaultSchedulerTest.py rename to tests/abstractSchedulerTest.py index d1cbc23..c94d40e 100644 --- a/tests/defaultSchedulerTest.py +++ b/tests/abstractSchedulerTest.py @@ -6,10 +6,10 @@ from common_utility import IReusableTimer from context_logger import setup_logging -from hello import DefaultScheduler +from hello import AbstractScheduler -class DefaultSchedulerDiscovererTest(TestCase): +class AbstractSchedulerTest(TestCase): @classmethod def setUpClass(cls): @@ -77,7 +77,7 @@ def test_execute_and_restart_restarts_timer(self): timer.restart.assert_called_once() -class TestScheduler(DefaultScheduler[Any]): +class TestScheduler(AbstractScheduler[Any]): def __init__(self, timer: IReusableTimer) -> None: super().__init__(timer)