|  | 
| 1 |  | -[build-system] | 
| 2 |  | -requires = ["mina-build>=0.2.5"] | 
| 3 |  | -build-backend = "pdm.backend" | 
| 4 |  | - | 
| 5 |  | -#[build-system] | 
| 6 |  | -#requires = ["pdm-backend", "pdm-polylith-workspace"] | 
| 7 |  | -#build-backend = "pdm.backend" | 
| 8 |  | - | 
| 9 | 1 | [project] | 
| 10 |  | -authors = [ | 
| 11 |  | -    { name = "{{author_name}}", email = "{{author_email}}" }, | 
| 12 |  | -] | 
| 13 |  | -classifiers = [ | 
| 14 |  | -  "Development Status :: 3 - Alpha", | 
| 15 |  | -  "License :: OSI Approved :: MIT License", | 
| 16 |  | -  "Operating System :: OS Independent", | 
| 17 |  | -  "Programming Language :: Python :: 3.10", | 
| 18 |  | -  "Programming Language :: Python :: 3.11", | 
| 19 |  | -  "Programming Language :: Python :: 3.12", | 
| 20 |  | -  "Programming Language :: Python :: 3.8", | 
| 21 |  | -  "Programming Language :: Python :: 3.9", | 
| 22 |  | -] | 
| 23 |  | -description = "{{project_description}}" | 
| 24 |  | -dynamic = [ | 
| 25 |  | -  "version", | 
| 26 |  | -] | 
| 27 |  | -keywords = [ | 
| 28 |  | -  "copier-template", | 
| 29 |  | -  "full-development-lifecycle", | 
| 30 |  | -  "project-template", | 
| 31 |  | -  "scaffold", | 
| 32 |  | -] | 
| 33 |  | -license = {text = "UNDEFINED"} | 
| 34 | 2 | name = "{{project_name}}" | 
|  | 3 | +version = "0.1.0" | 
|  | 4 | +description = "{{project_description}}" | 
| 35 | 5 | readme = "README.md" | 
| 36 |  | -requires-python = ">=3.9" | 
| 37 |  | -dependencies = [ | 
| 38 |  | -    #   "pydantic-settings", | 
| 39 |  | -    #   "typer[all]", | 
| 40 |  | -    "dynaconf>=3.2.5", | 
| 41 |  | -    "pydantic>=2.7.4", | 
| 42 |  | -] | 
| 43 | 6 | 
 | 
| 44 |  | -[tool.pdm.scripts] | 
| 45 |  | -lint = "ruff ." | 
| 46 |  | -fmt = "ruff format . --check" | 
| 47 |  | -test = "pytest " | 
| 48 |  | -docs = "mkdocs serve" | 
| 49 |  | -docs-deploy ="mkdocs gh-deploy --force" | 
| 50 |  | -cleanup = "sh scripts/cleanup.sh" | 
| 51 |  | - | 
| 52 |  | -[project.urls] | 
| 53 |  | -issue = "https://github.com/{{organization_name}}/{{project_name}}/issues" | 
| 54 |  | -repository = "https://github.com/{{organization_name}}/{{project_name}}" | 
| 55 |  | - | 
| 56 |  | -[tool.pdm] | 
| 57 |  | -distribution = true | 
| 58 |  | - | 
| 59 |  | -[tool.pdm.dev-dependencies] | 
| 60 |  | -docs = [ | 
| 61 |  | -    "mkdocs-material>=9.5.27", | 
| 62 |  | -    "mkdocs>=1.6.0", | 
| 63 |  | -] | 
|  | 7 | +requires-python = ">=3.10" | 
|  | 8 | +dependencies = [] | 
| 64 | 9 | 
 | 
| 65 |  | -lint = [ | 
| 66 |  | -    "ruff>=0.4.9" | 
| 67 |  | -] | 
| 68 |  | -test = [ | 
| 69 |  | -    "pytest-cov>=5.0.0", | 
| 70 |  | -] | 
|  | 10 | +[project.scripts] | 
|  | 11 | +{{project_name}} = "{{project_name}}:main" | 
|  | 12 | +cleanup = "qpyci.commands:clean" | 
|  | 13 | +cov = "ci:coverage" | 
|  | 14 | +badge = "qpyci.commands:generate_badge" | 
|  | 15 | +check_format = "ci:check_format" | 
|  | 16 | +ci = "ci:ci" | 
| 71 | 17 | 
 | 
