Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
b481ae3
use local http-client-python
Jul 24, 2025
1069e39
regen with subdir
Jul 24, 2025
ddffc15
Merge branch 'main' of https://github.com/Azure/autorest.python into …
Jul 25, 2025
a123166
regen
Jul 25, 2025
967b3ac
not deleting parent code
Jul 25, 2025
aff13ac
add tests for generation subdir
Jul 25, 2025
fa719d3
use existing infrastructure
Jul 25, 2025
95fdcbd
clean up regenerate.ts and black code
Jul 25, 2025
dcfc458
working on azure
Jul 25, 2025
b01aea8
add tests
Jul 25, 2025
d066601
Merge branch 'main' of https://github.com/Azure/autorest.python into …
Jul 29, 2025
65ad99c
use latest
Jul 29, 2025
2987cca
Merge branch 'main' of https://github.com/Azure/autorest.python into …
Aug 1, 2025
4938494
use build artficat
Aug 1, 2025
a23bccc
test latest
Aug 4, 2025
d134371
regenerate
Aug 4, 2025
fb0797d
generating without packaging files
Aug 4, 2025
af22aff
fix placement of generated tests in tsp
Aug 4, 2025
e39baf5
get rid of gitignore
Aug 4, 2025
e3d6a85
latest
Aug 4, 2025
8b95ba3
Merge branch 'main' of https://github.com/Azure/autorest.python into …
Aug 4, 2025
b008e27
add azure test
Aug 4, 2025
609a63e
update mockapitests
Aug 4, 2025
513152f
add auth api key tests
Aug 4, 2025
4f03983
bump http-client-python version
msyyc Aug 5, 2025
f7d5270
merge
msyyc Aug 5, 2025
271797e
update private package link
msyyc Aug 5, 2025
6217b6d
update lock file
msyyc Aug 5, 2025
25fadbb
fix format
msyyc Aug 5, 2025
8d602a6
Regenerate for typespec-python (2025-08-05 07:03:00)
Aug 5, 2025
564f1d6
fix mock tests
Aug 5, 2025
bd2512a
add changeset
Aug 5, 2025
563c274
prep for version fix
Aug 5, 2025
5389df5
format
Aug 5, 2025
01d9c03
lint and fix problems in customized client
Aug 5, 2025
d71f800
fix context managing in mock api tests
Aug 5, 2025
2e2e6b5
add back patch ops
Aug 5, 2025
6c4e67e
fix sensitive word test
Aug 5, 2025
3be8c24
fix docs
Aug 5, 2025
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
7 changes: 7 additions & 0 deletions .chronus/changes/generation_subdir-2025-7-5-11-32-14.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
changeKind: dependencies
packages:
- "@autorest/python"
---

Bump `http-client-python` dep
7 changes: 7 additions & 0 deletions .chronus/changes/generation_subdir-2025-7-5-11-32-25.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
changeKind: feature
packages:
- "@azure-tools/typespec-python"
---

