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
6 changes: 6 additions & 0 deletions packages/autorest.python/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Release

## 6.35.3

### Bump dependencies

- Regular release

## 6.35.2

No changes, version bump only.
Expand Down
4 changes: 2 additions & 2 deletions packages/autorest.python/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@autorest/python",
"version": "6.35.2",
"version": "6.35.3",
"description": "The Python extension for generators in AutoRest.",
"scripts": {
"start": "node ./scripts/run-python3.js ./scripts/start.py",
Expand Down Expand Up @@ -29,7 +29,7 @@
},
"homepage": "https://github.com/Azure/autorest.python/blob/main/README.md",
"dependencies": {
"@typespec/http-client-python": "~0.12.2",
"@typespec/http-client-python": "~0.12.3",
"@autorest/system-requirements": "~1.0.2",
"fs-extra": "~11.2.0",
"tsx": "~4.19.1"
Expand Down
8 changes: 8 additions & 0 deletions packages/typespec-python/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# Release

## 0.45.3

### Bump dependencies

- [#3103](https://github.com/Azure/autorest.python/pull/3103) Add support for `validate-versioning` flag, so users can toggle whether they get api versioning validation
- [#3103](https://github.com/Azure/autorest.python/pull/3103) Validate api versions by looking at ordering of api versions from spec


## 0.45.2

No changes, version bump only.
Expand Down
4 changes: 2 additions & 2 deletions packages/typespec-python/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@azure-tools/typespec-python",
"version": "0.45.2",
"version": "0.45.3",
"author": "Microsoft Corporation",
"description": "TypeSpec emitter for Python SDKs",
"homepage": "https://github.com/Azure/autorest.python",
Expand Down Expand Up @@ -67,7 +67,7 @@
"js-yaml": "~4.1.0",
"semver": "~7.6.2",
"tsx": "~4.19.1",
"@typespec/http-client-python": "~0.12.2",
"@typespec/http-client-python": "~0.12.3",
"fs-extra": "~11.2.0"
},
"devDependencies": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,22 @@
def api_version_validation(**kwargs):
params_added_on = kwargs.pop("params_added_on", {})
method_added_on = kwargs.pop("method_added_on", "")
api_versions_list = kwargs.pop("api_versions_list", [])

def _index_with_default(value: str, default: int = -1) -> int:
"""Get the index of value in lst, or return default if not found.

:param value: The value to search for in the api_versions_list.
:type value: str
:param default: The default value to return if the value is not found.
:type default: int
:return: The index of the value in the list, or the default value if not found.
:rtype: int
"""
try:
return api_versions_list.index(value)
except ValueError:
return default

def decorator(func):
@functools.wraps(func)
Expand All @@ -21,7 +37,7 @@ def wrapper(*args, **kwargs):
except AttributeError:
return func(*args, **kwargs)

if method_added_on > client_api_version:
if _index_with_default(method_added_on) > _index_with_default(client_api_version):
raise ValueError(
f"'{func.__name__}' is not available in API version "
f"{client_api_version}. Pass service API version {method_added_on} or newer to your client."
Expand All @@ -31,7 +47,7 @@ def wrapper(*args, **kwargs):
parameter: api_version
for api_version, parameters in params_added_on.items()
for parameter in parameters
if parameter in kwargs and api_version > client_api_version
if parameter in kwargs and _index_with_default(api_version) > _index_with_default(client_api_version)
}
if unsupported:
raise ValueError(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ class ResiliencyServiceDrivenClientOperationsMixin( # pylint: disable=name-too-
@distributed_trace
@api_version_validation(
method_added_on="v2",
api_versions_list=["v2"],
)
def add_operation(self, **kwargs: Any) -> None: # pylint: disable=inconsistent-return-statements
"""Added operation.
Expand Down Expand Up @@ -149,6 +150,7 @@ def add_operation(self, **kwargs: Any) -> None: # pylint: disable=inconsistent-
@distributed_trace
@api_version_validation(
params_added_on={"v2": ["new_parameter"]},
api_versions_list=["v1", "v2"],
)
def from_none(self, *, new_parameter: Optional[str] = None, **kwargs: Any) -> bool:
"""Test that grew up from accepting no parameters to an optional input parameter.
Expand Down Expand Up @@ -204,6 +206,7 @@ def from_none(self, *, new_parameter: Optional[str] = None, **kwargs: Any) -> bo
@distributed_trace
@api_version_validation(
params_added_on={"v2": ["new_parameter"]},
api_versions_list=["v1", "v2"],
)
def from_one_required( # pylint: disable=inconsistent-return-statements
self, *, parameter: str, new_parameter: Optional[str] = None, **kwargs: Any
Expand Down Expand Up @@ -264,6 +267,7 @@ def from_one_required( # pylint: disable=inconsistent-return-statements
@distributed_trace
@api_version_validation(
params_added_on={"v2": ["new_parameter"]},
api_versions_list=["v1", "v2"],
)
def from_one_optional( # pylint: disable=inconsistent-return-statements
self, *, parameter: Optional[str] = None, new_parameter: Optional[str] = None, **kwargs: Any
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,22 @@
def api_version_validation(**kwargs):
params_added_on = kwargs.pop("params_added_on", {})
method_added_on = kwargs.pop("method_added_on", "")
api_versions_list = kwargs.pop("api_versions_list", [])

def _index_with_default(value: str, default: int = -1) -> int:
"""Get the index of value in lst, or return default if not found.

:param value: The value to search for in the api_versions_list.
:type value: str
:param default: The default value to return if the value is not found.
:type default: int
:return: The index of the value in the list, or the default value if not found.
:rtype: int
"""
try:
return api_versions_list.index(value)
except ValueError:
return default

def decorator(func):
@functools.wraps(func)
Expand All @@ -21,7 +37,7 @@ def wrapper(*args, **kwargs):
except AttributeError:
return func(*args, **kwargs)

if method_added_on > client_api_version:
if _index_with_default(method_added_on) > _index_with_default(client_api_version):
raise ValueError(
f"'{func.__name__}' is not available in API version "
f"{client_api_version}. Pass service API version {method_added_on} or newer to your client."
Expand All @@ -31,7 +47,7 @@ def wrapper(*args, **kwargs):
parameter: api_version
for api_version, parameters in params_added_on.items()
for parameter in parameters
if parameter in kwargs and api_version > client_api_version
if parameter in kwargs and _index_with_default(api_version) > _index_with_default(client_api_version)
}
if unsupported:
raise ValueError(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ class ResiliencyServiceDrivenClientOperationsMixin( # pylint: disable=name-too-
@distributed_trace_async
@api_version_validation(
method_added_on="v2",
api_versions_list=["v2"],
)
async def add_operation(self, **kwargs: Any) -> None:
"""Added operation.
Expand Down Expand Up @@ -94,6 +95,7 @@ async def add_operation(self, **kwargs: Any) -> None:
@distributed_trace_async
@api_version_validation(
params_added_on={"v2": ["new_parameter"]},
api_versions_list=["v1", "v2"],
)
async def from_none(self, *, new_parameter: Optional[str] = None, **kwargs: Any) -> bool:
"""Test that grew up from accepting no parameters to an optional input parameter.
Expand Down Expand Up @@ -149,6 +151,7 @@ async def from_none(self, *, new_parameter: Optional[str] = None, **kwargs: Any)
@distributed_trace_async
@api_version_validation(
params_added_on={"v2": ["new_parameter"]},
api_versions_list=["v1", "v2"],
)
async def from_one_required(self, *, parameter: str, new_parameter: Optional[str] = None, **kwargs: Any) -> None:
"""Operation that grew up from accepting one required parameter to accepting a required parameter
Expand Down Expand Up @@ -207,6 +210,7 @@ async def from_one_required(self, *, parameter: str, new_parameter: Optional[str
@distributed_trace_async
@api_version_validation(
params_added_on={"v2": ["new_parameter"]},
api_versions_list=["v1", "v2"],
)
async def from_one_optional(
self, *, parameter: Optional[str] = None, new_parameter: Optional[str] = None, **kwargs: Any
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,22 @@
def api_version_validation(**kwargs):
params_added_on = kwargs.pop("params_added_on", {})
method_added_on = kwargs.pop("method_added_on", "")
api_versions_list = kwargs.pop("api_versions_list", [])

def _index_with_default(value: str, default: int = -1) -> int:
"""Get the index of value in lst, or return default if not found.

:param value: The value to search for in the api_versions_list.
:type value: str
:param default: The default value to return if the value is not found.
:type default: int
:return: The index of the value in the list, or the default value if not found.
:rtype: int
"""
try:
return api_versions_list.index(value)
except ValueError:
return default

def decorator(func):
@functools.wraps(func)
Expand All @@ -21,7 +37,7 @@ def wrapper(*args, **kwargs):
except AttributeError:
return func(*args, **kwargs)

if method_added_on > client_api_version:
if _index_with_default(method_added_on) > _index_with_default(client_api_version):
raise ValueError(
f"'{func.__name__}' is not available in API version "
f"{client_api_version}. Pass service API version {method_added_on} or newer to your client."
Expand All @@ -31,7 +47,7 @@ def wrapper(*args, **kwargs):
parameter: api_version
for api_version, parameters in params_added_on.items()
for parameter in parameters
if parameter in kwargs and api_version > client_api_version
if parameter in kwargs and _index_with_default(api_version) > _index_with_default(client_api_version)
}
if unsupported:
raise ValueError(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ async def v2_in_interface(
@api_version_validation(
method_added_on="v2",
params_added_on={"v2": ["content_type", "accept"]},
api_versions_list=["v2"],
)
async def v2_in_interface(self, body: Union[_models.ModelV2, JSON, IO[bytes]], **kwargs: Any) -> _models.ModelV2:
"""v2_in_interface.
Expand Down Expand Up @@ -244,6 +245,7 @@ async def v1(
@distributed_trace_async
@api_version_validation(
params_added_on={"v2": ["header_v2"]},
api_versions_list=["v1", "v2"],
)
async def v1(
self, body: Union[_models.ModelV1, JSON, IO[bytes]], *, header_v2: str, **kwargs: Any
Expand Down Expand Up @@ -366,6 +368,7 @@ async def v2(self, body: IO[bytes], *, content_type: str = "application/json", *
@api_version_validation(
method_added_on="v2",
params_added_on={"v2": ["content_type", "accept"]},
api_versions_list=["v2"],
)
async def v2(self, body: Union[_models.ModelV2, JSON, IO[bytes]], **kwargs: Any) -> _models.ModelV2:
"""v2.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ def v2_in_interface(
@api_version_validation(
method_added_on="v2",
params_added_on={"v2": ["content_type", "accept"]},
api_versions_list=["v2"],
)
def v2_in_interface(self, body: Union[_models.ModelV2, JSON, IO[bytes]], **kwargs: Any) -> _models.ModelV2:
"""v2_in_interface.
Expand Down Expand Up @@ -289,6 +290,7 @@ def v1(
@distributed_trace
@api_version_validation(
params_added_on={"v2": ["header_v2"]},
api_versions_list=["v1", "v2"],
)
def v1(self, body: Union[_models.ModelV1, JSON, IO[bytes]], *, header_v2: str, **kwargs: Any) -> _models.ModelV1:
"""v1.
Expand Down Expand Up @@ -407,6 +409,7 @@ def v2(self, body: IO[bytes], *, content_type: str = "application/json", **kwarg
@api_version_validation(
method_added_on="v2",
params_added_on={"v2": ["content_type", "accept"]},
api_versions_list=["v2"],
)
def v2(self, body: Union[_models.ModelV2, JSON, IO[bytes]], **kwargs: Any) -> _models.ModelV2:
"""v2.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,22 @@
def api_version_validation(**kwargs):
params_added_on = kwargs.pop("params_added_on", {})
method_added_on = kwargs.pop("method_added_on", "")
api_versions_list = kwargs.pop("api_versions_list", [])

def _index_with_default(value: str, default: int = -1) -> int:
"""Get the index of value in lst, or return default if not found.

:param value: The value to search for in the api_versions_list.
:type value: str
:param default: The default value to return if the value is not found.
:type default: int
:return: The index of the value in the list, or the default value if not found.
:rtype: int
"""
try:
return api_versions_list.index(value)
except ValueError:
return default

def decorator(func):
@functools.wraps(func)
Expand All @@ -15,7 +31,7 @@ def wrapper(*args, **kwargs):
except AttributeError:
return func(*args, **kwargs)

if method_added_on > client_api_version:
if _index_with_default(method_added_on) > _index_with_default(client_api_version):
raise ValueError(
f"'{func.__name__}' is not available in API version "
f"{client_api_version}. Pass service API version {method_added_on} or newer to your client."
Expand All @@ -25,7 +41,7 @@ def wrapper(*args, **kwargs):
parameter: api_version
for api_version, parameters in params_added_on.items()
for parameter in parameters
if parameter in kwargs and api_version > client_api_version
if parameter in kwargs and _index_with_default(api_version) > _index_with_default(client_api_version)
}
if unsupported:
raise ValueError(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ async def v2_in_interface(
@api_version_validation(
method_added_on="v2",
params_added_on={"v2": ["content_type", "accept"]},
api_versions_list=["v2"],
)
async def v2_in_interface(self, body: Union[_models.ModelV2, JSON, IO[bytes]], **kwargs: Any) -> _models.ModelV2:
"""v2_in_interface.
Expand Down Expand Up @@ -232,6 +233,7 @@ async def v1(

@api_version_validation(
params_added_on={"v2": ["header_v2"]},
api_versions_list=["v1", "v2"],
)
async def v1(
self, body: Union[_models.ModelV1, JSON, IO[bytes]], *, header_v2: str, **kwargs: Any
Expand Down Expand Up @@ -353,6 +355,7 @@ async def v2(self, body: IO[bytes], *, content_type: str = "application/json", *
@api_version_validation(
method_added_on="v2",
params_added_on={"v2": ["content_type", "accept"]},
api_versions_list=["v2"],
)
async def v2(self, body: Union[_models.ModelV2, JSON, IO[bytes]], **kwargs: Any) -> _models.ModelV2:
"""v2.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ def v2_in_interface(
@api_version_validation(
method_added_on="v2",
params_added_on={"v2": ["content_type", "accept"]},
api_versions_list=["v2"],
)
def v2_in_interface(self, body: Union[_models.ModelV2, JSON, IO[bytes]], **kwargs: Any) -> _models.ModelV2:
"""v2_in_interface.
Expand Down Expand Up @@ -278,6 +279,7 @@ def v1(

@api_version_validation(
params_added_on={"v2": ["header_v2"]},
api_versions_list=["v1", "v2"],
)
def v1(self, body: Union[_models.ModelV1, JSON, IO[bytes]], *, header_v2: str, **kwargs: Any) -> _models.ModelV1:
"""v1.
Expand Down Expand Up @@ -393,6 +395,7 @@ def v2(self, body: IO[bytes], *, content_type: str = "application/json", **kwarg
@api_version_validation(
method_added_on="v2",
params_added_on={"v2": ["content_type", "accept"]},
api_versions_list=["v2"],
)
def v2(self, body: Union[_models.ModelV2, JSON, IO[bytes]], **kwargs: Any) -> _models.ModelV2:
"""v2.
Expand Down
Loading
Loading