Add async support for Dataverse SDK#171
Conversation
e491241 to
b848324
Compare
b32987a to
ad9297e
Compare
f52d6b8 to
8ff97e4
Compare
8ff97e4 to
a23cecd
Compare
a23cecd to
4a319bf
Compare
4a319bf to
68e705a
Compare
500c19f to
55e3359
Compare
a374227 to
602c990
Compare
- Reset to main (which is now PR #175) - Re-apply: _ODataBase, _BatchBase, _QueryBuilderBase, _BatchContext Protocol, _operation_context in base, Self type annotation - Re-export multipart helpers from _batch.py for test compatibility - Update test_sql_parse.py patch target to _odata_base.urlparse Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Reset to main via refactoring branch - Restore full async implementation: aio/ client, HTTP, batch, OData, relationships, upload, query builder, fetchxml, operations, tests, examples - Re-export multipart helpers from _batch.py for test compatibility - All 2166 tests passing Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
602c990 to
a4f69cd
Compare
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Rename `r` to `response` for consistency with _async_http.py. Replace multi-pass comprehension + zip in _resolve_table_remove_columns with a plain for loop matching the sync _batch.py structure. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace broad try/except around r.json() with hasattr guard, matching the sync FetchXmlQuery pattern. Remove the now-obsolete test that verified the exception-swallowing behavior. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Moves fetchxml() after sql_columns() to match the order in the sync QueryOperations: builder, sql, fetchxml, sql_columns, odata_*. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Order now matches sync exactly: builder, sql, fetchxml, sql_columns, odata_expands. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add missing "Use for SQL-JOIN scenarios..." sentence, expand :return: description, add link-entity JOIN example, align Eager/Lazy comment wording, and add the two inline implementation comments from sync. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ession on auth failure - functional_testing.py: replace batch.records.get() with batch.records.retrieve(); close client session on auth failure to avoid unclosed session warning - sql_examples.py: remove odata_select/odata_expand/odata_bind calls (deprecated sync-only helpers not available on async client); keep only odata_expands() Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ontent _AsyncResponse buffers the body in ._body; it has no .content attribute (unlike requests.Response used by the sync client). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…replace downloads Two download paths after replace uploads still used resp_r.content and resp_rc.content instead of ._body, causing AttributeError. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Validates 7 properties of the async client against a live environment: 1. Non-blocking reads — canary confirms event loop stays free during GETs 2. Read throughput — concurrent reads via gather() beat sequential 3. Write concurrency — concurrent POSTs beat sequential (POST path) 4. Pagination non-blocking — async generators yield between page fetches 5. Mixed fan-out — different op types run simultaneously without serialization 6. Error resilience — one failure in gather() does not kill other calls 7. Real-world fan-out — metadata for multiple tables fetched in parallel Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Warning
ADO PR pipeline YAML change detected
This PR modifies .azdo/ci-pr.yaml. After merge, Azure DevOps may disable or require approval for the PR validation pipeline.
Action required (post-merge): Re-enable / approve the updated YAML for:
- DV-Python-SDK-PullRequest (definitionId=29922)
- https://dev.azure.com/dynamicscrm/OneCRM/_build?definitionId=29922
Please resolve this comment after completing the post-merge steps.
Each test now has a brief explanation of what it runs, what property it validates, and what a failure would indicate. Also clarifies that speedup measures async-sequential vs async-concurrent, not async vs sync. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Warning
ADO PR pipeline YAML change detected
This PR modifies .azdo/ci-pr.yaml. After merge, Azure DevOps may disable or require approval for the PR validation pipeline.
Action required (post-merge): Re-enable / approve the updated YAML for:
- DV-Python-SDK-PullRequest (definitionId=29922)
- https://dev.azure.com/dynamicscrm/OneCRM/_build?definitionId=29922
Please resolve this comment after completing the post-merge steps.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Warning
ADO PR pipeline YAML change detected
This PR modifies .azdo/ci-pr.yaml. After merge, Azure DevOps may disable or require approval for the PR validation pipeline.
Action required (post-merge): Re-enable / approve the updated YAML for:
- DV-Python-SDK-PullRequest (definitionId=29922)
- https://dev.azure.com/dynamicscrm/OneCRM/_build?definitionId=29922
Please resolve this comment after completing the post-merge steps.
There was a problem hiding this comment.
Warning
ADO PR pipeline YAML change detected
This PR modifies .azdo/ci-pr.yaml. After merge, Azure DevOps may disable or require approval for the PR validation pipeline.
Action required (post-merge): Re-enable / approve the updated YAML for:
- DV-Python-SDK-PullRequest (definitionId=29922)
- https://dev.azure.com/dynamicscrm/OneCRM/_build?definitionId=29922
Please resolve this comment after completing the post-merge steps.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Warning
ADO PR pipeline YAML change detected
This PR modifies .azdo/ci-pr.yaml. After merge, Azure DevOps may disable or require approval for the PR validation pipeline.
Action required (post-merge): Re-enable / approve the updated YAML for:
- DV-Python-SDK-PullRequest (definitionId=29922)
- https://dev.azure.com/dynamicscrm/OneCRM/_build?definitionId=29922
Please resolve this comment after completing the post-merge steps.
aio/async package mirroring the sync SDK:_AsyncHttpClientwrappingaiohttpwith identical retry, backoff, and timeout logic_AsyncAuthManagerfor async Azure Identity token acquisition_AsyncODataClient— full CRUD, SQL-over-API, table/column metadata, file upload, and relationship operations_AsyncBatchClientwith_SyncResponseWrapperbridging the async HTTP response to the shared sync multipart parser in_BatchBaserecords,tables,query,files,batch,dataframe— all mirroring their sync counterpartsAsyncDataverseClientwith lazy init, async context manager, and session lifecycle managementpytest-asyncio(asyncio_mode = auto) andaiohttpas an optional dependency (pip install PowerPlatform-Dataverse-Client[async]).Test plan
black --checkpasses on all files