-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
124 lines (114 loc) · 3.1 KB
/
pyproject.toml
File metadata and controls
124 lines (114 loc) · 3.1 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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
[project]
name = "lab-manager"
version = "0.1.15"
description = "Lab inventory management with OCR document intake"
requires-python = ">=3.12"
dependencies = [
"fastapi[standard]>=0.115.0",
"sqlmodel>=0.0.22",
"sqlalchemy[asyncio]>=2.0.0",
"psycopg[binary]>=3.2.0",
"alembic>=1.14.0",
"sqladmin>=0.20.0",
"pydantic-settings>=2.6.0",
"meilisearch>=0.33.0",
"instructor>=1.7.0",
"google-genai>=1.0.0",
"pillow>=11.2.1",
"python-multipart>=0.0.18",
"python-ulid>=3.0.0",
"bcrypt>=4.0.0",
"itsdangerous>=2.2.0",
"structlog>=24.0.0",
"slowapi>=0.1.9",
"httpx>=0.28.0",
"litellm>=1.82.4,<=1.82.6", # SECURITY: 1.82.7+ compromised (supply chain attack 2026-03-24)
]
[project.scripts]
lab-populate-db = "lab_manager.cli.populate_db:main"
lab-index-search = "lab_manager.cli.index_meilisearch:main"
lab-set-password = "lab_manager.cli.set_staff_password:main"
lab-process-scans = "lab_manager.cli.process_scans:main"
lab-pipeline = "lab_manager.cli.pipeline_v2:main"
lab-batch-ingest = "lab_manager.cli.batch_ingest:main"
lab-extract-equipment = "lab_manager.cli.extract_equipment:main"
lab-benchmark = "lab_manager.cli.full_benchmark:main"
[build-system]
requires = ["setuptools>=75.0"]
build-backend = "setuptools.build_meta"
[tool.setuptools]
include-package-data = true
[tool.setuptools.packages.find]
where = ["src"]
[tool.setuptools.package-data]
lab_manager = [
"static/index.html",
"static/manifest.json",
"static/sw.js",
"static/js/*.js",
"static/icons/*",
"static/dist/**/*",
"alembic/versions/*.py",
"alembic/script.py.mako",
]
[dependency-groups]
dev = [
"pytest>=8.4.0",
"pytest-asyncio>=0.24.0",
"pytest-bdd>=8.0.0",
"pytest-cov>=6.0.0",
"httpx>=0.28.0",
"ruff>=0.11.0",
"mypy>=1.10.0",
"bandit>=1.8.0",
"testcontainers[postgres]>=4.0.0",
"pip-audit>=2.7.0",
]
[tool.uv]
constraint-dependencies = ["pyasn1>=0.6.3"]
[tool.mypy]
ignore_missing_imports = true
check_untyped_defs = false
disallow_untyped_defs = false
warn_return_any = false
warn_unused_ignores = false
warn_redundant_casts = false
# Disable noisy error codes from SQLAlchemy metaprogramming and untyped code.
# These will be re-enabled incrementally as the codebase is annotated.
disable_error_code = [
"arg-type",
"attr-defined",
"assignment",
"call-overload",
"dict-item",
"list-item",
"operator",
"union-attr",
"return-value",
"var-annotated",
"import-untyped",
]
[tool.pytest.ini_options]
markers = [
"e2e: End-to-end tests that exercise the full API stack",
"slow: Tests that take more than 1 second to run",
]
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
pythonpath = ["."]
testpaths = ["tests"]
python_files = ["test_*.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]
addopts = "-v --tb=short"
filterwarnings = [
"ignore::DeprecationWarning:sqlmodel.*",
"ignore::pytest.PytestUnknownMarkWarning",
]
[tool.commitizen]
name = "cz_conventional_commits"
version = "0.1.15"
version_files = ["pyproject.toml:version", "src/lab_manager/__init__.py:__version__"]
tag_format = "v$version"
changelog_file = "CHANGELOG.md"
update_changelog_on_bump = true