|
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") |
|
st.experimental_rerun() |
|
|
|
for root, dirs, files in os.walk(directory, topdown=False): |
|
for filename in files: |
|
file_path = os.path.join(root, filename) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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") |
|
st.experimental_rerun() |
|
|
|
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] = "Grade " + grade + " 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() |
|
""" |
|
|