Add support for `generation-subdir`
2 changes: 1 addition & 1 deletion packages/autorest.python/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
},
"homepage": "https://github.com/Azure/autorest.python/blob/main/README.md",
"dependencies": {
"@typespec/http-client-python": "~0.14.3-dev.1",
"@typespec/http-client-python": "https://artprodcus3.artifacts.visualstudio.com/A0fb41ef4-5012-48a9-bf39-4ee3de03ee35/29ec6040-b234-4e31-b139-33dc4287b756/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL2F6dXJlLXNkay9wcm9qZWN0SWQvMjllYzYwNDAtYjIzNC00ZTMxLWIxMzktMzNkYzQyODdiNzU2L2J1aWxkSWQvNTE4MDYwNC9hcnRpZmFjdE5hbWUvYnVpbGRfYXJ0aWZhY3RzX3B5dGhvbg2/content?format=file&subPath=%2Fpackages%2Ftypespec-http-client-python-0.14.2.tgz",
"@autorest/system-requirements": "~1.0.2",
"fs-extra": "~11.2.0",
"tsx": "~4.19.1"
Expand Down
2 changes: 1 addition & 1 deletion packages/typespec-python/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
"js-yaml": "~4.1.0",
"semver": "~7.6.2",
"tsx": "~4.19.1",
"@typespec/http-client-python": "~0.14.3-dev.1",
"@typespec/http-client-python": "https://artprodcus3.artifacts.visualstudio.com/A0fb41ef4-5012-48a9-bf39-4ee3de03ee35/29ec6040-b234-4e31-b139-33dc4287b756/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL2F6dXJlLXNkay9wcm9qZWN0SWQvMjllYzYwNDAtYjIzNC00ZTMxLWIxMzktMzNkYzQyODdiNzU2L2J1aWxkSWQvNTE4MDYwNC9hcnRpZmFjdE5hbWUvYnVpbGRfYXJ0aWZhY3RzX3B5dGhvbg2/content?format=file&subPath=%2Fpackages%2Ftypespec-http-client-python-0.14.2.tgz",
"fs-extra": "~11.2.0"
},
"devDependencies": {
Expand Down
8 changes: 8 additions & 0 deletions packages/typespec-python/scripts/eng/regenerate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,14 @@ const EMITTER_OPTIONS: Record<string, Record<string, string> | Record<string, st
"package-mode": "azure-dataplane",
"package-pprint-name": "ResiliencySrvDriven2",
},
"authentication/api-key": [
{},
{
"package-name": "authentication-api-key-subdir",
"generation-subdir": "_generated/",
"namespace": "authentication.api.key.subdir",
},
],
"authentication/http/custom": {
"package-name": "authentication-http-custom",
"namespace": "authentication.http.custom",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Release History

## 1.0.0b1 (1970-01-01)

- Initial version
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
Copyright (c) Microsoft Corporation.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
include *.md
include LICENSE
include authentication/api/key/subdir/py.typed
recursive-include tests *.py
recursive-include samples *.py *.md
include authentication/__init__.py
include authentication/api/__init__.py
include authentication/api/key/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Authentication Api Key Subdir client library for Python
<!-- write necessary description of service -->

## Getting started

### Install the package

```bash
python -m pip install authentication-api-key-subdir
```

#### Prequisites

- Python 3.9 or later is required to use this package.
- You need an [Azure subscription][azure_sub] to use this package.
- An existing Authentication Api Key Subdir instance.


## Contributing

This project welcomes contributions and suggestions. Most contributions require
you to agree to a Contributor License Agreement (CLA) declaring that you have
the right to, and actually do, grant us the rights to use your contribution.
For details, visit https://cla.microsoft.com.

When you submit a pull request, a CLA-bot will automatically determine whether
you need to provide a CLA and decorate the PR appropriately (e.g., label,
comment). Simply follow the instructions provided by the bot. You will only
need to do this once across all repos using our CLA.

This project has adopted the
[Microsoft Open Source Code of Conduct][code_of_conduct]. For more information,
see the Code of Conduct FAQ or contact opencode@microsoft.com with any
additional questions or comments.

<!-- LINKS -->
[code_of_conduct]: https://opensource.microsoft.com/codeofconduct/
[authenticate_with_token]: https://docs.microsoft.com/azure/cognitive-services/authentication?tabs=powershell#authenticate-with-an-authentication-token
[azure_identity_credentials]: https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/identity/azure-identity#credentials
[azure_identity_pip]: https://pypi.org/project/azure-identity/
[default_azure_credential]: https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/identity/azure-identity#defaultazurecredential
[pip]: https://pypi.org/project/pip/
[azure_sub]: https://azure.microsoft.com/free/
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
__path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
__path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
__path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# -------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for
# license information.
# --------------------------------------------------------------------------
from ._client import CustomizedApiKeyClient
from ._generated.models import InvalidAuth

__all__ = [
"CustomizedApiKeyClient",
"InvalidAuth",
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# -------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for
# license information.
# --------------------------------------------------------------------------
from typing import Any, Optional
from azure.core.credentials import AzureKeyCredential
from ._generated import ApiKeyClient as GeneratedClient


class CustomizedApiKeyClient:
"""Tests customization of a client that is fully wrapped

:param credential: Credential used to authenticate requests to the service. Required.
:type credential: ~azure.core.credentials.AzureKeyCredential
:keyword endpoint: Service host. Default value is "http://localhost:3000".
:paramtype endpoint: str
:keyword api_version: API version to use for requests. Default value is None.
:paramtype api_version: str or None
"""

def __init__(
self,
credential: AzureKeyCredential,
*,
endpoint: str = "http://localhost:3000",
api_version: Optional[str] = None,
**kwargs: Any
) -> None:
self._client = GeneratedClient(credential=credential, endpoint=endpoint, api_version=api_version, **kwargs)

def custom_method(self) -> bool:
"""An example of a custom method that could be added.

:return: True if the client is valid, False otherwise.
:rtype: bool
"""
self._client.valid()
return True
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# coding=utf-8
# --------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# Code generated by Microsoft (R) Python Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
# --------------------------------------------------------------------------
# pylint: disable=wrong-import-position

from typing import TYPE_CHECKING

if TYPE_CHECKING:
from ._patch import * # pylint: disable=unused-wildcard-import

from ._client import ApiKeyClient # type: ignore
from ._version import VERSION

__version__ = VERSION

try:
from ._patch import __all__ as _patch_all
from ._patch import *
except ImportError:
_patch_all = []
from ._patch import patch_sdk as _patch_sdk

__all__ = [
"ApiKeyClient",
]
__all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore

_patch_sdk()
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
# coding=utf-8
# --------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# Code generated by Microsoft (R) Python Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
# --------------------------------------------------------------------------

from copy import deepcopy
from typing import Any
from typing_extensions import Self

from azure.core import PipelineClient
from azure.core.credentials import AzureKeyCredential
from azure.core.pipeline import policies
from azure.core.rest import HttpRequest, HttpResponse

from ._configuration import ApiKeyClientConfiguration
from ._operations import _ApiKeyClientOperationsMixin
from ._utils.serialization import Deserializer, Serializer


class ApiKeyClient(_ApiKeyClientOperationsMixin): # pylint: disable=client-accepts-api-version-keyword
"""Illustrates clients generated with ApiKey authentication.

:param credential: Credential used to authenticate requests to the service. Required.
:type credential: ~azure.core.credentials.AzureKeyCredential
:keyword endpoint: Service host. Default value is "http://localhost:3000".
:paramtype endpoint: str
"""

def __init__(
self, credential: AzureKeyCredential, *, endpoint: str = "http://localhost:3000", **kwargs: Any
) -> None:
_endpoint = "{endpoint}"
self._config = ApiKeyClientConfiguration(credential=credential, endpoint=endpoint, **kwargs)

_policies = kwargs.pop("policies", None)
if _policies is None:
_policies = [
policies.RequestIdPolicy(**kwargs),
self._config.headers_policy,
self._config.user_agent_policy,
self._config.proxy_policy,
policies.ContentDecodePolicy(**kwargs),
self._config.redirect_policy,
self._config.retry_policy,
self._config.authentication_policy,
self._config.custom_hook_policy,
self._config.logging_policy,
policies.DistributedTracingPolicy(**kwargs),
policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None,
self._config.http_logging_policy,
]
self._client: PipelineClient = PipelineClient(base_url=_endpoint, policies=_policies, **kwargs)

self._serialize = Serializer()
self._deserialize = Deserializer()
self._serialize.client_side_validation = False

def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse:
"""Runs the network request through the client's chained policies.

>>> from azure.core.rest import HttpRequest
>>> request = HttpRequest("GET", "https://www.example.org/")
<HttpRequest [GET], url: 'https://www.example.org/'>
>>> response = client.send_request(request)
<HttpResponse: 200 OK>

For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request

:param request: The network request you want to make. Required.
:type request: ~azure.core.rest.HttpRequest
:keyword bool stream: Whether the response payload will be streamed. Defaults to False.
:return: The response of your network call. Does not do error handling on your response.
:rtype: ~azure.core.rest.HttpResponse
"""

request_copy = deepcopy(request)
path_format_arguments = {
"endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True),
}

request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments)
return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore

def close(self) -> None:
self._client.close()

def __enter__(self) -> Self:
self._client.__enter__()
return self

def __exit__(self, *exc_details: Any) -> None:
self._client.__exit__(*exc_details)
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# coding=utf-8
# --------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# Code generated by Microsoft (R) Python Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
# --------------------------------------------------------------------------

from typing import Any

from azure.core.credentials import AzureKeyCredential
from azure.core.pipeline import policies

from ._version import VERSION


class ApiKeyClientConfiguration: # pylint: disable=too-many-instance-attributes
"""Configuration for ApiKeyClient.

Note that all parameters used to create this instance are saved as instance
attributes.

:param credential: Credential used to authenticate requests to the service. Required.
:type credential: ~azure.core.credentials.AzureKeyCredential
:param endpoint: Service host. Default value is "http://localhost:3000".
:type endpoint: str
"""

def __init__(self, credential: AzureKeyCredential, endpoint: str = "http://localhost:3000", **kwargs: Any) -> None:
if credential is None:
raise ValueError("Parameter 'credential' must not be None.")

self.credential = credential
self.endpoint = endpoint
kwargs.setdefault("sdk_moniker", "authentication-api-key-subdir/{}".format(VERSION))
self.polling_interval = kwargs.get("polling_interval", 30)
self._configure(**kwargs)

def _configure(self, **kwargs: Any) -> None:
self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs)
self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs)
self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs)
self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs)
self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs)
self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs)
self.redirect_policy = kwargs.get("redirect_policy") or policies.RedirectPolicy(**kwargs)
self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs)
self.authentication_policy = kwargs.get("authentication_policy")
if self.credential and not self.authentication_policy:
self.authentication_policy = policies.AzureKeyCredentialPolicy(self.credential, "x-ms-api-key", **kwargs)
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# coding=utf-8
# --------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# Code generated by Microsoft (R) Python Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
# --------------------------------------------------------------------------
# pylint: disable=wrong-import-position

from typing import TYPE_CHECKING

if TYPE_CHECKING:
from ._patch import * # pylint: disable=unused-wildcard-import

from ._operations import _ApiKeyClientOperationsMixin # type: ignore # pylint: disable=unused-import

from ._patch import __all__ as _patch_all
from ._patch import *
from ._patch import patch_sdk as _patch_sdk

__all__ = []
__all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore
_patch_sdk()
Loading
Loading