Skip to content

Commit 7835c90

Browse files
hizixinCopilot
andcommitted
Regenerate Search SDK with retrieval activity models + filename upload helper
- Regen against spec 4bb11e927c (adds 24 KnowledgeBase*ActivityRecord/Arguments models + ImageServingStatistics; resolves audit BUG-1 and BUG-6) - Add new required `content_disposition` header to `_upload_knowledge_source_file` - Wrap upload in `_patch.py` (sync + async) with a `filename` shortcut that builds `Content-Disposition: attachment; filename="<filename>"`; raw `content_disposition` still accepted for advanced callers - Restore inline `# pylint: disable=protected-access` comments dropped by codegen - Document the `friendly-input wrapper` pattern in the package skill - Update CHANGELOG and add unit tests for the new upload kwargs Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 4fdd068 commit 7835c90

12 files changed

Lines changed: 1714 additions & 63 deletions

File tree

sdk/search/azure-search-documents/.github/skills/azure-search-documents/SKILL.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,9 @@ For each new method, pick the exposure path:
122122

123123
5. **List projection wrapper** — for `list_*`. Add a `select` parameter, a name-only projection via `cls` callback (`list_index_names`, `list_indexer_names`, `list_skillset_names`), or convert a generated projection type back to the canonical model via `_convert_index_response`.
124124

125-
6. **Re-export via `__all__`** — any NEW symbol you add or override in `_patch.py` MUST be appended to that file's `__all__`. Otherwise `patch_sdk()` will not surface it.
125+
6. **Friendly-input wrapper** — when a generated parameter takes a structured string the caller would otherwise assemble by hand, add an optional higher-level kwarg that builds it from simpler inputs. Keep the raw parameter accepted too.
126+
127+
7. **Re-export via `__all__`** — any NEW symbol you add or override in `_patch.py` MUST be appended to that file's `__all__`. Otherwise `patch_sdk()` will not surface it.
126128

127129
```powershell
128130
venv python -c "import azure.search.documents as m; print(sorted(m.__all__))"

sdk/search/azure-search-documents/CHANGELOG.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,33 @@
1616
- `azure.search.documents.indexes.SearchIndexClient.list_knowledge_source_files`
1717
- `azure.search.documents.indexes.SearchIndexClient.upload_knowledge_source_file`
1818

19+
- Below models are added for per-source retrieval activity tracking
20+
- `azure.search.documents.knowledgebases.models.ImageServingStatistics`
21+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseAzureBlobActivityArguments`
22+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseAzureBlobActivityRecord`
23+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseFabricDataAgentActivityArguments`
24+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseFabricDataAgentActivityRecord`
25+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseFabricOntologyActivityArguments`
26+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseFabricOntologyActivityRecord`
27+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseFileActivityArguments`
28+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseFileActivityRecord`
29+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseIndexedOneLakeActivityArguments`
30+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseIndexedOneLakeActivityRecord`
31+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseIndexedSharePointActivityArguments`
32+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseIndexedSharePointActivityRecord`
33+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseIndexedSqlActivityArguments`
34+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseIndexedSqlActivityRecord`
35+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseMcpServerActivityArguments`
36+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseMcpServerActivityRecord`
37+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseRemoteSharePointActivityArguments`
38+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseRemoteSharePointActivityRecord`
39+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseSearchIndexActivityArguments`
40+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseSearchIndexActivityRecord`
41+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseWebActivityArguments`
42+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseWebActivityRecord`
43+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseWorkIQActivityArguments`
44+
- `azure.search.documents.knowledgebases.models.KnowledgeBaseWorkIQActivityRecord`
45+
1946
- Below models are added for File, indexed SQL, and MCP server knowledge source support
2047
- `azure.search.documents.indexes.models.FileKnowledgeSource`
2148
- `azure.search.documents.indexes.models.FileKnowledgeSourceParameters`

