Skip to content

Commit ccef5fd

Browse files
committed
retry on 4xx/5xx error
1 parent f3c8423 commit ccef5fd

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

atcodertools/client/atcoder.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import warnings
55
from http.cookiejar import LWPCookieJar
66
from typing import List, Optional, Tuple, Union
7+
from urllib3.util.retry import Retry
78

89
import requests
910
from bs4 import BeautifulSoup
@@ -66,7 +67,12 @@ def default_credential_supplier() -> Tuple[str, str]:
6667
class AtCoderClient(metaclass=Singleton):
6768

6869
def __init__(self):
69-
self._session = requests.Session()
70+
session = requests.Session()
71+
retries = Retry(total=3,
72+
backoff_factor=0.5,
73+
status_forcelist=[status for status in range(400, 600)])
74+
session.mount("https://", requests.adapters.HTTPAdapter(max_retries=retries))
75+
self._session = session
7076

7177
def check_logging_in(self):
7278
private_url = "https://atcoder.jp/home"
@@ -110,10 +116,11 @@ def login(self,
110116
save_cookie(self._session)
111117

112118
def download_problem_list(self, contest: Contest) -> List[Problem]:
113-
resp = self._request(contest.get_problem_list_url())
114-
soup = BeautifulSoup(resp.text, "html.parser")
115-
if resp.status_code == 404:
119+
try:
120+
resp = self._request(contest.get_problem_list_url())
121+
except requests.exceptions.RetryError:
116122
raise PageNotFoundError
123+
soup = BeautifulSoup(resp.text, "html.parser")
117124
res = []
118125
for tag in soup.find('table').select('tr')[1::]:
119126
tag = tag.find("a")

0 commit comments

Comments
 (0)