Skip to content

Commit b4278b0

Browse files
committed
Handle failed requests for contests
1 parent 538b4bc commit b4278b0

File tree

1 file changed

+79
-34
lines changed

1 file changed

+79
-34
lines changed

ACedIt/util.py

Lines changed: 79 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,28 @@ def get_problem_links(self, req):
449449

450450
return links
451451

452+
def handle_batch_requests(self, links):
453+
"""
454+
Method to send simultaneous requests to
455+
all problem pages
456+
"""
457+
rs = (grq.get(link) for link in links)
458+
responses = grq.map(rs)
459+
460+
failed_requests = []
461+
462+
for response in responses:
463+
if response is not None and response.status_code == 200:
464+
inputs, outputs = self.parse_html(response)
465+
self.problem = response.url.split('/')[-1]
466+
Utilities.check_cache(self.site, self.contest, self.problem)
467+
Utilities.store_files(
468+
self.site, self.contest, self.problem, inputs, outputs)
469+
else:
470+
failed_requests += [response.url]
471+
472+
return failed_requests
473+
452474
def scrape_problem(self):
453475
"""
454476
Method to scrape a single problem from codeforces
@@ -479,16 +501,9 @@ def scrape_contest(self):
479501
links = [link for link in links if link.split(
480502
'/')[-1] not in cached_problems]
481503

482-
rs = (grq.get(link) for link in links)
483-
responses = grq.map(rs)
484-
485-
for response in responses:
486-
if response is not None and response.status_code == 200:
487-
inputs, outputs = self.parse_html(response)
488-
self.problem = response.url.split('/')[-1]
489-
Utilities.check_cache(self.site, self.contest, self.problem)
490-
Utilities.store_files(
491-
self.site, self.contest, self.problem, inputs, outputs)
504+
failed_requests = self.handle_batch_requests(links)
505+
if len(failed_requests) > 0:
506+
self.handle_batch_requests(failed_requests)
492507

493508

494509
class Codechef:
@@ -556,6 +571,32 @@ def get_problem_links(self, req):
556571

557572
return links
558573

574+
def handle_batch_requests(self, links):
575+
"""
576+
Method to send simultaneous requests to
577+
all problem pages
578+
"""
579+
rs = (grq.get(link) for link in links)
580+
responses = grq.map(rs)
581+
582+
# responses = []
583+
# for link in links:
584+
# responses += [rq.get(link)]
585+
586+
failed_requests = []
587+
588+
for response in responses:
589+
if response is not None and response.status_code == 200:
590+
inputs, outputs = self.parse_html(response)
591+
self.problem = response.url.split('/')[-1]
592+
Utilities.check_cache(self.site, self.contest, self.problem)
593+
Utilities.store_files(
594+
self.site, self.contest, self.problem, inputs, outputs)
595+
else:
596+
failed_requests += [response.url]
597+
598+
return failed_requests
599+
559600
def scrape_problem(self):
560601
"""
561602
Method to scrape a single problem from codechef
@@ -586,20 +627,9 @@ def scrape_contest(self):
586627
links = [link for link in links if link.split(
587628
'/')[-1] not in cached_problems]
588629

589-
# rs = (grq.get(link) for link in links)
590-
# responses = grq.map(rs)
591-
592-
responses = []
593-
for link in links:
594-
responses += [rq.get(link)]
595-
596-
for response in responses:
597-
if response is not None and response.status_code == 200:
598-
inputs, outputs = self.parse_html(response)
599-
self.problem = response.url.split('/')[-1]
600-
Utilities.check_cache(self.site, self.contest, self.problem)
601-
Utilities.store_files(
602-
self.site, self.contest, self.problem, inputs, outputs)
630+
failed_requests = self.handle_batch_requests(links)
631+
if len(failed_requests) > 0:
632+
self.handle_batch_requests(failed_requests)
603633

604634

605635
class Spoj:
@@ -736,6 +766,28 @@ def get_problem_links(self, req):
736766

737767
return links
738768

769+
def handle_batch_requests(self, links):
770+
"""
771+
Method to send simultaneous requests to
772+
all problem pages
773+
"""
774+
rs = (grq.get(link) for link in links)
775+
responses = grq.map(rs)
776+
777+
failed_requests = []
778+
779+
for response in responses:
780+
if response is not None and response.status_code == 200:
781+
inputs, outputs = self.parse_html(response)
782+
self.problem = response.url.split('/')[-1]
783+
Utilities.check_cache(self.site, self.contest, self.problem)
784+
Utilities.store_files(
785+
self.site, self.contest, self.problem, inputs, outputs)
786+
else:
787+
failed_requests += [response.url]
788+
789+
return failed_requests
790+
739791
def scrape_problem(self):
740792
"""
741793
Method to scrape a single problem from hackerrank
@@ -766,13 +818,6 @@ def scrape_contest(self):
766818
links = [link for link in links if link.split(
767819
'/')[-1] not in cached_problems]
768820

769-
rs = (grq.get(link) for link in links)
770-
responses = grq.map(rs)
771-
772-
for response in responses:
773-
if response is not None and response.status_code == 200:
774-
inputs, outputs = self.parse_html(response)
775-
self.problem = response.url.split('/')[-1]
776-
Utilities.check_cache(self.site, self.contest, self.problem)
777-
Utilities.store_files(
778-
self.site, self.contest, self.problem, inputs, outputs)
821+
failed_requests = self.handle_batch_requests(links)
822+
if len(failed_requests) > 0:
823+
self.handle_batch_requests(failed_requests)

0 commit comments

Comments
 (0)