Source code for RiskQuantLib.Tool.githubTool

#!/usr/bin/python
#coding = utf-8
import requests,os
#<import>
#</import>

[docs]def downloadRepo(url:str, targetPath:str, name:str = ''): """ This function will use Github api to download zip file of repositories. Parameters ---------- url : str The total github api link of some repository targetPath : str The file path where you want to save the zip clone name : str The repository name you want to download Returns ------- None """ headers = { 'Accept': 'application/vnd.github.v3+json', } response = requests.get(url+r'/zipball',headers=headers) if response.status_code==200: with open(targetPath, "wb") as file: file.write(response.content) print("Successfully Installed " + name) else: print("Failed to Install " + name)
#<githubTool> #</githubTool>
[docs]class Github(object): """ This class is used to do operations of Github with github api. """ def __init__(self): """ For basic use of search, establish url. """ self.URLformer = r'https://api.github.com/search/repositories?q=' self.URLender = r'sort=stars&order=desc'
[docs] def searchRepositories(self, repositoryKeyWord = '', output = True): """ This function will send request to search Github and find all repositories that can be related to given key words. All repositories are sorted by star numbers. The first one is the most starred one. Parameters ---------- repositoryKeyWord : str The key words used to search Github. output : bool Whether to print all repositories names. Returns ------- None """ if repositoryKeyWord == '': pass else: repositoryKeyWord = repositoryKeyWord.replace(' ','+') + '&' self.URL = self.URLformer + repositoryKeyWord +self.URLender response = requests.get(self.URL) dataDict = response.json() print("Total repositories: ", dataDict['total_count']) repoDicts = dataDict['items'] data = {} for repoDict in repoDicts: data[repoDict['name']] = [repoDict['stargazers_count'], repoDict['html_url'], repoDict['created_at'], repoDict['default_branch'], repoDict['size'], repoDict['url']] self.data = data if output: hints = "Show Top Github Repositories: " print(hints, '\n', "".join(['-' for i in range(len(hints))])) [print(index, "->", name) for index, name in enumerate(list(self.data.keys()))]
[docs] def downloadRepositories(self, repositoryIndex, targetPath: str): """ This function will download the repository specified by repositoryIndex. The downloaded file is in zip form and will be saved to targetPath. Parameters ---------- repositoryIndex : int or str The number of repository index. Or a string to specify the link of github web page. Or the name of a repository. Or any key word that can be used to search github. targetPath : str The path where zip file will be saved. Returns ------- None """ if type(repositoryIndex) == int: name = list(self.data.keys())[repositoryIndex] downloadRepo(self.data[name][5], targetPath+os.sep+name+'.zip', name) elif type(repositoryIndex) == str and repositoryIndex.find(r'https://github.com')!=-1: user = repositoryIndex.split(r'/')[3] name = repositoryIndex.split(r'/')[4] url = r"https://api.github.com/repos/" + user + r"/" + name downloadRepo(url, targetPath + os.sep + name + '.zip', name) else: self.searchRepositories(repositoryIndex, False) if len(self.data.keys()) == 0: print("There Is No Such Project Found In Github") else: name = list(self.data.keys())[0] if repositoryIndex == name: downloadRepo(self.data[name][5], targetPath + os.sep + name + '.zip', name) else: hints = "Show Top Github Repositories: " print(hints, '\n', "".join(['-' for i in range(len(hints))])) [print(index, "->", name) for index, name in enumerate(list(self.data.keys()))] answer = input("Choose One From Above:") name = list(self.data.keys())[int(answer)] downloadRepo(self.data[name][5], targetPath + os.sep+ name + '.zip', name)
#<Github> #</Github>