sdk/search/azure-search-documents/apiview-properties.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@
107107
"azure.search.documents.indexes.models.HnswParameters": "Search.HnswParameters",
108108
"azure.search.documents.models.HybridSearch": "Search.HybridSearch",
109109
"azure.search.documents.indexes.models.ImageAnalysisSkill": "Search.ImageAnalysisSkill",
110+
"azure.search.documents.knowledgebases.models.ImageServingStatistics": "Search.ImageServingStatistics",
110111
"azure.search.documents.models.IndexAction": "Search.IndexAction",
111112
"azure.search.documents.models.IndexDocumentsBatch": "Search.IndexBatch",
112113
"azure.search.documents.indexes.models.IndexedOneLakeKnowledgeSource": "Search.IndexedOneLakeKnowledgeSource",
@@ -136,19 +137,35 @@
136137
"azure.search.documents.indexes.models.KnowledgeBase": "Search.KnowledgeBase",
137138
"azure.search.documents.knowledgebases.models.KnowledgeBaseActivityRecord": "Search.KnowledgeBaseActivityRecord",
138139
"azure.search.documents.knowledgebases.models.KnowledgeBaseAgenticReasoningActivityRecord": "Search.KnowledgeBaseAgenticReasoningActivityRecord",
140+
"azure.search.documents.knowledgebases.models.KnowledgeBaseAzureBlobActivityArguments": "Search.KnowledgeBaseAzureBlobActivityArguments",
141+
"azure.search.documents.knowledgebases.models.KnowledgeBaseAzureBlobActivityRecord": "Search.KnowledgeBaseAzureBlobActivityRecord",
139142
"azure.search.documents.knowledgebases.models.KnowledgeBaseReference": "Search.KnowledgeBaseReference",
140143
"azure.search.documents.knowledgebases.models.KnowledgeBaseAzureBlobReference": "Search.KnowledgeBaseAzureBlobReference",
141144
"azure.search.documents.indexes.models.KnowledgeBaseModel": "Search.KnowledgeBaseModel",
142145
"azure.search.documents.indexes.models.KnowledgeBaseAzureOpenAIModel": "Search.KnowledgeBaseAzureOpenAIModel",
143146
"azure.search.documents.knowledgebases.models.KnowledgeBaseErrorAdditionalInfo": "Search.KnowledgeBaseErrorAdditionalInfo",
144147
"azure.search.documents.knowledgebases.models.KnowledgeBaseErrorDetail": "Search.KnowledgeBaseErrorDetail",
148+
"azure.search.documents.knowledgebases.models.KnowledgeBaseFabricDataAgentActivityArguments": "Search.KnowledgeBaseFabricDataAgentActivityArguments",
149+
"azure.search.documents.knowledgebases.models.KnowledgeBaseFabricDataAgentActivityRecord": "Search.KnowledgeBaseFabricDataAgentActivityRecord",
145150
"azure.search.documents.knowledgebases.models.KnowledgeBaseFabricDataAgentReference": "Search.KnowledgeBaseFabricDataAgentReference",
151+
"azure.search.documents.knowledgebases.models.KnowledgeBaseFabricOntologyActivityArguments": "Search.KnowledgeBaseFabricOntologyActivityArguments",
152+
"azure.search.documents.knowledgebases.models.KnowledgeBaseFabricOntologyActivityRecord": "Search.KnowledgeBaseFabricOntologyActivityRecord",
146153
"azure.search.documents.knowledgebases.models.KnowledgeBaseFabricOntologyReference": "Search.KnowledgeBaseFabricOntologyReference",
154+
"azure.search.documents.knowledgebases.models.KnowledgeBaseFileActivityArguments": "Search.KnowledgeBaseFileActivityArguments",
155+
"azure.search.documents.knowledgebases.models.KnowledgeBaseFileActivityRecord": "Search.KnowledgeBaseFileActivityRecord",
147156
"azure.search.documents.knowledgebases.models.KnowledgeBaseFileReference": "Search.KnowledgeBaseFileReference",
148157
"azure.search.documents.knowledgebases.models.KnowledgeBaseImageContent": "Search.KnowledgeBaseImageContent",
158+
"azure.search.documents.knowledgebases.models.KnowledgeBaseIndexedOneLakeActivityArguments": "Search.KnowledgeBaseIndexedOneLakeActivityArguments",
159+
"azure.search.documents.knowledgebases.models.KnowledgeBaseIndexedOneLakeActivityRecord": "Search.KnowledgeBaseIndexedOneLakeActivityRecord",
149160
"azure.search.documents.knowledgebases.models.KnowledgeBaseIndexedOneLakeReference": "Search.KnowledgeBaseIndexedOneLakeReference",
161+
"azure.search.documents.knowledgebases.models.KnowledgeBaseIndexedSharePointActivityArguments": "Search.KnowledgeBaseIndexedSharePointActivityArguments",
162+
"azure.search.documents.knowledgebases.models.KnowledgeBaseIndexedSharePointActivityRecord": "Search.KnowledgeBaseIndexedSharePointActivityRecord",
150163
"azure.search.documents.knowledgebases.models.KnowledgeBaseIndexedSharePointReference": "Search.KnowledgeBaseIndexedSharePointReference",
164+
"azure.search.documents.knowledgebases.models.KnowledgeBaseIndexedSqlActivityArguments": "Search.KnowledgeBaseIndexedSqlActivityArguments",
165+
"azure.search.documents.knowledgebases.models.KnowledgeBaseIndexedSqlActivityRecord": "Search.KnowledgeBaseIndexedSqlActivityRecord",
151166
"azure.search.documents.knowledgebases.models.KnowledgeBaseIndexedSqlReference": "Search.KnowledgeBaseIndexedSqlReference",
167+
"azure.search.documents.knowledgebases.models.KnowledgeBaseMcpServerActivityArguments": "Search.KnowledgeBaseMcpServerActivityArguments",
168+
"azure.search.documents.knowledgebases.models.KnowledgeBaseMcpServerActivityRecord": "Search.KnowledgeBaseMcpServerActivityRecord",
152169
"azure.search.documents.knowledgebases.models.KnowledgeBaseMcpServerReference": "Search.KnowledgeBaseMcpServerReference",
153170
"azure.search.documents.knowledgebases.models.KnowledgeBaseMessage": "Search.KnowledgeBaseMessage",
154171
"azure.search.documents.knowledgebases.models.KnowledgeBaseMessageContent": "Search.KnowledgeBaseMessageContent",
@@ -157,11 +174,19 @@
157174
"azure.search.documents.knowledgebases.models.KnowledgeBaseModelAnswerSynthesisActivityRecord": "Search.KnowledgeBaseModelAnswerSynthesisActivityRecord",
158175
"azure.search.documents.knowledgebases.models.KnowledgeBaseModelQueryPlanningActivityRecord": "Search.KnowledgeBaseModelQueryPlanningActivityRecord",
159176
"azure.search.documents.knowledgebases.models.KnowledgeBaseModelWebSummarizationActivityRecord": "Search.KnowledgeBaseModelWebSummarizationActivityRecord",
177+
"azure.search.documents.knowledgebases.models.KnowledgeBaseRemoteSharePointActivityArguments": "Search.KnowledgeBaseRemoteSharePointActivityArguments",
178+
"azure.search.documents.knowledgebases.models.KnowledgeBaseRemoteSharePointActivityRecord": "Search.KnowledgeBaseRemoteSharePointActivityRecord",
160179
"azure.search.documents.knowledgebases.models.KnowledgeBaseRemoteSharePointReference": "Search.KnowledgeBaseRemoteSharePointReference",
161180
"azure.search.documents.knowledgebases.models.KnowledgeBaseRetrievalRequest": "Search.KnowledgeBaseRetrievalRequest",
162181
"azure.search.documents.knowledgebases.models.KnowledgeBaseRetrievalResponse": "Search.KnowledgeBaseRetrievalResponse",
182+
"azure.search.documents.knowledgebases.models.KnowledgeBaseSearchIndexActivityArguments": "Search.KnowledgeBaseSearchIndexActivityArguments",
183+
"azure.search.documents.knowledgebases.models.KnowledgeBaseSearchIndexActivityRecord": "Search.KnowledgeBaseSearchIndexActivityRecord",
163184
"azure.search.documents.knowledgebases.models.KnowledgeBaseSearchIndexReference": "Search.KnowledgeBaseSearchIndexReference",
185+
"azure.search.documents.knowledgebases.models.KnowledgeBaseWebActivityArguments": "Search.KnowledgeBaseWebActivityArguments",
186+
"azure.search.documents.knowledgebases.models.KnowledgeBaseWebActivityRecord": "Search.KnowledgeBaseWebActivityRecord",
164187
"azure.search.documents.knowledgebases.models.KnowledgeBaseWebReference": "Search.KnowledgeBaseWebReference",
188+
"azure.search.documents.knowledgebases.models.KnowledgeBaseWorkIQActivityArguments": "Search.KnowledgeBaseWorkIQActivityArguments",
189+
"azure.search.documents.knowledgebases.models.KnowledgeBaseWorkIQActivityRecord": "Search.KnowledgeBaseWorkIQActivityRecord",
165190
"azure.search.documents.knowledgebases.models.KnowledgeBaseWorkIQReference": "Search.KnowledgeBaseWorkIQReference",
166191
"azure.search.documents.knowledgebases.models.KnowledgeRetrievalIntent": "Search.KnowledgeRetrievalIntent",
167192
"azure.search.documents.knowledgebases.models.KnowledgeRetrievalReasoningEffort": "Search.KnowledgeRetrievalReasoningEffort",

