Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
27dbcf8
Don't ignore python-check failures on python 3.14
bmos Nov 14, 2025
0b5bebb
Bump ruff from 0.13.0 to 0.14.5
bmos Nov 21, 2025
71ca914
Bump censusgeocode and urllib3
bmos Nov 21, 2025
05ba3a8
requirements cleanup
bmos Nov 21, 2025
3c40f91
Bump psycopg2-binary from 2.9.10 to 2.9.11 on python 3.13+
bmos Nov 21, 2025
8d5a9e3
Use dbt-core rather than dbt-redshift in setup.py
bmos Nov 21, 2025
d8188c7
Merge branch 'main' into patch-1
bmos Nov 21, 2025
f592217
Allow older urllib3 for python 3.9
bmos Nov 21, 2025
a23824d
Allow accessing Open Source Insights in dependency review workflow
bmos Nov 21, 2025
3518800
Add classifier for Python 3.14 in pyproject.toml
bmos Nov 21, 2025
9056b40
Merge branch 'main' into patch-1
bmos Dec 4, 2025
3c19b70
Add 3.14 to release.yml action matrix
bmos Dec 4, 2025
b6f07fa
workaround for urllib3 / requests-toolkit issue
bmos Dec 9, 2025
8a95713
require secure urllib3, except on python 3.9 (compatibility)
bmos Dec 9, 2025
f6a8227
exceptions for GHSAs in dependency review
bmos Dec 9, 2025
f56de9e
allow any urllib3 in LIMITED_DEPENDENCIES
bmos Dec 9, 2025
cc2b085
Merge branch 'main' into patch-1
bmos Dec 16, 2025
fd3470e
Fix merge conflicts in requirements.txt
bmos Dec 16, 2025
a58f94d
Update fastavro version to 1.12.1
bmos Dec 16, 2025
5b7d92f
Bump pytest from 8.4.2 to 9.0.2
bmos Dec 18, 2025
f6a05f8
Bump testfixtures from 9.1 to 10.0
bmos Dec 18, 2025
f11fe9c
Bump bandit from 1.8.6 to 1.9.2
bmos Dec 18, 2025
326ea9b
Bump pre-commit from 4.3 to 4.5
bmos Dec 18, 2025
ebab64f
Bump coverage from 7.10 to 7.13
bmos Dec 18, 2025
275066a
bandit version compatibility for python 3.9
bmos Dec 18, 2025
bcd8657
Remove explicit coverage requirement (used in action)
bmos Dec 18, 2025
092acba
pre-commit version compatibility for python 3.9
bmos Dec 18, 2025
b0e4d13
pytest version compatibility for python 3.9
bmos Dec 18, 2025
3618a26
Merge branch 'main' into patch-1
bmos Dec 31, 2025
bacc7cb
Merge branch 'main' into patch-1
bmos Jan 6, 2026
adde4d1
remove default_language_version from pre-commit-config
bmos Jan 6, 2026
2733907
revert dbt-core to dbt-redshift in setup.py
bmos Jan 6, 2026
349445f
add dbt-core as additional dependency for dbt-___ packages as it's no…
bmos Jan 7, 2026
eae3220
add dbt adapter packages to requirements
bmos Jan 7, 2026
0ed46fa
relax google-cloud-storage version requirement
bmos Jan 7, 2026
f369e72
raise lower version requirement on lxml
bmos Jan 7, 2026
a1fb979
resolve pre-commit ruff (legacy alias) message
bmos Jan 7, 2026
387fa40
don't use bs4 package alias for beautifulsoup4
bmos Jan 7, 2026
f48e854
tighter version constraints for dbt packages
bmos Jan 7, 2026
b5c0c70
correct syntax for defusedxml version constraint
bmos Jan 7, 2026
56e7ea5
use beautifulsoup4 instead of bs4 in setup.py also
bmos Jan 7, 2026
b21bc9b
don't break mysql across lines in setup.py
bmos Jan 7, 2026
7c4bb33
Update python version support documentation in README.md
bmos Jan 7, 2026
3b18816
Update google-auth version constraint
bmos Jan 19, 2026
48757d2
Merge branch 'main' into patch-1
bmos Jan 19, 2026
adc78c0
Merge branch 'main' into patch-1
bmos Jan 22, 2026
fe52fca
Add GHSA-38jv-5279-wg99 to allowed GHSA list
bmos Jan 22, 2026
6c7e347
Update boto3 min version in requirements.txt
bmos Jan 22, 2026
0a36093
Update boto3 min version in requirements.txt
bmos Jan 22, 2026
530ac8a
Add back grpcio dependency to requirements.txt
bmos Jan 22, 2026
389c045
Update lxml version in requirements.txt
bmos Jan 22, 2026
6b86eba
Bump ruff from 0.14.5 to 0.14.14
bmos Jan 23, 2026
bfcb5c7
Bump bandit from 1.9.2 to 1.9.3
bmos Jan 23, 2026
8bcb068
Bump myst-parser from 4.0.1 to 5.0.0
bmos Jan 23, 2026
303e109
Bump sphinx-rtd-theme from 3.0.2 to 3.1.0
bmos Jan 23, 2026
6a37a2e
Bump Sphinx from 8.2.3 to 9.1.0
bmos Jan 23, 2026
8c73e59
myst-parser python_version compatibility ranges
bmos Jan 23, 2026
285bd7e
Sphinx python_version compatibility ranges
bmos Jan 23, 2026
6a6a708
roll back sphinx update
bmos Jan 23, 2026
14f828c
~ requirements syntax fixes
bmos Jan 23, 2026
e46748a
remove python 3.9 requirements workarounds and censusgeocode
bmos Jan 26, 2026
4cc877d
Merge branch 'main' into patch-1
bmos Jan 26, 2026
415dc37
Merge branch 'main' into patch-1
bmos Jan 26, 2026
3219a72
Merge branch 'main' into patch-1
bmos Jan 27, 2026
d63277a
ruff format
bmos Jan 27, 2026
5dbcaca
Bump min psycopg2-binary to 2.9.11
bmos Jan 27, 2026
0e672fb
remove dependency review option allow-ghsas
bmos Jan 27, 2026
6a67a99
Bump urllib3 from 2.6.0 to 2.6.3
bmos Jan 27, 2026
762f848
Bump sqlalchemy to 1.4.54
bmos Jan 27, 2026
6a74e6a
Bump httplib2
bmos Jan 27, 2026
ec5cb8d
replace unittest.SkipTest with pytest.skip
bmos Jan 27, 2026
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
3 changes: 1 addition & 2 deletions .github/workflows/dependency-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,11 @@ jobs:
disable-sudo: true
egress-policy: block
allowed-endpoints: >
api.deps.dev
api.github.com:443
api.securityscorecards.dev:443
github.com:443

- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd

- uses: actions/dependency-review-action@3c4e3dcb1aa7874d2c16be7d79418e9b7efd6261
with:
allow-ghsas: GHSA-pq67-6m6q-mj2v # urllib3
4 changes: 0 additions & 4 deletions .github/workflows/python-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,11 @@ jobs:
- uses: install-pinned/uv@259f91feb61b6e94766d7a1dbcd5f17335370e64

- if: matrix.resolution != 'limited-dependencies'
continue-on-error: ${{ contains(matrix.python-version, '3.14') }}
run: |
uv pip install --system --resolution ${{ matrix.resolution }} -e .[all]
uv pip install --system --resolution ${{ matrix.resolution }} -r requirements-dev.txt

- if: matrix.resolution == 'limited-dependencies'
continue-on-error: ${{ contains(matrix.python-version, '3.14') }}
env:
PARSONS_LIMITED_DEPENDENCIES: 'TRUE'
run: |
Expand All @@ -72,12 +70,10 @@ jobs:
key: pytest-${{ matrix.python-version }}-${{ matrix.os }}-${{ matrix.resolution }}-${{ hashFiles('pyproject.toml') }}

- run: pytest
continue-on-error: ${{ contains(matrix.python-version, '3.14') }}
env:
COVERAGE_FILE: ".coverage.${{ matrix.os }}.${{ matrix.python-version }}.${{ matrix.resolution }}"

- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f
if: ${{ !contains(matrix.python-version, '3.14') }}
with:
name: coverage-${{ matrix.os }}-${{ matrix.python-version }}-${{ matrix.resolution }}
path: .coverage.${{ matrix.os }}.${{ matrix.python-version }}.${{ matrix.resolution }}
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ jobs:
- '3.11'
- '3.12'
- '3.13'
- '3.14'
os:
- ubuntu-latest
- windows-latest
Expand Down
6 changes: 3 additions & 3 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.13.0
rev: v0.14.14
hooks:
- id: ruff
- id: ruff-check
args: ['--fix']
- id: ruff-format
- repo: https://github.com/PyCQA/bandit
rev: 1.8.6
rev: 1.9.3
hooks:
- id: bandit
args: ['--confidence-level', 'medium', '--severity-level', 'medium', '--exclude', '**/vendor/*']
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ This project is maintained by [The Movement Cooperative](https://movementcoopera
after [Lucy Parsons](https://en.wikipedia.org/wiki/Lucy_Parsons). The Movement Cooperative is a member-led organization
focused on providing data, tools, and strategic support for the progressive community.

Parsons is only supported for Python 3.10-13.
Parsons is only supported for Python 3.10 - 3.14.

## Table of Contents

Expand Down
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ classifiers = [
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
]
dynamic = [
"dependencies",
Expand Down
39 changes: 19 additions & 20 deletions requirements-dev.txt
Original file line number Diff line number Diff line change
@@ -1,26 +1,25 @@
# Testing Requirements
bandit[sarif]==1.8.6
coverage==7.10.7
pre-commit==4.3.0
pytest-cov==7.0.0
pytest-datadir==1.8.0
pytest-mock==3.15.1
pytest-xdist==3.8.0
pytest==8.4.2
requests-mock==1.12.1
ruff==0.13.0
testfixtures==8.3.0;python_version<'3.11'
testfixtures==9.1.0;python_version>='3.11'
bandit[sarif]==1.9.3
pre-commit~=4.5
pytest-cov~=7.0
pytest-datadir~=1.8
pytest-mock~=3.15
pytest-xdist~=3.8
pytest~=9.0
requests-mock~=1.12
ruff==0.14.14
testfixtures~=8.3.0;python_version<'3.11'
testfixtures~=10.0.0;python_version>='3.11'

# Build and publish requirements
twine==6.2.0
twine~=6.2
build


# Docs Requirements
myst-parser==4.0.1
sphinxcontrib-googleanalytics==0.5
sphinx-multiversion==0.2.4
sphinx-rtd-theme==3.0.2
Sphinx==7.4.7;python_version<'3.11'
Sphinx==8.2.3;python_version>='3.11'
myst-parser~=4.0;python_version<'3.11'
myst-parser~=5.0;python_version>='3.11'
sphinxcontrib-googleanalytics~=0.5
sphinx-multiversion~=0.2
sphinx-rtd-theme~=3.1
Sphinx~=7.4;python_version<'3.11'
Sphinx~=8.2;python_version>='3.11'
24 changes: 14 additions & 10 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,31 +1,35 @@
azure-storage-blob==12.27.1
boto3>=1.17.98
boto3>=1.42.0
boxsdk==4.1.0
braintree==4.41.0
bs4==0.0.2
beautifulsoup4>=4.10.0
civis==2.4.3
curlify==3.0.0
dbt-core>=1.5.0
dbt-core>=1.9.0
dbt-bigquery>=1.9.0
dbt-postgres>=1.9.0
dbt-redshift>=1.9.0
dbt-snowflake>=1.9.0
Comment on lines +8 to +12
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@austinweisgrau Hey Austin, do you have thoughts on this? The specific packages are not included in requirements but are in setup.py?

defusedxml>=0.7.1, <=0.8.0
facebook-business==24.0.1
fastavro==1.10.0
fastavro==1.12.1
google-api-core==2.28.1
google-api-python-client==2.187.0
google-auth==2.40.3
google-cloud-bigquery==3.40.0
google-cloud-storage-transfer==1.18.0
google-cloud-storage==3.7.0
google-cloud-storage>=3.1,<3.8
grpcio==1.76.0
gspread==6.2.1
httplib2==0.30.0
httplib2==0.31.2
joblib==1.4.2
lxml>=6.0.2
mysql-connector-python==9.4.0
newmode==0.1.6
oauth2client==4.1.3
paramiko==4.0.0
petl==1.7.17
psycopg2-binary==2.9.9;python_version<"3.13"
psycopg2-binary==2.9.10;python_version>="3.13"
psycopg2-binary>=2.9.11
pyairtable==3.2.0
PyGitHub==2.8.1
python-dateutil==2.9.0.post0
Expand All @@ -36,12 +40,12 @@ setuptools==80.9.0
simple-salesforce==1.12.9
simplejson==3.20.1
slack-sdk==3.38.0
sqlalchemy >= 1.4.22, != 1.4.33, < 3.0.0 # Prefect does not work with 1.4.33 and >=2.0.0 has breaking changes
sqlalchemy>=1.4.54
sshtunnel==0.4.0
suds-py3==1.4.5.0
surveygizmo==1.2.3
twilio==9.9.0
urllib3==2.6.0
urllib3==2.6.3
validate-email==1.3
xmltodict==1.0.2

Expand Down
27 changes: 16 additions & 11 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,15 @@
"braintree": ["braintree"],
"catalist": ["paramiko"],
"civis": ["civis"],
"dbt-redshift": ["dbt-redshift >= 1.5.0"],
"dbt-bigquery": ["dbt-bigquery >= 1.5.0"],
"dbt-postgres": ["dbt-postgres >= 1.5.0"],
"dbt-snowflake": ["dbt-snowflake >= 1.5.0"],
"dbt-redshift": [
"dbt-redshift >= 1.5.0",
"dbt-core >= 1.5.0",
"lxml;python_version < '3.14'",
"lxml>=5.5.0;python_version >= '3.14'",
],
"dbt-bigquery": ["dbt-bigquery >= 1.5.0", "dbt-core >= 1.5.0"],
"dbt-postgres": ["dbt-postgres >= 1.5.0", "dbt-core >= 1.5.0"],
"dbt-snowflake": ["dbt-snowflake >= 1.5.0", "dbt-core >= 1.5.0"],
"facebook": ["joblib", "facebook-business"],
"geocode": [
"requests >= 2.27.0",
Expand All @@ -57,19 +62,19 @@
],
"mysql": [
"mysql-connector-python",
"sqlalchemy >= 1.4.22",
"sqlalchemy >= 1.4.54",
],
"newmode": ["newmode"],
"ngpvan": ["suds-py3"],
"mobilecommons": ["beautifulsoup4"],
"postgres": [
"psycopg2-binary >= 2.0.0",
"sqlalchemy >= 1.4.22",
"psycopg2-binary >= 2.9.11",
"sqlalchemy >= 1.4.54",
],
"redshift": [
"boto3",
"psycopg2-binary >= 2.0.0",
"sqlalchemy >= 1.4.22",
"psycopg2-binary >= 2.9.11",
"sqlalchemy >= 1.4.54",
],
"s3": ["boto3"],
"salesforce": ["simple-salesforce"],
Expand All @@ -81,8 +86,8 @@
"twilio": ["twilio"],
"ssh": [
"sshtunnel",
"psycopg2-binary >= 2.0.0",
"sqlalchemy >= 1.4.22",
"psycopg2-binary >= 2.9.11",
"sqlalchemy >= 1.4.54",
],
}

Expand Down
2 changes: 1 addition & 1 deletion test/test_databases/test_dbsync.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class TestDBSync(ABC, unittest.TestCase):
def setUpClass(cls):
# Skip tests on this abstract base class
if cls is TestDBSync:
raise unittest.SkipTest(f"{cls.__name__} is an abstract base class")
raise pytest.skip(f"{cls.__name__} is an abstract base class")
else:
super().setUpClass()

Expand Down
Loading