Skip to content

Commit 34014f5

Browse files
Merge branch 'main' into fixing_issue_43955
2 parents 59a04f4 + 73cdd98 commit 34014f5

File tree

5,630 files changed

+325881
-151735
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

5,630 files changed

+325881
-151735
lines changed

.github/CODEOWNERS

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
# ServiceLabel: %AI
3434

3535
# PRLabel: %AI
36-
/sdk/ai/ @luigiw @needuv @paulshealy1 @singankit @dargilco @jhakulin
36+
/sdk/ai/ @luigiw @needuv @paulshealy1 @singankit @dargilco @trrwilson
3737

3838
# ServiceOwners: @luigiw @needuv @singankit
3939
# ServiceLabel: %Evaluation
@@ -80,6 +80,12 @@
8080
# PRLabel: %CognitiveServices
8181
/sdk/cognitiveservices/ @lmazuel
8282

83+
# ServiceOwners: @amber-yujueWang @rhurey @xitzhang
84+
# ServiceLabel: %Speech Transcription
85+
86+
# PRLabel: %Speech Transcription
87+
/sdk/cognitiveservices/azure-ai-transcription/ @amber-yujueWang @rhurey @xitzhang
88+
8389
# ServiceLabel: %Communication
8490
# PRLabel: %Communication
8591
/sdk/communication/ @acsdevx-msft
@@ -243,15 +249,15 @@
243249

244250
# PRLabel: %AI Model Inference
245251
# ServiceLabel: %AI Model Inference %Service Attention
246-
/sdk/ai/azure-ai-inference/ @dargilco @trangevi @jhakulin
252+
/sdk/ai/azure-ai-inference/ @dargilco @trangevi @trrwilson
247253

248254
# PRLabel: %AI Agents
249255
# ServiceLabel: %AI Agents %Service Attention
250-
/sdk/ai/azure-ai-agents/ @dargilco @jhakulin @trangevi @glharper @nick863 @howieleung
256+
/sdk/ai/azure-ai-agents/ @dargilco @trrwilson @trangevi @glharper @nick863 @howieleung
251257

252258
# PRLabel: %AI Projects
253259
# ServiceLabel: %AI Projects %Service Attention
254-
/sdk/ai/azure-ai-projects/ @dargilco @jhakulin @trangevi @glharper @nick863 @howieleung
260+
/sdk/ai/azure-ai-projects/ @dargilco @trrwilson @trangevi @glharper @nick863 @howieleung @kingernupur
255261

256262
# PRLabel: %Voice Live
257263
# ServiceLabel: %Voice Live %Service Attention
@@ -320,6 +326,10 @@
320326
# PRLabel: %Operator Nexus - Network Cloud
321327
/sdk/networkcloud/ @Azure/azure-sdk-write-networkcloud
322328

329+
# ServiceLabel: %Planetary Computer
330+
# PRLabel: %Planetary Computer
331+
/sdk/planetarycomputer/ @mandarinamdar @chahibi
332+
323333
# AzureSdkOwners: @annatisch
324334
# ServiceLabel: %Azure Projects
325335
# ServiceOwners: @annatisch
@@ -410,7 +420,7 @@
410420
/sdk/translation/azure-ai-translation-text/ @MikeyMCZ
411421

412422
# PRLabel: %Cognitive - Language
413-
/sdk/cognitivelanguage/ @quentinRobinson @wangyuantao
423+
/sdk/cognitivelanguage/ @quentinRobinson @bidisha-c @mikaelsitruk @sarkar-rajarshi @ahmedaashour
414424

415425
# PRLabel: %Cognitive - Personalizer
416426
/sdk/personalizer/ @sharathmalladi
@@ -836,6 +846,7 @@
836846
/eng/common/ @Azure/azure-sdk-eng
837847
/.github/workflows/ @Azure/azure-sdk-eng
838848
/.github/CODEOWNERS @lmazuel @xiangyan99 @kashifkhan @Azure/azure-sdk-eng
849+
/.github/copilot-instructions.md @l0lawrence @praveenkuttappan @maririos
839850
/sdk/pullrequest.yml @scbedd @weshaggard @benbp
840851

