semver==3.0.4
datasize==1.0.0
jinja2>=3.1.4
fiona==1.10.1
pandas==2.2.3
shapely==2.1.0
pyproj>=3.7.1
prefect>=3.7,<3.8
# importlib_metadata: declared explicitly because prefect 3.7.1's
# ``workers/base.py`` imports it unconditionally but doesn't list it
# as a direct dep — it was being satisfied transitively by
# ``opentelemetry-api`` until 1.42.0 (released 2026-05-19) dropped
# that transitive. Without this pin, ``prefect worker start`` fails
# with ``ModuleNotFoundError: No module named 'importlib_metadata'``
# and breaks the integration-test workflow. Pinned loose because
# the backport's API is stable across versions; the stdlib has
# ``importlib.metadata`` since Python 3.8 but Prefect specifically
# imports the backport spelling.
importlib_metadata>=4.6
# blake3: default for ckanext.datapusher_plus.file_hash_algorithm (issue #221).
# Pure-Python fallback is in stdlib's hashlib for sha256/md5; blake3 is the
# only one that needs an external package. Pinned loose because the wheel
# contract is stable and the Rust binding is fast across versions.
blake3>=1.0.7
# babel: used by AnalysisStage._normalize_locale_numbers for CLDR-backed
# parsing of locale-specific number formats (issue #112 — German
# comma-decimal, French space-thousands, etc.). babel is already a
# transitive dependency via CKAN core's i18n stack; declared here
# explicitly because DP+ imports ``babel.numbers`` directly now and
# shouldn't rely on the upstream pin staying loose.
babel>=2.9
