[project] name = "aaredaq" version = "0.7.2" description = "AareDAQ (with GUI)" readme = "README.md" requires-python = ">=3.11" dependencies = [ "uv", "gunicorn", "aarecommon>=0.2.2", "pydantic>=2.11", "numpy", "jfjoch_client==1.0.0rc146", "pyJWT", "pyzmq", "opencv-python-headless", "PySide6==6.9.0", "requests", "pyepics~=3.5", "redis", "python-redis-lock", "fastapi", "uvicorn", "aaredb>=0.2", "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.0rc5", "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", "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.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", ] [tool.ruff.format] skip-magic-trailing-comma = true