-
Notifications
You must be signed in to change notification settings - Fork 0
/
repo.py
108 lines (78 loc) · 3.91 KB
/
repo.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
from imports import *
class Repository:
def __init__(self,username):
self.username=username
self.userurl="https://github.com/{}/".format(self.username)
self.repourl="https://github.com/{}?tab=repositories".format(self.username)
self.download_link="archive/refs/heads/main.zip"
self.request=requests.get(self.repourl,allow_redirects=True)
self.soup=BeautifulSoup(self.request.content,'html.parser')
self.repositories={}
def listAllRepos(self):
for repo in self.soup.find_all("h3",class_="wb-break-all"):
reponame=repo.a.text.strip()
repolink=repo.a['href']
self.repositories[reponame]=repolink
return self.repositories
def downloadRepo(self,repository_name):
print("\n[*] Downloading {} Repository...".format(repository_name))
self.current_repourl="{}{}/{}".format(self.userurl,repository_name,self.download_link)
self.request=requests.get(self.current_repourl)
with open("./{}.zip".format(repository_name),"wb") as folder:
folder.write(self.request.content)
def downloadAndExtractRepo(self,repository_name):
print("\n[*] Downloading {} Repository...".format(repository_name))
self.current_repourl="{}{}/{}".format(self.userurl,repository_name,self.download_link)
self.request=requests.get(self.current_repourl)
with open("./{}.zip".format(repository_name),"wb") as folder:
folder.write(self.request.content)
folder.close()
print("[*] Extracting {} Repository...".format(repository_name))
repozip=zipfile.PyZipFile('./{}.zip'.format(repository_name))
repozip.extractall()
repozip.close()
print("[*] Downloaded and Extracted {} Repository...".format(repository_name))
os.remove('./{}.zip'.format(repository_name))
def displayLicense(self,repo_name):
license_present=False
license_displayed=False
count=0
print("\n\n")
while (license_present==False and count!=3):
count+=1
try:
repopath="./{}-main/".format(repo_name)
for repofile in os.listdir(repopath):
if "LICENSE" in repofile:
license_present=True
except FileNotFoundError:
option=input("Do you want ot Download and Extract {} Repository First (y/n) >> ".format(repo_name))
if option=='y':
self.downloadAndExtractRepo(repo_name)
license_present=False
elif option=='n':
print("\nLicense Can't Be Displayed as Repository Not Present in Local Device.")
break
else:
print("Type 'y' or 'n'.")
while (license_displayed==False and license_present==True):
try:
repopath="./{}-main/".format(repo_name)
for repofile in os.listdir(repopath):
if "LICENSE" in repofile:
with open(os.path.join(repopath,repofile),'r') as f:
print(f.read())
f.close()
license_displayed=True
except FileNotFoundError:
option=input("Do you want ot Download and Extract {} Repository First (y/n) >> ".format(repo_name))
if option=='y':
self.downloadAndExtractRepo(repo_name)
license_displayed=False
elif option=='n':
print("\nLicense Can't Be Displayed as Repository Not Present in Local Device.")
break
else:
print("Type 'y' or 'n'.")
else:
print("License Not Present in Repository")