Skip to content

Commit b2602c5

Browse files
ENH CivisFuture.job_run_url property
Squashed branch work: - ENH CivisFuture.job_run_url property - MAINT update API spec - MAINT GitHub Actions workflow for PyPI releases - MAINT comply with updated license spec for pyproject.toml - MAINT dependabot updates for docs/requirements.txt (incl. suppression) - DOCS refresh docs/requirements.txt - FIX update client.pyi generator for new black formatting - STY black - MAINT update changelog
1 parent d835f15 commit b2602c5

37 files changed

Lines changed: 2166 additions & 516 deletions

.github/dependabot.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: "pip"
4+
directory: "/docs"
5+
schedule:
6+
interval: "monthly"
7+
# Never open PRs, as docs/requirements.txt is only used in Read The Docs builds,
8+
# has low security risks in general, and we manually update it with uv.
9+
# open-pull-requests-limit: 0 blocks version-update PRs; the catch-all ignore
10+
# rule additionally blocks security-update PRs (which bypass the limit).
11+
open-pull-requests-limit: 0
12+
ignore:
13+
- dependency-name: "*"

.github/workflows/release.yml

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
name: Release
2+
3+
on:
4+
release:
5+
types: [published]
6+
7+
permissions:
8+
contents: read
9+
10+
jobs:
11+
build:
12+
name: Build
13+
runs-on: ubuntu-latest
14+
steps:
15+
- uses: actions/checkout@v4
16+
17+
- name: Install uv
18+
uses: astral-sh/setup-uv@v5
19+
20+
- name: Set up Python
21+
run: uv python install 3.14
22+
23+
- name: Build sdist and wheel
24+
run: uvx --from build pyproject-build --installer uv
25+
26+
- name: Upload distributions
27+
uses: actions/upload-artifact@v4
28+
with:
29+
name: dist
30+
path: dist
31+
32+
publish:
33+
name: Publish to PyPI
34+
runs-on: ubuntu-latest
35+
needs: build
36+
environment:
37+
name: pypi
38+
url: https://pypi.org/p/civis
39+
permissions:
40+
id-token: write
41+
steps:
42+
- name: Download distributions
43+
uses: actions/download-artifact@v4
44+
with:
45+
name: dist
46+
path: dist
47+
48+
- name: Publish to PyPI
49+
uses: pypa/gh-action-pypi-publish@release/v1
50+
51+
github-release-upload:
52+
name: Upload artifacts to GitHub release
53+
runs-on: ubuntu-latest
54+
needs: build
55+
permissions:
56+
contents: write
57+
steps:
58+
- name: Download distributions
59+
uses: actions/download-artifact@v4
60+
with:
61+
name: dist
62+
path: dist
63+
64+
- name: Upload to GitHub release
65+
env:
66+
GH_TOKEN: ${{ github.token }}
67+
run: gh release upload "${{ github.event.release.tag_name }}" dist/* --repo "${{ github.repository }}"

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,17 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
1313
### Fixed
1414
### Security
1515

16+
## 2.9.0 - 2026-04-22
17+
18+
### Added
19+
- Added the `job_run_url` property to `civis.futures.CivisFuture`
20+
for the URL of the specific run of the Civis Platform job being tracked. (#534)
21+
- Added GitHub Actions workflow for PyPI releases. (#534)
22+
23+
### Changed
24+
- Updated the API spec. (#534)
25+
- Suppressed all pull requests by GitHub's dependabot for docs/requirements.txt. (534)
26+
1627
## 2.8.1 - 2026-03-02
1728

1829
### Changed

docs/requirements.txt

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,27 @@
22
# uv pip compile pyproject.toml --extra=docs --python=.venv/bin/python -o docs/requirements.txt
33
alabaster==1.0.0
44
# via sphinx
5-
attrs==25.4.0
5+
attrs==26.1.0
66
# via
77
# jsonschema
88
# referencing
9-
babel==2.17.0
9+
babel==2.18.0
1010
# via sphinx
11-
certifi==2026.1.4
11+
certifi==2026.2.25
1212
# via requests
13-
charset-normalizer==3.4.4
13+
charset-normalizer==3.4.7
1414
# via requests
15-
click==8.3.1
15+
click==8.3.2
1616
# via civis (pyproject.toml)
1717
cloudpickle==3.1.2
1818
# via civis (pyproject.toml)
19-
docutils==0.21.2
19+
docutils==0.22.4
2020
# via
2121
# sphinx
2222
# sphinx-rtd-theme
2323
idna==3.11
2424
# via requests
25-
imagesize==1.4.1
25+
imagesize==2.0.0
2626
# via sphinx
2727
jinja2==3.1.6
2828
# via sphinx
@@ -36,39 +36,37 @@ jsonschema-specifications==2025.9.1
3636
# via jsonschema
3737
markupsafe==3.0.3
3838
# via jinja2
39-
numpydoc==1.8.0
39+
numpydoc==1.10.0
4040
# via civis (pyproject.toml)
41-
packaging==25.0
41+
packaging==26.1
4242
# via sphinx
43-
pygments==2.19.2
43+
pygments==2.20.0
4444
# via sphinx
4545
pyyaml==6.0.3
4646
# via civis (pyproject.toml)
4747
referencing==0.37.0
4848
# via
4949
# jsonschema
5050
# jsonschema-specifications
51-
requests==2.32.5
51+
requests==2.33.1
5252
# via
5353
# civis (pyproject.toml)
5454
# sphinx
5555
roman-numerals==4.1.0
56-
# via roman-numerals-py
57-
roman-numerals-py==4.1.0
5856
# via sphinx
5957
rpds-py==0.30.0
6058
# via
6159
# jsonschema
6260
# referencing
6361
snowballstemmer==3.0.1
6462
# via sphinx
65-
sphinx==8.2.3
63+
sphinx==9.1.0
6664
# via
6765
# civis (pyproject.toml)
6866
# numpydoc
6967
# sphinx-rtd-theme
7068
# sphinxcontrib-jquery
71-
sphinx-rtd-theme==3.0.2
69+
sphinx-rtd-theme==3.1.0
7270
# via civis (pyproject.toml)
7371
sphinxcontrib-applehelp==2.0.0
7472
# via sphinx
@@ -84,9 +82,7 @@ sphinxcontrib-qthelp==2.0.0
8482
# via sphinx
8583
sphinxcontrib-serializinghtml==2.0.0
8684
# via sphinx
87-
tabulate==0.9.0
88-
# via numpydoc
89-
tenacity==9.1.2
85+
tenacity==9.1.4
9086
# via civis (pyproject.toml)
9187
urllib3==2.6.3
9288
# via requests

pyproject.toml

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,17 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "civis"
7-
version = "2.8.1"
7+
version = "2.9.0"
88
description = "Civis API Python Client"
99
readme = "README.rst"
1010
requires-python = ">= 3.11"
1111
authors = [ { name = "Civis Analytics", email = "[email protected]" } ]
12-
license = { text = "BSD-3-Clause" }
12+
license = "BSD-3-Clause"
1313
dependencies = [
14+
# This is a public package that can be used in environments we don't control.
15+
# Therefore we don't set version upper bounds (i.e., don't use <= or <)
16+
# to avoid dependency version conflicts. If a particular dependency version
17+
# is known to be incompatible with civis-python, enumerate the version with !=.
1418
"click >= 6.0",
1519
"cloudpickle >= 0.2",
1620
"joblib >= 1.5.0",
@@ -24,7 +28,6 @@ dependencies = [
2428
]
2529
classifiers = [
2630
"Development Status :: 5 - Production/Stable",
27-
"License :: OSI Approved :: BSD License",
2831
"Programming Language :: Python",
2932
"Programming Language :: Python :: 3",
3033
"Programming Language :: Python :: 3 :: Only",
@@ -43,35 +46,37 @@ civis = "civis.cli.__main__:main"
4346
civis_joblib_worker = "civis.run_joblib_func:main"
4447

4548
[project.optional-dependencies]
49+
# Not pinning versions for dev dependencies, so that we always install their
50+
# latest versions on CI builds for forward compatibility.
4651
dev-core = [
47-
"bandit", # Install the latest version.
48-
"black == 25.12.0",
49-
"build == 1.3.0",
50-
"flake8 == 7.3.0",
51-
"mypy == 1.19.1",
52-
"pandas == 2.3.3",
53-
"pip-audit", # Install the latest version.
54-
"polars == 1.36.1",
55-
"pytest == 9.0.2",
56-
"pytest-cov == 7.0.0",
57-
"twine == 6.2.0",
58-
# The stub packages are used by mypy, so just get their latest versions.
52+
"bandit",
53+
"black",
54+
"build",
55+
"flake8",
56+
"mypy",
57+
"pandas",
58+
"pip-audit",
59+
"polars",
60+
"pytest",
61+
"pytest-cov",
62+
"twine",
63+
# The stub packages are used by mypy.
5964
"pandas-stubs",
6065
"types-jsonschema",
6166
"types-PyYAML",
6267
"types-requests",
6368
]
6469
dev-civisml = [
65-
"feather-format == 0.4.1",
66-
"numpy == 2.4.0",
67-
"scikit-learn == 1.8.0",
68-
"scipy == 1.16.3",
70+
"feather-format",
71+
"numpy",
72+
"scikit-learn",
73+
"scipy",
6974
]
7075
docs = [
7176
# docs/requirements.txt pins all transitive dependencies for a reproducible doc build.
72-
"numpydoc == 1.8.0",
73-
"Sphinx == 8.2.3",
74-
"sphinx-rtd-theme == 3.0.2",
77+
"numpydoc",
78+
"Sphinx",
79+
"sphinx-rtd-theme",
7580
]
7681

7782
[tool.setuptools.packages.find]

src/civis/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
from civis.response import find, find_one, ListResponse, Response, PaginatedResponse
99
from civis.service_client import ServiceClient
1010

11-
1211
try:
1312
# __sphinx_build__ is injected into bulitins in docs/conf.py.
1413
if __sphinx_build__: # type: ignore[name-defined]

src/civis/_camel_to_snake.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import re
66

7-
87
UNDERSCORER1 = re.compile(r"(.)([A-Z][a-z]+)")
98
UNDERSCORER2 = re.compile("([a-z0-9])([A-Z])")
109

src/civis/_retries.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import tenacity
44
from tenacity.wait import wait_base
55

6-
76
log = logging.getLogger(__name__)
87

98
_RETRY_CODES = [429, 502, 503, 504]

src/civis/cli/__main__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
from civis.resources._resources import parse_method_name
4444
from civis._retries import retry_request
4545

46-
4746
_REPLACEABLE_COMMAND_CHARS = re.compile(r"[^A-Za-z0-9]+")
4847
_BASE_API_URL = "https://api.civisanalytics.com"
4948
CLI_USER_AGENT = "civis-cli"

src/civis/cli/_cli_commands.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"""
44
Additional commands to add to the CLI beyond the OpenAPI spec.
55
"""
6+
67
import functools
78
import os
89
import sys
@@ -16,7 +17,6 @@
1617
from civis.utils import job_logs
1718
from civis._retries import get_default_retrying
1819

19-
2020
# From http://patorjk.com/software/taag/#p=display&f=3D%20Diagonal&t=CIVIS
2121
_CIVIS_ASCII_ART = r"""
2222
,----.. ,---, ,---, .--.--.

0 commit comments

Comments
 (0)