24_deb_pkg_gov/main.py
2023-11-05 11:11:03 -06:00

72 lines
3.6 KiB
Python

import perceval
import os
import yaml
import datetime as dt
import perceval_tasks as pt
import github_api_req as gha
import gh_gsql_req as ghs
def main():
# we should discuss whether we're using the 93 day window that seems to be widely used or if we want a longer window
early_cutoff = dt.datetime(2023,10, 11)
print("Earliest date examined: " + str(early_cutoff))
largest_object = {}
#manifest = '../kaylea_dissertation/lifecycle/package_metadata/jupyter-notebook_manifest.yaml'
directory='../kaylea_dissertation/lifecycle/package_metadata/'
for filename in os.listdir(directory):
f = os.path.join(directory, filename)
# checking if it is a file
if os.path.isfile(f):
print(f)
get_everything(f, largest_object, early_cutoff)
#remove this and it should just run? for the most part at least I think
break
print(largest_object.keys())
def get_everything(manifest_path, largest_object, early_cutoff):
with open(manifest_path, 'r') as stream:
try:
config = yaml.safe_load(stream)
#below lines will probably need to be refactored as tasks expand
vcs_path = config['Upstream_VCS']
#print("------------------")
#print(vcs_path)
repo_path = vcs_path[0]
largest_object[repo_path] = {}
largest_object[repo_path]["perceval_obj"] = pt.main(vcs_path, early_cutoff)
largest_object[repo_path]["gha_obj"] = gha.main(vcs_path, early_cutoff)
#these are the two variables in the denominator of the formality measure
#print("Age of Project: " + str(largest_object[repo_path]["perceval_obj"]['age_of_project']))
#print('Contributor Count: ' + str(len(largest_object[repo_path]["perceval_obj"]['contributors'])))
#print('Collaborator Count: ' + str(len(largest_object[repo_path]["perceval_obj"]['collaborators'])))
#print('Number of Milestones: ' + str(largest_object[repo_path]["gha_obj"]['milestone_count']))
largest_object[repo_path]['new_mmt'] = compute_new_mmt(len(largest_object[repo_path]["perceval_obj"]['contributors']), len(largest_object[repo_path]["perceval_obj"]['collaborators']))
#print('New MMT: ' + str(largest_object[repo_path]['new_mmt']))
largest_object[repo_path]['old_mmt'] = compute_old_mmt(len(largest_object[repo_path]["perceval_obj"]['contributors']), len(largest_object[repo_path]["perceval_obj"]['collaborators']))
#print('Old MMT: ' + str(largest_object[repo_path]['old_mmt']))
#new mmt formality score
largest_object[repo_path]['new_formality'] = compute_formality_score(largest_object[repo_path]['new_mmt'], largest_object[repo_path]["gha_obj"]['milestone_count'], largest_object[repo_path]["perceval_obj"]['age_of_project'])
print(largest_object[repo_path]['new_formality'])
# testing out beneath:
largest_object[repo_path]['ghs_obj'] = ghs.main(vcs_path, early_cutoff)
#print(ghs_obj["time_cleaned_comm"])
except yaml.YAMLOError as err:
print(err)
print("----------------------")
#this is Yoshi 2 MMT per van Meijel
def compute_new_mmt(contrib_count, collab_count):
return (contrib_count + collab_count * 2) / (contrib_count + collab_count)
#this is Yoshi 1 mmt per Tamburri
def compute_old_mmt(contrib_count, collab_count):
return (contrib_count) / (contrib_count + collab_count)
#formality score
def compute_formality_score(mmt, milestones, lifetime):
return mmt / (milestones / lifetime)
if __name__ == "__main__":
main()