From acf4dfe97397e49f2b844fcc8051439fcfee4e73 Mon Sep 17 00:00:00 2001 From: Saurabh Kumar Date: Tue, 21 Oct 2025 13:33:08 -0400 Subject: [PATCH] Add python 3.13 support - Add Python 3.13 to Github Actions workflow matrices - Update CIBW_PROJECT_REQUIRES - Add classifier to pyproject.toml - Update ray dependency with python 3.13 constraint - Fix InMemoryCatalog to close connections - Add pytest filter to ignore rest of 3.13 SQLite Resource Warnings --- .github/workflows/pypi-build-artifacts.yml | 3 ++- .github/workflows/python-ci.yml | 2 +- .github/workflows/svn-build-artifacts.yml | 3 ++- pyproject.toml | 8 +++++++- tests/catalog/test_base.py | 8 +++++--- 5 files changed, 17 insertions(+), 7 deletions(-) diff --git a/.github/workflows/pypi-build-artifacts.yml b/.github/workflows/pypi-build-artifacts.yml index 65de2a7828..56d8107685 100644 --- a/.github/workflows/pypi-build-artifacts.yml +++ b/.github/workflows/pypi-build-artifacts.yml @@ -45,6 +45,7 @@ jobs: 3.10 3.11 3.12 + 3.13 - name: Install poetry run: make install-poetry @@ -68,7 +69,7 @@ jobs: env: # Ignore 32 bit architectures CIBW_ARCHS: "auto64" - CIBW_PROJECT_REQUIRES_PYTHON: ">=3.10" + CIBW_PROJECT_REQUIRES_PYTHON: ">=3.10,<=3.13" CIBW_TEST_REQUIRES: "pytest==7.4.2 moto==5.0.1" CIBW_TEST_COMMAND: "pytest {project}/tests/avro/test_decoder.py" # Ignore tests for pypy since not all dependencies are compiled for it diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml index c8e19c6441..b3b5cb3db2 100644 --- a/.github/workflows/python-ci.yml +++ b/.github/workflows/python-ci.yml @@ -47,7 +47,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python: ['3.10', '3.11', '3.12'] + python: ['3.10', '3.11', '3.12', '3.13'] steps: - uses: actions/checkout@v5 diff --git a/.github/workflows/svn-build-artifacts.yml b/.github/workflows/svn-build-artifacts.yml index 116c6538f4..36fac96eb6 100644 --- a/.github/workflows/svn-build-artifacts.yml +++ b/.github/workflows/svn-build-artifacts.yml @@ -45,6 +45,7 @@ jobs: 3.10 3.11 3.12 + 3.13 - name: Install poetry run: make install-poetry @@ -63,7 +64,7 @@ jobs: env: # Ignore 32 bit architectures CIBW_ARCHS: "auto64" - CIBW_PROJECT_REQUIRES_PYTHON: ">=3.10" + CIBW_PROJECT_REQUIRES_PYTHON: ">=3.10,<=3.13" CIBW_TEST_REQUIRES: "pytest==7.4.2 moto==5.0.1" CIBW_TEST_COMMAND: "pytest {project}/tests/avro/test_decoder.py" # Ignore tests for pypy since not all dependencies are compiled for it diff --git a/pyproject.toml b/pyproject.toml index 5b1292b0b2..f6736785f4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,6 +29,7 @@ classifiers = [ "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] packages = [ { include = "pyiceberg" }, @@ -66,7 +67,10 @@ pyarrow = { version = ">=17.0.0", optional = true } google-auth = { version = ">=2.4.0", optional = true } pandas = { version = ">=1.0.0,<3.0.0", optional = true } duckdb = { version = ">=0.5.0,<2.0.0", optional = true } -ray = { version = ">=2.10.0,<=2.44.0", optional = true } +ray = [ + { version = ">=2.10.0,<3.0.0", python = ">=3.10", optional = true }, + { version = ">=2.45.0", python = ">=3.13", optional = true } +] python-snappy = { version = ">=0.6.0,<1.0.0", optional = true } thrift = { version = ">=0.13.0,<1.0.0", optional = true } boto3 = { version = ">=1.24.59", optional = true } @@ -343,6 +347,8 @@ markers = [ # Turns a warning into an error filterwarnings = [ "error", + # Python 3.13 sqlite3 module ResourceWarnings for unclosed database connections + "ignore:unclosed database in InMemoryCatalog: - return InMemoryCatalog("test.in_memory.catalog", **{WAREHOUSE: tmp_path.absolute().as_posix(), "test.key": "test.value"}) +def catalog(tmp_path: PosixPath) -> Generator[InMemoryCatalog, None, None]: + catalog = InMemoryCatalog("test.in_memory.catalog", **{WAREHOUSE: tmp_path.absolute().as_posix(), "test.key": "test.value"}) + yield catalog + catalog.close() TEST_TABLE_IDENTIFIER = ("com", "organization", "department", "my_table")