Skip to content
Merged
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
11 changes: 10 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,13 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13"]
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
install-profile: ["core", "nlp", "nlp-advanced"]
exclude:
- python-version: "3.14"
install-profile: nlp
- python-version: "3.14"
install-profile: nlp-advanced
steps:
- uses: actions/checkout@v6
- name: Set up Python
Expand Down Expand Up @@ -162,6 +167,10 @@ jobs:
- distributed
- web
include:
- python-version: "3.14"
install-profile: core
- python-version: "3.14"
install-profile: cli
- python-version: "3.13"
install-profile: nlp
- python-version: "3.13"
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ jobs:
OMP_NUM_THREADS=4 MKL_NUM_THREADS=4 OPENBLAS_NUM_THREADS=4 python tests/simple_performance_test.py

# ── 3. Build & Publish ────────────────────────────────────────────────
python313-core:
python314-core:
needs: determine-release
if: needs.determine-release.outputs.has_changes == 'true'
runs-on: ubuntu-latest
Expand All @@ -150,18 +150,18 @@ jobs:
fetch-depth: 0
ref: ${{ needs.determine-release.outputs.target_branch }}

- name: Set up Python 3.13
- name: Set up Python 3.14
uses: actions/setup-python@v6
with:
python-version: "3.13"
python-version: "3.14"
cache: "pip"

- name: Install core + CLI dependencies
run: |
python -m pip install --upgrade pip
pip install -e ".[test,cli]" -r requirements-test.txt

- name: Run Python 3.13 core + CLI tests
- name: Run Python 3.14 core + CLI tests
run: |
pytest tests/ \
-m "not slow" \
Expand All @@ -172,7 +172,7 @@ jobs:
--ignore=tests/test_text_service_integration.py

publish:
needs: [determine-release, test, python313-core]
needs: [determine-release, test, python314-core]
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
Expand Down
5 changes: 5 additions & 0 deletions CHANGELOG.MD
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

## [Unreleased]

#### Fixed

- Allow installation on Python 3.14 and certify the core SDK and CLI with
dedicated CI and release-gate coverage.

## [2026-07-05]

### `datafog-python` [4.8.0]
Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@ Python 3.13 support is certified for the core SDK, CLI, `nlp`,
that is available locally before runtime use. `distributed` and `all` remain
optional, heavier profiles and are not part of the lightweight core path.

Python 3.14 support is certified for the core SDK and CLI. Optional profiles
remain dependent on upstream Python 3.14 package availability until they are
covered by the corresponding CI install-profile checks.

## Quick Start

```python
Expand Down
11 changes: 6 additions & 5 deletions docs/contributing.rst
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,12 @@ final version and release-note alignment in the dedicated release slice.
Python Environments
===================

DataFog currently declares support for Python ``>=3.10,<3.14``. The CI matrix
tests core, NLP, and NLP-advanced installs on Python 3.10, 3.11, 3.12, and
3.13. OCR profile smoke checks also run on Python 3.13 with system Tesseract
installed. Distributed and all-profile installs remain heavier optional
profiles rather than the lightweight core support claim.
DataFog declares support for Python ``>=3.10``. The CI matrix tests core, NLP,
and NLP-advanced installs on Python 3.10, 3.11, 3.12, and 3.13. Python 3.14
is certified for the core SDK and CLI. OCR profile smoke checks also run on
Python 3.13 with system Tesseract installed. Optional Python 3.14 profiles
remain dependent on upstream package availability until their install-profile
checks are added to CI.

Create one virtual environment per Python version when you need to compare
profiles locally:
Expand Down
3 changes: 2 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@
package_data={"datafog": ["py.typed"]},
install_requires=core_deps,
extras_require=extras_require,
python_requires=">=3.10,<3.14",
python_requires=">=3.10",
entry_points={
"console_scripts": [
"datafog=datafog.client:app [cli]", # Requires cli extra
Expand All @@ -133,6 +133,7 @@
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: Text Processing",
"Topic :: Security",
Expand Down
4 changes: 3 additions & 1 deletion setup_lean.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@
packages=find_packages(),
install_requires=core_deps,
extras_require=extras_require,
python_requires=">=3.10,<3.13",
python_requires=">=3.10",
entry_points={
"console_scripts": [
"datafog=datafog.client:app [cli]", # Requires cli extra
Expand All @@ -98,6 +98,8 @@
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: Text Processing",
"Topic :: Security",
Expand Down
4 changes: 3 additions & 1 deletion setup_original.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,14 +47,16 @@
"sphinx",
"cryptography",
],
python_requires=">=3.10,<3.13",
python_requires=">=3.10",
entry_points={
"console_scripts": [
"datafog=datafog.client:app",
],
},
classifiers=[
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.10",
"License :: OSI Approved :: MIT License",
Expand Down