From 67b43cec22977d6c71539e0fcdd7b9eaf4c0fb75 Mon Sep 17 00:00:00 2001 From: Simon Hornby Date: Fri, 5 Sep 2025 15:10:15 +0200 Subject: [PATCH 1/4] chore: test that checks if the client spec version is sent --- tests/unit_tests/test_client.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/unit_tests/test_client.py b/tests/unit_tests/test_client.py index e63edece..55b06b03 100644 --- a/tests/unit_tests/test_client.py +++ b/tests/unit_tests/test_client.py @@ -1,4 +1,5 @@ import json +import re import threading import time import uuid @@ -1487,3 +1488,21 @@ def test_uc_bootstrap_initializes_offline_connector(): assert unleash_client.is_enabled("testFlag") unleash_client.destroy() + +@responses.activate +def test_spec_header_is_sent_when_fetching_features(): + responses.add( + responses.GET, URL + FEATURES_URL, json=MOCK_FEATURE_RESPONSE, status=200 + ) + + unleash_client = UnleashClient( + URL, APP_NAME, disable_metrics=True, disable_registration=True + ) + unleash_client.initialize_client() + client_spec = responses.calls[0].request.headers[ + "Unleash-Client-Spec" + ] + + ## assert that the client spec looks like a semver string + semver_regex = r"^\d+\.\d+\.\d+(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$" + assert re.match(semver_regex, client_spec) From daa0f9c5a18f614ce077fb28dfacfe19efe59fe3 Mon Sep 17 00:00:00 2001 From: Simon Hornby Date: Fri, 5 Sep 2025 15:10:44 +0200 Subject: [PATCH 2/4] fix: include client spec header on feature fetches --- UnleashClient/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/UnleashClient/__init__.py b/UnleashClient/__init__.py index a7435335..2d91ff42 100644 --- a/UnleashClient/__init__.py +++ b/UnleashClient/__init__.py @@ -23,6 +23,7 @@ StreamingConnector, ) from UnleashClient.constants import ( + APPLICATION_HEADERS, DISABLED_VARIATION, ETAG, METRIC_LAST_SENT_TIME, @@ -290,6 +291,7 @@ def initialize_client(self, fetch_toggles: bool = True) -> None: start_scheduler = False base_headers = { **self.unleash_custom_headers, + **APPLICATION_HEADERS, "unleash-connection-id": self.connection_id, "unleash-appname": self.unleash_app_name, "unleash-instanceid": self.unleash_instance_id, From ca4bb2b35eff4efe37b6034eba0043ff33c56656 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 5 Sep 2025 13:12:29 +0000 Subject: [PATCH 3/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/unit_tests/test_client.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/unit_tests/test_client.py b/tests/unit_tests/test_client.py index 55b06b03..2d331f1b 100644 --- a/tests/unit_tests/test_client.py +++ b/tests/unit_tests/test_client.py @@ -1489,6 +1489,7 @@ def test_uc_bootstrap_initializes_offline_connector(): unleash_client.destroy() + @responses.activate def test_spec_header_is_sent_when_fetching_features(): responses.add( @@ -1499,9 +1500,7 @@ def test_spec_header_is_sent_when_fetching_features(): URL, APP_NAME, disable_metrics=True, disable_registration=True ) unleash_client.initialize_client() - client_spec = responses.calls[0].request.headers[ - "Unleash-Client-Spec" - ] + client_spec = responses.calls[0].request.headers["Unleash-Client-Spec"] ## assert that the client spec looks like a semver string semver_regex = r"^\d+\.\d+\.\d+(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$" From 97973c0b37bf49b571c0fbc9b89ceea18eb28430 Mon Sep 17 00:00:00 2001 From: Simon Hornby Date: Fri, 5 Sep 2025 15:13:01 +0200 Subject: [PATCH 4/4] chore: format --- tests/unit_tests/test_client.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/unit_tests/test_client.py b/tests/unit_tests/test_client.py index 55b06b03..2d331f1b 100644 --- a/tests/unit_tests/test_client.py +++ b/tests/unit_tests/test_client.py @@ -1489,6 +1489,7 @@ def test_uc_bootstrap_initializes_offline_connector(): unleash_client.destroy() + @responses.activate def test_spec_header_is_sent_when_fetching_features(): responses.add( @@ -1499,9 +1500,7 @@ def test_spec_header_is_sent_when_fetching_features(): URL, APP_NAME, disable_metrics=True, disable_registration=True ) unleash_client.initialize_client() - client_spec = responses.calls[0].request.headers[ - "Unleash-Client-Spec" - ] + client_spec = responses.calls[0].request.headers["Unleash-Client-Spec"] ## assert that the client spec looks like a semver string semver_regex = r"^\d+\.\d+\.\d+(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$"