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: 4 additions & 0 deletions src/sagemaker/algorithm.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,6 +17,7 @@
import sagemaker.parameter
from sagemaker import vpc_utils
from sagemaker.deserializers import BytesDeserializer
from sagemaker.deprecations import removed_kwargs
from sagemaker.estimator import EstimatorBase
from sagemaker.serializers import IdentitySerializer
from sagemaker.transformer import Transformer
Expand DownExpand Up@@ -291,6 +292,9 @@ def create_model(
Returns:
a Model ready for deployment.
"""
removed_kwargs("content_type", kwargs)
removed_kwargs("accept", kwargs)

if predictor_cls is None:

def predict_wrapper(endpoint, session):
Expand Down
20 changes: 20 additions & 0 deletions src/sagemaker/amazon/amazon_estimator.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,6 +23,7 @@
from sagemaker.amazon import validation
from sagemaker.amazon.hyperparameter import Hyperparameter as hp # noqa
from sagemaker.amazon.common import write_numpy_to_dense_tensor
from sagemaker.deprecations import renamed_warning
from sagemaker.estimator import EstimatorBase, _TrainingJob
from sagemaker.inputs import FileSystemInput, TrainingInput
from sagemaker.utils import sagemaker_timestamp
Expand DownExpand Up@@ -454,3 +455,22 @@ def upload_numpy_to_s3_shards(
s3.Object(bucket, key_prefix + file).delete()
finally:
raise ex


def get_image_uri(region_name, repo_name, repo_version=1):
"""Deprecated method. Please use sagemaker.image_uris.retrieve().

Args:
region_name: name of the region
repo_name: name of the repo (e.g. xgboost)
repo_version: version of the repo

Returns:
the image uri
"""
renamed_warning("The method get_image_uri")
return image_uris.retrieve(
framework=repo_name,
region=region_name,
version=repo_version,
)
5 changes: 5 additions & 0 deletions src/sagemaker/amazon/common.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -21,6 +21,7 @@
import numpy as np

from sagemaker.amazon.record_pb2 import Record
from sagemaker.deprecations import deprecated_class
from sagemaker.deserializers import BaseDeserializer
from sagemaker.serializers import BaseSerializer
from sagemaker.utils import DeferredError
Expand DownExpand Up@@ -298,3 +299,7 @@ def _resolve_type(dtype):
if dtype == np.dtype("float32"):
return "Float32"
raise ValueError("Unsupported dtype {} on array".format(dtype))


numpy_to_record_serializer = deprecated_class(RecordSerializer, "numpy_to_record_serializer")
record_deserializer = deprecated_class(RecordDeserializer, "record_deserializer")
23 changes: 23 additions & 0 deletions src/sagemaker/content_types.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
# Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
"""Deprecated content type constants. Just use the mime type strings."""
from __future__ import absolute_import

import deprecations

deprecations.removed_warning("The sagemaker.content_types module")

CONTENT_TYPE_JSON = "application/json"
CONTENT_TYPE_CSV = "text/csv"
CONTENT_TYPE_OCTET_STREAM = "application/octet-stream"
CONTENT_TYPE_NPY = "application/x-npy"
173 changes: 173 additions & 0 deletions src/sagemaker/deprecations.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
# Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
"""Module for deprecation abstractions."""
from __future__ import absolute_import

import logging
import warnings

logging.captureWarnings(True)


def _warn(msg):
"""Generic warning raiser referencing V2

Args:
phrase: The phrase to include in the warning.
"""
warnings.warn(
f"{msg} in sagemaker>=2.\n"
"See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.",
DeprecationWarning,
stacklevel=2,
)


def removed_warning(phrase):
"""Raise a warning for a no-op in sagemaker>=2

Args:
phrase: the prefix phrase of the warning message.
"""
_warn(f"{phrase} is a no-op")


def renamed_warning(phrase):
"""Raise a warning for a rename in sagemaker>=2

Args:
phrase: the prefix phrase of the warning message.
"""
_warn(f"{phrase} has been renamed")


def renamed_kwargs(name, default, kwargs):
"""Checks if the deprecated argument is in kwargs

Raises warning, if present.

Args:
name: name of deprecated argument
default: default value to use, if not present
kwargs: keyword arguments dict

Returns:
value of the keyword argument, if present
"""
value = kwargs.get(name, default)
if value != default:
renamed_warning(name)
return value


def removed_arg(name, arg):
"""Checks if the deprecated argument is populated.

Raises warning, if not None.

Args:
name: name of deprecated argument
arg: the argument to check
"""
if arg is not None:
removed_warning(name)


def removed_kwargs(name, kwargs):
"""Checks if the deprecated argument is in kwargs

Raises warning, if present.

Args:
name: name of deprecated argument
kwargs: keyword arguments dict
"""
if name in kwargs:
removed_warning(name)


def removed_function(name):
"""A no-op deprecated function factory."""

def func(*args, **kwargs): # pylint: disable=W0613
removed_warning(f"The function {name}")

return func


def deprecated_function(func, name):
"""Wrap a function with a deprecation warning.

Args:
func: Function to wrap in a deprecation warning.
name: The name that has been deprecated.

Returns:
The modified function
"""

def deprecate(*args, **kwargs):
renamed_warning(f"The {name}")
return func(*args, **kwargs)

return deprecate


def deprecated_serialize(instance, name):
"""Modifies a serializer instance serialize method.

Args:
instance: Instance to modify serialize method.
name: The name that has been deprecated.

Returns:
The modified instance
"""
instance.serialize = deprecated_function(instance.serialize, name)
return instance


def deprecated_deserialize(instance, name):
"""Modifies a deserializer instance deserialize method.

Args:
instance: Instance to modify deserialize method.
name: The name that has been deprecated.

Returns:
The modified instance
"""
instance.deserialize = deprecated_function(instance.deserialize, name)
return instance


def deprecated_class(cls, name):
"""Returns a class based on super class with a deprecation warning.

Args:
cls: The class to derive with a deprecation warning on __init__
name: The name of the class.

Returns:
The modified class.
"""

class DeprecatedClass(cls):
"""Provides a warning for the class name."""

def __init__(self, *args, **kwargs):
"""Provides a warning for the class name."""
renamed_warning(f"The class {name}")
super(DeprecatedClass, self).__init__(*args, **kwargs)

return DeprecatedClass
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
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: 4 additions & 0 deletions src/sagemaker/algorithm.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,6 +17,7 @@
import sagemaker.parameter
from sagemaker import vpc_utils
from sagemaker.deserializers import BytesDeserializer
from sagemaker.deprecations import removed_kwargs
from sagemaker.estimator import EstimatorBase
from sagemaker.serializers import IdentitySerializer
from sagemaker.transformer import Transformer
Expand DownExpand Up@@ -291,6 +292,9 @@ def create_model(
Returns:
a Model ready for deployment.
"""
removed_kwargs("content_type", kwargs)
removed_kwargs("accept", kwargs)

if predictor_cls is None:

def predict_wrapper(endpoint, session):
Expand Down
20 changes: 20 additions & 0 deletions src/sagemaker/amazon/amazon_estimator.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,6 +23,7 @@
from sagemaker.amazon import validation
from sagemaker.amazon.hyperparameter import Hyperparameter as hp # noqa
from sagemaker.amazon.common import write_numpy_to_dense_tensor
from sagemaker.deprecations import renamed_warning
from sagemaker.estimator import EstimatorBase, _TrainingJob
from sagemaker.inputs import FileSystemInput, TrainingInput
from sagemaker.utils import sagemaker_timestamp
Expand DownExpand Up@@ -454,3 +455,22 @@ def upload_numpy_to_s3_shards(
s3.Object(bucket, key_prefix + file).delete()
finally:
raise ex


def get_image_uri(region_name, repo_name, repo_version=1):
"""Deprecated method. Please use sagemaker.image_uris.retrieve().

Args:
region_name: name of the region
repo_name: name of the repo (e.g. xgboost)
repo_version: version of the repo

Returns:
the image uri
"""
renamed_warning("The method get_image_uri")
return image_uris.retrieve(
framework=repo_name,
region=region_name,
version=repo_version,
)
5 changes: 5 additions & 0 deletions src/sagemaker/amazon/common.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -21,6 +21,7 @@
import numpy as np

from sagemaker.amazon.record_pb2 import Record
from sagemaker.deprecations import deprecated_class
from sagemaker.deserializers import BaseDeserializer
from sagemaker.serializers import BaseSerializer
from sagemaker.utils import DeferredError
Expand DownExpand Up@@ -298,3 +299,7 @@ def _resolve_type(dtype):
if dtype == np.dtype("float32"):
return "Float32"
raise ValueError("Unsupported dtype {} on array".format(dtype))


numpy_to_record_serializer = deprecated_class(RecordSerializer, "numpy_to_record_serializer")
record_deserializer = deprecated_class(RecordDeserializer, "record_deserializer")
23 changes: 23 additions & 0 deletions src/sagemaker/content_types.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
# Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
"""Deprecated content type constants. Just use the mime type strings."""
from __future__ import absolute_import

import deprecations

deprecations.removed_warning("The sagemaker.content_types module")

CONTENT_TYPE_JSON = "application/json"
CONTENT_TYPE_CSV = "text/csv"
CONTENT_TYPE_OCTET_STREAM = "application/octet-stream"
CONTENT_TYPE_NPY = "application/x-npy"
173 changes: 173 additions & 0 deletions src/sagemaker/deprecations.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
# Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
"""Module for deprecation abstractions."""
from __future__ import absolute_import

import logging
import warnings

logging.captureWarnings(True)


def _warn(msg):
"""Generic warning raiser referencing V2

Args:
phrase: The phrase to include in the warning.
"""
warnings.warn(
f"{msg} in sagemaker>=2.\n"
"See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.",
DeprecationWarning,
stacklevel=2,
)


def removed_warning(phrase):
"""Raise a warning for a no-op in sagemaker>=2

Args:
phrase: the prefix phrase of the warning message.
"""
_warn(f"{phrase} is a no-op")


def renamed_warning(phrase):
"""Raise a warning for a rename in sagemaker>=2

Args:
phrase: the prefix phrase of the warning message.
"""
_warn(f"{phrase} has been renamed")


def renamed_kwargs(name, default, kwargs):
"""Checks if the deprecated argument is in kwargs

Raises warning, if present.

Args:
name: name of deprecated argument
default: default value to use, if not present
kwargs: keyword arguments dict

Returns:
value of the keyword argument, if present
"""
value = kwargs.get(name, default)
if value != default:
renamed_warning(name)
return value


def removed_arg(name, arg):
"""Checks if the deprecated argument is populated.

Raises warning, if not None.

Args:
name: name of deprecated argument
arg: the argument to check
"""
if arg is not None:
removed_warning(name)


def removed_kwargs(name, kwargs):
"""Checks if the deprecated argument is in kwargs

Raises warning, if present.

Args:
name: name of deprecated argument
kwargs: keyword arguments dict
"""
if name in kwargs:
removed_warning(name)


def removed_function(name):
"""A no-op deprecated function factory."""

def func(*args, **kwargs): # pylint: disable=W0613
removed_warning(f"The function {name}")

return func


def deprecated_function(func, name):
"""Wrap a function with a deprecation warning.

Args:
func: Function to wrap in a deprecation warning.
name: The name that has been deprecated.

Returns:
The modified function
"""

def deprecate(*args, **kwargs):
renamed_warning(f"The {name}")
return func(*args, **kwargs)

return deprecate


def deprecated_serialize(instance, name):
"""Modifies a serializer instance serialize method.

Args:
instance: Instance to modify serialize method.
name: The name that has been deprecated.

Returns:
The modified instance
"""
instance.serialize = deprecated_function(instance.serialize, name)
return instance


def deprecated_deserialize(instance, name):
"""Modifies a deserializer instance deserialize method.

Args:
instance: Instance to modify deserialize method.
name: The name that has been deprecated.

Returns:
The modified instance
"""
instance.deserialize = deprecated_function(instance.deserialize, name)
return instance


def deprecated_class(cls, name):
"""Returns a class based on super class with a deprecation warning.

Args:
cls: The class to derive with a deprecation warning on __init__
name: The name of the class.

Returns:
The modified class.
"""

class DeprecatedClass(cls):
"""Provides a warning for the class name."""

def __init__(self, *args, **kwargs):
"""Provides a warning for the class name."""
renamed_warning(f"The class {name}")
super(DeprecatedClass, self).__init__(*args, **kwargs)

return DeprecatedClass
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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: 4 additions & 0 deletions src/sagemaker/algorithm.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,6 +17,7 @@
import sagemaker.parameter
from sagemaker import vpc_utils
from sagemaker.deserializers import BytesDeserializer
from sagemaker.deprecations import removed_kwargs
from sagemaker.estimator import EstimatorBase
from sagemaker.serializers import IdentitySerializer
from sagemaker.transformer import Transformer
Expand DownExpand Up@@ -291,6 +292,9 @@ def create_model(
Returns:
a Model ready for deployment.
"""
removed_kwargs("content_type", kwargs)
removed_kwargs("accept", kwargs)

if predictor_cls is None:

def predict_wrapper(endpoint, session):
Expand Down
20 changes: 20 additions & 0 deletions src/sagemaker/amazon/amazon_estimator.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,6 +23,7 @@
from sagemaker.amazon import validation
from sagemaker.amazon.hyperparameter import Hyperparameter as hp # noqa
from sagemaker.amazon.common import write_numpy_to_dense_tensor
from sagemaker.deprecations import renamed_warning
from sagemaker.estimator import EstimatorBase, _TrainingJob
from sagemaker.inputs import FileSystemInput, TrainingInput
from sagemaker.utils import sagemaker_timestamp
Expand DownExpand Up@@ -454,3 +455,22 @@ def upload_numpy_to_s3_shards(
s3.Object(bucket, key_prefix + file).delete()
finally:
raise ex


def get_image_uri(region_name, repo_name, repo_version=1):
"""Deprecated method. Please use sagemaker.image_uris.retrieve().

Args:
region_name: name of the region
repo_name: name of the repo (e.g. xgboost)
repo_version: version of the repo

Returns:
the image uri
"""
renamed_warning("The method get_image_uri")
return image_uris.retrieve(
framework=repo_name,
region=region_name,
version=repo_version,
)
5 changes: 5 additions & 0 deletions src/sagemaker/amazon/common.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -21,6 +21,7 @@
import numpy as np

from sagemaker.amazon.record_pb2 import Record
from sagemaker.deprecations import deprecated_class
from sagemaker.deserializers import BaseDeserializer
from sagemaker.serializers import BaseSerializer
from sagemaker.utils import DeferredError
Expand DownExpand Up@@ -298,3 +299,7 @@ def _resolve_type(dtype):
if dtype == np.dtype("float32"):
return "Float32"
raise ValueError("Unsupported dtype {} on array".format(dtype))


numpy_to_record_serializer = deprecated_class(RecordSerializer, "numpy_to_record_serializer")
record_deserializer = deprecated_class(RecordDeserializer, "record_deserializer")
23 changes: 23 additions & 0 deletions src/sagemaker/content_types.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
# Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
"""Deprecated content type constants. Just use the mime type strings."""
from __future__ import absolute_import

import deprecations

deprecations.removed_warning("The sagemaker.content_types module")

CONTENT_TYPE_JSON = "application/json"
CONTENT_TYPE_CSV = "text/csv"
CONTENT_TYPE_OCTET_STREAM = "application/octet-stream"
CONTENT_TYPE_NPY = "application/x-npy"
173 changes: 173 additions & 0 deletions src/sagemaker/deprecations.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
# Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
"""Module for deprecation abstractions."""
from __future__ import absolute_import

import logging
import warnings

logging.captureWarnings(True)


def _warn(msg):
"""Generic warning raiser referencing V2

Args:
phrase: The phrase to include in the warning.
"""
warnings.warn(
f"{msg} in sagemaker>=2.\n"
"See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.",
DeprecationWarning,
stacklevel=2,
)


def removed_warning(phrase):
"""Raise a warning for a no-op in sagemaker>=2

Args:
phrase: the prefix phrase of the warning message.
"""
_warn(f"{phrase} is a no-op")


def renamed_warning(phrase):
"""Raise a warning for a rename in sagemaker>=2

Args:
phrase: the prefix phrase of the warning message.
"""
_warn(f"{phrase} has been renamed")


def renamed_kwargs(name, default, kwargs):
"""Checks if the deprecated argument is in kwargs

Raises warning, if present.

Args:
name: name of deprecated argument
default: default value to use, if not present
kwargs: keyword arguments dict

Returns:
value of the keyword argument, if present
"""
value = kwargs.get(name, default)
if value != default:
renamed_warning(name)
return value


def removed_arg(name, arg):
"""Checks if the deprecated argument is populated.

Raises warning, if not None.

Args:
name: name of deprecated argument
arg: the argument to check
"""
if arg is not None:
removed_warning(name)


def removed_kwargs(name, kwargs):
"""Checks if the deprecated argument is in kwargs

Raises warning, if present.

Args:
name: name of deprecated argument
kwargs: keyword arguments dict
"""
if name in kwargs:
removed_warning(name)


def removed_function(name):
"""A no-op deprecated function factory."""

def func(*args, **kwargs): # pylint: disable=W0613
removed_warning(f"The function {name}")

return func


def deprecated_function(func, name):
"""Wrap a function with a deprecation warning.

Args:
func: Function to wrap in a deprecation warning.
name: The name that has been deprecated.

Returns:
The modified function
"""

def deprecate(*args, **kwargs):
renamed_warning(f"The {name}")
return func(*args, **kwargs)

return deprecate


def deprecated_serialize(instance, name):
"""Modifies a serializer instance serialize method.

Args:
instance: Instance to modify serialize method.
name: The name that has been deprecated.

Returns:
The modified instance
"""
instance.serialize = deprecated_function(instance.serialize, name)
return instance


def deprecated_deserialize(instance, name):
"""Modifies a deserializer instance deserialize method.

Args:
instance: Instance to modify deserialize method.
name: The name that has been deprecated.

Returns:
The modified instance
"""
instance.deserialize = deprecated_function(instance.deserialize, name)
return instance


def deprecated_class(cls, name):
"""Returns a class based on super class with a deprecation warning.

Args:
cls: The class to derive with a deprecation warning on __init__
name: The name of the class.

Returns:
The modified class.
"""

class DeprecatedClass(cls):
"""Provides a warning for the class name."""

def __init__(self, *args, **kwargs):
"""Provides a warning for the class name."""
renamed_warning(f"The class {name}")
super(DeprecatedClass, self).__init__(*args, **kwargs)

return DeprecatedClass
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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: 4 additions & 0 deletions src/sagemaker/algorithm.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,6 +17,7 @@
import sagemaker.parameter
from sagemaker import vpc_utils
from sagemaker.deserializers import BytesDeserializer
from sagemaker.deprecations import removed_kwargs
from sagemaker.estimator import EstimatorBase
from sagemaker.serializers import IdentitySerializer
from sagemaker.transformer import Transformer
Expand DownExpand Up@@ -291,6 +292,9 @@ def create_model(
Returns:
a Model ready for deployment.
"""
removed_kwargs("content_type", kwargs)
removed_kwargs("accept", kwargs)

if predictor_cls is None:

def predict_wrapper(endpoint, session):
Expand Down
20 changes: 20 additions & 0 deletions src/sagemaker/amazon/amazon_estimator.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,6 +23,7 @@
from sagemaker.amazon import validation
from sagemaker.amazon.hyperparameter import Hyperparameter as hp # noqa
from sagemaker.amazon.common import write_numpy_to_dense_tensor
from sagemaker.deprecations import renamed_warning
from sagemaker.estimator import EstimatorBase, _TrainingJob
from sagemaker.inputs import FileSystemInput, TrainingInput
from sagemaker.utils import sagemaker_timestamp
Expand DownExpand Up@@ -454,3 +455,22 @@ def upload_numpy_to_s3_shards(
s3.Object(bucket, key_prefix + file).delete()
finally:
raise ex


def get_image_uri(region_name, repo_name, repo_version=1):
"""Deprecated method. Please use sagemaker.image_uris.retrieve().

Args:
region_name: name of the region
repo_name: name of the repo (e.g. xgboost)
repo_version: version of the repo

Returns:
the image uri
"""
renamed_warning("The method get_image_uri")
return image_uris.retrieve(
framework=repo_name,
region=region_name,
version=repo_version,
)
5 changes: 5 additions & 0 deletions src/sagemaker/amazon/common.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -21,6 +21,7 @@
import numpy as np

from sagemaker.amazon.record_pb2 import Record
from sagemaker.deprecations import deprecated_class
from sagemaker.deserializers import BaseDeserializer
from sagemaker.serializers import BaseSerializer
from sagemaker.utils import DeferredError
Expand DownExpand Up@@ -298,3 +299,7 @@ def _resolve_type(dtype):
if dtype == np.dtype("float32"):
return "Float32"
raise ValueError("Unsupported dtype {} on array".format(dtype))


numpy_to_record_serializer = deprecated_class(RecordSerializer, "numpy_to_record_serializer")
record_deserializer = deprecated_class(RecordDeserializer, "record_deserializer")
23 changes: 23 additions & 0 deletions src/sagemaker/content_types.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
# Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
"""Deprecated content type constants. Just use the mime type strings."""
from __future__ import absolute_import

import deprecations

deprecations.removed_warning("The sagemaker.content_types module")

CONTENT_TYPE_JSON = "application/json"
CONTENT_TYPE_CSV = "text/csv"
CONTENT_TYPE_OCTET_STREAM = "application/octet-stream"
CONTENT_TYPE_NPY = "application/x-npy"
173 changes: 173 additions & 0 deletions src/sagemaker/deprecations.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
# Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
"""Module for deprecation abstractions."""
from __future__ import absolute_import

import logging
import warnings

logging.captureWarnings(True)


def _warn(msg):
"""Generic warning raiser referencing V2

Args:
phrase: The phrase to include in the warning.
"""
warnings.warn(
f"{msg} in sagemaker>=2.\n"
"See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.",
DeprecationWarning,
stacklevel=2,
)


def removed_warning(phrase):
"""Raise a warning for a no-op in sagemaker>=2

Args:
phrase: the prefix phrase of the warning message.
"""
_warn(f"{phrase} is a no-op")


def renamed_warning(phrase):
"""Raise a warning for a rename in sagemaker>=2

Args:
phrase: the prefix phrase of the warning message.
"""
_warn(f"{phrase} has been renamed")


def renamed_kwargs(name, default, kwargs):
"""Checks if the deprecated argument is in kwargs

Raises warning, if present.

Args:
name: name of deprecated argument
default: default value to use, if not present
kwargs: keyword arguments dict

Returns:
value of the keyword argument, if present
"""
value = kwargs.get(name, default)
if value != default:
renamed_warning(name)
return value


def removed_arg(name, arg):
"""Checks if the deprecated argument is populated.

Raises warning, if not None.

Args:
name: name of deprecated argument
arg: the argument to check
"""
if arg is not None:
removed_warning(name)


def removed_kwargs(name, kwargs):
"""Checks if the deprecated argument is in kwargs

Raises warning, if present.

Args:
name: name of deprecated argument
kwargs: keyword arguments dict
"""
if name in kwargs:
removed_warning(name)


def removed_function(name):
"""A no-op deprecated function factory."""

def func(*args, **kwargs): # pylint: disable=W0613
removed_warning(f"The function {name}")

return func


def deprecated_function(func, name):
"""Wrap a function with a deprecation warning.

Args:
func: Function to wrap in a deprecation warning.
name: The name that has been deprecated.

Returns:
The modified function
"""

def deprecate(*args, **kwargs):
renamed_warning(f"The {name}")
return func(*args, **kwargs)

return deprecate


def deprecated_serialize(instance, name):
"""Modifies a serializer instance serialize method.

Args:
instance: Instance to modify serialize method.
name: The name that has been deprecated.

Returns:
The modified instance
"""
instance.serialize = deprecated_function(instance.serialize, name)
return instance


def deprecated_deserialize(instance, name):
"""Modifies a deserializer instance deserialize method.

Args:
instance: Instance to modify deserialize method.
name: The name that has been deprecated.

Returns:
The modified instance
"""
instance.deserialize = deprecated_function(instance.deserialize, name)
return instance


def deprecated_class(cls, name):
"""Returns a class based on super class with a deprecation warning.

Args:
cls: The class to derive with a deprecation warning on __init__
name: The name of the class.

Returns:
The modified class.
"""

class DeprecatedClass(cls):
"""Provides a warning for the class name."""

def __init__(self, *args, **kwargs):
"""Provides a warning for the class name."""
renamed_warning(f"The class {name}")
super(DeprecatedClass, self).__init__(*args, **kwargs)

return DeprecatedClass
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
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: 4 additions & 0 deletions src/sagemaker/algorithm.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,6 +17,7 @@
import sagemaker.parameter
from sagemaker import vpc_utils
from sagemaker.deserializers import BytesDeserializer
from sagemaker.deprecations import removed_kwargs
from sagemaker.estimator import EstimatorBase
from sagemaker.serializers import IdentitySerializer
from sagemaker.transformer import Transformer
Expand DownExpand Up@@ -291,6 +292,9 @@ def create_model(
Returns:
a Model ready for deployment.
"""
removed_kwargs("content_type", kwargs)
removed_kwargs("accept", kwargs)

if predictor_cls is None:

def predict_wrapper(endpoint, session):
Expand Down
20 changes: 20 additions & 0 deletions src/sagemaker/amazon/amazon_estimator.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,6 +23,7 @@
from sagemaker.amazon import validation
from sagemaker.amazon.hyperparameter import Hyperparameter as hp # noqa
from sagemaker.amazon.common import write_numpy_to_dense_tensor
from sagemaker.deprecations import renamed_warning
from sagemaker.estimator import EstimatorBase, _TrainingJob
from sagemaker.inputs import FileSystemInput, TrainingInput
from sagemaker.utils import sagemaker_timestamp
Expand DownExpand Up@@ -454,3 +455,22 @@ def upload_numpy_to_s3_shards(
s3.Object(bucket, key_prefix + file).delete()
finally:
raise ex


def get_image_uri(region_name, repo_name, repo_version=1):
"""Deprecated method. Please use sagemaker.image_uris.retrieve().

Args:
region_name: name of the region
repo_name: name of the repo (e.g. xgboost)
repo_version: version of the repo

Returns:
the image uri
"""
renamed_warning("The method get_image_uri")
return image_uris.retrieve(
framework=repo_name,
region=region_name,
version=repo_version,
)
5 changes: 5 additions & 0 deletions src/sagemaker/amazon/common.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -21,6 +21,7 @@
import numpy as np

from sagemaker.amazon.record_pb2 import Record
from sagemaker.deprecations import deprecated_class
from sagemaker.deserializers import BaseDeserializer
from sagemaker.serializers import BaseSerializer
from sagemaker.utils import DeferredError
Expand DownExpand Up@@ -298,3 +299,7 @@ def _resolve_type(dtype):
if dtype == np.dtype("float32"):
return "Float32"
raise ValueError("Unsupported dtype {} on array".format(dtype))


numpy_to_record_serializer = deprecated_class(RecordSerializer, "numpy_to_record_serializer")
record_deserializer = deprecated_class(RecordDeserializer, "record_deserializer")
23 changes: 23 additions & 0 deletions src/sagemaker/content_types.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
# Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
"""Deprecated content type constants. Just use the mime type strings."""
from __future__ import absolute_import

import deprecations

deprecations.removed_warning("The sagemaker.content_types module")

CONTENT_TYPE_JSON = "application/json"
CONTENT_TYPE_CSV = "text/csv"
CONTENT_TYPE_OCTET_STREAM = "application/octet-stream"
CONTENT_TYPE_NPY = "application/x-npy"
173 changes: 173 additions & 0 deletions src/sagemaker/deprecations.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
# Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
"""Module for deprecation abstractions."""
from __future__ import absolute_import

import logging
import warnings

logging.captureWarnings(True)


def _warn(msg):
"""Generic warning raiser referencing V2

Args:
phrase: The phrase to include in the warning.
"""
warnings.warn(
f"{msg} in sagemaker>=2.\n"
"See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.",
DeprecationWarning,
stacklevel=2,
)


def removed_warning(phrase):
"""Raise a warning for a no-op in sagemaker>=2

Args:
phrase: the prefix phrase of the warning message.
"""
_warn(f"{phrase} is a no-op")


def renamed_warning(phrase):
"""Raise a warning for a rename in sagemaker>=2

Args:
phrase: the prefix phrase of the warning message.
"""
_warn(f"{phrase} has been renamed")


def renamed_kwargs(name, default, kwargs):
"""Checks if the deprecated argument is in kwargs

Raises warning, if present.

Args:
name: name of deprecated argument
default: default value to use, if not present
kwargs: keyword arguments dict

Returns:
value of the keyword argument, if present
"""
value = kwargs.get(name, default)
if value != default:
renamed_warning(name)
return value


def removed_arg(name, arg):
"""Checks if the deprecated argument is populated.

Raises warning, if not None.

Args:
name: name of deprecated argument
arg: the argument to check
"""
if arg is not None:
removed_warning(name)


def removed_kwargs(name, kwargs):
"""Checks if the deprecated argument is in kwargs

Raises warning, if present.

Args:
name: name of deprecated argument
kwargs: keyword arguments dict
"""
if name in kwargs:
removed_warning(name)


def removed_function(name):
"""A no-op deprecated function factory."""

def func(*args, **kwargs): # pylint: disable=W0613
removed_warning(f"The function {name}")

return func


def deprecated_function(func, name):
"""Wrap a function with a deprecation warning.

Args:
func: Function to wrap in a deprecation warning.
name: The name that has been deprecated.

Returns:
The modified function
"""

def deprecate(*args, **kwargs):
renamed_warning(f"The {name}")
return func(*args, **kwargs)

return deprecate


def deprecated_serialize(instance, name):
"""Modifies a serializer instance serialize method.

Args:
instance: Instance to modify serialize method.
name: The name that has been deprecated.

Returns:
The modified instance
"""
instance.serialize = deprecated_function(instance.serialize, name)
return instance


def deprecated_deserialize(instance, name):
"""Modifies a deserializer instance deserialize method.

Args:
instance: Instance to modify deserialize method.
name: The name that has been deprecated.

Returns:
The modified instance
"""
instance.deserialize = deprecated_function(instance.deserialize, name)
return instance


def deprecated_class(cls, name):
"""Returns a class based on super class with a deprecation warning.

Args:
cls: The class to derive with a deprecation warning on __init__
name: The name of the class.

Returns:
The modified class.
"""

class DeprecatedClass(cls):
"""Provides a warning for the class name."""

def __init__(self, *args, **kwargs):
"""Provides a warning for the class name."""
renamed_warning(f"The class {name}")
super(DeprecatedClass, self).__init__(*args, **kwargs)

return DeprecatedClass
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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: 4 additions & 0 deletions src/sagemaker/algorithm.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,6 +17,7 @@
import sagemaker.parameter
from sagemaker import vpc_utils
from sagemaker.deserializers import BytesDeserializer
from sagemaker.deprecations import removed_kwargs
from sagemaker.estimator import EstimatorBase
from sagemaker.serializers import IdentitySerializer
from sagemaker.transformer import Transformer
Expand DownExpand Up@@ -291,6 +292,9 @@ def create_model(
Returns:
a Model ready for deployment.
"""
removed_kwargs("content_type", kwargs)
removed_kwargs("accept", kwargs)

if predictor_cls is None:

def predict_wrapper(endpoint, session):
Expand Down
20 changes: 20 additions & 0 deletions src/sagemaker/amazon/amazon_estimator.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,6 +23,7 @@
from sagemaker.amazon import validation
from sagemaker.amazon.hyperparameter import Hyperparameter as hp # noqa
from sagemaker.amazon.common import write_numpy_to_dense_tensor
from sagemaker.deprecations import renamed_warning
from sagemaker.estimator import EstimatorBase, _TrainingJob
from sagemaker.inputs import FileSystemInput, TrainingInput
from sagemaker.utils import sagemaker_timestamp
Expand DownExpand Up@@ -454,3 +455,22 @@ def upload_numpy_to_s3_shards(
s3.Object(bucket, key_prefix + file).delete()
finally:
raise ex


def get_image_uri(region_name, repo_name, repo_version=1):
"""Deprecated method. Please use sagemaker.image_uris.retrieve().

Args:
region_name: name of the region
repo_name: name of the repo (e.g. xgboost)
repo_version: version of the repo

Returns:
the image uri
"""
renamed_warning("The method get_image_uri")
return image_uris.retrieve(
framework=repo_name,
region=region_name,
version=repo_version,
)
5 changes: 5 additions & 0 deletions src/sagemaker/amazon/common.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -21,6 +21,7 @@
import numpy as np

from sagemaker.amazon.record_pb2 import Record
from sagemaker.deprecations import deprecated_class
from sagemaker.deserializers import BaseDeserializer
from sagemaker.serializers import BaseSerializer
from sagemaker.utils import DeferredError
Expand DownExpand Up@@ -298,3 +299,7 @@ def _resolve_type(dtype):
if dtype == np.dtype("float32"):
return "Float32"
raise ValueError("Unsupported dtype {} on array".format(dtype))


numpy_to_record_serializer = deprecated_class(RecordSerializer, "numpy_to_record_serializer")
record_deserializer = deprecated_class(RecordDeserializer, "record_deserializer")
23 changes: 23 additions & 0 deletions src/sagemaker/content_types.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
# Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
"""Deprecated content type constants. Just use the mime type strings."""
from __future__ import absolute_import

import deprecations

deprecations.removed_warning("The sagemaker.content_types module")

CONTENT_TYPE_JSON = "application/json"
CONTENT_TYPE_CSV = "text/csv"
CONTENT_TYPE_OCTET_STREAM = "application/octet-stream"
CONTENT_TYPE_NPY = "application/x-npy"
173 changes: 173 additions & 0 deletions src/sagemaker/deprecations.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
# Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
"""Module for deprecation abstractions."""
from __future__ import absolute_import

import logging
import warnings

logging.captureWarnings(True)


def _warn(msg):
"""Generic warning raiser referencing V2

Args:
phrase: The phrase to include in the warning.
"""
warnings.warn(
f"{msg} in sagemaker>=2.\n"
"See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.",
DeprecationWarning,
stacklevel=2,
)


def removed_warning(phrase):
"""Raise a warning for a no-op in sagemaker>=2

Args:
phrase: the prefix phrase of the warning message.
"""
_warn(f"{phrase} is a no-op")


def renamed_warning(phrase):
"""Raise a warning for a rename in sagemaker>=2

Args:
phrase: the prefix phrase of the warning message.
"""
_warn(f"{phrase} has been renamed")


def renamed_kwargs(name, default, kwargs):
"""Checks if the deprecated argument is in kwargs

Raises warning, if present.

Args:
name: name of deprecated argument
default: default value to use, if not present
kwargs: keyword arguments dict

Returns:
value of the keyword argument, if present
"""
value = kwargs.get(name, default)
if value != default:
renamed_warning(name)
return value


def removed_arg(name, arg):
"""Checks if the deprecated argument is populated.

Raises warning, if not None.

Args:
name: name of deprecated argument
arg: the argument to check
"""
if arg is not None:
removed_warning(name)


def removed_kwargs(name, kwargs):
"""Checks if the deprecated argument is in kwargs

Raises warning, if present.

Args:
name: name of deprecated argument
kwargs: keyword arguments dict
"""
if name in kwargs:
removed_warning(name)


def removed_function(name):
"""A no-op deprecated function factory."""

def func(*args, **kwargs): # pylint: disable=W0613
removed_warning(f"The function {name}")

return func


def deprecated_function(func, name):
"""Wrap a function with a deprecation warning.

Args:
func: Function to wrap in a deprecation warning.
name: The name that has been deprecated.

Returns:
The modified function
"""

def deprecate(*args, **kwargs):
renamed_warning(f"The {name}")
return func(*args, **kwargs)

return deprecate


def deprecated_serialize(instance, name):
"""Modifies a serializer instance serialize method.

Args:
instance: Instance to modify serialize method.
name: The name that has been deprecated.

Returns:
The modified instance
"""
instance.serialize = deprecated_function(instance.serialize, name)
return instance


def deprecated_deserialize(instance, name):
"""Modifies a deserializer instance deserialize method.

Args:
instance: Instance to modify deserialize method.
name: The name that has been deprecated.

Returns:
The modified instance
"""
instance.deserialize = deprecated_function(instance.deserialize, name)
return instance


def deprecated_class(cls, name):
"""Returns a class based on super class with a deprecation warning.

Args:
cls: The class to derive with a deprecation warning on __init__
name: The name of the class.

Returns:
The modified class.
"""

class DeprecatedClass(cls):
"""Provides a warning for the class name."""

def __init__(self, *args, **kwargs):
"""Provides a warning for the class name."""
renamed_warning(f"The class {name}")
super(DeprecatedClass, self).__init__(*args, **kwargs)

return DeprecatedClass
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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: 4 additions & 0 deletions src/sagemaker/algorithm.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,6 +17,7 @@
import sagemaker.parameter
from sagemaker import vpc_utils
from sagemaker.deserializers import BytesDeserializer
from sagemaker.deprecations import removed_kwargs
from sagemaker.estimator import EstimatorBase
from sagemaker.serializers import IdentitySerializer
from sagemaker.transformer import Transformer
Expand DownExpand Up@@ -291,6 +292,9 @@ def create_model(
Returns:
a Model ready for deployment.
"""
removed_kwargs("content_type", kwargs)
removed_kwargs("accept", kwargs)

if predictor_cls is None:

def predict_wrapper(endpoint, session):
Expand Down
20 changes: 20 additions & 0 deletions src/sagemaker/amazon/amazon_estimator.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,6 +23,7 @@
from sagemaker.amazon import validation
from sagemaker.amazon.hyperparameter import Hyperparameter as hp # noqa
from sagemaker.amazon.common import write_numpy_to_dense_tensor
from sagemaker.deprecations import renamed_warning
from sagemaker.estimator import EstimatorBase, _TrainingJob
from sagemaker.inputs import FileSystemInput, TrainingInput
from sagemaker.utils import sagemaker_timestamp
Expand DownExpand Up@@ -454,3 +455,22 @@ def upload_numpy_to_s3_shards(
s3.Object(bucket, key_prefix + file).delete()
finally:
raise ex


def get_image_uri(region_name, repo_name, repo_version=1):
"""Deprecated method. Please use sagemaker.image_uris.retrieve().

Args:
region_name: name of the region
repo_name: name of the repo (e.g. xgboost)
repo_version: version of the repo

Returns:
the image uri
"""
renamed_warning("The method get_image_uri")
return image_uris.retrieve(
framework=repo_name,
region=region_name,
version=repo_version,
)
5 changes: 5 additions & 0 deletions src/sagemaker/amazon/common.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -21,6 +21,7 @@
import numpy as np

from sagemaker.amazon.record_pb2 import Record
from sagemaker.deprecations import deprecated_class
from sagemaker.deserializers import BaseDeserializer
from sagemaker.serializers import BaseSerializer
from sagemaker.utils import DeferredError
Expand DownExpand Up@@ -298,3 +299,7 @@ def _resolve_type(dtype):
if dtype == np.dtype("float32"):
return "Float32"
raise ValueError("Unsupported dtype {} on array".format(dtype))


numpy_to_record_serializer = deprecated_class(RecordSerializer, "numpy_to_record_serializer")
record_deserializer = deprecated_class(RecordDeserializer, "record_deserializer")
23 changes: 23 additions & 0 deletions src/sagemaker/content_types.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
# Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
"""Deprecated content type constants. Just use the mime type strings."""
from __future__ import absolute_import

import deprecations

deprecations.removed_warning("The sagemaker.content_types module")

CONTENT_TYPE_JSON = "application/json"
CONTENT_TYPE_CSV = "text/csv"
CONTENT_TYPE_OCTET_STREAM = "application/octet-stream"
CONTENT_TYPE_NPY = "application/x-npy"
173 changes: 173 additions & 0 deletions src/sagemaker/deprecations.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
# Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
"""Module for deprecation abstractions."""
from __future__ import absolute_import

import logging
import warnings

logging.captureWarnings(True)


def _warn(msg):
"""Generic warning raiser referencing V2

Args:
phrase: The phrase to include in the warning.
"""
warnings.warn(
f"{msg} in sagemaker>=2.\n"
"See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.",
DeprecationWarning,
stacklevel=2,
)


def removed_warning(phrase):
"""Raise a warning for a no-op in sagemaker>=2

Args:
phrase: the prefix phrase of the warning message.
"""
_warn(f"{phrase} is a no-op")


def renamed_warning(phrase):
"""Raise a warning for a rename in sagemaker>=2

Args:
phrase: the prefix phrase of the warning message.
"""
_warn(f"{phrase} has been renamed")


def renamed_kwargs(name, default, kwargs):
"""Checks if the deprecated argument is in kwargs

Raises warning, if present.

Args:
name: name of deprecated argument
default: default value to use, if not present
kwargs: keyword arguments dict

Returns:
value of the keyword argument, if present
"""
value = kwargs.get(name, default)
if value != default:
renamed_warning(name)
return value


def removed_arg(name, arg):
"""Checks if the deprecated argument is populated.

Raises warning, if not None.

Args:
name: name of deprecated argument
arg: the argument to check
"""
if arg is not None:
removed_warning(name)


def removed_kwargs(name, kwargs):
"""Checks if the deprecated argument is in kwargs

Raises warning, if present.

Args:
name: name of deprecated argument
kwargs: keyword arguments dict
"""
if name in kwargs:
removed_warning(name)


def removed_function(name):
"""A no-op deprecated function factory."""

def func(*args, **kwargs): # pylint: disable=W0613
removed_warning(f"The function {name}")

return func


def deprecated_function(func, name):
"""Wrap a function with a deprecation warning.

Args:
func: Function to wrap in a deprecation warning.
name: The name that has been deprecated.

Returns:
The modified function
"""

def deprecate(*args, **kwargs):
renamed_warning(f"The {name}")
return func(*args, **kwargs)

return deprecate


def deprecated_serialize(instance, name):
"""Modifies a serializer instance serialize method.

Args:
instance: Instance to modify serialize method.
name: The name that has been deprecated.

Returns:
The modified instance
"""
instance.serialize = deprecated_function(instance.serialize, name)
return instance


def deprecated_deserialize(instance, name):
"""Modifies a deserializer instance deserialize method.

Args:
instance: Instance to modify deserialize method.
name: The name that has been deprecated.

Returns:
The modified instance
"""
instance.deserialize = deprecated_function(instance.deserialize, name)
return instance


def deprecated_class(cls, name):
"""Returns a class based on super class with a deprecation warning.

Args:
cls: The class to derive with a deprecation warning on __init__
name: The name of the class.

Returns:
The modified class.
"""

class DeprecatedClass(cls):
"""Provides a warning for the class name."""

def __init__(self, *args, **kwargs):
"""Provides a warning for the class name."""
renamed_warning(f"The class {name}")
super(DeprecatedClass, self).__init__(*args, **kwargs)

return DeprecatedClass
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
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: 4 additions & 0 deletions src/sagemaker/algorithm.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,6 +17,7 @@
import sagemaker.parameter
from sagemaker import vpc_utils
from sagemaker.deserializers import BytesDeserializer
from sagemaker.deprecations import removed_kwargs
from sagemaker.estimator import EstimatorBase
from sagemaker.serializers import IdentitySerializer
from sagemaker.transformer import Transformer
Expand DownExpand Up@@ -291,6 +292,9 @@ def create_model(
Returns:
a Model ready for deployment.
"""
removed_kwargs("content_type", kwargs)
removed_kwargs("accept", kwargs)

if predictor_cls is None:

def predict_wrapper(endpoint, session):
Expand Down
20 changes: 20 additions & 0 deletions src/sagemaker/amazon/amazon_estimator.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,6 +23,7 @@
from sagemaker.amazon import validation
from sagemaker.amazon.hyperparameter import Hyperparameter as hp # noqa
from sagemaker.amazon.common import write_numpy_to_dense_tensor
from sagemaker.deprecations import renamed_warning
from sagemaker.estimator import EstimatorBase, _TrainingJob
from sagemaker.inputs import FileSystemInput, TrainingInput
from sagemaker.utils import sagemaker_timestamp
Expand DownExpand Up@@ -454,3 +455,22 @@ def upload_numpy_to_s3_shards(
s3.Object(bucket, key_prefix + file).delete()
finally:
raise ex


def get_image_uri(region_name, repo_name, repo_version=1):
"""Deprecated method. Please use sagemaker.image_uris.retrieve().

Args:
region_name: name of the region
repo_name: name of the repo (e.g. xgboost)
repo_version: version of the repo

Returns:
the image uri
"""
renamed_warning("The method get_image_uri")
return image_uris.retrieve(
framework=repo_name,
region=region_name,
version=repo_version,
)
5 changes: 5 additions & 0 deletions src/sagemaker/amazon/common.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -21,6 +21,7 @@
import numpy as np

from sagemaker.amazon.record_pb2 import Record
from sagemaker.deprecations import deprecated_class
from sagemaker.deserializers import BaseDeserializer
from sagemaker.serializers import BaseSerializer
from sagemaker.utils import DeferredError
Expand DownExpand Up@@ -298,3 +299,7 @@ def _resolve_type(dtype):
if dtype == np.dtype("float32"):
return "Float32"
raise ValueError("Unsupported dtype {} on array".format(dtype))


numpy_to_record_serializer = deprecated_class(RecordSerializer, "numpy_to_record_serializer")
record_deserializer = deprecated_class(RecordDeserializer, "record_deserializer")
23 changes: 23 additions & 0 deletions src/sagemaker/content_types.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
# Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
"""Deprecated content type constants. Just use the mime type strings."""
from __future__ import absolute_import

import deprecations

deprecations.removed_warning("The sagemaker.content_types module")

CONTENT_TYPE_JSON = "application/json"
CONTENT_TYPE_CSV = "text/csv"
CONTENT_TYPE_OCTET_STREAM = "application/octet-stream"
CONTENT_TYPE_NPY = "application/x-npy"
173 changes: 173 additions & 0 deletions src/sagemaker/deprecations.py
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
# Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
"""Module for deprecation abstractions."""
from __future__ import absolute_import

import logging
import warnings

logging.captureWarnings(True)


def _warn(msg):
"""Generic warning raiser referencing V2

Args:
phrase: The phrase to include in the warning.
"""
warnings.warn(
f"{msg} in sagemaker>=2.\n"
"See: https://sagemaker.readthedocs.io/en/stable/v2.html for details.",
DeprecationWarning,
stacklevel=2,
)


def removed_warning(phrase):
"""Raise a warning for a no-op in sagemaker>=2

Args:
phrase: the prefix phrase of the warning message.
"""
_warn(f"{phrase} is a no-op")


def renamed_warning(phrase):
"""Raise a warning for a rename in sagemaker>=2

Args:
phrase: the prefix phrase of the warning message.
"""
_warn(f"{phrase} has been renamed")


def renamed_kwargs(name, default, kwargs):
"""Checks if the deprecated argument is in kwargs

Raises warning, if present.

Args:
name: name of deprecated argument
default: default value to use, if not present
kwargs: keyword arguments dict

Returns:
value of the keyword argument, if present
"""
value = kwargs.get(name, default)
if value != default:
renamed_warning(name)
return value


def removed_arg(name, arg):
"""Checks if the deprecated argument is populated.

Raises warning, if not None.

Args:
name: name of deprecated argument
arg: the argument to check
"""
if arg is not None:
removed_warning(name)


def removed_kwargs(name, kwargs):
"""Checks if the deprecated argument is in kwargs

Raises warning, if present.

Args:
name: name of deprecated argument
kwargs: keyword arguments dict
"""
if name in kwargs:
removed_warning(name)


def removed_function(name):
"""A no-op deprecated function factory."""

def func(*args, **kwargs): # pylint: disable=W0613
removed_warning(f"The function {name}")

return func


def deprecated_function(func, name):
"""Wrap a function with a deprecation warning.

Args:
func: Function to wrap in a deprecation warning.
name: The name that has been deprecated.

Returns:
The modified function
"""

def deprecate(*args, **kwargs):
renamed_warning(f"The {name}")
return func(*args, **kwargs)

return deprecate


def deprecated_serialize(instance, name):
"""Modifies a serializer instance serialize method.

Args:
instance: Instance to modify serialize method.
name: The name that has been deprecated.

Returns:
The modified instance
"""
instance.serialize = deprecated_function(instance.serialize, name)
return instance


def deprecated_deserialize(instance, name):
"""Modifies a deserializer instance deserialize method.

Args:
instance: Instance to modify deserialize method.
name: The name that has been deprecated.

Returns:
The modified instance
"""
instance.deserialize = deprecated_function(instance.deserialize, name)
return instance


def deprecated_class(cls, name):
"""Returns a class based on super class with a deprecation warning.

Args:
cls: The class to derive with a deprecation warning on __init__
name: The name of the class.

Returns:
The modified class.
"""

class DeprecatedClass(cls):
"""Provides a warning for the class name."""

def __init__(self, *args, **kwargs):
"""Provides a warning for the class name."""
renamed_warning(f"The class {name}")
super(DeprecatedClass, self).__init__(*args, **kwargs)

return DeprecatedClass
Loading