841852
/.config/1espt/ @benbp @weshaggard
@@ -859,4 +870,4 @@
859870
/eng/emitter-package-lock.json @mccoyp @catalinaperalta @iscai-msft
860871

861872
/pylintrc @l0lawrence @scbedd @mccoyp
862-
/sdk/**/ci.yml @msyyc @lmazuel
873+
/sdk/**/ci.yml @msyyc @lmazuel @scbedd

.github/copilot-instructions.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
### RULE 3: VERIFY ENVIRONMENT FIRST
1616
**REQUIRED CONDITIONS:**
17+
- Always run the [`azsdk_verify_setup`](../eng/common/instructions/azsdk-tools/verify-setup.instructions.md) tool to check the user's development environment setup for using SDK MCP tools. DO NOT PROCEED with running other tools before completing this step. Only skip for queries that don't need tools.
1718
- To use Azure MCP tool calls, users must have PowerShell installed. Provide [PowerShell installation instructions](https://learn.microsoft.com/powershell/scripting/install/installing-powershell) if not installed, and recommend restarting the IDE to start the MCP server.
1819

1920
---
@@ -110,4 +111,4 @@ This library is failing two release blocking checks - Mypy and Tests - CI. The l
110111

111112
## SDK release
112113

113-
For detailed workflow instructions, see [SDK Release](../eng/common/instructions/copilot/sdk-release.instructions.md).
114+
For detailed workflow instructions, see [SDK Release](https://github.com/Azure/azure-sdk-for-python/blob/main/eng/common/instructions/copilot/sdk-release.instructions.md).

.vscode/cspell.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@
155155
"sdk/ai/azure-ai-voicelive/samples/**"
156156
],
157157
"words": [
158+
"qnas",
158159
"msedge",
159160
"spinup",
160161
"cibuildwheel",
@@ -356,6 +357,7 @@
356357
"nbsp",
357358
"noarch",
358359
"NOPERM",
360+
"norecursedirs",
359361
"northcentralus",
360362
"nspkg",
361363
"OAEP",
@@ -529,7 +531,7 @@
529531
"logprobs",
530532
"pyaudio",
531533
"PyAudio",
532-
"libasound",
534+
"libasound",
533535
"ingraph"
534536
],
535537
"overrides": [
@@ -907,12 +909,12 @@
907909
},
908910
{
909911
"filename": "sdk/cognitivelanguage/azure-ai-language-conversations-authoring/**",
910-
"words": [ "unassigning" ],
912+
"words": [ "unassigning", "unassignment" ],
911913
"caseSensitive": false
912914
},
913915
{
914916
"filename": "sdk/cognitivelanguage/azure-ai-language-questionanswering/**",
915-
"words": [ "qnas", "qnamaker", "ADTO" ],
917+
"words": [ "qnas", "qnamaker", "ADTO", "tfidf", "ngram" ],
916918
"caseSensitive": false
917919
},
918920
{

argfile.json

Lines changed: 0 additions & 22 deletions
This file was deleted.

doc/dev/mgmt/hybrid_model_migration.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ When migrating to the hybrid model design, expect these breaking changes:
1717
| [Additional Properties](#additional-properties-handling) | `additional_properties` parameter removed | Use direct dictionary syntax: `model["key"] = value` |
1818
| [String Representation](#string-representation-matches-rest-api) | Model key output changed from `snake_case` to `camelCase` | Update any code parsing model strings to expect `camelCase` |
1919
| [Serialization/Deserialization](#serialization-and-deserialization-methods-removed) | `serialize` and `deserialize` methods removed | Use dictionary access for serialization, constructor for deserialization |
20+
| [Reserved Property Names](#reserved-property-name-conflicts) | Conflicting names suffixed with `_property` | Update code to use `_property` suffix: `model.keys``model.keys_property` |
2021

2122
## Detailed Breaking Changes
2223

@@ -273,6 +274,50 @@ serialized_dict = as_attribute_dict(model, exclude_readonly=False)
273274
serialized_dict = as_attribute_dict(model, exclude_readonly=True)
274275
```
275276

277+
### Reserved Property Name Conflicts
278+
279+
**What changed**: Hybrid models now inherit from Python's built-in `dict`. If a REST API property name collides with a `dict` method name (e.g. `keys`, `values`, `items`, `clear`, `update`, `get`, `pop`, `popitem`, `setdefault`, `copy`), the Python emitter appends `_property` to the generated attribute to avoid masking the dictionary method.
280+
281+
**What will break**:
282+
283+
- Constructor calls that pass reserved names as keyword arguments: `Model(keys=...)` will now pass the argument to the underlying `dict` constructor, which means the property value will not be set as expected and may result in a `TypeError` or unexpected behavior.
284+
- Attribute access expecting the property value: `model.keys` now refers to the method; calling it without parentheses will not return the property data.
285+
286+
**Before**:
287+
288+
```python
289+
from azure.mgmt.test.models import Model
290+
291+
model = Model(keys={"a": 1}, values=[1, 2, 3])
292+
print(model.keys) # Property value (old behavior)
293+
print(model.values) # Property value (old behavior)
294+
print(model.as_dict()["keys"]) # REST layer value
295+
```
296+
297+
**After**:
298+
299+
```python
300+
from azure.mgmt.test.models import Model
301+
302+
# Reserved property names receive a `_property` suffix
303+
model = Model(keys_property={"a": 1}, values_property=[1, 2, 3])
304+
305+
print(model.keys_property) # ✅ Property value
306+
print(model.values_property) # ✅ Property value
307+
print(model["keys"]) # REST layer value
308+
309+
# names without suffix are now dict methods
310+
print(list(model.keys())) # ✅ Dict method listing all keys in the model
311+
print(list(model.values())) # ✅ Dict method listing all values
312+
```
313+
314+
**Migration steps:**
315+
316+
1. Search for any usage of reserved names as constructor keywords or attribute accesses.
317+
2. Append `_property` to both initialization and attribute access: `Model(keys=...)``Model(keys_property=...)`; `model.keys``model.keys_property`.
318+
3. Update tests and documentation references accordingly.
319+
4. If you had dynamic code relying on `getattr(model, name)`, ensure you add a rule to transform reserved names to `name + "_property"` first.
320+
276321
---
277322

278323
## Additional Helper Methods

doc/dev/mgmt/sdk-breaking-changes-guide.md

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -205,16 +205,31 @@ op IotDpsResourceGetCustomized(
205205
);
206206
```
207207

208-
## 6. Removal of Unreferenced Models
208+
## 6. Common Types Upgrade
209+
210+
**Changelog Pattern**:
211+
212+
Multiple changes related to common infrastructure types such as `SystemData` and `IdentityType`:
213+
214+
```md
215+
- Deleted or renamed model `IdentityType`
216+
```
217+
218+
**Reason**: Common types are upgraded to their latest versions during TypeSpec migration.
219+
220+
**Impact**: Low impact since these are common infrastructure types rarely used directly by users.
221+
222+
**Resolution**: Accept these breaking changes.
223+
224+
## 7. Removal of Unreferenced Models
209225

210226
**Changelog Pattern**:
211227

212228
Multiple removals of unreferenced models that are typically not used in the SDK:
213229

214230
```md
215-
- Deleted or renamed model `ReplicationUsageList`
216-
- Deleted or renamed model `VaultList`
217-
- Deleted or renamed model `VaultUsageList`
231+
- Deleted or renamed model `ProxyResourceWithoutSystemData`
232+
- Deleted or renamed model `Resource`
218233
```
219234

220235
**Reason**: Unreferenced models are removed during TypeSpec migration.
@@ -223,7 +238,27 @@ Multiple removals of unreferenced models that are typically not used in the SDK:
223238

224239
**Resolution**: Accept these breaking changes.
225240

226-
## 7. Parameters Changed to Keyword-only
241+
## 8. Removal of Pageable Models
242+
243+
**Changelog Pattern**:
244+
245+
Multiple removals of models following the pattern `xxxList`:
246+
247+
```md
248+
- Deleted or renamed model `ElasticSanList`
249+
- Deleted or renamed model `SkuInformationList`
250+
- Deleted or renamed model `SnapshotList`
251+
- Deleted or renamed model `VolumeGroupList`
252+
- Deleted or renamed model `VolumeList`
253+
```
254+
255+
**Reason**: Python will not expose pageable models for list APIs.
256+
257+
**Impact**: Low impact since these models are typically not used directly by users.
258+
259+
**Resolution**: Accept these breaking changes.
260+
261+
## 9. Parameters Changed to Keyword-only
227262

228263
**Changelog Pattern**:
229264

@@ -239,7 +274,7 @@ Entries showing the usage of passing parameters positionally is disabled:
239274

240275
**Resolution**: Accept these breaking changes.
241276

242-
## 8. Removal of Parameter `if_match`
277+
## 10. Removal of Parameter `if_match`
243278

244279
**Changelog Pattern**:
245280

@@ -257,7 +292,7 @@ Removal of parameter `if_match` and addition of `etag/match_condition` for the s
257292

258293
**Resolution**: Accept these breaking changes.
259294

260-
## 9. Removal of multi-level flattened properties
295+
## 11. Removal of multi-level flattened properties
261296

262297
**Changelog Pattern**:
263298

doc/dev/test_proxy_troubleshooting.md

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,9 @@ To run recorded tests successfully when recorded values are inconsistent or rand
275275
proxy provides a `variables` API. This makes it possible for a test to record the values of variables that were used
276276
during recording and use the same values in playback mode without a sanitizer.
277277

278+
Note that the recorded variables **must** have string values. For example, trying to record an integer value for a
279+
variable will cause a test proxy error.
280+
278281
For example, imagine that a test uses a randomized `table_uuid` variable when creating resources. The same random value
279282
for `table_uuid` can be used in playback mode by using this `variables` API.
280283

@@ -293,14 +296,14 @@ class TestExample(AzureRecordedTestCase):
293296
@recorded_by_proxy
294297
def test_example(self, **kwargs):
295298
# In live mode, variables is an empty dictionary
296-
# In playback mode, the value of variables is {"table_uuid": "random-value"}
299+
# In playback mode, the value of variables is {"current_time": "<previously recorded time>"}
297300
variables = kwargs.pop("variables", {})
298301

299-
# To fetch variable values, use the `setdefault` method to look for a key ("table_uuid")
300-
# and set a real value for that key if it's not present ("random-value")
301-
table_uuid = variables.setdefault("table_uuid", "random-value")
302+
# To fetch variable values, use the `setdefault` method to look for a key ("current_time")
303+
# and set a real value for that key if it's not present (str(time.time()))
304+
# Note that time.time() is converted from a float to a string to record it properly
305+
current_time = variables.setdefault("current_time", str(time.time()))
302306

303-
# use variables["table_uuid"] when using the table UUID throughout the test
304307
...
305308

306309
# return the variables at the end of the test to record them

doc/tool_usage_guide.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ This repo is currently migrating all checks from a slower `tox`-based framework,
2727
|`verifysdist`| Verify directories included in sdist and contents in manifest file. Also ensures that py.typed configuration is correct within the setup.py. | `azpysdk verifysdist .` |
2828
|`verify_keywords`| Verify that the keyword 'azure sdk' is present in the targeted package's keywords. | `azpysdk verify_keywords .` |
2929
|`import_all`| Installs the package w/ default dependencies, then attempts to `import *` from the base namespace. Ensures that all imports will resolve after a base install and import. | `azpysdk import_all .` |
30+
|`generate`| Regenerates the code. | `azpysdk generate .` |
31+
|`breaking`| Checks for breaking changes. | `azpysdk breaking .` |
3032

3133
## Common arguments
3234

eng/.docsettings.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ omitted_paths:
2222
language: python
2323
root_check_enabled: True
2424
required_readme_sections:
25-
- ^Azure (.+ client library for Python|Smoke Test for Python)
25+
- ^Azure (.+ client library for Python|Smoke Test for Python|AI Agent Server Adapter for .*Python)
2626
- ^Getting started$
2727
- ^Key concepts$
2828
- ^Examples$

eng/ci_tools.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ pkginfo==1.12.1.2
1111
pip==24.0
1212
typing-extensions==4.12.2
1313
pyproject-api==1.8.0
14-
cibuildwheel==2.16.5
14+
cibuildwheel==2.23.3
1515
importlib-metadata==8.5.0
1616
build==1.2.2.post1
1717

0 commit comments

Comments
 (0)