Sleep until rate limit refresh
This commit is contained in:
		
							parent
							
								
									9387706f61
								
							
						
					
					
						commit
						2e2756db07
					
				@ -1,6 +1,8 @@
 | 
				
			|||||||
"""GitHub API module"""
 | 
					"""GitHub API module"""
 | 
				
			||||||
import logging
 | 
					import logging
 | 
				
			||||||
import requests
 | 
					import requests
 | 
				
			||||||
 | 
					from datetime import datetime
 | 
				
			||||||
 | 
					from time import sleep
 | 
				
			||||||
from requests.adapters import HTTPAdapter
 | 
					from requests.adapters import HTTPAdapter
 | 
				
			||||||
from requests.packages.urllib3.util.retry import Retry
 | 
					from requests.packages.urllib3.util.retry import Retry
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -26,6 +28,12 @@ class GitHubApi:
 | 
				
			|||||||
        """GET an HTTP resource and return JSON."""
 | 
					        """GET an HTTP resource and return JSON."""
 | 
				
			||||||
        url = self.base_url + endpoint
 | 
					        url = self.base_url + endpoint
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Check rate limits
 | 
				
			||||||
 | 
					        if self.rate_remaining == 0 and self.rate_reset > datetime.now():
 | 
				
			||||||
 | 
					            logging.warning(f'Out of API calls. Sleeping until {self.rate_reset}.')
 | 
				
			||||||
 | 
					            delta = self.rate_reset - datetime.now()
 | 
				
			||||||
 | 
					            sleep(delta.total_seconds())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            response = self.session.get(url, params=params)
 | 
					            response = self.session.get(url, params=params)
 | 
				
			||||||
        except requests.RequestException as e:
 | 
					        except requests.RequestException as e:
 | 
				
			||||||
@ -41,7 +49,7 @@ class GitHubApi:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def __parse_headers(self, headers):
 | 
					    def __parse_headers(self, headers):
 | 
				
			||||||
        """Parse headers to update rate limits."""
 | 
					        """Parse headers to update rate limits."""
 | 
				
			||||||
        self.rate_reset = int(headers['x-ratelimit-reset'])
 | 
					        self.rate_reset = datetime.fromtimestamp(int(headers['x-ratelimit-reset']))
 | 
				
			||||||
        self.rate_remaining = int(headers['x-ratelimit-remaining'])
 | 
					        self.rate_remaining = int(headers['x-ratelimit-remaining'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_events(self, page=None):
 | 
					    def get_events(self, page=None):
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user