-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpyproject.toml
More file actions
88 lines (78 loc) · 3.57 KB
/
Copy pathpyproject.toml
File metadata and controls
88 lines (78 loc) · 3.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
[build-system]
requires = ["setuptools>=64", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "paramify-fetchers"
version = "0.3.1"
description = "Paramify evidence fetcher framework — discover, build, run, and inspect evidence fetchers."
readme = "README.md"
requires-python = ">=3.10"
license = { text = "GPL-3.0-only" }
classifiers = [
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
]
# Base runtime: everything the headless `paramify` CLI and the runner need.
# The TUI is an optional front-end — install its extra to use `paramify tui`.
dependencies = [
"python-dotenv",
"requests",
"pyyaml",
"jsonschema",
"typer>=0.12",
]
[project.optional-dependencies]
# textual 8.x is what the TUI is developed and tested against (tests/test_tui_keys.py).
# The old >=1.0,<2.0 range was a fiction — nobody ran it, and focus/Input behaviour
# (select_on_focus, blurred cursor styles) differs enough that the TUI is not the
# same app on 1.x.
tui = ["textual>=8,<9"]
checkov = ["checkov"]
dev = ["pytest", "ruff", "mypy"]
# Convenience: every front-end + dev tooling in one install.
all = ["textual>=8,<9", "checkov", "pytest", "ruff", "mypy"]
# The single entry point. `paramify` steers every front-end: the headless
# commands, plus `paramify tui`. (Renaming later is a one-line change here; add
# a second line to register an alias.)
[project.scripts]
paramify = "framework.cli:app"
# Supported install is editable/source: `pip install -e .` in the clone. Only
# the importable `framework` package's .py modules are shipped here. The data
# files (framework/schemas/*.json, framework/tui/styles/*.tcss) are NOT
# packaged: schemas resolve via the cwd-discovered repo root, while the TUI
# stylesheet is read relative to its own module file — both present in an
# editable/source tree. A pure built wheel therefore can't serve the TUI
# (missing data files) or run fetchers (they execute as subprocesses out of
# fetchers/, never shipped). If a non-editable wheel is ever needed, add
# [tool.setuptools.package-data] for those dirs.
[tool.setuptools.packages.find]
where = ["."]
include = ["framework*"]
# pytest: scope collection to the framework test suite. Per-fetcher tests/ dirs
# (e.g. the _template scaffold) are placeholders with no settled convention yet;
# without testpaths a bare `pytest` walks the whole tree and aborts at collection
# on duplicate test_fetcher.py basenames. importlib import-mode additionally makes
# duplicate basenames safe if a path outside tests/ is ever collected explicitly.
[tool.pytest.ini_options]
testpaths = ["tests"]
addopts = "--import-mode=importlib"
# Lint + import order for the framework's OWN code. Ported v0.x fetchers under
# fetchers/ are held to the schema contract (tests/test_contracts.py), not lint
# rules (CLAUDE.md); CI runs `ruff check framework/` so only that tree is gated.
[tool.ruff]
target-version = "py310"
extend-exclude = ["fetchers", ".venv"]
[tool.ruff.lint]
# Default lint set (pyflakes F + the E4/E7/E9 pycodestyle slice) plus import
# sorting (I). `ruff format` is intentionally NOT gated yet (would churn ~25
# files) — adopt as a separate pass.
select = ["E4", "E7", "E9", "F", "I"]
# Static typing gate for the core framework. The TUI subclasses textual's App and
# reads attributes mypy can't see on the base class — it needs its own typing
# pass, so it's suppressed here rather than gating CI. Third-party libs ship no
# stubs, hence ignore_missing_imports.
[tool.mypy]
python_version = "3.10"
ignore_missing_imports = true
[[tool.mypy.overrides]]
module = "framework.tui.*"
ignore_errors = true