This repository has been archived by the owner on Nov 2, 2021. It is now read-only.
forked from dmarti/soti-links
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparse.py
executable file
·77 lines (63 loc) · 1.84 KB
/
parse.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/usr/bin/env python3
import json
import os
import string
import sys
def snarf_json(filename):
try:
with open(filename, 'r', encoding='utf-8') as fdin:
return json.loads(fdin.read())
except:
raise
def sanitize(st):
try:
st = ' '.join(st.split())
return st.strip()
except:
return("(missing)")
class ProjectInfo(dict):
def __init__(self, d):
for k in d.keys():
self[k] = d[k]
@property
def name(self):
return sanitize(self.get('name', '(missing project name)'))
@property
def url(self):
for k in ('html_url', 'homepage'):
try:
return sanitize(self.get(k))
except:
pass
return("NO_URL")
@property
def description(self):
return sanitize(self.get('description'))
@property
def size(self):
total = 0
for metric in ('dependent_repos_count', 'dependents_count', 'stargazers_count'):
try:
total += int(self.get(metric, 0))
except:
pass
return total
def __repr__(self):
return("[%s](%s) %s (%d)" % (self.name, self.url, self.description, self.size))
class SearchResult(list):
def __init__(self, d):
try:
for item in d['items']:
self.append(ProjectInfo(item))
except TypeError:
for item in d:
self.append(ProjectInfo(item))
except KeyError:
pass
if __name__ == '__main__':
destination = sys.argv[1]
keyword = os.path.basename(destination)
for file in ("data/github/%s" % keyword, "data/libraries/%s" % keyword):
info = SearchResult(snarf_json(file))
for r in info:
print("%s %s %s %d %s" % (keyword, r.url, r.name, r.size, r.description))