@@ -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
494509class 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
605635class 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