Skip to content

Commit e226e4e

Browse files
author
Yalin Li
authored
[FR] Add send_request() on v2 api versions tests and samples (#32795)
1 parent 52b5a0c commit e226e4e

File tree

8 files changed

+341
-25
lines changed

8 files changed

+341
-25
lines changed

sdk/formrecognizer/azure-ai-formrecognizer/assets.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
"AssetsRepo": "Azure/azure-sdk-assets",
33
"AssetsRepoPrefixPath": "python",
44
"TagPrefix": "python/formrecognizer/azure-ai-formrecognizer",
5-
"Tag": "python/formrecognizer/azure-ai-formrecognizer_58127df4fb"
5+
"Tag": "python/formrecognizer/azure-ai-formrecognizer_9918a968ae"
66
}

sdk/formrecognizer/azure-ai-formrecognizer/azure/ai/formrecognizer/_form_base_client.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,11 @@ def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs)
122122
"""Runs a network request using the client's existing pipeline.
123123
124124
The request URL can be relative to the base URL. The service API version used for the request is the same as
125-
the client's unless otherwise specified. Overriding the client's configured API version is only supported on
126-
API version 2022-08-31 and later. This method does not raise if the response is an error; to raise an
127-
exception, call `raise_for_status()` on the returned response object. For more information about how to send
128-
custom requests with this method, see https://aka.ms/azsdk/dpcodegen/python/send_request.
125+
the client's unless otherwise specified. Overriding the client's configured API version in relative URL is
126+
supported on client with API version 2022-08-31 and later. Overriding in absolute URL supported on client with
127+
any API version. This method does not raise if the response is an error; to raise an exception, call
128+
`raise_for_status()` on the returned response object. For more information about how to send custom requests
129+
with this method, see https://aka.ms/azsdk/dpcodegen/python/send_request.
129130
130131
:param request: The network request you want to make.
131132
:type request: ~azure.core.rest.HttpRequest
@@ -136,8 +137,7 @@ def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs)
136137
api_version = self._api_version
137138
if hasattr(api_version, "value"):
138139
api_version = api_version.value
139-
if self._api_version.startswith("v"):
140-
# Skip the API version formatting for v2 API versions
140+
if self._api_version in ["2.0", "2.1"]:
141141
request_copy = deepcopy(request)
142142
else:
143143
request_copy = _format_api_version(request, api_version)

sdk/formrecognizer/azure-ai-formrecognizer/azure/ai/formrecognizer/aio/_form_base_client_async.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,11 @@ async def send_request(self, request: HttpRequest, *, stream: bool = False, **kw
9595
"""Runs a network request using the client's existing pipeline.
9696
9797
The request URL can be relative to the base URL. The service API version used for the request is the same as
98-
the client's unless otherwise specified. Overriding the client's configured API version is only supported on
99-
API version 2022-08-31 and later. This method does not raise if the response is an error; to raise an
100-
exception, call `raise_for_status()` on the returned response object. For more information about how to send
101-
custom requests with this method, see https://aka.ms/azsdk/dpcodegen/python/send_request.
98+
the client's unless otherwise specified. Overriding the client's configured API version in relative URL is
99+
supported on client with API version 2022-08-31 and later. Overriding in absolute URL supported on client with
100+
any API version. This method does not raise if the response is an error; to raise an exception, call
101+
`raise_for_status()` on the returned response object. For more information about how to send custom requests
102+
with this method, see https://aka.ms/azsdk/dpcodegen/python/send_request.
102103
103104
:param request: The network request you want to make.
104105
:type request: ~azure.core.rest.HttpRequest
@@ -108,8 +109,7 @@ async def send_request(self, request: HttpRequest, *, stream: bool = False, **kw
108109
api_version = self._api_version
109110
if hasattr(api_version, "value"):
110111
api_version = api_version.value
111-
if self._api_version.startswith("v"):
112-
# Skip the API version formatting for v2 API versions
112+
if self._api_version in ["2.0", "2.1"]:
113113
request_copy = deepcopy(request)
114114
else:
115115
request_copy = _format_api_version(request, api_version)

sdk/formrecognizer/azure-ai-formrecognizer/samples/v3.2_and_later/async_samples/sample_send_request_async.py

Lines changed: 78 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import os
2525
from azure.core.credentials import AzureKeyCredential
2626
from azure.core.rest import HttpRequest
27-
from azure.ai.formrecognizer.aio import DocumentModelAdministrationClient
27+
from azure.ai.formrecognizer.aio import DocumentModelAdministrationClient, FormTrainingClient
2828

2929

3030
async def sample_send_request():
@@ -44,7 +44,83 @@ async def sample_send_request():
4444
async with client:
4545
response = await client.send_request(request)
4646
response.raise_for_status()
47+
response_body = response.json()
48+
print(
49+
f"Our resource has {response_body['customDocumentModels']['count']} custom models, "
50+
f"and we can have at most {response_body['customDocumentModels']['limit']} custom models."
51+
f"The quota limit for custom neural document models is {response_body['customNeuralDocumentModelBuilds']['quota']} and the resource has"
52+
f"used {response_body['customNeuralDocumentModelBuilds']['used']}. The resource quota will reset on {response_body['customNeuralDocumentModelBuilds']['quotaResetDateTime']}"
53+
)
4754

55+
# pass with absolute url and override the API version
56+
request = HttpRequest(method="GET", url=f"{endpoint}/formrecognizer/info?api-version=2022-08-31")
57+
async with client:
58+
response = await client.send_request(request)
59+
response.raise_for_status()
60+
response_body = response.json()
61+
print(
62+
f"Our resource has {response_body['customDocumentModels']['count']} custom models, "
63+
f"and we can have at most {response_body['customDocumentModels']['limit']} custom models."
64+
f"The quota limit for custom neural document models is {response_body['customNeuralDocumentModelBuilds']['quota']} and the resource has"
65+
f"used {response_body['customNeuralDocumentModelBuilds']['used']}. The resource quota will reset on {response_body['customNeuralDocumentModelBuilds']['quotaResetDateTime']}"
66+
)
67+
68+
# override the API version to v2.1
69+
request = HttpRequest(method="GET", url="v2.1/custom/models?op=summary")
70+
async with client:
71+
response = await client.send_request(request)
72+
response.raise_for_status()
73+
response_body = response.json()
74+
print(f"Our account has {response_body['summary']['count']} custom models, "
75+
f"and we can have at most {response_body['summary']['limit']} custom models.")
76+
77+
# pass with absolute url and override the API version to v2.1
78+
request = HttpRequest(method="GET", url=f"{endpoint}/formrecognizer/v2.1/custom/models?op=summary")
79+
async with client:
80+
response = await client.send_request(request)
81+
response.raise_for_status()
82+
response_body = response.json()
83+
print(f"Our account has {response_body['summary']['count']} custom models, "
84+
f"and we can have at most {response_body['summary']['limit']} custom models.")
85+
86+
87+
async def sample_send_request_v2():
88+
endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
89+
key = os.environ["AZURE_FORM_RECOGNIZER_KEY"]
90+
91+
# The default FormTrainingClient API version is v2.1
92+
client = FormTrainingClient(
93+
endpoint=endpoint, credential=AzureKeyCredential(key)
94+
)
95+
96+
# The `send_request` method can send custom HTTP requests that share the client's existing pipeline,
97+
# while adding convenience for endpoint construction and service API versioning.
98+
# Now let's use the `send_request` method to make a resource details fetching request.
99+
# The URL of the request can be relative (your endpoint is the default base URL),
100+
# and the API version of your client will automatically be used for the request.
101+
request = HttpRequest(method="GET", url="custom/models?op=summary")
102+
async with client:
103+
response = await client.send_request(request)
104+
response.raise_for_status()
105+
response_body = response.json()
106+
print(f"Our account has {response_body['summary']['count']} custom models, "
107+
f"and we can have at most {response_body['summary']['limit']} custom models.")
108+
109+
# pass with absolute url and override the API version
110+
request = HttpRequest(method="GET", url=f"{endpoint}/formrecognizer/v2.0/custom/models?op=summary")
111+
async with client:
112+
response = await client.send_request(request)
113+
response.raise_for_status()
114+
response_body = response.json()
115+
print(f"Our account has {response_body['summary']['count']} custom models, "
116+
f"and we can have at most {response_body['summary']['limit']} custom models.")
117+
118+
# override the API version to 2023-07-31
119+
# can only override the API version to 2022-08-31 or later with absolute url
120+
request = HttpRequest(method="GET", url=f"{endpoint}/formrecognizer/info?api-version=2023-07-31")
121+
async with client:
122+
response = await client.send_request(request)
123+
response.raise_for_status()
48124
response_body = response.json()
49125
print(
50126
f"Our resource has {response_body['customDocumentModels']['count']} custom models, "
@@ -56,10 +132,10 @@ async def sample_send_request():
56132

57133
async def main():
58134
await sample_send_request()
135+
await sample_send_request_v2()
59136

60137

61138
if __name__ == "__main__":
62-
import sys
63139
from azure.core.exceptions import HttpResponseError
64140

65141
try:

sdk/formrecognizer/azure-ai-formrecognizer/samples/v3.2_and_later/sample_send_request.py

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import os
2424
from azure.core.credentials import AzureKeyCredential
2525
from azure.core.rest import HttpRequest
26-
from azure.ai.formrecognizer import DocumentModelAdministrationClient
26+
from azure.ai.formrecognizer import DocumentModelAdministrationClient, FormTrainingClient
2727

2828

2929
def sample_send_request():
@@ -42,7 +42,76 @@ def sample_send_request():
4242
request = HttpRequest(method="GET", url="info")
4343
response = client.send_request(request)
4444
response.raise_for_status()
45+
response_body = response.json()
46+
print(
47+
f"Our resource has {response_body['customDocumentModels']['count']} custom models, "
48+
f"and we can have at most {response_body['customDocumentModels']['limit']} custom models."
49+
f"The quota limit for custom neural document models is {response_body['customNeuralDocumentModelBuilds']['quota']} and the resource has"
50+
f"used {response_body['customNeuralDocumentModelBuilds']['used']}. The resource quota will reset on {response_body['customNeuralDocumentModelBuilds']['quotaResetDateTime']}"
51+
)
52+
53+
# pass with absolute url and override the API version
54+
request = HttpRequest(method="GET", url=f"{endpoint}/formrecognizer/info?api-version=2022-08-31")
55+
response = client.send_request(request)
56+
response.raise_for_status()
57+
response_body = response.json()
58+
print(
59+
f"Our resource has {response_body['customDocumentModels']['count']} custom models, "
60+
f"and we can have at most {response_body['customDocumentModels']['limit']} custom models."
61+
f"The quota limit for custom neural document models is {response_body['customNeuralDocumentModelBuilds']['quota']} and the resource has"
62+
f"used {response_body['customNeuralDocumentModelBuilds']['used']}. The resource quota will reset on {response_body['customNeuralDocumentModelBuilds']['quotaResetDateTime']}"
63+
)
64+
65+
# override the API version to v2.1
66+
request = HttpRequest(method="GET", url="v2.1/custom/models?op=summary")
67+
response = client.send_request(request)
68+
response.raise_for_status()
69+
response_body = response.json()
70+
print(f"Our account has {response_body['summary']['count']} custom models, "
71+
f"and we can have at most {response_body['summary']['limit']} custom models.")
4572

73+
# pass with absolute url and override the API version to v2.1
74+
request = HttpRequest(method="GET", url=f"{endpoint}/formrecognizer/v2.1/custom/models?op=summary")
75+
response = client.send_request(request)
76+
response.raise_for_status()
77+
response_body = response.json()
78+
print(f"Our account has {response_body['summary']['count']} custom models, "
79+
f"and we can have at most {response_body['summary']['limit']} custom models.")
80+
81+
82+
def sample_send_request_v2():
83+
endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
84+
key = os.environ["AZURE_FORM_RECOGNIZER_KEY"]
85+
86+
# The default FormTrainingClient API version is v2.1
87+
client = FormTrainingClient(
88+
endpoint=endpoint, credential=AzureKeyCredential(key)
89+
)
90+
91+
# The `send_request` method can send custom HTTP requests that share the client's existing pipeline,
92+
# while adding convenience for endpoint construction and service API versioning.
93+
# Now let's use the `send_request` method to make a resource details fetching request.
94+
# The URL of the request can be relative (your endpoint is the default base URL),
95+
# and the API version of your client will automatically be used for the request.
96+
request = HttpRequest(method="GET", url="custom/models?op=summary")
97+
response = client.send_request(request)
98+
response.raise_for_status()
99+
response_body = response.json()
100+
print(f"Our account has {response_body['summary']['count']} custom models, "
101+
f"and we can have at most {response_body['summary']['limit']} custom models.")
102+
103+
# pass with absolute url and override the API version
104+
request = HttpRequest(method="GET", url=f"{endpoint}/formrecognizer/v2.0/custom/models?op=summary")
105+
response = client.send_request(request)
106+
response.raise_for_status()
107+
response_body = response.json()
108+
print(f"Our account has {response_body['summary']['count']} custom models, "
109+
f"and we can have at most {response_body['summary']['limit']} custom models.")
110+
111+
# override the API version to 2023-07-31
112+
request = HttpRequest(method="GET", url=f"{endpoint}/formrecognizer/info?api-version=2023-07-31")
113+
response = client.send_request(request)
114+
response.raise_for_status()
46115
response_body = response.json()
47116
print(
48117
f"Our resource has {response_body['customDocumentModels']['count']} custom models, "
@@ -57,6 +126,7 @@ def sample_send_request():
57126

58127
try:
59128
sample_send_request()
129+
sample_send_request_v2()
60130
except HttpResponseError as error:
61131
print(
62132
"For more information about troubleshooting errors, see the following guide: "

sdk/formrecognizer/azure-ai-formrecognizer/tests/test_dac_analyze_custom_model_from_url_async.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,6 @@ def callback(raw_response, _, headers):
6060
async with client:
6161
poller = await client.begin_build_document_model("template", blob_container_url=formrecognizer_selection_mark_storage_container_sas_url)
6262
model = await poller.result()
63-
64-
65-
6663
poller = await da_client.begin_analyze_document_from_url(
6764
model_id=model.model_id,
6865
document_url=self.selection_mark_url_pdf,

sdk/formrecognizer/azure-ai-formrecognizer/tests/test_send_request.py

Lines changed: 89 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@
77
import functools
88
from devtools_testutils import recorded_by_proxy, set_bodiless_matcher
99
from azure.core.rest import HttpRequest
10-
from azure.ai.formrecognizer import DocumentModelAdministrationClient
10+
from azure.ai.formrecognizer import DocumentModelAdministrationClient, FormTrainingClient
1111
from testcase import FormRecognizerTest
1212
from preparers import GlobalClientPreparer as _GlobalClientPreparer
1313
from preparers import FormRecognizerPreparer
1414

1515
DocumentModelAdministrationClientPreparer = functools.partial(_GlobalClientPreparer, DocumentModelAdministrationClient)
16+
FormTrainingClientPreparer = functools.partial(_GlobalClientPreparer, FormTrainingClient)
1617

1718

1819
class TestSendRequest(FormRecognizerTest):
@@ -30,8 +31,8 @@ def test_get_resource_details(self, client, **kwargs):
3031
received_info1 = result.json()
3132
assert received_info1
3233
assert received_info1["customDocumentModels"]
33-
assert received_info1["customDocumentModels"]["count"]
34-
assert received_info1["customDocumentModels"]["limit"]
34+
assert received_info1["customDocumentModels"]["count"] == 0
35+
assert received_info1["customDocumentModels"]["limit"] == 250
3536

3637
request = HttpRequest(
3738
method="GET",
@@ -42,3 +43,88 @@ def test_get_resource_details(self, client, **kwargs):
4243
received_info2 = result.json()
4344
assert received_info2["customDocumentModels"]["count"] == received_info1["customDocumentModels"]["count"]
4445
assert received_info2["customDocumentModels"]["limit"] == received_info1["customDocumentModels"]["limit"]
46+
47+
# test with absolute url
48+
request = HttpRequest(
49+
method="GET",
50+
url=f"{client._endpoint}/formrecognizer/info?api-version=2022-08-31",
51+
headers={"Accept": "application/json"},
52+
)
53+
result = client.send_request(request)
54+
received_info3 = result.json()
55+
assert received_info3["customDocumentModels"]["count"] == received_info1["customDocumentModels"]["count"]
56+
assert received_info3["customDocumentModels"]["limit"] == received_info1["customDocumentModels"]["limit"]
57+
58+
# test with v2 API version
59+
request = HttpRequest(
60+
method="GET",
61+
url="v2.1/custom/models?op=summary",
62+
headers={"Accept": "application/json"},
63+
)
64+
result = client.send_request(request)
65+
received_info4 = result.json()
66+
assert received_info4
67+
assert received_info4["summary"]["count"] == 0
68+
assert received_info4["summary"]["limit"]
69+
70+
# test with v2 API version with absolute url
71+
request = HttpRequest(
72+
method="GET",
73+
url=f"{client._endpoint}/formrecognizer/v2.1/custom/models?op=summary",
74+
headers={"Accept": "application/json"},
75+
)
76+
result = client.send_request(request)
77+
received_info5 = result.json()
78+
assert received_info5["summary"]["count"] == received_info4["summary"]["count"]
79+
assert received_info5["summary"]["limit"] == received_info4["summary"]["limit"]
80+
81+
@FormRecognizerPreparer()
82+
@FormTrainingClientPreparer(client_kwargs={"api_version": "2.1"})
83+
@recorded_by_proxy
84+
def test_get_account_properties_v2(self, client):
85+
set_bodiless_matcher()
86+
request = HttpRequest(
87+
method="GET",
88+
url="custom/models?op=summary",
89+
headers={"Accept": "application/json"},
90+
)
91+
result = client.send_request(request)
92+
received_info1 = result.json()
93+
assert received_info1
94+
assert received_info1["summary"]
95+
assert received_info1["summary"]["count"] == 0
96+
assert received_info1["summary"]["limit"] == 250
97+
98+
# test with absolute url
99+
request = HttpRequest(
100+
method="GET",
101+
url=f"{client._endpoint}/formrecognizer/v2.0/custom/models?op=summary",
102+
headers={"Accept": "application/json"},
103+
)
104+
result = client.send_request(request)
105+
received_info3 = result.json()
106+
assert received_info3["summary"]["count"] == received_info1["summary"]["count"]
107+
assert received_info3["summary"]["limit"] == received_info1["summary"]["limit"]
108+
109+
# relative URLs can't override the API version on 2.x clients
110+
request = HttpRequest(
111+
method="GET",
112+
url="info?api-version=2022-08-31",
113+
headers={"Accept": "application/json"},
114+
)
115+
result = client.send_request(request)
116+
received_info4 = result.json()
117+
assert received_info4["error"]["code"] == "404"
118+
assert received_info4["error"]["message"] == "Resource not found"
119+
120+
# test with v2 API version with absolute url
121+
request = HttpRequest(
122+
method="GET",
123+
url=f"{client._endpoint}/formrecognizer/info?api-version=2022-08-31",
124+
headers={"Accept": "application/json"},
125+
)
126+
result = client.send_request(request)
127+
received_info5 = result.json()
128+
assert received_info5
129+
assert received_info5["customDocumentModels"]["count"] == 0
130+
assert received_info5["customDocumentModels"]["limit"] == 250

0 commit comments

Comments
 (0)