sdk/search/azure-search-documents/azure/search/documents/indexes/_operations/_operations.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -885,7 +885,7 @@ def build_search_index_get_knowledge_source_status_request( # pylint: disable=n
885885

886886

887887
def build_search_index_upload_knowledge_source_file_request( # pylint: disable=name-too-long
888-
name: str, **kwargs: Any
888+
name: str, *, content_disposition: str, **kwargs: Any
889889
) -> HttpRequest:
890890
_headers = case_insensitive_dict(kwargs.pop("headers", {}) or {})
891891
_params = case_insensitive_dict(kwargs.pop("params", {}) or {})
@@ -907,6 +907,7 @@ def build_search_index_upload_knowledge_source_file_request( # pylint: disable=
907907

908908
# Construct headers
909909
_headers["content-type"] = _SERIALIZER.header("content_type", content_type, "str")
910+
_headers["Content-Disposition"] = _SERIALIZER.header("content_disposition", content_disposition, "str")
910911
_headers["Accept"] = _SERIALIZER.header("accept", accept, "str")
911912

912913
return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs)
@@ -4417,16 +4418,32 @@ def get_knowledge_source_status(self, name: str, **kwargs: Any) -> _knowledgebas
44174418
@distributed_trace
44184419
@api_version_validation(
44194420
method_added_on="2026-05-01-preview",
4420-
params_added_on={"2026-05-01-preview": ["api_version", "content_type", "client_request_id", "name", "accept"]},
4421+
params_added_on={
4422+
"2026-05-01-preview": [
4423+
"api_version",
4424+
"content_type",
4425+
"content_disposition",
4426+
"client_request_id",
4427+
"name",
4428+
"accept",
4429+
]
4430+
},
44214431
api_versions_list=["2026-05-01-preview"],
44224432
)
4423-
def _upload_knowledge_source_file(self, name: str, file: bytes, **kwargs: Any) -> _models1.KnowledgeSourceFile:
4433+
def _upload_knowledge_source_file(
4434+
self, name: str, file: bytes, *, content_disposition: str, **kwargs: Any
4435+
) -> _models1.KnowledgeSourceFile:
44244436
"""Uploads a file to a File knowledge source for processing and indexing.
44254437
44264438
:param name: The name of the knowledge source. Required.
44274439
:type name: str
44284440
:param file: The file content to upload. Required.
44294441
:type file: bytes
4442+
:keyword content_disposition: The Content-Disposition header specifying the filename of the
4443+
uploaded file.
4444+
Must follow the format: ``attachment; filename="<filename>"``.
4445+
For example: ``attachment; filename="installation-guide.pdf"``. Required.
4446+
:paramtype content_disposition: str
44304447
:return: KnowledgeSourceFile. The KnowledgeSourceFile is compatible with MutableMapping
44314448
:rtype: ~azure.search.documents.indexes.models.KnowledgeSourceFile
44324449
:raises ~azure.core.exceptions.HttpResponseError:
@@ -4449,6 +4466,7 @@ def _upload_knowledge_source_file(self, name: str, file: bytes, **kwargs: Any) -
44494466

44504467
_request = build_search_index_upload_knowledge_source_file_request(
44514468
name=name,
4469+
content_disposition=content_disposition,
44524470
content_type=content_type,
44534471
api_version=self._config.api_version,
44544472
content=_content,

sdk/search/azure-search-documents/azure/search/documents/indexes/_operations/_patch.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,9 @@ def upload_knowledge_source_file(
375375
self,
376376
name: str,
377377
file: Union[bytes, IO[bytes]],
378+
*,
379+
filename: Optional[str] = None,
380+
content_disposition: Optional[str] = None,
378381
**kwargs: Any,
379382
) -> _models.KnowledgeSourceFile:
380383
"""Uploads a file to a File knowledge source for processing and indexing.
@@ -383,13 +386,31 @@ def upload_knowledge_source_file(
383386
:type name: str
384387
:param file: The file content to upload. Required.
385388
:type file: bytes or IO[bytes]
389+
:keyword filename: The name to associate with the uploaded file. When provided, the
390+
``Content-Disposition`` header is built as ``attachment; filename="<filename>"``. Either
391+
``filename`` or ``content_disposition`` must be provided.
392+
:paramtype filename: str
393+
:keyword content_disposition: The raw ``Content-Disposition`` header value. Use this to
394+
override the default ``attachment; filename="<filename>"`` format produced from
395+
``filename``. Either ``filename`` or ``content_disposition`` must be provided.
396+
:paramtype content_disposition: str
386397
:return: KnowledgeSourceFile
387398
:rtype: ~azure.search.documents.indexes.models.KnowledgeSourceFile
399+
:raises ValueError: If neither ``filename`` nor ``content_disposition`` is provided.
388400
:raises ~azure.core.exceptions.HttpResponseError:
389401
"""
402+
if content_disposition is None:
403+
if filename is None:
404+
raise ValueError("Either 'filename' or 'content_disposition' must be provided.")
405+
content_disposition = f'attachment; filename="{filename}"'
390406
return cast(
391407
_models.KnowledgeSourceFile,
392-
self._upload_knowledge_source_file(name=name, file=cast(bytes, file), **kwargs),
408+
self._upload_knowledge_source_file(
409+
name=name,
410+
file=cast(bytes, file),
411+
content_disposition=content_disposition,
412+
**kwargs,
413+
),
393414
)
394415

395416
@distributed_trace

sdk/search/azure-search-documents/azure/search/documents/indexes/aio/_operations/_operations.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2876,18 +2876,32 @@ async def get_knowledge_source_status(
28762876
@distributed_trace_async
28772877
@api_version_validation(
28782878
method_added_on="2026-05-01-preview",
2879-
params_added_on={"2026-05-01-preview": ["api_version", "content_type", "client_request_id", "name", "accept"]},
2879+
params_added_on={
2880+
"2026-05-01-preview": [
2881+
"api_version",
2882+
"content_type",
2883+
"content_disposition",
2884+
"client_request_id",
2885+
"name",
2886+
"accept",
2887+
]
2888+
},
28802889
api_versions_list=["2026-05-01-preview"],
28812890
)
28822891
async def _upload_knowledge_source_file(
2883-
self, name: str, file: bytes, **kwargs: Any
2892+
self, name: str, file: bytes, *, content_disposition: str, **kwargs: Any
28842893
) -> _models2.KnowledgeSourceFile:
28852894
"""Uploads a file to a File knowledge source for processing and indexing.
28862895
28872896
:param name: The name of the knowledge source. Required.
28882897
:type name: str
28892898
:param file: The file content to upload. Required.
28902899
:type file: bytes
2900+
:keyword content_disposition: The Content-Disposition header specifying the filename of the
2901+
uploaded file.
2902+
Must follow the format: ``attachment; filename="<filename>"``.
2903+
For example: ``attachment; filename="installation-guide.pdf"``. Required.
2904+
:paramtype content_disposition: str
28912905
:return: KnowledgeSourceFile. The KnowledgeSourceFile is compatible with MutableMapping
28922906
:rtype: ~azure.search.documents.indexes.models.KnowledgeSourceFile
28932907
:raises ~azure.core.exceptions.HttpResponseError:
@@ -2910,6 +2924,7 @@ async def _upload_knowledge_source_file(
29102924

29112925
_request = build_search_index_upload_knowledge_source_file_request(
29122926
name=name,
2927+
content_disposition=content_disposition,
29132928
content_type=content_type,
29142929
api_version=self._config.api_version,
29152930
content=_content,

0 commit comments

Comments
 (0)