Initial commit
This commit is contained in:
286
skills/uv/assets/pyproject_templates/advanced.toml
Normal file
286
skills/uv/assets/pyproject_templates/advanced.toml
Normal file
@@ -0,0 +1,286 @@
|
||||
# Advanced Python Project Configuration
|
||||
# Full-featured configuration with custom indexes, workspace, and advanced settings
|
||||
|
||||
[project]
|
||||
name = "advanced-project"
|
||||
version = "1.0.0"
|
||||
description = "Advanced Python project with custom configuration"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.11"
|
||||
authors = [{name = "Your Name", email = "your.email@example.com"}]
|
||||
license = {text = "MIT"}
|
||||
|
||||
dependencies = [
|
||||
"fastapi>=0.115.0",
|
||||
"torch", # Will be sourced from custom index
|
||||
"pydantic>=2.5.0",
|
||||
]
|
||||
|
||||
# Development dependencies using PEP 735 dependency groups
|
||||
[dependency-groups]
|
||||
dev = [
|
||||
"pytest>=8.4.2",
|
||||
"pytest-cov>=6.0.0",
|
||||
"pytest-mock>=3.15.1",
|
||||
"ruff>=0.13.3",
|
||||
"pyright>=1.1.406",
|
||||
"mypy>=1.18.2",
|
||||
"pre-commit>=4.3.0",
|
||||
]
|
||||
test = [
|
||||
"pytest-cov>=6.0.0",
|
||||
"pytest-asyncio>=0.21.0",
|
||||
"hypothesis>=6.0.0",
|
||||
]
|
||||
docs = [
|
||||
"sphinx>=7.0",
|
||||
"sphinx-rtd-theme>=1.3.0",
|
||||
]
|
||||
|
||||
[build-system]
|
||||
requires = ["hatchling"]
|
||||
build-backend = "hatchling.build"
|
||||
|
||||
[tool.uv]
|
||||
# Core settings
|
||||
managed = true
|
||||
package = true
|
||||
default-groups = ["dev"]
|
||||
|
||||
# Resolution strategy
|
||||
resolution = "highest" # highest/lowest/lowest-direct
|
||||
fork-strategy = "requires-python"
|
||||
index-strategy = "first-index"
|
||||
|
||||
# Environment restrictions (only resolve for these platforms)
|
||||
environments = [
|
||||
"sys_platform == 'darwin'",
|
||||
"sys_platform == 'linux'",
|
||||
]
|
||||
|
||||
# Require support for specific platforms
|
||||
required-environments = [
|
||||
"sys_platform == 'linux' and platform_machine == 'x86_64'",
|
||||
]
|
||||
|
||||
# Dependency version management
|
||||
constraint-dependencies = [
|
||||
"grpcio<1.65", # Constraint: don't allow grpcio >= 1.65
|
||||
]
|
||||
override-dependencies = [
|
||||
"werkzeug==2.3.0", # Override: always use this exact version
|
||||
]
|
||||
build-constraint-dependencies = [
|
||||
"setuptools==60.0.0", # Constraint for build dependencies
|
||||
]
|
||||
|
||||
# Build configuration
|
||||
compile-bytecode = true
|
||||
no-build-isolation-package = ["flash-attn", "deepspeed"]
|
||||
|
||||
# Cache configuration
|
||||
cache-dir = "./.uv_cache"
|
||||
cache-keys = [
|
||||
{ file = "pyproject.toml" },
|
||||
{ file = "requirements.txt" },
|
||||
{ git = { commit = true } },
|
||||
]
|
||||
|
||||
# Network configuration
|
||||
concurrent-downloads = 20
|
||||
concurrent-builds = 8
|
||||
|
||||
# Python management
|
||||
python-preference = "managed"
|
||||
python-downloads = "automatic"
|
||||
|
||||
# Security
|
||||
keyring-provider = "subprocess"
|
||||
allow-insecure-host = []
|
||||
|
||||
# Preview features
|
||||
preview = false
|
||||
|
||||
# Extra build dependencies (for packages without proper metadata)
|
||||
[tool.uv.extra-build-dependencies]
|
||||
flash-attn = ["torch", "setuptools", "ninja"]
|
||||
deepspeed = [{ requirement = "torch", match-runtime = true }]
|
||||
|
||||
# Build environment variables
|
||||
[tool.uv.extra-build-variables]
|
||||
flash-attn = { FLASH_ATTENTION_SKIP_CUDA_BUILD = "TRUE" }
|
||||
opencv-python = { CMAKE_ARGS = "-DWITH_CUDA=ON" }
|
||||
|
||||
# Custom package sources
|
||||
[tool.uv.sources]
|
||||
# PyTorch from custom index
|
||||
torch = { index = "pytorch-cu121" }
|
||||
|
||||
# Internal workspace dependency
|
||||
# internal-lib = { workspace = true }
|
||||
|
||||
# Git source
|
||||
# httpx = { git = "https://github.com/encode/httpx", tag = "0.27.0" }
|
||||
|
||||
# Local path (development)
|
||||
# local-pkg = { path = "../local-pkg", editable = true }
|
||||
|
||||
# Conditional sources (platform-specific)
|
||||
# torch = [
|
||||
# { index = "pytorch-cu118", marker = "sys_platform == 'darwin'" },
|
||||
# { index = "pytorch-cu121", marker = "sys_platform == 'linux'" },
|
||||
# ]
|
||||
|
||||
# Custom package indexes
|
||||
[[tool.uv.index]]
|
||||
name = "pytorch-cu121"
|
||||
url = "https://download.pytorch.org/whl/cu121"
|
||||
explicit = true # Only use for explicitly pinned packages
|
||||
default = false # Don't replace PyPI as default
|
||||
|
||||
[[tool.uv.index]]
|
||||
name = "private-registry"
|
||||
url = "https://packages.example.com/simple"
|
||||
explicit = true
|
||||
authenticate = "always" # Always send authentication
|
||||
|
||||
# Workspace configuration (for monorepos)
|
||||
[tool.uv.workspace]
|
||||
members = ["packages/*", "apps/*"]
|
||||
exclude = ["packages/deprecated"]
|
||||
|
||||
# Conflict resolution (mutually exclusive extras)
|
||||
[[tool.uv.conflicts]]
|
||||
extra = ["cuda", "rocm"]
|
||||
|
||||
[[tool.uv.conflicts]]
|
||||
group = ["prod", "dev"]
|
||||
|
||||
# pip-specific settings (only for uv pip commands)
|
||||
[tool.uv.pip]
|
||||
compile-bytecode = true
|
||||
strict = true
|
||||
generate-hashes = false
|
||||
annotation-style = "line"
|
||||
extra = ["dev"]
|
||||
universal = false
|
||||
no-strip-markers = false
|
||||
|
||||
# Ruff configuration
|
||||
[tool.ruff]
|
||||
target-version = "py311"
|
||||
line-length = 120
|
||||
fix = true
|
||||
preview = true
|
||||
|
||||
[tool.ruff.format]
|
||||
docstring-code-format = true
|
||||
quote-style = "double"
|
||||
line-ending = "lf"
|
||||
skip-magic-trailing-comma = true
|
||||
preview = true
|
||||
|
||||
[tool.ruff.lint]
|
||||
extend-select = [
|
||||
"E", # pycodestyle errors
|
||||
"W", # pycodestyle warnings
|
||||
"F", # pyflakes
|
||||
"I", # isort
|
||||
"UP", # pyupgrade
|
||||
"YTT", # flake8-2020
|
||||
"S", # flake8-bandit
|
||||
"B", # flake8-bugbear
|
||||
"A", # flake8-builtins
|
||||
"C4", # flake8-comprehensions
|
||||
"T10", # flake8-debugger
|
||||
"SIM", # flake8-simplify
|
||||
"C90", # mccabe
|
||||
"PGH", # pygrep-hooks
|
||||
"RUF", # ruff-specific
|
||||
"TRY", # tryceratops
|
||||
"DOC", # pydocstyle
|
||||
"D", # pydocstyle
|
||||
]
|
||||
|
||||
ignore = [
|
||||
"COM812", # Missing trailing comma
|
||||
"COM819", # Missing trailing comma
|
||||
"D107", # Missing docstring in __init__
|
||||
"D415", # First line should end with a period
|
||||
"E111", # Indentation is not a multiple of four
|
||||
"E117", # Over-indented for visual indent
|
||||
"E203", # whitespace before ':'
|
||||
"E402", # Module level import not at top
|
||||
"E501", # Line length exceeds maximum limit
|
||||
"ISC001", # isort configuration is missing
|
||||
"ISC002", # isort configuration is missing
|
||||
"Q000", # Remove bad quotes
|
||||
"Q001", # Remove bad quotes
|
||||
"Q002", # Remove bad quotes
|
||||
"Q003", # Remove bad quotes
|
||||
"TRY003", # Exception message should not be too long
|
||||
"S404", # module is possibly insecure
|
||||
"S603", # subprocess-without-shell-equals-true
|
||||
"S606", # start-process-with-no-shell
|
||||
"DOC501", # Missing raises section
|
||||
]
|
||||
|
||||
unfixable = ["F401", "S404", "S603", "S606", "DOC501"]
|
||||
|
||||
[tool.ruff.lint.pycodestyle]
|
||||
max-line-length = 120
|
||||
|
||||
[tool.ruff.lint.isort]
|
||||
combine-as-imports = true
|
||||
split-on-trailing-comma = false
|
||||
force-single-line = false
|
||||
force-wrap-aliases = false
|
||||
|
||||
[tool.ruff.lint.flake8-quotes]
|
||||
docstring-quotes = "double"
|
||||
|
||||
[tool.ruff.lint.pydocstyle]
|
||||
convention = "google"
|
||||
|
||||
[tool.ruff.lint.mccabe]
|
||||
max-complexity = 10
|
||||
|
||||
[tool.ruff.lint.per-file-ignores]
|
||||
"**/tests/*" = ["S101", "S603", "S607", "D102", "D200", "D100"]
|
||||
"**/test_*.py" = ["S101", "S603", "S607", "D102", "D200", "D100"]
|
||||
|
||||
# Mypy configuration
|
||||
[tool.mypy]
|
||||
python_version = "3.11"
|
||||
strict = true
|
||||
extra_checks = true
|
||||
warn_unused_configs = true
|
||||
warn_redundant_casts = true
|
||||
warn_unused_ignores = true
|
||||
ignore_missing_imports = true
|
||||
show_error_codes = true
|
||||
pretty = true
|
||||
disable_error_code = "call-arg,arg-type"
|
||||
|
||||
# Pytest configuration
|
||||
[tool.pytest.ini_options]
|
||||
addopts = [
|
||||
"--cov=advanced_project",
|
||||
"--cov-report=term-missing",
|
||||
"-v",
|
||||
]
|
||||
testpaths = ["tests"]
|
||||
python_files = ["test_*.py"]
|
||||
python_classes = ["Test*"]
|
||||
python_functions = ["test_*"]
|
||||
markers = [
|
||||
"slow: tests that take significant time to run",
|
||||
"integration: integration tests",
|
||||
]
|
||||
|
||||
[tool.coverage.run]
|
||||
omit = ["*/tests/*"]
|
||||
|
||||
[tool.coverage.report]
|
||||
show_missing = true
|
||||
fail_under = 70
|
||||
Reference in New Issue
Block a user