Skip to content

fix: remove redundant information from the user_agent string. #1746

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jul 24, 2020
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
23 changes: 13 additions & 10 deletions src/sagemaker/user_agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,28 +16,31 @@
import platform
import sys

import boto3
import botocore
import importlib_metadata

SDK_VERSION = importlib_metadata.version("sagemaker")
OS_NAME = platform.system() or "UnresolvedOS"
OS_VERSION = platform.release() or "UnresolvedOSVersion"
PYTHON_VERSION = "{}.{}.{}".format(
OS_NAME_VERSION = "{}/{}".format(OS_NAME, OS_VERSION)
PYTHON_VERSION = "Python/{}.{}.{}".format(
sys.version_info.major, sys.version_info.minor, sys.version_info.micro
)


def determine_prefix():
def determine_prefix(user_agent=""):
"""Placeholder docstring"""
prefix = "AWS-SageMaker-Python-SDK/{} Python/{} {}/{} Boto3/{} Botocore/{}".format(
SDK_VERSION, PYTHON_VERSION, OS_NAME, OS_VERSION, boto3.__version__, botocore.__version__
)
prefix = "AWS-SageMaker-Python-SDK/{}".format(SDK_VERSION)

if PYTHON_VERSION not in user_agent:
prefix = "{} {}".format(prefix, PYTHON_VERSION)

if OS_NAME_VERSION not in user_agent:
prefix = "{} {}".format(prefix, OS_NAME_VERSION)

try:
with open("/etc/opt/ml/sagemaker-notebook-instance-version.txt") as sagemaker_nbi_file:
prefix = "AWS-SageMaker-Notebook-Instance/{} {}".format(
sagemaker_nbi_file.read().strip(), prefix
prefix = "{} AWS-SageMaker-Notebook-Instance/{}".format(
prefix, sagemaker_nbi_file.read().strip()
)
except IOError:
# This file isn't expected to always exist, and we DO want to silently ignore failures.
Expand All @@ -51,7 +54,7 @@ def prepend_user_agent(client):
Args:
client:
"""
prefix = determine_prefix()
prefix = determine_prefix(client._client_config.user_agent)

if client._client_config.user_agent is None:
client._client_config.user_agent = prefix
Expand Down
4 changes: 2 additions & 2 deletions tests/unit/test_create_deploy_entities.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from __future__ import absolute_import

import pytest
from mock import Mock
from mock import MagicMock, Mock

import sagemaker

Expand All @@ -33,7 +33,7 @@

@pytest.fixture()
def sagemaker_session():
boto_mock = Mock(name="boto_session", region_name=REGION)
boto_mock = MagicMock(name="boto_session", region_name=REGION)
ims = sagemaker.Session(boto_session=boto_mock)
ims.expand_role = Mock(return_value=EXPANDED_ROLE)
return ims
Expand Down
4 changes: 2 additions & 2 deletions tests/unit/test_default_bucket.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

import pytest
from botocore.exceptions import ClientError
from mock import Mock
from mock import MagicMock
import sagemaker

ACCOUNT_ID = "123"
Expand All @@ -24,7 +24,7 @@

@pytest.fixture()
def sagemaker_session():
boto_mock = Mock(name="boto_session", region_name=REGION)
boto_mock = MagicMock(name="boto_session", region_name=REGION)
boto_mock.client("sts").get_caller_identity.return_value = {"Account": ACCOUNT_ID}
sagemaker_session = sagemaker.Session(boto_session=boto_mock)
sagemaker_session.boto_session.resource("s3").Bucket().creation_date = None
Expand Down
8 changes: 5 additions & 3 deletions tests/unit/test_endpoint_from_job.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from __future__ import absolute_import

import pytest
from mock import Mock
from mock import MagicMock, Mock

import sagemaker

Expand Down Expand Up @@ -42,8 +42,10 @@

@pytest.fixture()
def sagemaker_session():
boto_mock = Mock(name="boto_session", region_name=REGION)
ims = sagemaker.Session(sagemaker_client=Mock(name="sagemaker_client"), boto_session=boto_mock)
boto_mock = MagicMock(name="boto_session", region_name=REGION)
ims = sagemaker.Session(
sagemaker_client=MagicMock(name="sagemaker_client"), boto_session=boto_mock
)
ims.sagemaker_client.describe_training_job = Mock(
name="describe_training_job", return_value=TRAINING_JOB_RESPONSE
)
Expand Down
8 changes: 5 additions & 3 deletions tests/unit/test_endpoint_from_model_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

import pytest
from botocore.exceptions import ClientError
from mock import Mock
from mock import MagicMock, Mock
from mock import patch

import sagemaker
Expand All @@ -35,8 +35,10 @@

@pytest.fixture()
def sagemaker_session():
boto_mock = Mock(name="boto_session", region_name=REGION)
ims = sagemaker.Session(sagemaker_client=Mock(name="sagemaker_client"), boto_session=boto_mock)
boto_mock = MagicMock(name="boto_session", region_name=REGION)
ims = sagemaker.Session(
sagemaker_client=MagicMock(name="sagemaker_client"), boto_session=boto_mock
)
ims.sagemaker_client.describe_model = Mock(
name="describe_model", side_effect=_raise_does_not_exist_client_error
)
Expand Down
4 changes: 2 additions & 2 deletions tests/unit/test_exception_on_bad_status.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@


def get_sagemaker_session(returns_status):
boto_mock = Mock(name="boto_session", region_name=REGION)
client_mock = Mock()
boto_mock = MagicMock(name="boto_session", region_name=REGION)
client_mock = MagicMock()
client_mock.describe_model_package = MagicMock(
return_value={"ModelPackageStatus": returns_status}
)
Expand Down
4 changes: 2 additions & 2 deletions tests/unit/test_image.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,11 @@

@pytest.fixture()
def sagemaker_session():
boto_mock = Mock(name="boto_session", region_name=REGION)
boto_mock = MagicMock(name="boto_session", region_name=REGION)
boto_mock.client("sts").get_caller_identity.return_value = {"Account": "123"}
boto_mock.resource("s3").Bucket(BUCKET_NAME).objects.filter.return_value = []

sms = sagemaker.Session(boto_session=boto_mock, sagemaker_client=Mock())
sms = sagemaker.Session(boto_session=boto_mock, sagemaker_client=MagicMock())

sms.default_bucket = Mock(name="default_bucket", return_value=BUCKET_NAME)
sms.expand_role = Mock(return_value=EXPANDED_ROLE)
Expand Down
20 changes: 10 additions & 10 deletions tests/unit/test_session.py
Original file line number Diff line number Diff line change
Expand Up @@ -652,11 +652,11 @@ def test_s3_input_all_arguments():

@pytest.fixture()
def sagemaker_session():
boto_mock = Mock(name="boto_session")
boto_mock = MagicMock(name="boto_session")
boto_mock.client("sts", endpoint_url=STS_ENDPOINT).get_caller_identity.return_value = {
"Account": "123"
}
ims = sagemaker.Session(boto_session=boto_mock, sagemaker_client=Mock())
ims = sagemaker.Session(boto_session=boto_mock, sagemaker_client=MagicMock())
ims.expand_role = Mock(return_value=EXPANDED_ROLE)
return ims

Expand Down Expand Up @@ -1352,10 +1352,10 @@ def __init__(self, code):

@pytest.fixture()
def sagemaker_session_complete():
boto_mock = Mock(name="boto_session")
boto_mock = MagicMock(name="boto_session")
boto_mock.client("logs").describe_log_streams.return_value = DEFAULT_LOG_STREAMS
boto_mock.client("logs").get_log_events.side_effect = DEFAULT_LOG_EVENTS
ims = sagemaker.Session(boto_session=boto_mock, sagemaker_client=Mock())
ims = sagemaker.Session(boto_session=boto_mock, sagemaker_client=MagicMock())
ims.sagemaker_client.describe_training_job.return_value = COMPLETED_DESCRIBE_JOB_RESULT
ims.sagemaker_client.describe_transform_job.return_value = (
COMPLETED_DESCRIBE_TRANSFORM_JOB_RESULT
Expand All @@ -1365,21 +1365,21 @@ def sagemaker_session_complete():

@pytest.fixture()
def sagemaker_session_stopped():
boto_mock = Mock(name="boto_session")
boto_mock = MagicMock(name="boto_session")
boto_mock.client("logs").describe_log_streams.return_value = DEFAULT_LOG_STREAMS
boto_mock.client("logs").get_log_events.side_effect = DEFAULT_LOG_EVENTS
ims = sagemaker.Session(boto_session=boto_mock, sagemaker_client=Mock())
ims = sagemaker.Session(boto_session=boto_mock, sagemaker_client=MagicMock())
ims.sagemaker_client.describe_training_job.return_value = STOPPED_DESCRIBE_JOB_RESULT
ims.sagemaker_client.describe_transform_job.return_value = STOPPED_DESCRIBE_TRANSFORM_JOB_RESULT
return ims


@pytest.fixture()
def sagemaker_session_ready_lifecycle():
boto_mock = Mock(name="boto_session")
boto_mock = MagicMock(name="boto_session")
boto_mock.client("logs").describe_log_streams.return_value = DEFAULT_LOG_STREAMS
boto_mock.client("logs").get_log_events.side_effect = STREAM_LOG_EVENTS
ims = sagemaker.Session(boto_session=boto_mock, sagemaker_client=Mock())
ims = sagemaker.Session(boto_session=boto_mock, sagemaker_client=MagicMock())
ims.sagemaker_client.describe_training_job.side_effect = [
IN_PROGRESS_DESCRIBE_JOB_RESULT,
IN_PROGRESS_DESCRIBE_JOB_RESULT,
Expand All @@ -1395,10 +1395,10 @@ def sagemaker_session_ready_lifecycle():

@pytest.fixture()
def sagemaker_session_full_lifecycle():
boto_mock = Mock(name="boto_session")
boto_mock = MagicMock(name="boto_session")
boto_mock.client("logs").describe_log_streams.side_effect = LIFECYCLE_LOG_STREAMS
boto_mock.client("logs").get_log_events.side_effect = STREAM_LOG_EVENTS
ims = sagemaker.Session(boto_session=boto_mock, sagemaker_client=Mock())
ims = sagemaker.Session(boto_session=boto_mock, sagemaker_client=MagicMock())
ims.sagemaker_client.describe_training_job.side_effect = [
IN_PROGRESS_DESCRIBE_JOB_RESULT,
IN_PROGRESS_DESCRIBE_JOB_RESULT,
Expand Down
8 changes: 4 additions & 4 deletions tests/unit/test_upload_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

import os

from mock import Mock
from mock import MagicMock, Mock
import pytest

import sagemaker
Expand All @@ -30,7 +30,7 @@

@pytest.fixture()
def sagemaker_session():
boto_mock = Mock(name="boto_session")
boto_mock = MagicMock(name="boto_session")
ims = sagemaker.Session(boto_session=boto_mock)
ims.default_bucket = Mock(name="default_bucket", return_value=BUCKET_NAME)
return ims
Expand All @@ -39,9 +39,9 @@ def sagemaker_session():
@pytest.fixture()
def sagemaker_session_custom_endpoint():

boto_session = Mock("boto_session")
boto_session = MagicMock("boto_session")
resource_mock = Mock("resource")
client_mock = Mock("client")
client_mock = MagicMock("client")
boto_attrs = {"region_name": "us-east-1"}
boto_session.configure_mock(**boto_attrs)
boto_session.resource = Mock(name="resource", return_value=resource_mock)
Expand Down
6 changes: 3 additions & 3 deletions tests/unit/test_upload_string_as_file_body.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

import os

from mock import Mock
from mock import MagicMock, Mock
import pytest

import sagemaker
Expand All @@ -29,8 +29,8 @@

@pytest.fixture()
def sagemaker_session():
boto_mock = Mock(name="boto_session")
client_mock = Mock()
boto_mock = MagicMock(name="boto_session")
client_mock = MagicMock()
client_mock.get_caller_identity.return_value = {
"UserId": "mock_user_id",
"Account": "012345678910",
Expand Down
12 changes: 6 additions & 6 deletions tests/unit/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -309,8 +309,8 @@ def test_generate_tensorboard_url_domain_non_string():

@patch("os.makedirs")
def test_download_folder(makedirs):
boto_mock = Mock(name="boto_session")
session = sagemaker.Session(boto_session=boto_mock, sagemaker_client=Mock())
boto_mock = MagicMock(name="boto_session")
session = sagemaker.Session(boto_session=boto_mock, sagemaker_client=MagicMock())
s3_mock = boto_mock.resource("s3")

obj_mock = Mock()
Expand Down Expand Up @@ -363,10 +363,10 @@ def obj_mock_download(path):

@patch("os.makedirs")
def test_download_folder_points_to_single_file(makedirs):
boto_mock = Mock(name="boto_session")
boto_mock = MagicMock(name="boto_session")
boto_mock.client("sts").get_caller_identity.return_value = {"Account": "123"}

session = sagemaker.Session(boto_session=boto_mock, sagemaker_client=Mock())
session = sagemaker.Session(boto_session=boto_mock, sagemaker_client=MagicMock())

train_data = Mock()

Expand All @@ -390,11 +390,11 @@ def test_download_folder_points_to_single_file(makedirs):


def test_download_file():
boto_mock = Mock(name="boto_session")
boto_mock = MagicMock(name="boto_session")
boto_mock.client("sts").get_caller_identity.return_value = {"Account": "123"}
bucket_mock = Mock()
boto_mock.resource("s3").Bucket.return_value = bucket_mock
session = sagemaker.Session(boto_session=boto_mock, sagemaker_client=Mock())
session = sagemaker.Session(boto_session=boto_mock, sagemaker_client=MagicMock())

sagemaker.utils.download_file(
BUCKET_NAME, "/prefix/path/file.tar.gz", "/tmp/file.tar.gz", session
Expand Down