From 5173b7871ebcf4f3dda7fb2ab5bfce57206ee91e Mon Sep 17 00:00:00 2001 From: Daniel Krippner Date: Fri, 28 Aug 2026 09:50:59 +0200 Subject: [PATCH 1/2] Add deprecation warning --- README.adoc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.adoc b/README.adoc index 2beb28c..f2a8470 100644 --- a/README.adoc +++ b/README.adoc @@ -1,6 +1,15 @@ = Eclipse uProtocol Python Library :toc: +[IMPORTANT,caption="ATTENTION: "] +==== +The uProtocol core specification is continually evolving, including major and breaking changes to various aspects of the API and core services. +In contrast to that, the Python uProtocol language library is currently *UNMAINTAINED*. The code in this repository will likely not work together with other, more up-to-date uProtocol language bindings. + +Please consider using the Rust uProtocol libraries, as these are by far the most advanced and best maintained uProtocol repositories. +Should you be capable and willing to pick up up-python maintainance, we would love to welcome you in our weekly developer call! (https://eclipsesdv.org/get-involved/ - uProtocol call each Thursday afternoon (UTC)) +==== + == Overview This library implements the https://github.com/eclipse-uprotocol/uprotocol-spec/blob/main/languages.adoc[uProtocol Language Specific Library Requirements] for Python defined in https://github.com/eclipse-uprotocol/uprotocol-spec/tree/main[uProtocol Specifications]. The library is organized into packages that are described in <> below and organized by the layers of the protocol. From 4dc87423fddeb3b4f5ee137cd858f6992c1cbbf4 Mon Sep 17 00:00:00 2001 From: Daniel Krippner Date: Fri, 28 Aug 2026 09:55:50 +0200 Subject: [PATCH 2/2] fix linter stuff to make PR checks happy --- .../test_inmemoryusubcriptionclient.py | 29 ++++++++++--------- tests/test_communication/mock_utransport.py | 11 +++---- tests/test_communication/test_calloptions.py | 3 +- .../test_inmemoryrpcclient.py | 9 +++--- .../test_inmemoryrpcserver.py | 9 +++--- tests/test_communication/test_publisher.py | 5 ++-- tests/test_communication/test_rpcmapper.py | 7 +++-- tests/test_communication/test_rpcresult.py | 3 +- .../test_communication/test_simplenotifier.py | 9 +++--- .../test_simplepublisher.py | 7 +++-- tests/test_communication/test_uclient.py | 9 +++--- tests/test_communication/test_upayload.py | 4 +-- tests/test_communication/test_ustatuserror.py | 3 +- .../test_builder/test_umessagebuilder.py | 8 ++--- tests/test_transport/test_utransport.py | 5 ++-- .../test_uattributesvalidator.py | 5 ++-- .../test_uri/test_factory/test_uri_factory.py | 1 + .../test_serializer/test_uriserializer.py | 3 +- .../test_validator/test_urivalidator.py | 3 +- .../test_factory/test_uuidfactory.py | 3 +- .../test_uuid/test_factory/test_uuidutils.py | 3 +- .../test_validator/test_uuidvalidator.py | 5 ++-- .../test_validation/test_validationresult.py | 1 + 23 files changed, 83 insertions(+), 62 deletions(-) diff --git a/tests/test_client/test_usubscription/test_v3/test_inmemoryusubcriptionclient.py b/tests/test_client/test_usubscription/test_v3/test_inmemoryusubcriptionclient.py index 51842c5..66ef6fd 100644 --- a/tests/test_client/test_usubscription/test_v3/test_inmemoryusubcriptionclient.py +++ b/tests/test_client/test_usubscription/test_v3/test_inmemoryusubcriptionclient.py @@ -16,6 +16,21 @@ import unittest from unittest.mock import AsyncMock, MagicMock +from uprotocol.core.usubscription.v3.usubscription_pb2 import ( + FetchSubscribersResponse, + FetchSubscriptionsRequest, + FetchSubscriptionsResponse, + SubscriptionResponse, + SubscriptionStatus, + UnsubscribeResponse, + Update, +) +from uprotocol.v1 import uattributes_pb2 +from uprotocol.v1.ucode_pb2 import UCode +from uprotocol.v1.umessage_pb2 import UMessage +from uprotocol.v1.uri_pb2 import UUri +from uprotocol.v1.ustatus_pb2 import UStatus + from tests.test_communication.mock_utransport import MockUTransport from uprotocol.client.usubscription.v3.inmemoryusubcriptionclient import ( InMemoryUSubscriptionClient, @@ -29,24 +44,10 @@ from uprotocol.communication.simplenotifier import SimpleNotifier from uprotocol.communication.upayload import UPayload from uprotocol.communication.ustatuserror import UStatusError -from uprotocol.core.usubscription.v3.usubscription_pb2 import ( - FetchSubscribersResponse, - FetchSubscriptionsRequest, - FetchSubscriptionsResponse, - SubscriptionResponse, - SubscriptionStatus, - UnsubscribeResponse, - Update, -) from uprotocol.transport.builder.umessagebuilder import UMessageBuilder from uprotocol.transport.ulistener import UListener from uprotocol.transport.utransport import UTransport from uprotocol.uri.serializer.uriserializer import UriSerializer -from uprotocol.v1 import uattributes_pb2 -from uprotocol.v1.ucode_pb2 import UCode -from uprotocol.v1.umessage_pb2 import UMessage -from uprotocol.v1.uri_pb2 import UUri -from uprotocol.v1.ustatus_pb2 import UStatus class MyListener(UListener): diff --git a/tests/test_communication/mock_utransport.py b/tests/test_communication/mock_utransport.py index 26f23b0..8d4c130 100644 --- a/tests/test_communication/mock_utransport.py +++ b/tests/test_communication/mock_utransport.py @@ -17,17 +17,12 @@ from concurrent.futures import ThreadPoolExecutor from typing import List -from uprotocol.communication.upayload import UPayload from uprotocol.core.usubscription.v3.usubscription_pb2 import ( SubscriptionRequest, SubscriptionResponse, SubscriptionStatus, UnsubscribeResponse, ) -from uprotocol.transport.builder.umessagebuilder import UMessageBuilder -from uprotocol.transport.ulistener import UListener -from uprotocol.transport.utransport import UTransport -from uprotocol.transport.validator.uattributesvalidator import UAttributesValidator from uprotocol.v1.uattributes_pb2 import ( UMessageType, ) @@ -35,6 +30,12 @@ from uprotocol.v1.umessage_pb2 import UMessage from uprotocol.v1.uri_pb2 import UUri from uprotocol.v1.ustatus_pb2 import UStatus + +from uprotocol.communication.upayload import UPayload +from uprotocol.transport.builder.umessagebuilder import UMessageBuilder +from uprotocol.transport.ulistener import UListener +from uprotocol.transport.utransport import UTransport +from uprotocol.transport.validator.uattributesvalidator import UAttributesValidator from uprotocol.validation.validationresult import ValidationResult diff --git a/tests/test_communication/test_calloptions.py b/tests/test_communication/test_calloptions.py index 16a93c2..be0c534 100644 --- a/tests/test_communication/test_calloptions.py +++ b/tests/test_communication/test_calloptions.py @@ -14,12 +14,13 @@ import unittest -from uprotocol.communication.calloptions import CallOptions from uprotocol.v1.uattributes_pb2 import ( UPriority, ) from uprotocol.v1.uri_pb2 import UUri +from uprotocol.communication.calloptions import CallOptions + class TestCallOptions(unittest.TestCase): def test_build_null_call_options(self): diff --git a/tests/test_communication/test_inmemoryrpcclient.py b/tests/test_communication/test_inmemoryrpcclient.py index e10ba3c..cb6d384 100644 --- a/tests/test_communication/test_inmemoryrpcclient.py +++ b/tests/test_communication/test_inmemoryrpcclient.py @@ -14,6 +14,11 @@ import unittest +from uprotocol.v1.uattributes_pb2 import UPriority +from uprotocol.v1.ucode_pb2 import UCode +from uprotocol.v1.uri_pb2 import UUri +from uprotocol.v1.ustatus_pb2 import UStatus + from tests.test_communication.mock_utransport import ( CommStatusTransport, CommStatusUCodeOKTransport, @@ -25,10 +30,6 @@ from uprotocol.communication.upayload import UPayload from uprotocol.communication.ustatuserror import UStatusError from uprotocol.transport.utransport import UTransport -from uprotocol.v1.uattributes_pb2 import UPriority -from uprotocol.v1.ucode_pb2 import UCode -from uprotocol.v1.uri_pb2 import UUri -from uprotocol.v1.ustatus_pb2 import UStatus class TestInMemoryRpcClient(unittest.IsolatedAsyncioTestCase): diff --git a/tests/test_communication/test_inmemoryrpcserver.py b/tests/test_communication/test_inmemoryrpcserver.py index c1f7f00..b88a50c 100644 --- a/tests/test_communication/test_inmemoryrpcserver.py +++ b/tests/test_communication/test_inmemoryrpcserver.py @@ -17,6 +17,11 @@ from typing import Dict from unittest.mock import AsyncMock, MagicMock +from uprotocol.v1.ucode_pb2 import UCode +from uprotocol.v1.umessage_pb2 import UMessage +from uprotocol.v1.uri_pb2 import UUri +from uprotocol.v1.ustatus_pb2 import UStatus + from tests.test_communication.mock_utransport import EchoUTransport from uprotocol.communication.calloptions import CallOptions from uprotocol.communication.inmemoryrpcclient import InMemoryRpcClient @@ -28,10 +33,6 @@ from uprotocol.transport.ulistener import UListener from uprotocol.transport.utransport import UTransport from uprotocol.uri.serializer.uriserializer import UriSerializer -from uprotocol.v1.ucode_pb2 import UCode -from uprotocol.v1.umessage_pb2 import UMessage -from uprotocol.v1.uri_pb2 import UUri -from uprotocol.v1.ustatus_pb2 import UStatus class TestInMemoryRpcServer(unittest.IsolatedAsyncioTestCase): diff --git a/tests/test_communication/test_publisher.py b/tests/test_communication/test_publisher.py index 87e7ede..59e1051 100644 --- a/tests/test_communication/test_publisher.py +++ b/tests/test_communication/test_publisher.py @@ -14,11 +14,12 @@ import unittest -from tests.test_communication.mock_utransport import MockUTransport -from uprotocol.communication.uclient import UClient from uprotocol.v1.ucode_pb2 import UCode from uprotocol.v1.uri_pb2 import UUri +from tests.test_communication.mock_utransport import MockUTransport +from uprotocol.communication.uclient import UClient + class TestPublisher(unittest.IsolatedAsyncioTestCase): async def test_send_publish(self): diff --git a/tests/test_communication/test_rpcmapper.py b/tests/test_communication/test_rpcmapper.py index 1202229..455ec13 100644 --- a/tests/test_communication/test_rpcmapper.py +++ b/tests/test_communication/test_rpcmapper.py @@ -14,14 +14,15 @@ import unittest +from uprotocol.v1.ucode_pb2 import UCode +from uprotocol.v1.uri_pb2 import UUri +from uprotocol.v1.ustatus_pb2 import UStatus + from tests.test_communication.mock_utransport import MockUTransport from uprotocol.communication.inmemoryrpcclient import InMemoryRpcClient from uprotocol.communication.rpcmapper import RpcMapper from uprotocol.communication.upayload import UPayload from uprotocol.communication.ustatuserror import UStatusError -from uprotocol.v1.ucode_pb2 import UCode -from uprotocol.v1.uri_pb2 import UUri -from uprotocol.v1.ustatus_pb2 import UStatus class TestRpcMapper(unittest.IsolatedAsyncioTestCase): diff --git a/tests/test_communication/test_rpcresult.py b/tests/test_communication/test_rpcresult.py index 9030aae..9ded4a3 100644 --- a/tests/test_communication/test_rpcresult.py +++ b/tests/test_communication/test_rpcresult.py @@ -14,10 +14,11 @@ import unittest -from uprotocol.communication.rpcresult import RpcResult from uprotocol.v1.ucode_pb2 import UCode from uprotocol.v1.ustatus_pb2 import UStatus +from uprotocol.communication.rpcresult import RpcResult + class TestRpcResult(unittest.TestCase): def test_is_success_on_success(self): diff --git a/tests/test_communication/test_simplenotifier.py b/tests/test_communication/test_simplenotifier.py index 6fe630e..eefcd71 100644 --- a/tests/test_communication/test_simplenotifier.py +++ b/tests/test_communication/test_simplenotifier.py @@ -15,15 +15,16 @@ import unittest from unittest.mock import MagicMock +from uprotocol.v1.ucode_pb2 import UCode +from uprotocol.v1.umessage_pb2 import UMessage +from uprotocol.v1.uri_pb2 import UUri +from uprotocol.v1.ustatus_pb2 import UStatus + from uprotocol.communication.calloptions import CallOptions from uprotocol.communication.simplenotifier import SimpleNotifier from uprotocol.communication.upayload import UPayload from uprotocol.transport.ulistener import UListener from uprotocol.transport.utransport import UTransport -from uprotocol.v1.ucode_pb2 import UCode -from uprotocol.v1.umessage_pb2 import UMessage -from uprotocol.v1.uri_pb2 import UUri -from uprotocol.v1.ustatus_pb2 import UStatus class TestSimpleNotifier(unittest.IsolatedAsyncioTestCase): diff --git a/tests/test_communication/test_simplepublisher.py b/tests/test_communication/test_simplepublisher.py index f1039b8..4e4fe25 100644 --- a/tests/test_communication/test_simplepublisher.py +++ b/tests/test_communication/test_simplepublisher.py @@ -15,13 +15,14 @@ import unittest from unittest.mock import MagicMock -from uprotocol.communication.simplepublisher import SimplePublisher -from uprotocol.communication.upayload import UPayload -from uprotocol.transport.utransport import UTransport from uprotocol.v1.ucode_pb2 import UCode from uprotocol.v1.uri_pb2 import UUri from uprotocol.v1.ustatus_pb2 import UStatus +from uprotocol.communication.simplepublisher import SimplePublisher +from uprotocol.communication.upayload import UPayload +from uprotocol.transport.utransport import UTransport + class TestSimplePublisher(unittest.IsolatedAsyncioTestCase): def setUp(self): diff --git a/tests/test_communication/test_uclient.py b/tests/test_communication/test_uclient.py index 6b15a3c..afea3a8 100644 --- a/tests/test_communication/test_uclient.py +++ b/tests/test_communication/test_uclient.py @@ -16,6 +16,11 @@ import unittest from unittest.mock import MagicMock, create_autospec +from uprotocol.v1.ucode_pb2 import UCode +from uprotocol.v1.umessage_pb2 import UMessage +from uprotocol.v1.uri_pb2 import UUri +from uprotocol.v1.ustatus_pb2 import UStatus + from tests.test_communication.mock_utransport import EchoUTransport, MockUTransport, TimeoutUTransport from uprotocol.communication.calloptions import CallOptions from uprotocol.communication.requesthandler import RequestHandler @@ -23,10 +28,6 @@ from uprotocol.communication.upayload import UPayload from uprotocol.communication.ustatuserror import UStatusError from uprotocol.transport.ulistener import UListener -from uprotocol.v1.ucode_pb2 import UCode -from uprotocol.v1.umessage_pb2 import UMessage -from uprotocol.v1.uri_pb2 import UUri -from uprotocol.v1.ustatus_pb2 import UStatus class MyListener(UListener): diff --git a/tests/test_communication/test_upayload.py b/tests/test_communication/test_upayload.py index 6726164..8b6c0ab 100644 --- a/tests/test_communication/test_upayload.py +++ b/tests/test_communication/test_upayload.py @@ -15,14 +15,14 @@ import unittest from google.protobuf import message - -from uprotocol.communication.upayload import UPayload from uprotocol.v1.uattributes_pb2 import ( UPayloadFormat, ) from uprotocol.v1.umessage_pb2 import UMessage from uprotocol.v1.uri_pb2 import UUri +from uprotocol.communication.upayload import UPayload + class TestUPayload(unittest.TestCase): def test_is_empty_with_null_upayload(self): diff --git a/tests/test_communication/test_ustatuserror.py b/tests/test_communication/test_ustatuserror.py index fad0dc5..44e0793 100644 --- a/tests/test_communication/test_ustatuserror.py +++ b/tests/test_communication/test_ustatuserror.py @@ -14,10 +14,11 @@ import unittest -from uprotocol.communication.ustatuserror import UStatusError from uprotocol.v1.ucode_pb2 import UCode from uprotocol.v1.ustatus_pb2 import UStatus +from uprotocol.communication.ustatuserror import UStatusError + class TestUStatusError(unittest.TestCase): def test_ustatus_exception_constructor(self): diff --git a/tests/test_transport/test_builder/test_umessagebuilder.py b/tests/test_transport/test_builder/test_umessagebuilder.py index 5b8d794..6de2909 100644 --- a/tests/test_transport/test_builder/test_umessagebuilder.py +++ b/tests/test_transport/test_builder/test_umessagebuilder.py @@ -15,10 +15,6 @@ import unittest from google.protobuf.any_pb2 import Any - -from uprotocol.communication.upayload import UPayload -from uprotocol.transport.builder.umessagebuilder import UMessageBuilder -from uprotocol.uuid.factory.uuidfactory import Factories from uprotocol.v1.uattributes_pb2 import ( UAttributes, UMessageType, @@ -29,6 +25,10 @@ from uprotocol.v1.umessage_pb2 import UMessage from uprotocol.v1.uri_pb2 import UUri +from uprotocol.communication.upayload import UPayload +from uprotocol.transport.builder.umessagebuilder import UMessageBuilder +from uprotocol.uuid.factory.uuidfactory import Factories + def build_source(): return UUri(ue_id=2, ue_version_major=1, resource_id=0) diff --git a/tests/test_transport/test_utransport.py b/tests/test_transport/test_utransport.py index a6276d1..63e0677 100644 --- a/tests/test_transport/test_utransport.py +++ b/tests/test_transport/test_utransport.py @@ -14,13 +14,14 @@ import unittest -from uprotocol.transport.ulistener import UListener -from uprotocol.transport.utransport import UTransport from uprotocol.v1.ucode_pb2 import UCode from uprotocol.v1.umessage_pb2 import UMessage from uprotocol.v1.uri_pb2 import UUri from uprotocol.v1.ustatus_pb2 import UStatus +from uprotocol.transport.ulistener import UListener +from uprotocol.transport.utransport import UTransport + class MyListener(UListener): async def on_receive(self, message): diff --git a/tests/test_transport/test_validator/test_uattributesvalidator.py b/tests/test_transport/test_validator/test_uattributesvalidator.py index c23348b..2013954 100644 --- a/tests/test_transport/test_validator/test_uattributesvalidator.py +++ b/tests/test_transport/test_validator/test_uattributesvalidator.py @@ -15,12 +15,13 @@ import time import unittest -from uprotocol.transport.builder.umessagebuilder import UMessageBuilder -from uprotocol.transport.validator.uattributesvalidator import UAttributesValidator, Validators from uprotocol.v1.uattributes_pb2 import UAttributes, UMessageType, UPriority from uprotocol.v1.uri_pb2 import UUri from uprotocol.v1.uuid_pb2 import UUID +from uprotocol.transport.builder.umessagebuilder import UMessageBuilder +from uprotocol.transport.validator.uattributesvalidator import UAttributesValidator, Validators + def build_default_uuri(): return UUri(ue_id=1, ue_version_major=1, resource_id=0) diff --git a/tests/test_uri/test_factory/test_uri_factory.py b/tests/test_uri/test_factory/test_uri_factory.py index 2c7c829..57ebde3 100644 --- a/tests/test_uri/test_factory/test_uri_factory.py +++ b/tests/test_uri/test_factory/test_uri_factory.py @@ -15,6 +15,7 @@ import unittest from uprotocol.core.usubscription.v3 import usubscription_pb2 + from uprotocol.uri.factory.uri_factory import UriFactory diff --git a/tests/test_uri/test_serializer/test_uriserializer.py b/tests/test_uri/test_serializer/test_uriserializer.py index cb0adbf..4fe3f38 100644 --- a/tests/test_uri/test_serializer/test_uriserializer.py +++ b/tests/test_uri/test_serializer/test_uriserializer.py @@ -14,9 +14,10 @@ import unittest +from uprotocol.v1.uri_pb2 import UUri + from uprotocol.uri.serializer.uriserializer import UriSerializer from uprotocol.uri.validator.urivalidator import UriValidator -from uprotocol.v1.uri_pb2 import UUri class TestUriSerializer(unittest.IsolatedAsyncioTestCase): diff --git a/tests/test_uri/test_validator/test_urivalidator.py b/tests/test_uri/test_validator/test_urivalidator.py index 1ee5624..7e70cd9 100644 --- a/tests/test_uri/test_validator/test_urivalidator.py +++ b/tests/test_uri/test_validator/test_urivalidator.py @@ -14,9 +14,10 @@ import unittest +from uprotocol.v1.uri_pb2 import UUri + from uprotocol.uri.serializer.uriserializer import UriSerializer from uprotocol.uri.validator.urivalidator import UriValidator -from uprotocol.v1.uri_pb2 import UUri class TestUriValidator(unittest.IsolatedAsyncioTestCase): diff --git a/tests/test_uuid/test_factory/test_uuidfactory.py b/tests/test_uuid/test_factory/test_uuidfactory.py index 94a255e..29a7093 100644 --- a/tests/test_uuid/test_factory/test_uuidfactory.py +++ b/tests/test_uuid/test_factory/test_uuidfactory.py @@ -15,10 +15,11 @@ import unittest from datetime import datetime, timedelta, timezone +from uprotocol.v1.uuid_pb2 import UUID + from uprotocol.uuid.factory.uuidfactory import Factories from uprotocol.uuid.factory.uuidutils import UUIDUtils, Version from uprotocol.uuid.serializer.uuidserializer import UuidSerializer -from uprotocol.v1.uuid_pb2 import UUID class TestUUIDFactory(unittest.IsolatedAsyncioTestCase): diff --git a/tests/test_uuid/test_factory/test_uuidutils.py b/tests/test_uuid/test_factory/test_uuidutils.py index e35bc46..7bd8e56 100644 --- a/tests/test_uuid/test_factory/test_uuidutils.py +++ b/tests/test_uuid/test_factory/test_uuidutils.py @@ -16,9 +16,10 @@ import time import unittest +from uprotocol.v1.uuid_pb2 import UUID + from uprotocol.uuid.factory.uuidfactory import Factories from uprotocol.uuid.factory.uuidutils import UUIDUtils -from uprotocol.v1.uuid_pb2 import UUID def create_id(): diff --git a/tests/test_uuid/test_validator/test_uuidvalidator.py b/tests/test_uuid/test_validator/test_uuidvalidator.py index 09157a3..acd2757 100644 --- a/tests/test_uuid/test_validator/test_uuidvalidator.py +++ b/tests/test_uuid/test_validator/test_uuidvalidator.py @@ -15,12 +15,13 @@ import unittest from datetime import datetime, timezone +from uprotocol.v1.ucode_pb2 import UCode +from uprotocol.v1.uuid_pb2 import UUID + from uprotocol.uuid.factory.uuidfactory import Factories from uprotocol.uuid.factory.uuidutils import UUIDUtils from uprotocol.uuid.serializer.uuidserializer import UuidSerializer from uprotocol.uuid.validator.uuidvalidator import UuidValidator, Validators -from uprotocol.v1.ucode_pb2 import UCode -from uprotocol.v1.uuid_pb2 import UUID from uprotocol.validation.validationresult import ValidationResult diff --git a/tests/test_validation/test_validationresult.py b/tests/test_validation/test_validationresult.py index d867541..45173f4 100644 --- a/tests/test_validation/test_validationresult.py +++ b/tests/test_validation/test_validationresult.py @@ -16,6 +16,7 @@ from uprotocol.v1.ucode_pb2 import UCode from uprotocol.v1.ustatus_pb2 import UStatus + from uprotocol.validation.validationresult import ValidationResult