|  | 18 | +[build-system] | 
|  | 19 | +requires = ["hatchling"] | 
|  | 20 | +build-backend = "hatchling.build" | 
| 72 | 21 | 
 | 
| 73 |  | -[tool.pytest.ini_options] | 
| 74 |  | -addopts = "-l -s --durations=0" | 
| 75 |  | -log_cli = true | 
| 76 |  | -log_cli_level = "info" | 
| 77 |  | -log_date_format = "%Y-%m-%d %H:%M:%S" | 
| 78 |  | -log_format = "%(asctime)s %(levelname)s %(message)s" | 
| 79 |  | -minversion = "6.0" | 
| 80 |  | -cov="qpytpl" | 
| 81 |  | -cov-report="html" | 
| 82 | 22 | 
 | 
| 83 |  | -[tool.coverage] | 
| 84 | 23 | 
 | 
| 85 |  | -[tool.coverage.report] | 
| 86 |  | -fail_under = 100 | 
|  | 24 | +[tool.hatch.build.targets.wheel.force-include] | 
|  | 25 | +"ci.py" = "ci.py" | 
| 87 | 26 | 
 | 
| 88 |  | -[tool.coverage.run] | 
| 89 |  | -source = [ | 
| 90 |  | -  "src/qpytpl", | 
| 91 |  | -] | 
|  | 27 | +[tool.uv] | 
|  | 28 | +default-groups = ["dev"] | 
| 92 | 29 | 
 | 
| 93 |  | -[tool.mypy] | 
| 94 |  | -check_untyped_defs = true | 
| 95 |  | -disallow_any_unimported = true | 
| 96 |  | -disallow_untyped_defs = true | 
| 97 |  | -enable_error_code = [ | 
| 98 |  | -  "ignore-without-code", | 
| 99 |  | -] | 
| 100 |  | -exclude = [ | 
| 101 |  | -  "build", | 
| 102 |  | -  "template", | 
| 103 |  | -] | 
| 104 |  | -no_implicit_optional = true | 
| 105 |  | -show_error_codes = true | 
| 106 |  | -warn_return_any = true | 
| 107 |  | -warn_unused_ignores = true | 
|  | 30 | +[tool.uv.sources] | 
|  | 31 | +qpyci = { git = "https://github.com/fluent-qa/qpyci.git", rev = "main" } | 
| 108 | 32 | 
 | 
|  | 33 | +[tool.hatch.build.targets.wheel] | 
|  | 34 | +packages = ["src/qpyapp"] | 
| 109 | 35 | 
 | 
