chore: 저장소 구조 정리 및 문서화, 첫 커밋
- src/dist 산출물 분리 원칙 정리(.gitignore, .gitattributes) - 루트 및 주요 폴더(config/scripts/prompts/tests/src, 런타임 폴더 5종)에 안내용 README.md 추가 - CHANGELOG.md, LICENSE, docs/ops/05-release-and-versioning.md 추가 - docs/README.md 문서 지도 갱신
This commit is contained in:
commit
56a6e2da93
159 changed files with 145825 additions and 0 deletions
64
pyproject.toml
Normal file
64
pyproject.toml
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
# =============================================================================
|
||||
# pyproject.toml — 패키지 메타 · 의존성 · 진입점 · 테스트 설정
|
||||
# =============================================================================
|
||||
# 런타임 의존성은 3개로 고정한다(아키텍처 §8). 의존성 하나는 곧
|
||||
# "6개월 뒤 pip install 이 실패할 확률 하나" 다.
|
||||
# ▸ pandas · openpyxl · PyYAML · requests · pydantic 은 명시적으로 기각했다.
|
||||
# ▸ 설정(tomllib) · DB(sqlite3) · GUI(tkinter) · 암호화(ctypes+DPAPI) ·
|
||||
# 락(msvcrt) · CLI(argparse) 는 전부 표준 라이브러리로 해결한다.
|
||||
# =============================================================================
|
||||
|
||||
[build-system]
|
||||
requires = ["setuptools>=68"]
|
||||
build-backend = "setuptools.build_meta"
|
||||
|
||||
[project]
|
||||
name = "dmf-crawler"
|
||||
version = "0.1.0"
|
||||
description = "식약처 원료의약품등록(DMF) 현황을 매일 수집해 변경을 탐지하고 엑셀 리포트를 만드는 무인 도구"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.11"
|
||||
license = { text = "Proprietary" }
|
||||
keywords = ["dmf", "mfds", "pharma", "crawler", "xlsx", "korea"]
|
||||
classifiers = [
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Programming Language :: Python :: 3.12",
|
||||
"Programming Language :: Python :: 3.13",
|
||||
"Operating System :: Microsoft :: Windows :: Windows 11",
|
||||
"Natural Language :: Korean",
|
||||
"Private :: Do Not Upload",
|
||||
]
|
||||
|
||||
# 런타임 의존성 3개. 상한을 고정해 상위 버전의 파괴적 변경으로부터 무인 실행을 지킨다.
|
||||
dependencies = [
|
||||
"httpx>=0.27,<1.0", # 유일한 HTTP 창구. 연결/읽기 타임아웃 분리가 가능하다
|
||||
"XlsxWriter>=3.2,<4.0", # xlsx 생성 전담. 스파크라인·수식 캐시값은 이 라이브러리에만 있다
|
||||
"jsonschema>=4.21,<5.0", # agy 응답 자체 검증. 손으로 짜면 반드시 틀리는 부분
|
||||
]
|
||||
|
||||
[project.optional-dependencies]
|
||||
dev = [
|
||||
"pytest>=8.0,<9.0",
|
||||
]
|
||||
|
||||
[project.scripts]
|
||||
dmf = "dmf_crawler.cli:main"
|
||||
|
||||
[tool.setuptools.packages.find]
|
||||
where = ["src"]
|
||||
|
||||
[tool.setuptools.package-data]
|
||||
# 마이그레이션 SQL 은 패키지 안에 있으므로 함께 배포한다.
|
||||
"dmf_crawler.storage" = ["migrations/*.sql"]
|
||||
|
||||
[tool.pytest.ini_options]
|
||||
minversion = "8.0"
|
||||
testpaths = ["tests"]
|
||||
pythonpath = ["src"]
|
||||
addopts = "-ra --strict-markers --strict-config"
|
||||
filterwarnings = ["error::DeprecationWarning"]
|
||||
markers = [
|
||||
"slow: 실행이 오래 걸리는 테스트",
|
||||
"windows: Windows 에서만 의미가 있는 테스트(DPAPI·msvcrt·작업 스케줄러)",
|
||||
"network: 실제 네트워크가 필요한 테스트. 기본 실행에서는 제외한다",
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue