Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/docs-master.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.11
python-version: 3.12
cache: "pip" # caching pip dependencies
cache-dependency-path: |
pyproject.toml
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docs-preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.11
python-version: 3.12
cache: "pip" # caching pip dependencies
cache-dependency-path: |
pyproject.toml
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.11
python-version: 3.12

- name: Install dependencies
run: |
Expand Down
44 changes: 34 additions & 10 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,10 @@ jobs:
- uses: actions/checkout@v4

- name: Set up Python and uv
uses: drivendataorg/setup-python-uv-action@v1
uses: astral-sh/setup-uv@v6
with:
python-version: "3.11"
activate-environment: true
python-version: "3.12"

- name: Install dependencies
run: |
Expand All @@ -37,25 +38,46 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python-version: [3.9, "3.10", "3.11", "3.12", "3.13"]
python-version: [3.9, "3.10", "3.11", "3.12", "3.13", "3.14"]
env:
UV_MANAGED_PYTHON: true

steps:
- uses: actions/checkout@v4

- name: Set up Python and uv
uses: drivendataorg/setup-python-uv-action@v1
uses: astral-sh/setup-uv@v6
with:
python-version: ${{ matrix.python-version }}
activate-environment: true
enable-cache: true

- name: Install dependencies
- name: Install dependencies (Python 3.14)
if: matrix.python-version == '3.14'
run: |
uv pip install --pre -r requirements-dev.txt

- name: Install dependencies (other Python versions)
if: matrix.python-version != '3.14'
run: |
uv pip install -r requirements-dev.txt

- name: Run mocked tests
run: |
make test

- name: Build distribution and test installation
- name: Build distribution and test installation (Python 3.14)
if: matrix.python-version == '3.14'
shell: bash
run: |
make dist
uv pip install --pre cloudpathlib@$(find dist -name 'cloudpathlib*.whl') --no-deps --force-reinstall
python -c "import cloudpathlib"
uv pip install --pre cloudpathlib@$(find dist -name 'cloudpathlib*.tar.gz') --no-deps --force-reinstall
python -c "import cloudpathlib"

- name: Build distribution and test installation (other Python versions)
if: matrix.python-version != '3.14'
shell: bash
run: |
make dist
Expand All @@ -81,9 +103,10 @@ jobs:
- uses: actions/checkout@v4

- name: Set up Python and uv
uses: drivendataorg/setup-python-uv-action@v1
uses: astral-sh/setup-uv@v6
with:
python-version: "3.11"
python-version: "3.12"
activate-environment: true

- name: Install dependencies
run: |
Expand Down Expand Up @@ -141,9 +164,10 @@ jobs:
- uses: actions/checkout@v4

- name: Set up Python and uv
uses: drivendataorg/setup-python-uv-action@v1
uses: astral-sh/setup-uv@v6
with:
python-version: "3.11"
python-version: "3.12"
activate-environment: true

- name: Build cloudpathlib
run: |
Expand Down
11 changes: 11 additions & 0 deletions HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
# cloudpathlib Changelog

## UNRELEASED

- Added support for Python 3.14 (Issue [#529](https://github.com/drivendataorg/cloudpathlib/issues/529), PR [#530](https://github.com/drivendataorg/cloudpathlib/pull/530))
- Changed `CloudPath.copy` to have the first parameter named `target` instead of `destination` and added new `follow_symlinks` and `preserve_metadata` kwargs. **Breaking change for users that relied on the first parameter being named `destination` instead of `target`.**
- Added `CloudPath.copy_into` to copy a file or directory into another file or directory.
- Added `CloudPath.move` to move a file or directory to another location.
- Added `CloudPath.move_into` to move a file or directory into another file or directory.
- Added `CloudPathInfo` and `CloudPath.info` to get information about a file or directory.
- Added additional no-op kwargs to `mkdir`, `touch`, `glob`, `rglob`, `stat` to match pathlib.
- Added `pathlib-abc` dependency for Python < 3.14 for `PathInfo` protocol.

## v0.22.0 (2025-08-29)

- Fixed issue with GS credentials, using default auth enables a wider set of authentication methods in GS (Issue [#390](https://github.com/drivendataorg/cloudpathlib/issues/390), PR [#514](https://github.com/drivendataorg/cloudpathlib/pull/514), thanks @ljyanesm)
Expand Down
12 changes: 6 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@ clean-build: ## remove build artifacts
rm -fr build/
rm -fr dist/
rm -fr .eggs/
find . -name '*.egg-info' -exec rm -fr {} +
find . -name '*.egg' -exec rm -f {} +
find . -path ./.venv -prune -o -name '*.egg-info' -exec rm -fr {} +
find . -path ./.venv -prune -o -name '*.egg' -exec rm -rf {} +

clean-pyc: ## remove Python file artifacts
find . -name '*.pyc' -exec rm -f {} +
find . -name '*.pyo' -exec rm -f {} +
find . -name '*~' -exec rm -f {} +
find . -name '__pycache__' -exec rm -fr {} +
find . -path ./.venv -prune -o -name '*.pyc' -exec rm -f {} +
find . -path ./.venv -prune -o -name '*.pyo' -exec rm -f {} +
find . -path ./.venv -prune -o -name '*~' -exec rm -f {} +
find . -path ./.venv -prune -o -name '__pycache__' -exec rm -fr {} +

clean-test: ## remove test and coverage artifacts
rm -fr .tox/
Expand Down
8 changes: 4 additions & 4 deletions cloudpathlib/azure/azblobpath.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import os
from pathlib import Path
from tempfile import TemporaryDirectory
from typing import TYPE_CHECKING
from typing import Any, Optional, TYPE_CHECKING

from cloudpathlib.exceptions import CloudPathIsADirectoryError

Expand Down Expand Up @@ -39,10 +39,10 @@ class AzureBlobPath(CloudPath):
def drive(self) -> str:
return self.container

def mkdir(self, parents=False, exist_ok=False):
def mkdir(self, parents=False, exist_ok=False, mode: Optional[Any] = None):
self.client._mkdir(self, parents=parents, exist_ok=exist_ok)

def touch(self, exist_ok: bool = True):
def touch(self, exist_ok: bool = True, mode: Optional[Any] = None):
if self.exists():
if not exist_ok:
raise FileExistsError(f"File exists: {self}")
Expand All @@ -56,7 +56,7 @@ def touch(self, exist_ok: bool = True):

tf.cleanup()

def stat(self):
def stat(self, follow_symlinks=True):
try:
meta = self.client._get_metadata(self)
except ResourceNotFoundError:
Expand Down
Loading
Loading