[project] name = "galaxy" version = "0.1.0" # Not the real version, which is instead defined in lib/galaxy/version.py description = "Galaxy is an open, web-based platform for accessible, reproducible, and transparent computational research." authors = [ {name = "Galaxy Contributors"}, ] maintainers = [ {name = "Galaxy Committers", email = "galaxy-committers@lists.galaxyproject.org"} ] license = {file = "LICENSE.txt"} readme = "README.rst" requires-python = ">=3.10" dependencies = [ "a2wsgi", "aiofiles", "alembic", "apispec", "Babel", "bdbag>=1.6.3", "Beaker", "bioblend", "bleach", "boltons", "boto", "bx-python", "celery>=5.4.0", # prefer not downgrading this to upgrading typing-extensions "cloudauthz==0.6.0", "cloudbridge", "circus", "conda-package-streaming", "CT3>=3.3.3", # Python 3.13 support "cwl-utils>=0.13", "cwltool>=3.1.20230624081518", # save time, minimum needed by cwl-1.0 branch "dictobj", "dnspython", "docutils!=0.17,!=0.17.1", "dparse", "edam-ontology", "fastapi>=0.124.0", # https://github.com/fastapi/fastapi/pull/14453 "fissix", "fs", "future>=1.0.0", # Python 3.12 support "gravity>=1.2.0", # Python 3.14 support "gunicorn!=25.1.0", # https://github.com/benoitc/gunicorn/discussions/3509 "gxformat2>=0.22.0", "h5grove>=1.2.1", "h5py>=3.12", # Python 3.13 support "httpx", "ijson", "importlib-resources ; python_version<'3.12'", # for importlib.{abc.Traversable,resources.{files, Package}} "isa-rwval>=0.10.11", # https://github.com/ISA-tools/isa-rwval/pull/17 "isal>=1.7.0", # Python 3.13 support "jinja2", "kombu>=5.5.0", # prefer not downgrading this to upgrading typing-extensions "lagom", "Mako", "Markdown", "MarkupSafe", "mercurial>=7.2", # Python 3.14 support "mrcfile", "more-itertools", "msal", "nodejs-wheel>=22,<23", "numpy>=1.26.0", # Python 3.12 support "numpy>=2.1.0 ; python_version>='3.10'", # Python 3.13 support "openpyxl>=3.1.5", # Minimum version ever tested with "packaging", "paramiko!=2.9.0,!=2.9.1", # https://github.com/paramiko/paramiko/issues/1961 "Parsley", "Paste", "pebble", "pillow", "psutil", "pulsar-galaxy-lib>=0.15.10", "pycryptodome", "pydantic[email]>=2.7.4", # https://github.com/pydantic/pydantic/pull/9639 "pydantic-ai>=1.56.0", # https://github.com/pydantic/pydantic-ai/security/advisories/GHSA-2jrp-274c-jhv3 "pydicom; python_version >= '3.10'", "PyJWT", "pykwalify", "pylibmagic", "pyparsing>=3.0.0", "pypng", "pysam>=0.21", # for Python 3.11 support on macOS "python-dateutil", "python-magic", "python-multipart", # required to support form parsing in FastAPI/Starlette "python-slugify", "PyYAML", "refgenconf>=0.13.0", # https://github.com/refgenie/refgenconf/pull/149 "regex", "requests", "rocrate", "Routes", "s3fs>=2023.1.0", "schema-salad>=8.7.20240905150001", # Python 3.13 support "slowapi", "social-auth-core>=4.5.0", # to drop dependency on abandoned python-jose "sortedcontainers", "SQLAlchemy>=2.0.37,<2.1,!=2.0.41", # https://github.com/sqlalchemy/sqlalchemy/issues/12019 , https://github.com/sqlalchemy/sqlalchemy/issues/12600 "sqlparse", "starlette", "starlette-context", "svgwrite", "tifffile", "typing-extensions", "tuspyserver", "uvicorn!=0.28.0", # https://github.com/galaxyproject/galaxy/issues/17669 "uvloop>=0.21.0", # Python 3.13 support "WebOb>=1.8.9", # Python 3.13 support "Whoosh", "zipstream-new", "fsspec>=2025.7.0", ] [project.urls] Homepage = "https://galaxyproject.org/" Documentation = "https://docs.galaxyproject.org/" Repository = "https://github.com/galaxyproject/galaxy" "Bug Tracker" = "https://github.com/galaxyproject/galaxy/issues" [dependency-groups] test = [ "ase>=3.18.1", "axe-selenium-python", "boto3", "cwltest>=2.5.20240906231108", # Python 3.13 support "fluent-logger", "gcsfs", "lxml!=4.2.2", "onedatafilerestclient==21.2.5.2", "pkce", "playwright>=1.48.0", # Python 3.13 support "pytest", "pytest-asyncio", "pytest-cov", "pytest-html", "pytest-httpserver", "python-irodsclient!=1.1.2", # https://github.com/irods/python-irodsclient/issues/356 "pytest-json-report", "pytest-mock", "pytest-playwright", "pytest-postgresql!=3.0.0", # https://github.com/ClearcodeHQ/pytest-postgresql/issues/426 "pytest-shard", "responses", "roc-validator!=0.7.2", # https://github.com/crs4/rocrate-validator/pull/97 "rucio-clients>=37.2.0", # https://github.com/rucio/rucio/pull/7665 "selenium", "seletools", "statsd", "testfixtures", "total-perspective-vortex>=3.1.1,<4", # https://github.com/galaxyproject/total-perspective-vortex/pull/173 "tuspy", "watchdog", "Werkzeug", ] dev = [ {include-group = "test"}, "black", "codespell", "darker", "galaxy-release-util", "isort", "markdown-it-reporter", "myst-parser", "Sphinx>=4.0", # support docutils 0.17 "sphinx-rtd-theme", ] typecheck = [ "boto3-stubs[s3]", "lxml-stubs", "mypy", "pydantic>=2.7.4", # for pydantic.mypy plugin "types-bleach", "types-boto", "types-contextvars", "types-dataclasses", "types-docutils", "types-Markdown", "types-paramiko", "types-python-dateutil", "types-python-slugify", "types-PyYAML", "types-requests", "types-setuptools", "types-six", ] [tool.black] line-length = 120 include = '\.pyi?$' extend-exclude = ''' ^/( | packages | lib/tool_shed/test/test_data/repos )/ ''' [tool.darker] isort = true [tool.ruff] exclude = [ "lib/tool_shed/test/test_data/repos" ] src = ["lib"] [tool.ruff.lint] # Enable: pycodestyle errors (E), Pyflakes (F), flake8-bugbear (B), # flake8-comprehensions (C4), flake8-logging-format (G), # flake8-implicit-str-concat (ISC) and pyupgrade (UP) select = ["E", "F", "B", "C4", "G", "ISC", "NPY", "UP"] # Exceptions: # B008 Do not perform function calls in argument defaults (for FastAPI Depends and Body) # B9 flake8-bugbear opinionated warnings # E402 module level import not at top of file # TODO, we would like to improve this. # E501 is line length (delegated to black) # G* are TODOs # UP007, UP045: Python >=3.10 type annotation improvements, to be revisited later ignore = ["B008", "B9", "E402", "E501", "G001", "G002", "G004", "UP007", "UP045"] [tool.ruff.lint.flake8-comprehensions] allow-dict-calls-with-keyword-arguments = true [tool.ruff.lint.isort] # We are not selecting "I" rules in ruff yet because the isort option # force_grid_wrap=2 is not currently supported: # https://github.com/astral-sh/ruff/issues/2601 case-sensitive = false combine-as-imports = true no-lines-before = ["local-folder"] order-by-type = false relative-imports-order = "closest-to-furthest" [tool.ruff.lint.pyupgrade] # Preserve types, even if a file imports `from __future__ import annotations`. keep-runtime-typing = true [tool.ruff.lint.per-file-ignores] # Don't check pyupgrade rules on tool scripts, which may use different Python versions "test/functional/tools/*" = ["UP"] "tools/*" = ["UP"] # Don't check pyupgrade rules on generated files "lib/galaxy/schema/bco/*" = ["UP"] "lib/galaxy/schema/drs/*" = ["UP"] "lib/tool_shed_client/schema/trs.py" = ["UP"] "lib/tool_shed_client/schema/trs_service_info.py" = ["UP"] # Don't check some pyupgrade rules on packages for Pulsar, which need to stay compatible with Python 3.8 "lib/galaxy/exceptions/*" = ["UP006", "UP007", "UP033", "UP035", "UP036", "UP045"] "lib/galaxy/job_metrics/*" = ["UP006", "UP007", "UP033", "UP035", "UP036", "UP045"] "lib/galaxy/objectstore/*" = ["UP006", "UP007", "UP033", "UP035", "UP036", "UP045"] "lib/galaxy/tool_util/*" = ["UP006", "UP007", "UP033", "UP035", "UP036", "UP045"] "lib/galaxy/tool_util_models/*" = ["UP006", "UP007", "UP033", "UP035", "UP036", "UP045"] "lib/galaxy/util/*" = ["UP006", "UP007", "UP033", "UP035", "UP036", "UP045"] "scripts/check_python.py" = ["UP006", "UP007", "UP010", "UP032", "UP033", "UP035", "UP036", "UP045"] "test/unit/job_metrics/*" = ["UP006", "UP007", "UP033", "UP035", "UP036", "UP045"] "test/unit/objectstore/*" = ["UP006", "UP007", "UP033", "UP035", "UP036", "UP045"] "test/unit/tool_util/*" = ["UP006", "UP007", "UP033", "UP035", "UP036", "UP045"] "test/unit/tool_util_models/*" = ["UP006", "UP007", "UP033", "UP035", "UP036", "UP045"] "test/unit/util/*" = ["UP006", "UP007", "UP033", "UP035", "UP036", "UP045"] [tool.uv] constraint-dependencies = [ "limits>=2.5.0", # prefer not downgrading this to upgrading packaging "mirakuru!=3.0.0", # https://github.com/dbfixtures/mirakuru/pull/949 "setuptools<82", # https://github.com/PyFilesystem/pyfilesystem2/issues/597 "scipy>=1.14.1; python_version>='3.10'", # Python 3.13 support ] default-groups = [] extra-index-url = ["https://wheels.galaxyproject.org/simple"] index-strategy = "unsafe-best-match" package = false