diff --git a/examples/cameraServiceExample.py b/examples/cameraServiceExample.py index 1c946f9..3977b59 100644 --- a/examples/cameraServiceExample.py +++ b/examples/cameraServiceExample.py @@ -1,9 +1,10 @@ from uuid import uuid4 +from common_utility import InterfaceResolver from context_logger import get_logger, setup_logging from examples import setup_shutdown -from hello import ServiceInfo, Hello, Group, GroupUrl +from hello import ServiceInfo, Hello, Group setup_logging('hello') @@ -13,17 +14,16 @@ def main() -> None: shutdown_event = setup_shutdown() - # Define the group URL optionally specifying the network interface - url = GroupUrl(address='239.0.1.1', port=5555, interface='wlan0') + # Resolve the address for the specified interface name (e.g., 'wlan0') + if_address = InterfaceResolver().resolve('wlan0') # Define the group to advertise the camera service on - group = Group.create(name='effective-range/sniper', url=url) + group = Group.create(name='effective-range/sniper', address='239.0.1.1', port=5555, if_address=if_address) # Define the service information for the camera - hostname = 'er-sniper-camera-1' - info = ServiceInfo(uuid=uuid4(), name=hostname, role='camera', urls={ - 'api': f'grpc://{hostname}.local:50051', - 'stream': f'http://{hostname}.local:8000' + info = ServiceInfo(uuid=uuid4(), name='er-sniper-camera-1', role='camera', urls={ + 'api': f'grpc://{if_address}:50051', + 'stream': f'http://{if_address}:8000/video_feed' }) # Use a scheduled advertizer to periodically announce the camera service diff --git a/hello/group.py b/hello/group.py index 4c53663..5bc3a86 100644 --- a/hello/group.py +++ b/hello/group.py @@ -5,25 +5,6 @@ from dataclasses import dataclass from enum import Enum -import netifaces - - -@dataclass -class GroupUrl: - address: str - port: int - protocol: str = 'udp' - interface: str | None = None - - def resolve(self) -> str: - if self.interface and self.interface in netifaces.interfaces(): - inet_address = netifaces.ifaddresses(self.interface).get(netifaces.AF_INET) - if inet_address and len(inet_address) > 0: - address = inet_address[0].get('addr') - return f'{self.protocol}://{address};{self.address}:{self.port}' - - return f'{self.protocol}://{self.address}:{self.port}' - class GroupPrefix(Enum): HELLO = 'hello' @@ -42,8 +23,9 @@ def query(self) -> 'PrefixedGroup': return PrefixedGroup(GroupPrefix.QUERY, self) @staticmethod - def create(name: str, url: GroupUrl) -> 'Group': - return Group(name, url.resolve()) + def create(name: str, address: str, port: int, protocol: str = 'udp', if_address: str | None = None) -> 'Group': + if_address = f'{if_address};' if if_address else '' + return Group(name, f'{protocol}://{if_address}{address}:{port}') @dataclass diff --git a/pyproject.toml b/pyproject.toml index 715bb09..f7bd154 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,6 @@ maintainers = [ { name = "Ferenc Nandor Janky & Attila Gombos", email = "info@effective-range.com" } ] dependencies = [ - "netifaces", "pyzmq @ git+https://github.com/EffectiveRange/pyzmq.git@v27.1.0+drafts1", "python-context-logger @ git+https://github.com/EffectiveRange/python-context-logger.git@latest", "python-common-utility @ git+https://github.com/EffectiveRange/python-common-utility.git@latest" @@ -16,7 +15,7 @@ dependencies = [ dynamic = ["version"] [tool.setuptools] -package-dir = {"" = "."} +package-dir = { "" = "." } packages = ["hello", "examples"] [tool.setuptools.package-data] diff --git a/tests/groupTest.py b/tests/groupTest.py index 02bcdc6..c62f194 100644 --- a/tests/groupTest.py +++ b/tests/groupTest.py @@ -3,7 +3,7 @@ from context_logger import setup_logging -from hello import GroupUrl, Group +from hello import Group class GroupTest(TestCase): @@ -15,45 +15,19 @@ def setUpClass(cls): def setUp(self): print() - def test_url_resolves_when_interface_is_not_provided(self): - # Given - group_url = GroupUrl(protocol='udp', address='239.0.1.1', port=5555) - - # When - url = group_url.resolve() - - # Then - self.assertEqual('udp://239.0.1.1:5555', url) - - def test_url_resolves_when_interface_is_provided(self): - # Given - group_url = GroupUrl(protocol='udp', address='239.0.1.1', port=5555, interface='lo') - + def test_group_created(self): # When - url = group_url.resolve() + group = Group.create(name='test-group', address='239.0.1.1', port=5555) # Then - self.assertEqual('udp://127.0.0.1;239.0.1.1:5555', url) - - def test_url_resolves_when_interface_is_provided_but_not_exists(self): - # Given - group_url = GroupUrl(protocol='udp', address='239.0.1.1', port=5555, interface='nonexistent0') - - # When - url = group_url.resolve() - - # Then - self.assertEqual('udp://239.0.1.1:5555', url) - - def test_group_created_with_resolved_url(self): - # Given - group_url = GroupUrl(address='239.0.1.1', port=5555, interface='lo') + self.assertEqual(Group(name='test-group', url='udp://239.0.1.1:5555'), group) + def test_group_created_when_interface_address_is_provided(self): # When - group = Group.create('test-group', group_url) + group = Group.create(name='test-group', address='239.0.1.1', port=5555, if_address='192.168.0.100') # Then - self.assertEqual(Group(name='test-group', url='udp://127.0.0.1;239.0.1.1:5555'), group) + self.assertEqual(Group(name='test-group', url='udp://192.168.0.100;239.0.1.1:5555'), group) def test_prefixed_group_created_with_hello_prefix(self): # Given