[tool.black] line-length = 120 target-version = ['py38'] include = '\.pyi?$' extend-exclude = ''' ^/( | packages | lib/tool_shed/test/test_data/repos )/ ''' [tool.darker] isort = true [tool.poetry] package-mode = false name = "galaxy" description = "Galaxy is an open, web-based platform for accessible, reproducible, and transparent computational research." authors = ["Galaxy Contributors"] license = "AFL-3.0" readme = "README.rst" homepage = "https://galaxyproject.org/" repository = "https://github.com/galaxyproject/galaxy/" documentation = "https://docs.galaxyproject.org/" [[tool.poetry.source]] name = "galaxyproject" url = "https://wheels.galaxyproject.org/simple" priority = "primary" [[tool.poetry.source]] name = "PyPI" priority = "primary" [tool.poetry.dependencies] a2wsgi = "*" aiofiles = "*" alembic = "*" apispec = "*" Babel = "*" bdbag = ">=1.6.3" Beaker = "*" bioblend = "*" bleach = "*" boltons = "*" boto = "*" bx-python = "*" celery = "*" Cheetah3 = "*" cloudauthz = "==0.6.0" cloudbridge = "*" circus = "*" cwltool = ">=3.1.20230624081518" # save time, minimum needed by cwl-1.0 branch conda-package-streaming = "*" dictobj = "*" dnspython = "*" docutils = "!=0.17, !=0.17.1" dparse = "*" edam-ontology = "*" fastapi-slim = ">=0.111.0" fs = "*" future = ">=1.0.0" # Python 3.12 support galaxy_sequence_utils = "*" graphene = "*" graphene-sqlalchemy = ">=3.0.0rc1" # need a beta release to be compat. with starlette plugin graphql-core = "*" gravity = ">=1.0.4" gunicorn = "*" gxformat2 = "*" h5grove = ">=1.2.1" h5py = "*" importlib-resources = { version = "*", python = "<3.9" } # for importlib.{abc.Traversable,resources.{files, Package}} isa-rwval = ">=0.10.10" jinja2 = "*" kombu = ">=5.3" # for importlib-metadata fix isal = "*" lagom = "*" Mako = "*" Markdown = "*" MarkupSafe = "*" Mercurial = "*" mrcfile = "*" msal = "*" nodeenv = "*" numpy = "*" 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.0.dev0" pycryptodome = "*" pydantic = {version = ">=2.7.4", extras = ["email"]} # https://github.com/pydantic/pydantic/pull/9639 PyJWT = "*" pykwalify = "*" pylibmagic = "*" pyparsing = "*" pysam = ">=0.21" # for Python 3.11 support on macOS python = ">=3.8,<3.13" # Keep maximum version strict to appease numpy and scipy python-dateutil = "*" python-magic = "*" python-multipart = "*" # required to support form parsing in FastAPI/Starlette PyYAML = "*" refgenconf = ">=0.12.0" regex = "*" requests = "*" rocrate = "*" Routes = "*" schema-salad = "!=8.3.20220721194857" # https://github.com/common-workflow-language/schema_salad/issues/575 social-auth-core = ">=4.5.0" # to drop dependency on abandoned python-jose sortedcontainers = "*" SQLAlchemy = "^2.0" sqlitedict = "*" sqlparse = "*" starlette = "*" starlette-context = "*" starlette-graphene3 = "*" svgwrite = "*" tifffile = "*" tuswsgi = "*" typing-extensions = "*" uvicorn = "!=0.28.0" # https://github.com/galaxyproject/galaxy/issues/17669 uvloop = "*" WebOb = "*" Whoosh = "*" zipstream-new = "*" s3fs = "*" [tool.poetry.group.dev.dependencies] ase = ">=3.18.1" axe-selenium-python = "*" black = "*" boto3 = "*" codespell = "*" cwltest = "*" darker = "*" fluent-logger = "*" galaxy-release-util = "*" httpx = "*" isort = "*" lxml = "!=4.2.2" markdown-it-reporter = "*" myst-parser = "*" onedatafilerestclient = "==21.2.5.1" pkce = "*" playwright = "*" 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 = "*" rucio-clients = {version = ">=33.6.0", python = ">=3.9"} # https://github.com/galaxyproject/galaxy/pull/17156 selenium = "*" urllib3 = "<2" # Necessary for poetry for resolve deps for Python 3.8+ seletools = "*" Sphinx = ">=4.0" # support docutils 0.17 sphinx-rtd-theme = "*" statsd = "*" testfixtures = "*" tuspy = "*" twill = ">=3.2.1" # https://github.com/twill-tools/twill/issues/18 watchdog = "*" Werkzeug = "*" [tool.poetry.group.typecheck.dependencies] mypy = "*" boto3-stubs = {version = "*", extras = ["s3"]} lxml-stubs = "*" pydantic = ">=2.7.4" # for pydantic.mypy plugin types-bleach = "*" types-boto = "*" types-contextvars = "*" types-dataclasses = "*" types-docutils = "*" types-Markdown = "*" types-paramiko = "*" types-pkg-resources = "*" types-python-dateutil = "*" types-PyYAML = "*" types-requests = "*" types-six = "*" [tool.ruff] target-version = "py38" exclude = [ "lib/tool_shed/test/test_data/repos" ] [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", "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 ignore = ["B008", "B9", "E402", "E501", "G001", "G002", "G004"] [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 support for all the isort # options we need is not complete, but these are the one currently implemented. combine-as-imports = true relative-imports-order = "closest-to-furthest" [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 some pyupgrade rules on generated files "lib/galaxy/schema/bco/*" = ["UP006", "UP007"] "lib/galaxy/schema/drs/*" = ["UP006", "UP007"] "lib/tool_shed_client/schema/trs.py" = ["UP006", "UP007"] "lib/tool_shed_client/schema/trs_service_info.py" = ["UP006", "UP007"]