콘텐츠로 이동

srt_mobile_api.errors

예외 계층과 msgCd → 예외 분류.

계층::

SrtApiError
├─ SrtTransportError          HTTP 실패
├─ SrtProtocolError           응답 모양 불일치 / 안전 가드 거절
├─ SrtAuthError               인증·세션
│  ├─ SrtSessionExpiredError
│  └─ SrtIpBlockedError
├─ SrtAppError                앱 수준 실패 (strResult=FAIL)
│  ├─ SrtNoResultsError
│  │  └─ SrtNoDirectTrainError
│  ├─ SrtInvalidRequestError
│  └─ SrtSeatUnavailableError
├─ SrtMutationNotAllowedError consent 게이트 거절
└─ SrtNetFunnelError          대기열
   ├─ SrtNetFunnelKeyError
   └─ SrtQueueRejectedError

NO_RESULT_CODES module-attribute

NO_RESULT_CODES = frozenset({'WRG000000', 'WRT300005'})

NO_DIRECT_TRAIN_CODE module-attribute

NO_DIRECT_TRAIN_CODE = 'WRD000061'

INVALID_REQUEST_CODES module-attribute

INVALID_REQUEST_CODES = frozenset({'WRP011002', 'WRR000100'})

NETFUNNEL_KEY_REQUIRED_CODE module-attribute

NETFUNNEL_KEY_REQUIRED_CODE = 'NET000001'

SESSION_EXPIRED_CODE module-attribute

SESSION_EXPIRED_CODE = 'S111'

SrtApiError

SrtApiError(message='SRT API request failed')

Bases: Exception

모든 예외의 뿌리. 메시지는 redact_url 을 거침.

SrtTransportError

SrtTransportError(message='SRT API request failed')

Bases: SrtApiError

HTTP 자체 실패 — 연결 실패·타임아웃·4xx/5xx·비로그인 리다이렉트.

SrtProtocolError

SrtProtocolError(message='SRT protocol response was invalid', *, raw=None)

Bases: SrtApiError

응답 모양이 프로토콜과 다르거나, 안전 가드가 전송 전에 거절.

raw instance-attribute

raw = raw

SrtAuthError

SrtAuthError(message='SRT authentication failed')

Bases: SrtApiError

로그인 실패 또는 세션 없음.

message instance-attribute

message = redact_url(message)

SrtSessionExpiredError

SrtSessionExpiredError(message='SRT session expired', *, raw=None)

Bases: SrtAuthError

세션 만료 — 재로그인 후 재시도.

두 신호: (1) 로그인 페이지/리다이렉트 응답, (2) 예약 응답에서 strResult="FAIL" + msgCd="S111" (ara1001l.js:1562-1573). S111이 인증 오류가 되는 것은 예약 응답에서뿐 — 다른 엔드포인트는 SrtAppError.

raw instance-attribute

raw = raw

SrtIpBlockedError

SrtIpBlockedError(message='SRT authentication failed')

Bases: SrtAuthError

IP 차단 — 재시도 무의미. "Your IP Address Blocked" 평문 응답.

번들 0-hit (인프라 응답). srtgo srt.py:719-720 동일 처리. 대기열 IP 차단(kTsIpBlock 302, SrtQueueRejectedError)과 별개.

SrtAppError

SrtAppError(code, message, *, raw=None)

Bases: SrtApiError

서버가 앱 수준 실패 선언 (HTTP 200, strResult="FAIL"). code=msgCd, raw=응답.

code instance-attribute

code = code

message instance-attribute

message = redact_url(message or '')

raw instance-attribute

raw = raw

SrtNoResultsError

SrtNoResultsError(code, message, *, raw=None)

Bases: SrtAppError

조회 결과 없음 — 재시도 아닌 조건 변경 필요.

WRG000000 "조회 결과가 없습니다." / WRT300005 "조회자료가 없습니다." 이 서버는 빈 결과를 strResult=FAIL로 표현한다 (ara1001l.js:206-210).

SrtNoDirectTrainError

SrtNoDirectTrainError(code, message, *, raw=None)

Bases: SrtNoResultsError

WRD000061 — 직통 없음, 환승 가능. search_transfer_trains로 재조회 가능.

SrtInvalidRequestError

SrtInvalidRequestError(code, message, *, raw=None)

Bases: SrtAppError

서버가 요청 자체를 거절 — 인자 수정 필요. WRP011002/WRR000100.

SrtSeatUnavailableError

SrtSeatUnavailableError(code, message, *, raw=None)

Bases: SrtAppError

좌석 선택 페이지가 오류 껍데기로 도착 — 매진 추정.

code는 messages.js 키 "error001" (msgCd 아님, HTML 응답).

SrtMutationNotAllowedError

SrtMutationNotAllowedError(message='SRT API request failed')

Bases: SrtApiError

consent 없이 상태변경 시도 — 서버는 아무것도 받지 않음. 전송 전 거절.

SrtNetFunnelError

SrtNetFunnelError(code=None, message=None, *, raw=None)

Bases: SrtApiError

NetFunnel 대기열 단계 실패. code는 3자리 상태값 또는 앱 msgCd.

code instance-attribute

code = code

message instance-attribute

message = redact_url(message or 'NetFunnel request failed')

raw instance-attribute

raw = raw

SrtNetFunnelKeyError

SrtNetFunnelKeyError(code=None, message=None, *, raw=None)

Bases: SrtNetFunnelError

NET000001 — netfunnelKey 거부. 검색은 1회 자동 재시도, 예약은 재시도 안 함.

SrtQueueRejectedError

SrtQueueRejectedError(code=None, message=None, *, raw=None)

Bases: SrtNetFunnelError

대기열 입장 거부 (kTsBlock 301, kTsIpBlock 302). 재시도 무의미.

엣지 IP 차단(SrtIpBlockedError)과 별개 — 여기는 NetFunnel 대기실.

classify_app_error

classify_app_error(code, message, *, raw=None)

msgCd에 대응하는 SrtAppError 하위 클래스 인스턴스를 반환(raise 안 함).

NET000001(SrtNetFunnelKeyError)과 S111(SrtSessionExpiredError)은 여기서 다루지 않음 — 각 호출 지점이 맥락을 알고 처리.