Skip to content

v0.0.4 — Phase 1 refactor (_Action + Color/UNSET)

Choose a tag to compare

@JunDamin JunDamin released this 15 Apr 04:31
· 83 commits to main since this release

🔧 Phase 1 리팩토링 릴리즈

리팩토링 계획 에 따른 첫 번째 릴리즈. P0 긴급 버그 수정.

P0-1: _Action 문서 바인딩 버그 수정 🔴

증상: _Action.__init__ 에서 CreateAction()한 번만 호출해 캐싱 → 초기 활성 문서에 고정 → 이후 다른 문서 전환 시에도 원본 문서에 쓰기 발생

수정: act, pset@property 로 재설계, 활성 문서 ID 별 lazy-cache

# Before: 버그 — 모두 doc1 에 쓰임
doc2.activate()
app.actions.CharShape.run()  # ⚠️ doc1 에 적용

# After: 정상 동작
doc2.activate()
app.actions.CharShape.run()  # ✅ doc2 에 적용

P0-2: Color 래퍼 + UNSET 센티넬 🟠

증상: shade_color="#FFFFFF" 가 "제거" 인지 "흰색 shade 적용" 인지 모호 → 의도치 않은 shade 누수

수정: 새 타입 2개 도입

from hwpapi.parametersets import Color, UNSET

# 명시적 의미론
prop = UNSET    # 변경 없음 (no-op)
prop = None     # 필드 제거
prop = "#FF0000" / Color / int   # 정규화 후 저장

# 28개 색상 필드 자동 변환 (TextColor, ShadeColor, Border*Color 등)

P1-1 부분 진행

  • hwpapi/core/app.py (2,322줄) → Document/Documents 를 document.py 로 분리 (1,930줄로 감소)
  • 남은 app.py 분할은 다음 릴리즈에서 진행

기타

  • 21개 새 단위 테스트 (test_color_semantics.py) → 총 1,194 unit tests 통과
  • CHANGELOG.md 도입
  • API 레퍼런스 재생성 (277K chars, 6,703줄)

호환성

  • 100% backward compatible — 모든 기존 코드가 수정 없이 동작
  • 신규 객체 Color, UNSET 는 opt-in

Full changelog

https://github.com/JunDamin/hwpapi/blob/main/CHANGELOG.md

전체 변경: v0.0.3...v0.0.4