Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
import logging as log # for verbose output
from .BitBucketRepoSession import BitBucketRepoSession
from .GitHubRepoSession import GitHubRepoSession
from .GitLabRepoSession import GitLabRepoSession
from .LocalVersionSession import LocalVersionSession
from .MercurialRepoSession import MercurialRepoSession
from .SourceForgeRepoSession import SourceForgeRepoSession
class HolderFactory:
HOLDERS = {
'github': GitHubRepoSession,
'gitlab': GitLabRepoSession,
'bitbucket': BitBucketRepoSession,
'hg': MercurialRepoSession,
'sf': SourceForgeRepoSession,
'local': LocalVersionSession
}
@staticmethod
# go through subclasses in order to find the one that is hodling a given project
# repo is either complete URL or a name allowing to identify a single project
def get_instance_for_repo(repo):
holder_class = HolderFactory.HOLDERS['github']
hostname = None
known_repo = None
for k, sc in HolderFactory.HOLDERS.items():
known_repo = sc.is_official_for_repo(repo)
def get(self, url, **kwargs):
r = super(GitHubRepoSession, self).get(url, **kwargs)
if r.status_code == 401:
if self.api_token:
raise ApiCredentialsError('API request was denied despite using an API token. '
'Missing scopes?')
raise ApiCredentialsError('Denied API access. Please set GITHUB_API_TOKEN env var '
'as per https://github.com/dvershinin/lastversion#tips')
if r.status_code == 403:
if 'X-RateLimit-Reset' in r.headers and 'X-RateLimit-Remaining' in r.headers:
if self.rate_limited_count > 2:
raise ApiCredentialsError(
'API requests were denied after retrying {} times'.format(
self.rate_limited_count)
)
remaining = int(r.headers['X-RateLimit-Remaining'])
wait_for = int(r.headers['X-RateLimit-Reset']) - time.time()
if not remaining: