Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/glean/api_client/_hooks/x_glean.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class XGlean(BeforeRequestHook):

This hook adds the following headers when configured:
- X-Glean-Exclude-Deprecated-After: Excludes API endpoints deprecated after this date
- X-Glean-Experimental: Enables experimental API features
- X-Glean-Include-Experimental: Enables experimental API features

Configuration can be done via environment variables or SDK constructor options.
Environment variables take precedence over SDK constructor options.
Expand Down Expand Up @@ -65,6 +65,6 @@ def before_request(
request.headers["X-Glean-Exclude-Deprecated-After"] = deprecated_value

if experimental_value:
request.headers["X-Glean-Experimental"] = experimental_value
request.headers["X-Glean-Include-Experimental"] = experimental_value

return request
26 changes: 13 additions & 13 deletions tests/test_x_glean_hook.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ def test_no_headers_when_neither_options_nor_env_vars_set(self):
result = hook.before_request(context, request)

assert "X-Glean-Exclude-Deprecated-After" not in result.headers
assert "X-Glean-Experimental" not in result.headers
assert "X-Glean-Include-Experimental" not in result.headers

def test_sets_deprecated_header_from_sdk_option(self):
"""Should set X-Glean-Exclude-Deprecated-After header from SDK option."""
Expand All @@ -85,24 +85,24 @@ def test_sets_deprecated_header_from_sdk_option(self):
assert result.headers.get("X-Glean-Exclude-Deprecated-After") == "2026-10-15"

def test_sets_experimental_header_when_include_experimental_is_true(self):
"""Should set X-Glean-Experimental header when includeExperimental is True."""
"""Should set X-Glean-Include-Experimental header when includeExperimental is True."""
hook = XGlean()
request = create_mock_request()
context = create_mock_context(include_experimental=True)

result = hook.before_request(context, request)

assert result.headers.get("X-Glean-Experimental") == "true"
assert result.headers.get("X-Glean-Include-Experimental") == "true"

def test_no_experimental_header_when_include_experimental_is_false(self):
"""Should not set X-Glean-Experimental header when includeExperimental is False."""
"""Should not set X-Glean-Include-Experimental header when includeExperimental is False."""
hook = XGlean()
request = create_mock_request()
context = create_mock_context(include_experimental=False)

result = hook.before_request(context, request)

assert "X-Glean-Experimental" not in result.headers
assert "X-Glean-Include-Experimental" not in result.headers

def test_sets_both_headers_when_both_options_provided(self):
"""Should set both headers when both options are provided."""
Expand All @@ -116,7 +116,7 @@ def test_sets_both_headers_when_both_options_provided(self):
result = hook.before_request(context, request)

assert result.headers.get("X-Glean-Exclude-Deprecated-After") == "2026-10-15"
assert result.headers.get("X-Glean-Experimental") == "true"
assert result.headers.get("X-Glean-Include-Experimental") == "true"

def test_sets_deprecated_header_from_env_var(self):
"""Should set X-Glean-Exclude-Deprecated-After header from environment variable."""
Expand All @@ -131,7 +131,7 @@ def test_sets_deprecated_header_from_env_var(self):
assert result.headers.get("X-Glean-Exclude-Deprecated-After") == "2027-01-01"

def test_sets_experimental_header_from_env_var(self):
"""Should set X-Glean-Experimental header from environment variable."""
"""Should set X-Glean-Include-Experimental header from environment variable."""
os.environ["X_GLEAN_INCLUDE_EXPERIMENTAL"] = "true"

hook = XGlean()
Expand All @@ -140,7 +140,7 @@ def test_sets_experimental_header_from_env_var(self):

result = hook.before_request(context, request)

assert result.headers.get("X-Glean-Experimental") == "true"
assert result.headers.get("X-Glean-Include-Experimental") == "true"

def test_sets_both_headers_from_env_vars(self):
"""Should set both headers from environment variables."""
Expand All @@ -154,7 +154,7 @@ def test_sets_both_headers_from_env_vars(self):
result = hook.before_request(context, request)

assert result.headers.get("X-Glean-Exclude-Deprecated-After") == "2027-06-15"
assert result.headers.get("X-Glean-Experimental") == "true"
assert result.headers.get("X-Glean-Include-Experimental") == "true"

def test_env_var_takes_precedence_for_deprecated(self):
"""Environment variable should take precedence over SDK option for deprecated."""
Expand All @@ -178,7 +178,7 @@ def test_env_var_takes_precedence_for_experimental(self):

result = hook.before_request(context, request)

assert result.headers.get("X-Glean-Experimental") == "true"
assert result.headers.get("X-Glean-Include-Experimental") == "true"

def test_env_vars_take_precedence_for_both_headers(self):
"""Environment variables should take precedence for both headers when all are set."""
Expand All @@ -195,7 +195,7 @@ def test_env_vars_take_precedence_for_both_headers(self):
result = hook.before_request(context, request)

assert result.headers.get("X-Glean-Exclude-Deprecated-After") == "2028-01-01"
assert result.headers.get("X-Glean-Experimental") == "true"
assert result.headers.get("X-Glean-Include-Experimental") == "true"

def test_preserves_existing_headers(self):
"""Should preserve existing headers when adding X-Glean headers."""
Expand All @@ -215,7 +215,7 @@ def test_preserves_existing_headers(self):
assert result.headers.get("Authorization") == "Bearer token"
assert result.headers.get("Content-Type") == "application/json"
assert result.headers.get("X-Glean-Exclude-Deprecated-After") == "2026-10-15"
assert result.headers.get("X-Glean-Experimental") == "true"
assert result.headers.get("X-Glean-Include-Experimental") == "true"

def test_returns_httpx_request_instance(self):
"""Should return an httpx.Request instance."""
Expand Down Expand Up @@ -257,7 +257,7 @@ def test_handles_multipart_streaming_request(self):

result = hook.before_request(context, request)

assert result.headers.get("X-Glean-Experimental") == "true"
assert result.headers.get("X-Glean-Include-Experimental") == "true"
assert result.method == "POST"


Expand Down
Loading