diff --git a/HISTORY.md b/HISTORY.md index 3bdd04eb..db890fa6 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -5,6 +5,8 @@ - Added streaming I/O via `FileCacheMode.streaming` for S3, Azure Blob Storage, Google Cloud Storage, and HTTP/HTTPS. In this mode `CloudPath.open()` returns the standard `io` file objects (`BufferedReader`/`BufferedWriter`/`TextIOWrapper`) backed by ranged reads and multipart uploads instead of the local cache, so only the bytes you read are downloaded and written data is uploaded as you write it. Read streams are seekable; append and update modes fall back to the cache and remove the cache file on close. `buffering` has its builtin `open()` meaning and sets the ranged-request size (default 5 MiB). A new `streaming_max_concurrency` client option (default 4) bounds background read-ahead and part uploads per stream; the buffer size, concurrency, and multipart part size can also be set with the `CLOUDPATHLIB_STREAMING_BUFFER_SIZE`, `CLOUDPATHLIB_STREAMING_MAX_CONCURRENCY`, and `CLOUDPATHLIB_[_]STREAMING_PART_SIZE` environment variables. Opening a file for append or update in streaming mode warns that it falls back to the cache. `copy`/`rename`/`replace` stream between clients, `fspath` raises `CloudPathNotImplementedError`, and failures raise `cloudpathlib.exceptions` types including the new `CloudPathStreamingError`. See the [Streaming I/O](https://cloudpathlib.drivendata.org/stable/streaming_io/) docs. (PR [#535](https://github.com/drivendataorg/cloudpathlib/pull/535)) - Changed append mode (`a`, `ab`, `a+`, and `ab+`) to create missing cloud files, matching Python file behavior. Appending to existing files still preserves their content. (Issue [#585](https://github.com/drivendataorg/cloudpathlib/issues/585)) +- Fixed mypy missing-import errors for `CloudPath` and `AnyPath` when the optional Pydantic integration is not installed. (Issue [#385](https://github.com/drivendataorg/cloudpathlib/issues/385), PR [#603](https://github.com/drivendataorg/cloudpathlib/pull/603)) + ## v0.26.0 (2026-10-01) - Added support for Python 3.15: `CloudPath.mkdir(parent_mode=...)` works across providers, and cloud paths can be pickled repeatedly without a `ParseResult` error. (Issue [#593](https://github.com/drivendataorg/cloudpathlib/issues/593), PR [#594](https://github.com/drivendataorg/cloudpathlib/pull/594)) diff --git a/cloudpathlib/anypath.py b/cloudpathlib/anypath.py index ff6a0301..80b3755a 100644 --- a/cloudpathlib/anypath.py +++ b/cloudpathlib/anypath.py @@ -43,7 +43,7 @@ def __get_pydantic_core_schema__(cls, _source_type: Any, _handler): """Pydantic special method. See https://docs.pydantic.dev/2.0/usage/types/custom/""" try: - from pydantic_core import core_schema + from pydantic_core import core_schema # type: ignore[import-not-found, unused-ignore] return core_schema.no_info_after_validator_function( cls.validate, diff --git a/cloudpathlib/cloudpath.py b/cloudpathlib/cloudpath.py index b1d552ef..eb1fc50e 100644 --- a/cloudpathlib/cloudpath.py +++ b/cloudpathlib/cloudpath.py @@ -1842,7 +1842,7 @@ def __get_pydantic_core_schema__(cls, _source_type: Any, _handler): """Pydantic special method. See https://docs.pydantic.dev/2.0/usage/types/custom/""" try: - from pydantic_core import core_schema + from pydantic_core import core_schema # type: ignore[import-not-found, unused-ignore] return core_schema.no_info_after_validator_function( cls.validate,