| 110 |  | -[tool.ruff] | 
| 111 |  | -extend-exclude = [ | 
| 112 |  | -  "template", | 
|  | 36 | +[tool.pyright] | 
|  | 37 | +typeCheckingMode = "strict" | 
|  | 38 | +reportUnnecessaryTypeIgnoreComment = true | 
|  | 39 | +reportMissingTypeStubs = false | 
|  | 40 | +include = ["src", "tests"] | 
|  | 41 | +venvPath = ".venv" | 
|  | 42 | +# see https://github.com/microsoft/pyright/issues/7771 - we don't want to error on decorated functions in tests | 
|  | 43 | +# which are not otherwise used | 
|  | 44 | +executionEnvironments = [{ root = "tests", reportUnusedFunction = false }] | 
|  | 45 | + | 
|  | 46 | + | 
|  | 47 | +[dependency-groups] | 
|  | 48 | +lint = ["ruff>=0.8.3"] | 
|  | 49 | +dev = [ | 
|  | 50 | +    "allure-pytest>=2.13.5", | 
|  | 51 | +    "pytest-cov>=6.0.0", | 
|  | 52 | +    "pytest>=8.3.4", | 
|  | 53 | +    "coverage-badge>=1.1.2", | 
| 113 | 54 | ] | 
| 114 |  | -fix = true | 
| 115 |  | -src = ["src"] | 
|  | 55 | + | 
|  | 56 | +[tool.ruff] | 
|  | 57 | +line-length = 120 | 
|  | 58 | +target-version = "py39" | 
|  | 59 | +include = ["qpyapp/**/*.py", "tests/**/*.py", "docs/**/*.py"] | 
| 116 | 60 | 
 | 
| 117 | 61 | [tool.ruff.lint] | 
| 118 |  | -select = [ | 
| 119 |  | -  "B", # flake8-bugbear | 
| 120 |  | -  "D", # pydocstyle | 
| 121 |  | -  "E", # pycodestyle error | 
| 122 |  | -  "F", # Pyflakes | 
| 123 |  | -  "I", # isort | 
| 124 |  | -  "RUF100", # Unused noqa directive | 
| 125 |  | -  "S", # flake8-bandit | 
| 126 |  | -  "SIM", # flake8-simplify | 
| 127 |  | -  "UP", # pyupgrade | 
| 128 |  | -  "W", # pycodestyle warning | 
|  | 62 | +extend-select = ["Q", "RUF100", "C90", "UP", "I", "D"] | 
|  | 63 | +flake8-quotes = { inline-quotes = "single", multiline-quotes = "double" } | 
|  | 64 | +isort = { combine-as-imports = true, known-first-party = ["qpyconf"] } | 
|  | 65 | +mccabe = { max-complexity = 15 } | 
|  | 66 | +ignore = [ | 
|  | 67 | +    "D100", # ignore missing docstring in module | 
|  | 68 | +    "D102", # ignore missing docstring in public method | 
|  | 69 | +    "D104", # ignore missing docstring in public package | 
|  | 70 | +    "D105", # ignore missing docstring in magic methods | 
|  | 71 | +    "D107", # ignore missing docstring in __init__ methods | 
| 129 | 72 | ] | 
| 130 | 73 | 
 | 
| 131 |  | -[tool.ruff.lint.per-file-ignores] | 
| 132 |  | -"tests/*" = ["S101"] | 
| 133 |  | - | 
| 134 | 74 | [tool.ruff.lint.pydocstyle] | 
| 135 | 75 | convention = "google" | 
| 136 | 76 | 
 | 
|  | 77 | +[tool.ruff.format] | 
|  | 78 | +# don't format python in docstrings, pytest-examples takes care of it | 
|  | 79 | +docstring-code-format = false | 
|  | 80 | +quote-style = "single" | 
| 137 | 81 | 
 | 
| 138 |  | -[tool.tomlsort] | 
| 139 |  | -all = true | 
| 140 |  | -in_place = true | 
| 141 |  | -trailing_comma_inline_array = true | 
|  | 82 | +[tool.ruff.lint.per-file-ignores] | 
|  | 83 | +"tests/**/*.py" = ["D"] | 
|  | 84 | +"docs/**/*.py" = ["D"] | 
|  | 85 | +"src/qpyconf/**/*.py" = ["D101", "D103"] | 
| 142 | 86 | 
 | 
| 143 |  | -[[tool.pdm.source]] | 
| 144 |  | -name = "mirrors" | 
| 145 |  | -url = "https://pypi.tuna.tsinghua.edu.cn/simple/" | 
| 146 | 87 | 
 | 
| 147 |  | -[[tool.pdm.source]] | 
| 148 |  | -name = "douban" | 
| 149 |  | -url = "https://pypi.doubanio.com/simple/" | 
|  | 88 | +[tool.pytest.ini_options] | 
|  | 89 | +testpaths = ["tests"] | 
|  | 90 | +pythonpath = ["src"] | 
|  | 91 | +addopts = [ | 
|  | 92 | +    "--alluredir", | 
|  | 93 | +    "allure-results", | 
|  | 94 | +    "--clean-alluredir", | 
|  | 95 | +    "-l", | 
|  | 96 | +    "-s", | 
|  | 97 | +    "--durations", | 
|  | 98 | +    "0", | 
|  | 99 | +    "--cov", | 
|  | 100 | +    "qpyconf", | 
|  | 101 | +] | 
|  | 102 | +log_cli = true | 
|  | 103 | +log_cli_level = "info" | 
|  | 104 | +log_date_format = "%Y-%m-%d %H:%M:%S" | 
|  | 105 | +log_format = "%(asctime)s %(levelname)s %(message)s" | 
|  | 106 | +minversion = "6.0" | 
0 commit comments