fix: handle typing_extensions import properly on Python 3.11+

The SDK unconditionally imported `typing_extensions.NotRequired`, but `typing_extensions` is declared as a dependency only for Python < 3.11 in pyproject.toml. On Python 3.11+ this led to a ModuleNotFoundError on a clean install.

This commit replaces the unconditional import with a version-guarded
This commit is contained in:
mikaeloduh 2025-07-07 12:34:13 +08:00
parent 343ec4812c
commit 0337b1022d
No known key found for this signature in database
2 changed files with 16 additions and 1 deletions

View file

@ -1,10 +1,14 @@
"""Type definitions for Claude SDK."""
import sys
from dataclasses import dataclass, field
from pathlib import Path
from typing import Any, Literal, TypedDict
from typing_extensions import NotRequired # For Python < 3.11 compatibility
if sys.version_info >= (3, 11):
from typing import NotRequired
else:
from typing_extensions import NotRequired
# Permission modes
PermissionMode = Literal["default", "acceptEdits", "bypassPermissions"]

View file

@ -1,5 +1,8 @@
"""Tests for Claude SDK type definitions."""
import sys
import importlib
import pytest
from claude_code_sdk import (
AssistantMessage,
ClaudeCodeOptions,
@ -56,6 +59,14 @@ class TestMessageTypes:
assert msg.total_cost_usd == 0.01
assert msg.session_id == "session-123"
def test_import_types_module(self):
"""
Smoke test to ensure claude_code_sdk.types imports without errors
and defines NotRequired.
"""
module = importlib.reload(importlib.import_module("claude_code_sdk.types"))
assert hasattr(module, "NotRequired"), "claude_code_sdk.types should define NotRequired"
class TestOptions:
"""Test Options configuration."""