All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.1.0b7 - 2026-03-17
- DataFrame namespace:
client.dataframe.get(),.create(),.update(),.delete()for working with Dataverse records as pandas DataFrames and Series — no manual dict conversion required (#98) - Table metadata now includes
primary_name_attributeandprimary_id_attributefromtables.create()andtables.get_info()(#148)
pandas>=2.0.0is now a required dependency (#98)
0.1.0b6 - 2026-03-12
- Context manager support:
with DataverseClient(...) as client:for automatic resource cleanup, HTTP connection pooling, andclose()for explicit lifecycle management (#117) - Typed return models
Record,TableInfo, andColumnInfofor record and table metadata operations, replacing rawDict[str, Any]returns with full backward compatibility (result["key"]still works) (#115) - Alternate key management:
client.tables.create_alternate_key(),client.tables.get_alternate_keys(),client.tables.delete_alternate_key()with typedAlternateKeyInfomodel (#126)
@odata.bindlookup bindings now preserve navigation property casing (e.g.,new_CustomerId@odata.bind), fixing400 Bad Requesterrors on create/update/upsert with lookup fields (#137)- Reduced unnecessary HTTP round-trips on create/update/upsert when records contain
@odata.bindkeys (#137) - Single-record
get()now lowercases$selectcolumn names consistently with multi-record queries (#137)
0.1.0b5 - 2026-02-27
- UpsertMultiple: exclude alternate key fields from request body (#127). The create path of UpsertMultiple failed with
400 Bad Requestwhen alternate key column values appeared in both the body and@odata.id.
0.1.0b4 - 2026-02-25
- Operation namespaces:
client.records,client.query,client.tables,client.files(#102) - Relationship management:
create_one_to_many_relationship,create_many_to_many_relationship,get_relationship,delete_relationship,create_lookup_fieldwith typedRelationshipInforeturn model (#105, #114) client.records.upsert()for upsert operations with alternate key support (#106)client.files.upload()for file upload operations (#111)client.tables.list(filter=, select=)parameters for filtering and projecting table metadata (#112)- Cascade behavior constants (
CASCADE_BEHAVIOR_CASCADE,CASCADE_BEHAVIOR_REMOVE_LINK, etc.) and input models (CascadeConfiguration,LookupAttributeMetadata,Label,LocalizedLabel)
- All flat methods on
DataverseClient(create,update,delete,get,query_sql,upload_file, etc.) now emitDeprecationWarningand delegate to the corresponding namespaced operations
0.1.0b3 - 2025-12-19
- Client-side correlation ID and client request ID for request tracing (#70)
- Unit tests for
DataverseClient(#71)
- Standardized package versioning (#84)
- Updated package link (#69)
- Retry logic for examples (#72)
- Removed double space formatting issue (#82)
- Updated CI trigger to include main branch (#81)
0.1.0b2 - 2025-11-17
- Enforce Black formatting across the codebase (#61, #62)
- Python 3.14 support added to
pyproject.toml(#55)
- Removed
pandasdependency (#57) - Refactored SDK architecture and quality improvements (#55)
- Prefixed table names with schema name for consistency (#51)
- Updated docstrings across core modules (#54, #63)
- Fixed
getfor single-select option set columns (#52) - Fixed example filename references and documentation URLs (#60)
- Fixed API documentation link in examples (#64)
- Fixed CI pipeline to use modern
pyproject.tomldev dependencies (#56, #59)
0.1.0b1 - 2025-11-14
- Initial beta release of Microsoft Dataverse SDK for Python
- Core
DataverseClientwith Azure Identity authentication support (Service Principal, Managed Identity, Interactive Browser) (#1) - Complete CRUD operations (create, read, update, delete) for Dataverse records (#1)
- Advanced OData query support with filtering, sorting, and expansion
- SQL query execution via
query_sql()method with result pagination (#14) - Bulk operations including
CreateMultiple,UpdateMultiple, andBulkDelete(#6, #8, #34) - File upload capabilities for file and image columns (#17)
- Table metadata operations (create, inspect, delete custom tables)
- Comprehensive error handling with specific exception types (
DataverseError,AuthenticationError, etc.) (#22, #24) - HTTP retry logic with exponential backoff for resilient operations (#72)