-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpyproject.toml
More file actions
72 lines (64 loc) · 2.23 KB
/
Copy pathpyproject.toml
File metadata and controls
72 lines (64 loc) · 2.23 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
[build-system]
requires = ["uv_build>=0.11,<0.12"]
build-backend = "uv_build"
[project]
name = "lead-crawler"
version = "1.9.0"
description = "전 산업·전 기업 IR 연락처 추출 크롤러 + 검증 웹앱"
requires-python = ">=3.10"
dependencies = [
"pydantic>=2.6",
"pydantic-settings>=2.2",
"httpx>=0.27",
"tenacity>=8.2",
"structlog>=24.1",
"typer>=0.12",
"python-dotenv>=1.0",
"selectolax>=0.3",
"dnspython>=2.6",
"email-validator>=2.1",
"openpyxl>=3.1",
"sqlalchemy>=2.0",
"alembic>=1.13",
"rapidfuzz>=3.9",
]
[project.optional-dependencies]
# 무거운 런타임 의존성(헤드리스/OCR/DB드라이버/웹/AI)은 단계적으로 설치하는 퍼블리시 피처
# extras. dev 는 패키지 피처가 아니라 로컬 개발 전용이라 [dependency-groups] 로 분리한다(PEP 735).
crawl = ["playwright>=1.44"]
ocr = ["pytesseract>=0.3.10", "Pillow>=10.0"]
ai = [
"anthropic>=0.40",
"claude-agent-sdk>=0.1.0",
]
db = ["psycopg[binary]>=3.1"]
# WAF 우회 임베드(Track A) — 벤더링된 insane-search 엔진 런타임 의존(curl_cffi 격자 등).
bypass = ["curl_cffi>=0.6", "beautifulsoup4>=4.12", "pyyaml>=6.0"]
api = ["fastapi>=0.110", "uvicorn>=0.29"]
schedule = ["apscheduler>=3.10"]
[project.scripts]
leadcrawler = "leadcrawler.cli:app"
# 개발 전용 의존성(테스트·린트·타입체크) — 배포 wheel 에 안 실리는 PEP 735 그룹.
# `uv sync` 가 기본으로 설치한다(운영 설치는 `uv sync --no-dev`).
[dependency-groups]
dev = [
"pytest>=8.0",
"pytest-asyncio>=0.23",
"ruff>=0.4",
"mypy>=1.10",
]
[tool.uv]
# 재현성: 잠긴 uv.lock 과 어긋나면 실패시켜 조용한 드리프트를 막는다(CI 는 --locked 로 강제).
required-version = ">=0.11"
[tool.uv.build-backend]
# 플랫 레이아웃(src/ 없이 리포 루트에 leadcrawler/ 패키지) — uv_build 기본(src)에서 재지정.
module-name = "leadcrawler"
module-root = ""
[tool.ruff]
line-length = 100
target-version = "py310"
# 벤더링된 third-party 엔진(insane-search, MIT)은 무수정 핀 복사본 — 린트 제외(벤더 무결성).
extend-exclude = ["leadcrawler/sources/_bypass/engine"]
[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]