ryanking13/SRT

Add exception handling

kujyp opened this issue · 2 comments

  1. Login > IP Block
    POST https://app.srail.or.kr:443/apb/selectListApb01080_n.do

returns

Your IP Address Blocked due to abnormal access.

  1. SRTResponseData._parse > Error case

SRT/SRT/response_data.py

Lines 27 to 28 in 1da3dd1

def _parse(self):
self._status = self._json["resultMap"][0]

In error cases, Server returns response body without "resultMap"

@ryanking13 님이 최근 이슈작성을 영어 위주로 쓰시길래 그냥 써봤는데
설명하긴 한글이 편하네요
그냥 한글로 씁니다.

SRT/SRT/srt.py

Lines 36 to 48 in 1da3dd1

class SRT:
"""SRT 클라이언트 클래스
Args:
srt_id (str): SRT 계정 아이디 (멤버십 번호, 이메일, 전화번호)
srt_pw (str): SRT 계정 패스워드
auto_login (bool): :func:`login` 함수 호출 여부
verbose (bool): 디버깅용 로그 출력 여부
>>> srt = SRT("1234567890", YOUR_PASSWORD) # with membership number
>>> srt = SRT("def6488@gmail.com", YOUR_PASSWORD) # with email
>>> srt = SRT("010-1234-xxxx", YOUR_PASSWORD) # with phone number
"""

SRT class 에서 API Response 처리하는 부분이 다릅니다

  1. SRT.pay_with_card, reserve_standby_option_settings, logout, login
    자체 parse 사용

  2. SRT.search_train, _reserve, get_reservations, ticket_info, cancel
    ResponseData class 사용

SRT/SRT/response_data.py

Lines 27 to 28 in 1da3dd1

def _parse(self):
self._status = self._json["resultMap"][0]

method 에서 자체적으로 parsing 하는 케이스는 test case 도 잘 추가되어있는데요

SRT/tests/test_srt_mock.py

Lines 137 to 156 in 1da3dd1

def test_pay_with_card_fail_bad_request(mock_server, httpserver):
from SRT import SRT, SRTResponseError
register_mock_response(httpserver, "/login", "login_success.json")
register_mock_response(
httpserver, "/payment", "pay_with_card_fail_bad_request.json"
)
srt = SRT("010-1234-1234", "password")
with pytest.raises(SRTResponseError, match="% 입력이 잘못되었습니다."):
srt.pay_with_card(
mock_reservation,
number="0000000000000000",
password="12",
validation_number="700101",
expire_date="1221",
installment=0,
card_type="J",
)

ResponseData class 를 사용하는케이스는 이 부분이 다른 Error 로 발생합니다
_json["resultMap"] 을 조회 시도하다가 KeyError 발생합니다

black SRT

docs/contribution.md 참고해서 하고있는데
black linter 는 몇개파일에서 깨져있는 상태네요

하는김에 걍 고치겠습니다