Skip to content

Commit bdc62ff

Browse files
authored
feat: add Python version to user agent string (#333)
feat: add python version to user agent - Add ua/2.0 component following AWS SDK user agent 2.0 specification - Add Python version with 'lang' (language) prefix - Update unit tests and lightning/DCP e2e tests Example: s3torchconnector/1.4.0 ua/2.0 lang/python#3.10.12 ...
1 parent b6b9593 commit bdc62ff

File tree

5 files changed

+22
-12
lines changed

5 files changed

+22
-12
lines changed

s3torchconnector/src/s3torchconnector/_user_agent.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
# // SPDX-License-Identifier: BSD
33
from typing import List, Optional
4+
import platform
45

56
from ._version import __version__
67

@@ -11,7 +12,10 @@ class UserAgent:
1112
def __init__(self, comments: Optional[List[str]] = None):
1213
if comments is not None and not isinstance(comments, list):
1314
raise ValueError("Argument comments must be a List[str]")
14-
self._user_agent_prefix = f"{__package__}/{__version__}"
15+
python_version = platform.python_version()
16+
self._user_agent_prefix = (
17+
f"{__package__}/{__version__} ua/2.0 lang/python#{python_version}"
18+
)
1519
self._comments = comments or []
1620

1721
@property

s3torchconnector/tst/e2e/dcp/test_e2e_s3_file_system.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import os
2323
import random
24+
import platform
2425

2526
from s3torchconnector.dcp.s3_prefix_strategy import RoundRobinPrefixStrategy
2627
from test_common import _list_folders_in_bucket
@@ -122,7 +123,8 @@ def multi_process_dcp_save_load(
122123

123124

124125
def _verify_user_agent(s3fs: S3FileSystem):
125-
expected_user_agent = f"s3torchconnector/{__version__} (dcp; {torch.__version__})"
126+
python_version = platform.python_version()
127+
expected_user_agent = f"s3torchconnector/{__version__} ua/2.0 lang/python#{python_version} (dcp; {torch.__version__})"
126128
assert s3fs._client.user_agent_prefix == expected_user_agent
127129

128130

s3torchconnector/tst/e2e/test_e2e_s3_lightning_checkpoint.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import pytest
55
import random
66
import torch
7+
import platform
78

89
from pathlib import Path
910
from typing import Dict, Any
@@ -258,7 +259,6 @@ def _verify_equal_state_dict(
258259

259260

260261
def _verify_user_agent(s3_lightning_checkpoint: S3LightningCheckpoint):
261-
expected_user_agent = (
262-
f"s3torchconnector/{__version__} (lightning; {lightning.__version__})"
263-
)
262+
python_version = platform.python_version()
263+
expected_user_agent = f"s3torchconnector/{__version__} ua/2.0 lang/python#{python_version} (lightning; {lightning.__version__})"
264264
assert s3_lightning_checkpoint._client.user_agent_prefix == expected_user_agent

s3torchconnector/tst/unit/test_s3_client.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
# // SPDX-License-Identifier: BSD
33
import logging
44
import pytest
5+
import platform
56

67
from hypothesis import given, example
78
from hypothesis.strategies import lists, text, integers, floats
@@ -17,6 +18,10 @@
1718
TEST_KEY = "test-key"
1819
TEST_REGION = "us-east-1"
1920
S3_URI = f"s3://{TEST_BUCKET}/{TEST_KEY}"
21+
PYTHON_VERSION = platform.python_version()
22+
DEFAULT_USER_AGENT = (
23+
f"s3torchconnector/{__version__} ua/2.0 lang/python#{PYTHON_VERSION}"
24+
)
2025

2126
KiB = 1 << 10
2227
MiB = 1 << 20
@@ -76,18 +81,15 @@ def test_copy_object_log(s3_client: S3Client, caplog):
7681

7782
def test_s3_client_default_user_agent():
7883
s3_client = S3Client(region=TEST_REGION)
79-
expected_user_agent = f"s3torchconnector/{__version__}"
80-
assert s3_client.user_agent_prefix == expected_user_agent
81-
assert s3_client._client.user_agent_prefix == expected_user_agent
84+
assert s3_client.user_agent_prefix == DEFAULT_USER_AGENT
85+
assert s3_client._client.user_agent_prefix == DEFAULT_USER_AGENT
8286

8387

8488
def test_s3_client_custom_user_agent():
8589
s3_client = S3Client(
8690
region=TEST_REGION, user_agent=UserAgent(["component/version", "metadata"])
8791
)
88-
expected_user_agent = (
89-
f"s3torchconnector/{__version__} (component/version; metadata)"
90-
)
92+
expected_user_agent = f"{DEFAULT_USER_AGENT} (component/version; metadata)"
9193
assert s3_client.user_agent_prefix == expected_user_agent
9294
assert s3_client._client.user_agent_prefix == expected_user_agent
9395

s3torchconnector/tst/unit/test_user_agent.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
from __future__ import annotations
44

55
from typing import List
6+
import platform
67

78
import pytest
89

910
from s3torchconnector._version import __version__
1011
from s3torchconnector._user_agent import UserAgent
1112

12-
DEFAULT_PREFIX = f"s3torchconnector/{__version__}"
13+
PYTHON_VERSION = platform.python_version()
14+
DEFAULT_PREFIX = f"s3torchconnector/{__version__} ua/2.0 lang/python#{PYTHON_VERSION}"
1315

1416

1517
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)