@@ -17,7 +17,7 @@ class UserAgentInterceptor(Interceptor[Any, None, HTTPRequest, None]):
1717 def read_before_execution (
1818 self , context : InterceptorContext [Any , None , None , None ]
1919 ) -> None :
20- context .properties ["user_agent" ] = _UserAgentBuilder .from_environment ().build ()
20+ context .properties ["user_agent" ] = UserAgentBuilder .from_environment ().build ()
2121
2222 def modify_before_signing (
2323 self , context : InterceptorContext [Any , None , HTTPRequest , None ]
@@ -42,24 +42,23 @@ def modify_before_signing(
4242_USERAGENT_SDK_NAME = "python"
4343
4444
45- class _UserAgentBuilder :
45+ class UserAgentBuilder :
4646 def __init__ (
4747 self ,
4848 * ,
49- platform_name : str | None ,
50- platform_version : str | None ,
51- platform_machine : str | None ,
52- python_version : str | None ,
53- python_implementation : str | None ,
49+ platform_name : str | None = None ,
50+ platform_version : str | None = None ,
51+ platform_machine : str | None = None ,
52+ python_version : str | None = None ,
53+ python_implementation : str | None = None ,
5454 sdk_version : str | None = None ,
5555 ) -> None :
5656 self ._platform_name = platform_name
5757 self ._platform_version = platform_version
5858 self ._platform_machine = platform_machine
5959 self ._python_version = python_version
6060 self ._python_implementation = python_implementation
61- # TODO: Allow configuration through context
62- self ._sdk_version = smithy_core .__version__
61+ self ._sdk_version = sdk_version
6362
6463 @classmethod
6564 def from_environment (cls ) -> Self :
@@ -69,20 +68,26 @@ def from_environment(cls) -> Self:
6968 platform_machine = platform .machine (),
7069 python_version = platform .python_version (),
7170 python_implementation = platform .python_implementation (),
71+ sdk_version = smithy_core .__version__ ,
7272 )
7373
7474 def build (self ) -> UserAgent :
7575 user_agent = UserAgent ()
76- user_agent .sdk_metadata .append (
77- UserAgentComponent (prefix = _USERAGENT_SDK_NAME , name = self ._sdk_version )
78- )
76+ user_agent .sdk_metadata .extend (self ._build_sdk_metadata ())
7977 user_agent .ua_metadata .append (UserAgentComponent (prefix = "ua" , name = "2.1" ))
8078 user_agent .os_metadata .extend (self ._build_os_metadata ())
8179 user_agent .os_metadata .extend (self ._build_architecture_metadata ())
8280 user_agent .language_metadata .extend (self ._build_language_metadata ())
8381
8482 return user_agent
8583
84+ def _build_sdk_metadata (self ) -> list [UserAgentComponent ]:
85+ if self ._sdk_version :
86+ return [
87+ UserAgentComponent (prefix = _USERAGENT_SDK_NAME , name = self ._sdk_version )
88+ ]
89+ return []
90+
8691 def _build_os_metadata (self ) -> list [UserAgentComponent ]:
8792 """Build the OS/platform components of the User-Agent header string.
8893
@@ -97,7 +102,7 @@ def _build_os_metadata(self) -> list[UserAgentComponent]:
97102 * ``os/other``
98103 * ``os/other md/foobar#1.2.3``
99104 """
100- if self ._platform_name is None :
105+ if self ._platform_name is None or self . _platform_name == "" :
101106 return [UserAgentComponent ("os" , "other" )]
102107
103108 plt_name_lower = self ._platform_name .lower ()
0 commit comments