GitHubSummarizer / proper_main.py
abhi99555's picture
Create proper_main.py
eaa32b6
try:
import requests
import os
import subprocess as sp
from bs4 import BeautifulSoup
from nbconvert import PythonExporter
import shutil
except Exception as e:
print("Some modules are missing:", e)
print("Do you want to install them via this Python program?")
option = input("Y or N: ")
if option.lower() not in ["y", "n"]:
exit()
elif option.lower() == "n":
exit()
elif option.lower() == "y":
print("Make sure your internet connection is active; otherwise, it may throw an error. Press 'N' to exit.")
curr_dir = os.getcwd()
os.system("pip install -r " + curr_dir + "/requirements.txt")
def web_scrape(user_url,st):
username=user_url[19:]
if username.endswith("/"):
username=username[:-1]
print(username)
base_url = f"https://api.github.com/users/{username}/repos"
response = requests.get(base_url)
if response.status_code != 200:
return ("Please provide a valid link.",1)
st.text("Extracting the Repos")
repos = []
repositories = response.json()
for repo in repositories:
repo_name = repo["name"]
repos.append("https://github.com/"+username + "/" +repo_name)
return repos,0
def data_cloning(repos,st):
if os.path.isdir("/tmp/repos"):
shutil.rmtree("/tmp/repos")
os.mkdir("/tmp/repos")
st.text("Cloning the Repos")
os.chdir("/tmp/repos")
for i in repos:
sp.run(["git", "clone", i], stdout=sp.DEVNULL, stderr=sp.DEVNULL)
return os.getcwd()
def data_cleaning(directory,st):
exporter = PythonExporter()
st.text("Cleaning the Repos")
if len(os.listdir(os.getcwd())) ==0:
st.text("Not a Valid Repo")
return
for root, dirs, files in os.walk(directory, topdown=False):
for filename in files:
file_path = os.path.join(root, filename)
#if filename.endswith(".ipynb"):
#output, _ = exporter.from_filename(file_path)
#with open(os.path.join(root, filename[:-6] + ".py"), "w") as script_file:
# script_file.write(output)
#os.remove(file_path)
if not (filename.endswith(".py") or filename.endswith(".ipynb")):
os.remove(file_path)
for dir_name in dirs:
dir_path = os.path.join(root, dir_name)
if not os.listdir(dir_path):
os.rmdir(dir_path)
def analyse(st):
project_and_grades = {}
report_analysis = {}
st.text("Analysing...")
if len(os.listdir(os.getcwd())) ==0:
st.text("Not a Valid Repo")
return
for file in os.listdir(os.getcwd()):
print(file)
path = os.getcwd() + "/" + file
cmd = ["radon", "cc", "--total-average","--include-ipynb", file]
res = sp.check_output(cmd)
index = res.decode().find("Average")
if index <= 0:
grade = "A"
score = 0.5
else:
grade = res.decode()[index:]
score = grade[23:-1]
score = score[:3]
grade=grade[20]
project_and_grades["Repo " + file] = " Score " + str(score)
report_analysis["Repo " + file] = [float(score)]
shutil.rmtree('/tmp/repos')
return project_and_grades,report_analysis
def self_analysis(report_analysis):
score= max(report_analysis.values())
for keyss in report_analysis:
if report_analysis[keyss]==score:
repo = keyss
return repo,score
"""def main():
web_scrape()
curr_path=data_cloning()
data_cleaning(curr_path)
report=analyse()
print(report)
if __name__ == main():
main()
"""