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.
- Fixed
KustoApiErrorcrashing when no message is provided by defaulting to "Unknown Kusto service error". - Updated
KustoApiError.__init__messageparameter type toOptional[str].
- Bumped dependencies: aiohttp 3.13.4, azure-core 1.39.0, cryptography 46.0.6, pygments 2.20.0, pyjwt 2.12.1, urllib3 2.6.3.
- Fixed
dataframe_from_result_tablecrashing with pandas 3.0 when a datetime column contains all null values. - Removed legacy pandas 1.x code path in
parse_datetime(minimum supported pandas is now 2.3.1).
- Managed Streaming Should Handle Throttling Events Correctly
- Changed extra's name back to
aio - Fixed handling of datetime columns in old pandas versions.
- Fixed encoding error in
ingest_from_dataframewhen using csv data format.
- Support Delos and Gov SG clouds
- [BREAKING] Minimum supported Python version is now 3.9, to align with other Azure SDKs.
- The project's infrastructure has been updated:
uvis used to manage packagesruffis used for linting and formattingbasedpyrightis used for type checkingpoeis used to manage taskspdocis used to generate documentation
- More endpoints supported by default.
- CloudSettings will now reuse the HTTP session from the query client for sync clients.
- CloudSettings now cached by authority (schema, host and port) instead of full URL
- Fixed Ingest from dataframe
- Dependency issues
- Typing issues
- Fixed bug in
ingest_from_dataframewith some ingestion properties combinations.
- Dependency issues
- [BREAKING] Dropped support for python version 3.7, as it is on EOL for over year.
- [BREAKING] Aligned the Connection String Builder keywords with the rest of the SDKs.
This means that some keywords were removed, and they will no longer be parsed as part of the Connection String.
Building the Connection String using the builder method will still work as expected.
The following keywords have been removed:msi_auth/msi_authenticationmsi_params/msi_typeinteractive_loginaz_cli
- [BREAKING]
ingest_from_dataframe- Addeddata_formatparameter. It can be None (default), 'json' or 'csv'. Based on how panda's csv serialization works, dynamic data will not be serialized correctly. By default, the data will be serialized as json to avoid this issue. However, that may break if a CSV mapping is used. Therefore, when passing the None value, the data will be json by default, or csv if a csv mapping is used. Also, it is possible to pass 'csv' or 'json' to force the serialization type.
- Explicitly export members in
__init__.pyvia__all__
- Added
py.typedmarkers - Fixed semantic error handling
- Support more kusto endpoints by default
- Better python errors when getting 401 and other http errors
- Fixed bug in
dataframe_from_result_tablewith some command results.
dataframe_from_result_tablenow accepts optional converters for specific columns or types.
- Compatibility with numpy 2.0
- Fixed bug in ManagedIdentity close method
- Fixed bug in IngestionResult repr
- Streaming ingestion from blob
- Managed streaming fallback to queued
- Fixed token providers not being closed properly
- Internal test fixes
- Pandas support the new string type, if available
- Removed test folders from wheel
- Changed binary files data format compression to false
- Pandas now correctly parses all dates
- Added smart retry ability for queued ingestion.
- Support new playfab domain
- Added no-authenticaion option
- Santaize secrets from blob urls
- Correctly handle closing of token providers in async (NOTE: now using async providers in sync clients will correctly raise an exception)
- Fixed proxy not passing correctly in some cases
- Fixed exception handling in web requests
- Internal fixes for environment variables
- Fixed documentation on E2E tests, and made it possible to test on a clean cluster
- Added Initial Catalog (Default Database) parameter to ConnectionStringBuilder
- Added callback parameter to device code
- Added method to manually set the cache for CloudSettings
- Urls with one item after the path (i.e https://test.com/abc) will now be treated as cluster and initial catalog (ie.
the cluster is "https://test.com" and the initial catalog is "abc").
- This is to align our behaviour with the .NET SDK
- Some edge cases in url parsing
- IgnoreFirstRecord now works properly
- Internal code improvement for telemetry
- Unicode headers are now espaced using '?', to align with the service
- Add new trident endpoint support
- Redirects are no longer allowed
- Fixed resource parsing to be inline with other SDKs
- More resources are properly closed
- Internal testing fixes
- Fixed context not awaited in traces, caused warning
- Fixed setup.py file, #453
- Tracing support for the SDK
- Use opentelemetry to trace the flow of operations when querying or ingesting
- Add support for a TokenProvider to authenticate access.
- KustoConnectionStringBuilder.with_token_provider() /KustoConnectionStringBuilder.with_async_token_provider()
- Use proper np types instead of strings, fixes #447
- samples file was cut short
- Send http headers under the new unified format
- Adding Microsoft SECURITY.MD
- Add trident endpoint support
- Added more serialization options for "msi authentication" and "msi params" correctly
- Make error parsing less restrictive to support more errors
- Added flag to handle nullable bools in pandas, fixes #436.
- Fixed source release not including a file.
- [BREAKING] Trusted endpoints validation - by default, kusto will only connect to known endpoints.
- Added closability to the clients
- Make numpy dependency optional by @spektom
- Sample app improvements by @ronmonetaMicro
- Added Ignorefirstrecord ingestion property
- Fixed AttributeError when unpickling HTTPAdapterWithSocketOptions.
- Enum serialization fix
- Internal and testing improvements by @enmoed
- Use "organizations" as the default tenant to support more cases
- Allow passing service url with port
- Expanded mappings to support all options for all data formats
- Use "organizations" as the default tenant to support more cases
- Docs improvements by @nerd2ninja in #393