A lightweight Python library for handling subtitle files
Project description
Python Package 개발 가이드: subtitle-utils
1. 프로젝트 초기화
1.1 디렉토리 구조 설계
현대적인 Python 패키지는 다음과 같은 구조를 권장합니다:
subtitle_lib_v0.1/
├── src/ # 소스 코드 분리 (src layout)
│ └── subtitle_utils/ # 실제 패키지
│ ├── __init__.py # 패키지 초기화
│ ├── srt_handler.py # 핵심 기능 모듈
│ └── exceptions.py # 커스텀 예외
├── tests/ # 테스트 코드
│ ├── test_srt_handler.py # 단위 테스트
│ └── test_data/ # 테스트 데이터
├── pyproject.toml # 현대적 패키징 설정
├── requirements.txt # 의존성 관리
├── README.md # 프로젝트 문서
└── LICENSE # 라이선스
설계 원칙:
- src layout: 패키지와 테스트 코드 분리로 import 오류 방지
- 단일 책임: 각 모듈은 하나의 명확한 역할
- 확장성: 향후 webvtt, smi 지원을 위한 구조
1.2 pyproject.toml 설정
[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"
핵심 포인트:
- PEP 518 표준 준수
- setuptools 기반 빌드 시스템
- wheel 형식 지원
2. 의존성 관리
2.1 런타임 의존성
dependencies = [
"srt>=3.5.0",
]
선택 이유:
srtvspysrt: 더 현대적이고 가벼운 라이브러리- 시간 처리에 표준
datetime.timedelta사용 - 파싱/생성 성능 우수
2.2 개발 의존성
[project.optional-dependencies]
dev = [
"pytest>=7.0.0", # 테스트 프레임워크
"pytest-cov>=4.0.0", # 커버리지 측정
"black>=22.0.0", # 코드 포매터
"flake8>=5.0.0", # 린터
"mypy>=1.0.0", # 타입 체커
]
3. 핵심 모듈 설계
3.1 예외 처리 계층구조
SubtitleError (기본)
├── SubtitleParseError (파싱 오류)
└── SubtitleFileError (파일 I/O 오류)
설계 원칙:
- 명확한 오류 분류
- 계층적 예외 처리
- 사용자 친화적 메시지
3.2 SRTHandler 클래스 설계
주요 기능:
- 파일 로드/저장
- 자막 항목 조작
- 시간 형식 변환
- Python 매직 메서드 지원
API 설계 원칙:
- 직관적인 메서드명
- 일관된 에러 처리
- 타입 힌트 완전 지원
4. 테스트 전략
4.1 테스트 구조
class TestSRTHandler:
@pytest.fixture
def sample_srt_content(self): ...
def test_init_empty(self): ...
def test_load_valid_file(self): ...
def test_error_handling(self): ...
테스트 원칙:
- AAA 패턴 (Arrange, Act, Assert)
- 각 기능별 독립적 테스트
- Edge case 포함
4.2 픽스처 활용
@pytest.fixture
def temp_srt_file(self, sample_srt_content):
with tempfile.NamedTemporaryFile(...) as f:
yield temp_path
장점:
- 테스트 데이터 격리
- 자동 정리
- 재사용 가능
5. 빌드 및 배포
5.1 빌드 프로세스
python -m build
생성 파일:
dist/subtitle-utils-0.1.0.tar.gz(소스 배포)dist/subtitle_utils-0.1.0-py3-none-any.whl(휠 배포)
5.2 품질 보증
# 코드 포매팅
black src/ tests/
# 린팅
flake8 src/ tests/
# 타입 체킹
mypy src/
# 테스트 + 커버리지
pytest --cov=subtitle_utils --cov-report=html
6. 개발 워크플로우
6.1 일반적인 개발 사이클
- 기능 개발: 새 기능 구현
- 테스트 작성: 단위 테스트 추가
- 품질 검사: 린팅, 포매팅, 타입 체킹
- 통합 테스트: 전체 테스트 스위트 실행
- 빌드: 배포 가능한 패키지 생성
6.2 버전 관리
version = "0.1.0" # MAJOR.MINOR.PATCH
Semantic Versioning:
- MAJOR: 호환성을 깨는 변경
- MINOR: 하위 호환 기능 추가
- PATCH: 하위 호환 버그 수정
7. 성능 고려사항
7.1 메모리 효율성
- 대용량 파일 처리시 스트리밍 고려
- 불필요한 객체 생성 최소화
7.2 처리 속도
srt라이브러리의 C 확장 활용- 적절한 데이터 구조 선택
8. 확장성 설계
8.1 미래 기능 지원
현재 구조로 쉽게 추가 가능:
WebVTTHandler클래스SMIHandler클래스- 형식 간 변환 유틸리티
8.2 플러그인 아키텍처
from abc import ABC, abstractmethod
class SubtitleHandler(ABC):
@abstractmethod
def load(self, file_path): ...
@abstractmethod
def save(self, file_path): ...
9. 배포 전략
9.1 TestPyPI 활용
twine upload --repository testpypi dist/*
장점:
- 실제 환경 테스트
- 배포 프로세스 검증
- 위험 최소화
9.2 CI/CD 파이프라인
GitHub Actions 예시:
- PR시 자동 테스트
- 태그시 자동 배포
- 다중 Python 버전 테스트
10. 문서화 전략
10.1 README.md 구성
- 간단한 설치/사용법
- API 레퍼런스
- 예제 코드
- 기여 가이드
10.2 코드 문서화
- docstring 완전 작성
- 타입 힌트 활용
- 예제 포함
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
sub2nan-0.1.0.tar.gz
(8.8 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sub2nan-0.1.0.tar.gz.
File metadata
- Download URL: sub2nan-0.1.0.tar.gz
- Upload date:
- Size: 8.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1bdc4721ed17de93b1b47dbc9e0e349b0631c426f37048019188a963d341e44a
|
|
| MD5 |
aae290cf92735cebc478a34bb71428ed
|
|
| BLAKE2b-256 |
c132b39162fcbff9e7779aea6e2cf216bce38ddf66bf75e1b2eb8860c5940f74
|
File details
Details for the file sub2nan-0.1.0-py3-none-any.whl.
File metadata
- Download URL: sub2nan-0.1.0-py3-none-any.whl
- Upload date:
- Size: 8.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de067f4be558a051e901ca7985aa49c34ec6eb73fd8d4427fff0a8ba1b602e21
|
|
| MD5 |
ce8c155f2364a56287934ce9733a3514
|
|
| BLAKE2b-256 |
eed9f321ab9b60c54405ae92f28bc515d85b83fb3032499178440490ca587c77
|