mirror of
https://github.com/astral-sh/uv
synced 2026-01-20 21:10:10 -05:00
At a high level, this PR adds a smattering of new tests that effectively snapshot the output of `uv lock` for a selection of "ecosystem" projects. That is, real Python projects for which we expect `uv` to work well with. The main idea with these tests is to get a better idea of how changes in `uv` impact the lock files of real world projects. For example, we're hoping that these tests will help give us data for how #5733 differs from #5887. This has already revealed some bugs. Namely, re-running `uv lock` for a second time will produce a different lock file for some projects. So to prioritize getting the tests added, for those projects, we don't do the deterministic checking.
269 lines
8.6 KiB
TOML
269 lines
8.6 KiB
TOML
# Example configuration for Black.
|
|
|
|
# NOTE: you have to use single-quoted strings in TOML for regular expressions.
|
|
# It's the equivalent of r-strings in Python. Multiline strings are treated as
|
|
# verbose regular expressions by Black. Use [ ] to denote a significant space
|
|
# character.
|
|
|
|
[tool.black]
|
|
line-length = 88
|
|
target-version = ['py38']
|
|
include = '\.pyi?$'
|
|
extend-exclude = '''
|
|
/(
|
|
# The following are specific to Black, you probably don't want those.
|
|
tests/data/
|
|
| profiling/
|
|
| scripts/generate_schema.py # Uses match syntax
|
|
)
|
|
'''
|
|
# We use the unstable style for formatting Black itself. If you
|
|
# want bug-free formatting, you should keep this off. If you want
|
|
# stable formatting across releases, you should also keep `preview = true`
|
|
# (which is implied by this flag) off.
|
|
unstable = true
|
|
|
|
# Build system information and other project-specific configuration below.
|
|
# NOTE: You don't need this in your own Black configuration.
|
|
|
|
[build-system]
|
|
requires = ["hatchling>=1.20.0", "hatch-vcs", "hatch-fancy-pypi-readme"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[project]
|
|
name = "black"
|
|
description = "The uncompromising code formatter."
|
|
license = { text = "MIT" }
|
|
requires-python = ">=3.8"
|
|
authors = [
|
|
{ name = "Łukasz Langa", email = "lukasz@langa.pl" },
|
|
]
|
|
keywords = [
|
|
"automation",
|
|
"autopep8",
|
|
"formatter",
|
|
"gofmt",
|
|
"pyfmt",
|
|
"rustfmt",
|
|
"yapf",
|
|
]
|
|
classifiers = [
|
|
"Development Status :: 5 - Production/Stable",
|
|
"Environment :: Console",
|
|
"Intended Audience :: Developers",
|
|
"License :: OSI Approved :: MIT License",
|
|
"Operating System :: OS Independent",
|
|
"Programming Language :: Python",
|
|
"Programming Language :: Python :: 3 :: Only",
|
|
"Programming Language :: Python :: 3.8",
|
|
"Programming Language :: Python :: 3.9",
|
|
"Programming Language :: Python :: 3.10",
|
|
"Programming Language :: Python :: 3.11",
|
|
"Programming Language :: Python :: 3.12",
|
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
"Topic :: Software Development :: Quality Assurance",
|
|
]
|
|
dependencies = [
|
|
"click>=8.0.0",
|
|
"mypy_extensions>=0.4.3",
|
|
"packaging>=22.0",
|
|
"pathspec>=0.9.0",
|
|
"platformdirs>=2",
|
|
"tomli>=1.1.0; python_version < '3.11'",
|
|
"typing_extensions>=4.0.1; python_version < '3.11'",
|
|
]
|
|
dynamic = ["readme", "version"]
|
|
|
|
[project.optional-dependencies]
|
|
colorama = ["colorama>=0.4.3"]
|
|
uvloop = ["uvloop>=0.15.2"]
|
|
d = [
|
|
"aiohttp>=3.7.4; sys_platform != 'win32' or implementation_name != 'pypy'",
|
|
"aiohttp>=3.7.4, !=3.9.0; sys_platform == 'win32' and implementation_name == 'pypy'",
|
|
]
|
|
jupyter = [
|
|
"ipython>=7.8.0",
|
|
"tokenize-rt>=3.2.0",
|
|
]
|
|
|
|
[project.scripts]
|
|
black = "black:patched_main"
|
|
blackd = "blackd:patched_main [d]"
|
|
|
|
[project.entry-points."validate_pyproject.tool_schema"]
|
|
black = "black.schema:get_schema"
|
|
|
|
[project.urls]
|
|
Documentation = "https://black.readthedocs.io/"
|
|
Changelog = "https://github.com/psf/black/blob/main/CHANGES.md"
|
|
Repository = "https://github.com/psf/black"
|
|
Issues = "https://github.com/psf/black/issues"
|
|
|
|
[tool.hatch.metadata.hooks.fancy-pypi-readme]
|
|
content-type = "text/markdown"
|
|
fragments = [
|
|
{ path = "README.md" },
|
|
{ path = "CHANGES.md" },
|
|
]
|
|
|
|
[tool.hatch.version]
|
|
source = "vcs"
|
|
|
|
[tool.hatch.build.hooks.vcs]
|
|
version-file = "src/_black_version.py"
|
|
template = '''
|
|
version = "{version}"
|
|
'''
|
|
|
|
[tool.hatch.build.targets.sdist]
|
|
exclude = ["/profiling"]
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
only-include = ["src"]
|
|
sources = ["src"]
|
|
# Note that we change the behaviour of this flag below
|
|
macos-max-compat = true
|
|
|
|
[tool.hatch.build.targets.wheel.hooks.mypyc]
|
|
enable-by-default = false
|
|
dependencies = [
|
|
"hatch-mypyc>=0.16.0",
|
|
"mypy==1.7.1",
|
|
"click==8.1.3", # avoid https://github.com/pallets/click/issues/2558
|
|
]
|
|
require-runtime-dependencies = true
|
|
exclude = [
|
|
# There's no good reason for blackd to be compiled.
|
|
"/src/blackd",
|
|
# Not performance sensitive, so save bytes + compilation time:
|
|
"/src/blib2to3/__init__.py",
|
|
"/src/blib2to3/pgen2/__init__.py",
|
|
"/src/black/output.py",
|
|
"/src/black/concurrency.py",
|
|
"/src/black/files.py",
|
|
"/src/black/report.py",
|
|
# Breaks the test suite when compiled (and is also useless):
|
|
"/src/black/debug.py",
|
|
# Compiled modules can't be run directly and that's a problem here:
|
|
"/src/black/__main__.py",
|
|
]
|
|
mypy-args = ["--ignore-missing-imports"]
|
|
options = { debug_level = "0" }
|
|
|
|
[tool.cibuildwheel]
|
|
build-verbosity = 1
|
|
|
|
# So these are the environments we target:
|
|
# - Python: CPython 3.8+ only
|
|
# - Architecture (64-bit only): amd64 / x86_64, universal2, and arm64
|
|
# - OS: Linux (no musl), Windows, and macOS
|
|
build = "cp3*"
|
|
skip = ["*-manylinux_i686", "*-musllinux_*", "*-win32", "pp*"]
|
|
|
|
# This is the bare minimum needed to run the test suite. Pulling in the full
|
|
# test_requirements.txt would download a bunch of other packages not necessary
|
|
# here and would slow down the testing step a fair bit.
|
|
test-requires = ["pytest>=6.1.1"]
|
|
test-command = 'pytest {project} -k "not incompatible_with_mypyc"'
|
|
test-extras = ["d"," jupyter"]
|
|
# Skip trying to test arm64 builds on Intel Macs. (so cross-compilation doesn't
|
|
# straight up crash)
|
|
test-skip = ["*-macosx_arm64", "*-macosx_universal2:arm64"]
|
|
|
|
[tool.cibuildwheel.environment]
|
|
HATCH_BUILD_HOOKS_ENABLE = "1"
|
|
MYPYC_OPT_LEVEL = "3"
|
|
MYPYC_DEBUG_LEVEL = "0"
|
|
|
|
[tool.cibuildwheel.linux]
|
|
manylinux-x86_64-image = "manylinux_2_28"
|
|
before-build = [
|
|
"yum install -y clang gcc",
|
|
]
|
|
|
|
[tool.cibuildwheel.linux.environment]
|
|
HATCH_BUILD_HOOKS_ENABLE = "1"
|
|
MYPYC_OPT_LEVEL = "3"
|
|
MYPYC_DEBUG_LEVEL = "0"
|
|
|
|
# Black needs Clang to compile successfully on Linux.
|
|
CC = "clang"
|
|
|
|
[tool.cibuildwheel.macos]
|
|
build-frontend = { name = "build", args = ["--no-isolation"] }
|
|
# Unfortunately, hatch doesn't respect MACOSX_DEPLOYMENT_TARGET
|
|
before-build = [
|
|
"python -m pip install 'hatchling==1.20.0' hatch-vcs hatch-fancy-pypi-readme 'hatch-mypyc>=0.16.0' 'mypy==1.7.1' 'click==8.1.3'",
|
|
"""sed -i '' -e "600,700s/'10_16'/os.environ['MACOSX_DEPLOYMENT_TARGET'].replace('.', '_')/" $(python -c 'import hatchling.builders.wheel as h; print(h.__file__)') """,
|
|
]
|
|
|
|
[tool.isort]
|
|
atomic = true
|
|
profile = "black"
|
|
line_length = 88
|
|
skip_gitignore = true
|
|
skip_glob = ["tests/data", "profiling"]
|
|
known_first_party = ["black", "blib2to3", "blackd", "_black_version"]
|
|
|
|
[tool.pytest.ini_options]
|
|
# Option below requires `tests/optional.py`
|
|
addopts = "--strict-config --strict-markers"
|
|
optional-tests = [
|
|
"no_blackd: run when `d` extra NOT installed",
|
|
"no_jupyter: run when `jupyter` extra NOT installed",
|
|
]
|
|
markers = [
|
|
"incompatible_with_mypyc: run when testing mypyc compiled black"
|
|
]
|
|
xfail_strict = true
|
|
filterwarnings = [
|
|
"error",
|
|
# this is mitigated by a try/catch in https://github.com/psf/black/pull/2974/
|
|
# this ignore can be removed when support for aiohttp 3.7 is dropped.
|
|
'''ignore:Decorator `@unittest_run_loop` is no longer needed in aiohttp 3\.8\+:DeprecationWarning''',
|
|
# this is mitigated by a try/catch in https://github.com/psf/black/pull/3198/
|
|
# this ignore can be removed when support for aiohttp 3.x is dropped.
|
|
'''ignore:Middleware decorator is deprecated since 4\.0 and its behaviour is default, you can simply remove this decorator:DeprecationWarning''',
|
|
# aiohttp is using deprecated cgi modules - Safe to remove when fixed:
|
|
# https://github.com/aio-libs/aiohttp/issues/6905
|
|
'''ignore:'cgi' is deprecated and slated for removal in Python 3.13:DeprecationWarning''',
|
|
# Work around https://github.com/pytest-dev/pytest/issues/10977 for Python 3.12
|
|
'''ignore:(Attribute s|Attribute n|ast.Str|ast.Bytes|ast.NameConstant|ast.Num) is deprecated and will be removed in Python 3.14:DeprecationWarning''',
|
|
# Will be fixed with aiohttp 3.9.0
|
|
# https://github.com/aio-libs/aiohttp/pull/7302
|
|
"ignore:datetime.*utcfromtimestamp\\(\\) is deprecated and scheduled for removal:DeprecationWarning",
|
|
]
|
|
[tool.coverage.report]
|
|
omit = [
|
|
"src/blib2to3/*",
|
|
"tests/data/*",
|
|
"*/site-packages/*",
|
|
".tox/*"
|
|
]
|
|
[tool.coverage.run]
|
|
relative_files = true
|
|
branch = true
|
|
|
|
[tool.mypy]
|
|
# Specify the target platform details in config, so your developers are
|
|
# free to run mypy on Windows, Linux, or macOS and get consistent
|
|
# results.
|
|
python_version = "3.8"
|
|
mypy_path = "src"
|
|
strict = true
|
|
# Unreachable blocks have been an issue when compiling mypyc, let's try to avoid 'em in the first place.
|
|
warn_unreachable = true
|
|
implicit_reexport = true
|
|
show_error_codes = true
|
|
show_column_numbers = true
|
|
|
|
[[tool.mypy.overrides]]
|
|
module = ["pathspec.*", "IPython.*", "colorama.*", "tokenize_rt.*", "uvloop.*", "_black_version.*"]
|
|
ignore_missing_imports = true
|
|
|
|
# CI only checks src/, but in case users are running LSP or similar we explicitly ignore
|
|
# errors in test data files.
|
|
[[tool.mypy.overrides]]
|
|
module = ["tests.data.*"]
|
|
ignore_errors = true
|