Files
AareDAQ/pyproject.toml
T
duan_jandClaude Fable 5 77d0415478
CI / lint (push) Skipped
CI / test (3.12) (push) Skipped
CI / test (3.13) (push) Skipped
CI / test-with-beamline-plugins (pxi_bec) (push) Skipped
CI / test-with-beamline-plugins (pxii_bec) (push) Skipped
CI / test-with-beamline-plugins (pxiii_bec) (push) Skipped
CI / lint (pull_request) Successful in 46s
CI / test (3.12) (pull_request) Successful in 1m3s
CI / test (3.14) (pull_request) Successful in 1m8s
CI / test (3.13) (pull_request) Successful in 1m10s
CI / test-with-beamline-plugins (pxi_bec) (pull_request) Successful in 1m10s
CI / test-with-beamline-plugins (pxii_bec) (pull_request) Successful in 1m14s
CI / test-with-beamline-plugins (pxiii_bec) (pull_request) Failing after 1m26s
CI / test-with-coverage (pull_request) Successful in 1m38s
CI / coverage-analysis (pull_request) Successful in 4s
fix: pin PySide6 below 6.10 so CI stops segfaulting
CI installs latest index deps (it does not read uv.lock) and resolved
PySide6 6.11.2, which segfaults the unit suite in teardown on about
half the runs - reproduced on PLAIN origin/main, so it is not this
branch's code. 6.9.0 (the uv.lock pin) is stable. Cap the dependency
so CI resolves a 6.9.x build; drop the cap once the teardown crash is
hunted down. uv.lock re-locked (it was stale at aaredaq 0.22.1).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-16 11:58:03 +02:00

120 lines
3.0 KiB
TOML

[project]
name = "aaredaq"
version = "0.32.0"
description = "AareDAQ (with GUI)"
readme = "README.md"
requires-python = ">=3.11"
dependencies = [
"uv",
"aarecommon>=0.9.0",
"pydantic>=2.11",
"numpy",
"jfjoch_client>=1.0.0rc166",
"pyJWT",
"pyzmq",
"opencv-python-headless",
# <6.10: 6.11.2 (what the unpinned CI resolves) segfaults the unit suite
# in teardown on ~half the runs — on plain main too, not this branch.
# Drop the cap once the teardown crash is hunted down.
"PySide6<6.10",
"requests",
"pyepics~=3.5",
"redis",
"fastapi",
"uvicorn",
"aaredb>=0.83.1",
"python_multipart",
"websocket-client",
"sseclient",
"psi-pshell==2.1.0",
"bec_lib>=3.130.3",
"bec-ipython-client>=3.130.3",
"aarescan-client>=1.0.0rc15",
"aarelcinfer-client==0.1.1a8",
"matplotlib>=3.10.3",
"httpx>=0.28.1",
]
[project.optional-dependencies]
test = [
"basedpyright",
"pytest",
"pytest-cov",
"pytest-mock",
"pytest-qt",
"pytest-asyncio",
"pytest-timeout",
"fakeredis[lua]",
"diff-cover",
"ruff>=0.15"
]
docs = [
"zensical"
]
[lint]
ignore = ["F401", "F541", "W503", "W504"]
[tool.uv]
# Transitive deps (aarecommon -> aarelc_infer) ask for the non-headless
# `opencv-python`. It unpacks into the same `cv2/` directory as the
# `opencv-python-headless` we depend on, so whichever installs last wins for the
# overlapping files and you get a mixed install -- the Python half of one wheel
# next to the native half of the other. That surfaces as
# `AttributeError: partially initialized module 'cv2' has no attribute
# 'gapi_wip_gst_GStreamerPipeline'` on `import cv2`, and it bites in the
# test-with-beamline-plugins job because installing the plugins re-resolves and
# flips the install order. A marker that never matches drops the requirement,
# leaving headless as the only cv2 provider.
override-dependencies = ["opencv-python; sys_platform == 'nonexistent'"]
[tool.uv.sources]
aaredb = { index = "psi"}
[[tool.uv.index]]
name = "psi"
url = "https://gitea.psi.ch/api/packages/mx/pypi/simple"
[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = ["test_*.py"]
norecursedirs = ["scripts", ".venv", "logs", "docs"]
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
markers = [
"integration: tests that require external systems or secrets",
]
[build-system]
requires = ["setuptools>=75.6.0"]
build-backend = "setuptools.build_meta"
[tool.setuptools.package-data]
"aare.gui.graphics" = ["*.svg", "*.png"]
"*" = ["*.json"]
[tool.black]
line-length = 100
skip-magic-trailing-comma = true
[tool.isort]
profile = "black"
line_length = 100
multi_line_output = 3
[tool.ruff]
line-length = 100
[tool.ruff.lint]
ignore = [
# Timestamps here are local beamline wall-clock and are stored/displayed as
# naive ISO strings; adding a tzinfo would change what aaredb and the GUI see.
"DTZ005",
"DTZ006",
]
isort.split-on-trailing-comma=false
[tool.ruff.format]
skip-magic-trailing-comma = true