Build System Migration: Poetry → uv + Hatch
- Rewrote
pyproject.tomlusing PEP 621 standard format - Replaced Poetry's
poetry.lockwithuv.lock - Switched build backend from
poetry.core.masonry.apitohatchling.build - Removed legacy configuration files:
setup.py,setup.cfg,tox.ini,.coveragerc - Removed individual requirements files (
requirements.txt,requirements-dev.txt,requirements-extras-*.txt) - Consolidated all configuration (coverage, pytest, linting) into
pyproject.toml
CI/CD Improvements
- New unified
ci.ymlworkflow replacesblack.ymlandpythonpackage.yml- Updated to GitHub Actions v5 (checkout@v5, setup-uv@v5)
- Expanded test matrix: Python 3.9, 3.10, 3.11, 3.12, 3.13, 3.14
- Coverage reporting runs on Python 3.13
- New
release.ymlworkflow for automated PyPI publishing using OIDC trusted publishing - Switched linting from Black to Ruff (same 120 char line length, quote style preserved)
Pandas 2.x Compatibility Fixes
- Fixed deprecated
DataFrame.applymap()→DataFrame.map()throughout codebase - Added
future.no_silent_downcastingoption context to avoid FutureWarnings - Fixed
groupby()level parameter to use scalar when single level - Added
infer_objects(copy=False)after fillna for proper dtype inference - Convert DataFrame to object dtype before applying string formatting in pandas widget
PyPika Compatibility
- Updated pypika dependency:
0.48.2(pinned) →>=0.50.0,<1.0.0 - Fixed test assertions for PyPika's NULL keyword formatting change
Other Changes
- Added pre-commit configuration with Ruff hooks for linting and formatting
- Relaxed
pandasdependency:==2.0.3(pinned) →>=2.0.0 - Relaxed
toposortdependency:==1.6(pinned) →>=1.6,<2 - Updated
psycopg2-binarydependency:>=2.9.0→>=2.9.11(adds Python 3.14 support) - Dropped Python 3.8 support; minimum Python version is now
>=3.9(required by psycopg2-binary 2.9.11 and pandas 2.x) - Snowflake extra is temporarily unavailable on Python 3.14 (upstream
snowflake-connector-pythonrequirescffi<2, which lacks Python 3.14 wheels); Snowflake tests gracefully skip when dependencies are missing - Fixed invalid escape sequence in
type_engine.py(wasSyntaxWarning, will be error in Python 3.16) - Removed dead code from Snowflake database module
- Configured Ruff to ignore intentional patterns (re-exports in
__init__.py, star imports in tests) - Applied Ruff formatting to codebase
- Fixed duplicate test method in
test_build_filters.py - Fixed duplicate import in
test_references.py - Snowflake: Moved
cryptography.hazmatimports inside method for lazy loading - Version now read from package metadata using
importlib.metadata.version() - Fixed
filter_nones()to use lambda instead ofNone.__ne__ - Added
CLAUDE.mdwith project overview and development commands - Added Snowflake and MSSQL database extras to setup documentation
- Added Snowflake database configuration example to documentation
- Removed test API documentation files from docs
What's Changed
- SEOD-1326. Bump fireant to pandas version 2 by @AzisK in #366
- Bump urllib3 from 1.26.16 to 1.26.17 by @dependabot[bot] in #367
- SEOD-811. Make filtering of date totals in highcharts more flexible by @AzisK in #369
- SEOD-1531. Fix dataframe sort with a pivot with the new pandas v2 API by @AzisK in #371
- Seod 2756 update fireant dependencies by @AzisK in #375
- Lint-PR-375 by @AzisK in #376
New Contributors
Full Changelog: v7.9.0...v8.1.0