From 54a7d61bd26ac170fd35dd821a8305792faaf370 Mon Sep 17 00:00:00 2001 From: "reportportal.io" Date: Mon, 10 Nov 2025 13:51:57 +0000 Subject: [PATCH 1/5] Changelog update --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dfee6a5..f07f9d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # Changelog ## [Unreleased] + +## [5.6.6] ### Added - OAuth 2.0 Password Grant authentication, by @HardNorth From 0629c39233f7183defbe0d85979aa09f0d0a9a50 Mon Sep 17 00:00:00 2001 From: "reportportal.io" Date: Mon, 10 Nov 2025 13:51:58 +0000 Subject: [PATCH 2/5] Version update --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 1dfea31..e7967e3 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ from setuptools import find_packages, setup -__version__ = "5.6.6" +__version__ = "5.6.7" TYPE_STUBS = ["*.pyi"] From e857dd11a5409e4f7375ee3554e554a982ec1be2 Mon Sep 17 00:00:00 2001 From: Vadzim Hushchanskou Date: Tue, 11 Nov 2025 16:44:16 +0300 Subject: [PATCH 3/5] `log_batch_payload_size` was renamed to `log_batch_payload_limit` as it was originally supposed --- CHANGELOG.md | 2 ++ reportportal_client/__init__.py | 20 ++++++++--- reportportal_client/client.py | 60 ++++++++++++++++----------------- tests/test_client.py | 4 +-- tests/test_client_factory.py | 17 ++++++++++ 5 files changed, 67 insertions(+), 36 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f07f9d1..0c6088e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # Changelog ## [Unreleased] +### Changed +- `log_batch_payload_size` was renamed to `log_batch_payload_limit` as it was originally supposed, by @HardNorth ## [5.6.6] ### Added diff --git a/reportportal_client/__init__.py b/reportportal_client/__init__.py index 1d2be53..9a66feb 100644 --- a/reportportal_client/__init__.py +++ b/reportportal_client/__init__.py @@ -14,6 +14,7 @@ """This package is the base package for ReportPortal client.""" import sys +import warnings from typing import Optional, Tuple, TypedDict, Union # noinspection PyUnreachableCode @@ -120,14 +121,25 @@ def create_client( execution. :return: ReportPortal Client instance. """ + my_kwargs = kwargs.copy() + if "log_batch_payload_size" in my_kwargs: + warnings.warn( + message="Your agent is using `log_batch_payload_size` property which was introduced by mistake. " + "The real property name is `log_batch_payload_limit`. Please consider Agent version update.", + category=DeprecationWarning, + stacklevel=2, + ) + if "log_batch_payload_limit" not in my_kwargs: + my_kwargs["log_batch_payload_limit"] = my_kwargs.pop("log_batch_payload_size") + if client_type is ClientType.SYNC: - return RPClient(endpoint, project, **kwargs) + return RPClient(endpoint, project, **my_kwargs) if client_type is ClientType.ASYNC: - return AsyncRPClient(endpoint, project, **kwargs) + return AsyncRPClient(endpoint, project, **my_kwargs) if client_type is ClientType.ASYNC_THREAD: - return ThreadedRPClient(endpoint, project, **kwargs) + return ThreadedRPClient(endpoint, project, **my_kwargs) if client_type is ClientType.ASYNC_BATCHED: - return BatchedRPClient(endpoint, project, **kwargs) + return BatchedRPClient(endpoint, project, **my_kwargs) raise ValueError(f"Unknown ReportPortal Client type requested: {client_type}") diff --git a/reportportal_client/client.py b/reportportal_client/client.py index 6252258..63a8d51 100644 --- a/reportportal_client/client.py +++ b/reportportal_client/client.py @@ -390,7 +390,7 @@ class RPClient(RP): __launch_uuid: str use_own_launch: bool log_batch_size: int - log_batch_payload_size: int + log_batch_payload_limit: int __project: str api_key: Optional[str] oauth_uri: Optional[str] @@ -470,7 +470,7 @@ def __init__( max_pool_size: int = 50, launch_uuid: str = None, http_timeout: Union[float, Tuple[float, float]] = (10, 10), - log_batch_payload_size: int = MAX_LOG_BATCH_PAYLOAD_SIZE, + log_batch_payload_limit: int = MAX_LOG_BATCH_PAYLOAD_SIZE, mode: str = "DEFAULT", launch_uuid_print: bool = False, print_output: OutputType = OutputType.STDOUT, @@ -487,31 +487,31 @@ def __init__( ) -> None: """Initialize the class instance with arguments. - :param endpoint: Endpoint of the ReportPortal service. - :param project: Project name to report to. - :param api_key: Authorization API key. - :param oauth_uri: OAuth 2.0 token endpoint URI (for OAuth authentication). - :param oauth_username: Username for OAuth 2.0 authentication. - :param oauth_password: Password for OAuth 2.0 authentication. - :param oauth_client_id: OAuth 2.0 client ID. - :param oauth_client_secret: OAuth 2.0 client secret (optional). - :param oauth_scope: OAuth 2.0 scope (optional). - :param log_batch_size: Option to set the maximum number of logs that can be processed in one - batch. - :param is_skipped_an_issue: Option to mark skipped tests as not 'To Investigate' items on the - server side. - :param verify_ssl: Option to skip ssl verification. - :param retries: Number of retry attempts to make in case of connection / server errors. - :param max_pool_size: Option to set the maximum number of connections to save the pool. - :param launch_uuid: A launch UUID to use instead of starting own one. - :param http_timeout: A float in seconds for connect and read timeout. Use a Tuple to - specific connect and read separately. - :param log_batch_payload_size: Maximum size in bytes of logs that can be processed in one batch. - :param mode: Launch mode, all Launches started by the client will be in that mode. - :param launch_uuid_print: Print Launch UUID into passed TextIO or by default to stdout. - :param print_output: Set output stream for Launch UUID printing. - :param log_batcher: Use existing LogBatcher instance instead of creation of own one. - :param truncate_attributes: Truncate test item attributes to default maximum length. + :param endpoint: Endpoint of the ReportPortal service. + :param project: Project name to report to. + :param api_key: Authorization API key. + :param oauth_uri: OAuth 2.0 token endpoint URI (for OAuth authentication). + :param oauth_username: Username for OAuth 2.0 authentication. + :param oauth_password: Password for OAuth 2.0 authentication. + :param oauth_client_id: OAuth 2.0 client ID. + :param oauth_client_secret: OAuth 2.0 client secret (optional). + :param oauth_scope: OAuth 2.0 scope (optional). + :param log_batch_size: Option to set the maximum number of logs that can be processed in one + batch. + :param is_skipped_an_issue: Option to mark skipped tests as not 'To Investigate' items on the + server side. + :param verify_ssl: Option to skip ssl verification. + :param retries: Number of retry attempts to make in case of connection / server errors. + :param max_pool_size: Option to set the maximum number of connections to save the pool. + :param launch_uuid: A launch UUID to use instead of starting own one. + :param http_timeout: A float in seconds for connect and read timeout. Use a Tuple to + specific connect and read separately. + :param log_batch_payload_limit: Maximum size in bytes of logs that can be processed in one batch. + :param mode: Launch mode, all Launches started by the client will be in that mode. + :param launch_uuid_print: Print Launch UUID into passed TextIO or by default to stdout. + :param print_output: Set output stream for Launch UUID printing. + :param log_batcher: Use existing LogBatcher instance instead of creation of own one. + :param truncate_attributes: Truncate test item attributes to default maximum length. """ set_current(self) self.api_v1, self.api_v2 = "v1", "v2" @@ -533,8 +533,8 @@ def __init__( self.__launch_uuid = launch_id self.use_own_launch = not bool(self.__launch_uuid) self.log_batch_size = log_batch_size - self.log_batch_payload_size = log_batch_payload_size - self._log_batcher = log_batcher or LogBatcher(self.log_batch_size, self.log_batch_payload_size) + self.log_batch_payload_limit = log_batch_payload_limit + self._log_batcher = log_batcher or LogBatcher(self.log_batch_size, self.log_batch_payload_limit) self.verify_ssl = verify_ssl self.retries = retries self.max_pool_size = max_pool_size @@ -1016,7 +1016,7 @@ def clone(self) -> "RPClient": max_pool_size=self.max_pool_size, launch_uuid=self.__launch_uuid, http_timeout=self.http_timeout, - log_batch_payload_size=self.log_batch_payload_size, + log_batch_payload_limit=self.log_batch_payload_limit, mode=self.mode, log_batcher=self._log_batcher, oauth_uri=self.oauth_uri, diff --git a/tests/test_client.py b/tests/test_client.py index 347feef..d4f47ea 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -155,7 +155,7 @@ def test_clone(): and cloned.launch_uuid == kwargs["launch_id"] and cloned.launch_id == kwargs["launch_id"] and cloned.http_timeout == kwargs["http_timeout"] - and cloned.log_batch_payload_size == kwargs["log_batch_payload_size"] + and cloned.log_batch_payload_limit == kwargs["log_batch_payload_size"] and cloned.mode == kwargs["mode"] ) assert cloned._item_stack.qsize() == 1 and client.current_item() == cloned.current_item() @@ -430,7 +430,7 @@ def test_clone_with_oauth(): and cloned.launch_uuid == kwargs["launch_id"] and cloned.launch_id == kwargs["launch_id"] and cloned.http_timeout == kwargs["http_timeout"] - and cloned.log_batch_payload_size == kwargs["log_batch_payload_size"] + and cloned.log_batch_payload_limit == kwargs["log_batch_payload_size"] and cloned.mode == kwargs["mode"] ) assert cloned._item_stack.qsize() == 1 and client.current_item() == cloned.current_item() diff --git a/tests/test_client_factory.py b/tests/test_client_factory.py index 3f9c354..6823f18 100644 --- a/tests/test_client_factory.py +++ b/tests/test_client_factory.py @@ -29,3 +29,20 @@ def test_client_factory_types(requested_type: ClientType, expected_type): result = create_client(requested_type, "http://endpoint", "default_personal", api_key="test_api_key") assert isinstance(result, expected_type) + + +def test_client_factory_payload_size_warning(): + payload_size = 123 + with pytest.warns(DeprecationWarning) as warnings: + # noinspection PyArgumentList + client = create_client( + ClientType.SYNC, + "http://endpoint", + "default_personal", + api_key="test_api_key", + log_batch_payload_size=payload_size, + ) + assert "Your agent is using `log_batch_payload_size` property" in warnings[0].message.args[0] + + # noinspection PyUnresolvedReferences + assert client.log_batch_payload_limit == payload_size From f0c80477137e2ef6d04ff4b723f13d225f7cee40 Mon Sep 17 00:00:00 2001 From: Vadzim Hushchanskou Date: Tue, 11 Nov 2025 16:46:56 +0300 Subject: [PATCH 4/5] Add more tests --- tests/test_client_factory.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/tests/test_client_factory.py b/tests/test_client_factory.py index 6823f18..649afff 100644 --- a/tests/test_client_factory.py +++ b/tests/test_client_factory.py @@ -31,12 +31,21 @@ def test_client_factory_types(requested_type: ClientType, expected_type): assert isinstance(result, expected_type) -def test_client_factory_payload_size_warning(): +@pytest.mark.parametrize( + "client_type", + [ + ClientType.SYNC, + ClientType.ASYNC, + ClientType.ASYNC_THREAD, + ClientType.ASYNC_BATCHED, + ], +) +def test_client_factory_payload_size_warning(client_type: ClientType): payload_size = 123 with pytest.warns(DeprecationWarning) as warnings: # noinspection PyArgumentList client = create_client( - ClientType.SYNC, + client_type, "http://endpoint", "default_personal", api_key="test_api_key", From 46575164b87b7753e77c3d1b3e3834d25d954377 Mon Sep 17 00:00:00 2001 From: Vadzim Hushchanskou Date: Tue, 11 Nov 2025 16:48:50 +0300 Subject: [PATCH 5/5] Fix tests --- tests/test_client.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_client.py b/tests/test_client.py index d4f47ea..b899cdd 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -136,7 +136,7 @@ def test_clone(): "max_pool_size": 30, "launch_id": "test-123", "http_timeout": (30, 30), - "log_batch_payload_size": 1000000, + "log_batch_payload_limit": 1000000, "mode": "DEBUG", } client = RPClient(*args, **kwargs) @@ -155,7 +155,7 @@ def test_clone(): and cloned.launch_uuid == kwargs["launch_id"] and cloned.launch_id == kwargs["launch_id"] and cloned.http_timeout == kwargs["http_timeout"] - and cloned.log_batch_payload_limit == kwargs["log_batch_payload_size"] + and cloned.log_batch_payload_limit == kwargs["log_batch_payload_limit"] and cloned.mode == kwargs["mode"] ) assert cloned._item_stack.qsize() == 1 and client.current_item() == cloned.current_item() @@ -405,7 +405,7 @@ def test_clone_with_oauth(): "max_pool_size": 30, "launch_id": "test-123", "http_timeout": (30, 30), - "log_batch_payload_size": 1000000, + "log_batch_payload_limit": 1000000, "mode": "DEBUG", } client = RPClient(*args, **kwargs) @@ -430,7 +430,7 @@ def test_clone_with_oauth(): and cloned.launch_uuid == kwargs["launch_id"] and cloned.launch_id == kwargs["launch_id"] and cloned.http_timeout == kwargs["http_timeout"] - and cloned.log_batch_payload_limit == kwargs["log_batch_payload_size"] + and cloned.log_batch_payload_limit == kwargs["log_batch_payload_limit"] and cloned.mode == kwargs["mode"] ) assert cloned._item_stack.qsize() == 1 and client.current_item() == cloned.current_item()