42 wiersze
1.0 KiB
Python
42 wiersze
1.0 KiB
Python
from .io import load_cfg, load_index
|
|
from .parallel import parallel
|
|
import requests
|
|
|
|
def trace(args):
|
|
cfg = load_cfg(args.config)
|
|
index = load_index(args.index)
|
|
|
|
start_projects = load_start_projects(args.start_projects)
|
|
|
|
projects = parallel(fetch_project, start_projects, processes=args.processes)
|
|
|
|
for project in start_projects:
|
|
dependencies = dependencies_between(project, projects, processes=args.processes)
|
|
|
|
def dependencies_between(start_project, projects, processes=6):
|
|
dependencies = {}
|
|
for project in projects:
|
|
paths = paths_between(start_project, project, projects, processes=processes)
|
|
|
|
dependencies[project] = sum([product(path) for path in paths])/len(paths)
|
|
|
|
def paths_between(start, end, projects, processes = 6):
|
|
paths = []
|
|
|
|
if start == end:
|
|
return paths
|
|
else:
|
|
return start,
|
|
|
|
|
|
def product(xs):
|
|
value = 1
|
|
for x in xs:
|
|
value *= x
|
|
return value
|
|
|
|
def fetch_project(url):
|
|
project = requests.get(url).json()
|
|
|
|
return project, project["dependencies"].keys()
|