Team Ai
Apppublic

halfdevil/Github-Automated-Analysis

sourceHugging Facebigcode-openrail-mupdated 3y agoView on Hugging Face
0likes
proper_main.py142 linesDownload Raw Back to root
1try:2    import requests3    import os4    import subprocess as sp5    from bs4 import BeautifulSoup6    from nbconvert import PythonExporter7    import shutil8 9except Exception as e:10    print("Some modules are missing:", e)11    print("Do you want to install them via this Python program?")12    option = input("Y or N: ")13    if option.lower() not in ["y", "n"]:14        exit()15    elif option.lower() == "n":16        exit()17    elif option.lower() == "y":18        print("Make sure your internet connection is active; otherwise, it may throw an error. Press 'N' to exit.")19        curr_dir = os.getcwd()20        os.system("pip install -r " + curr_dir + "/requirements.txt")21 22 23 24 25 26def web_scrape(user_url,st):27    username=user_url[19:]28    if username.endswith("/"):29    	username=username[:-1]30    print(username)31    base_url = f"https://api.github.com/users/{username}/repos"32    33    response = requests.get(base_url)34    if response.status_code != 200:35        return ("Please provide a valid link.",1)36    st.text("Extracting the Repos")37    repos = []38    repositories = response.json()39    for repo in repositories:40    	41    	repo_name = repo["name"]42    	43    	repos.append("https://github.com/"+username + "/" +repo_name)44    return repos,045 46 47def data_cloning(repos,st):48    49    if os.path.isdir("/tmp/repos"):50    	shutil.rmtree("/tmp/repos")51    52    os.mkdir("/tmp/repos")53    54    55    st.text("Cloning the Repos")56    os.chdir("/tmp/repos")57    for i in repos:58        sp.run(["git", "clone", i], stdout=sp.DEVNULL, stderr=sp.DEVNULL)59 60    return os.getcwd()61 62 63def data_cleaning(directory,st):64    exporter = PythonExporter()65    st.text("Cleaning the Repos")66    67    if len(os.listdir(os.getcwd())) ==0:68    	st.text("Not a Valid Repo")69    	return70 71    for root, dirs, files in os.walk(directory, topdown=False):72        for filename in files:73            file_path = os.path.join(root, filename)74 75            #if filename.endswith(".ipynb"):76                #output, _ = exporter.from_filename(file_path)77                #with open(os.path.join(root, filename[:-6] + ".py"), "w") as script_file:78                #    script_file.write(output)79                #os.remove(file_path)80 81            if not (filename.endswith(".py") or filename.endswith(".ipynb")):82                os.remove(file_path)83 84        for dir_name in dirs:85            dir_path = os.path.join(root, dir_name)86            if not os.listdir(dir_path):87                os.rmdir(dir_path)88 89 90def analyse(st):91    project_and_grades = {}92    report_analysis = {}93    st.text("Analysing...")94    if len(os.listdir(os.getcwd())) ==0:95    	st.text("Not a Valid Repo")96    	return97 98    for file in os.listdir(os.getcwd()):99        print(file)100        path = os.getcwd() + "/" + file101        102        cmd = ["radon", "cc", "--total-average","--include-ipynb", file]103        res = sp.check_output(cmd)104        index = res.decode().find("Average")105        if index <= 0:106            grade = "A"107            score = 0.5108        else:109            grade = res.decode()[index:]110            score = grade[23:-1]111            score = score[:3]112            grade=grade[20]113            114 115        project_and_grades["Repo " + file] = " Score " + str(score)116        report_analysis["Repo " + file] = [float(score)]117    shutil.rmtree('/tmp/repos')118 119    return project_and_grades,report_analysis120    121    122    123def self_analysis(report_analysis):124	score= max(report_analysis.values())125	for keyss in report_analysis:126		if report_analysis[keyss]==score:127			repo = keyss128	return repo,score129 130 131 132"""def main():133	web_scrape()134	curr_path=data_cloning()135	data_cleaning(curr_path)136	report=analyse()137	print(report)138	139if __name__ == main():140	main()141"""142