File tree 6 files changed +63
-29
lines changed
6 files changed +63
-29
lines changed Original file line number Diff line number Diff line change @@ -14,4 +14,6 @@ dictionaries returned by `pull_request_files.py
14
14
` views.py ` Aside from the flask code, it also contains code for APScheduler. It updates the ` files ` variable in the background
15
15
at specific intervals.
16
16
17
+ ![ Pulls-Screenshot] ( static/images/pulls-front.png )
18
+
17
19
:-)
Original file line number Diff line number Diff line change 1
1
from collections import defaultdict
2
2
3
3
4
- def pr_by_file (pull_requests ):
4
+ def get_files (pull_requests ):
5
5
files = defaultdict (set )
6
6
for pr in pull_requests :
7
7
for file in pr ['files' ]['nodes' ]:
8
8
filename = file ['path' ]
9
9
files [filename ].add (pr ['number' ])
10
- return files
11
-
12
-
13
- def change_values_to_list (pull_requests ):
14
- files = pr_by_file (pull_requests )
15
10
for filename , pr in files .items ():
16
11
files [filename ] = list (pr )
12
+ files [filename ].sort ()
17
13
files = dict (sorted (files .items ()))
18
- return files
14
+ results = dict ()
15
+ for file_name in files .keys ():
16
+ if not file_name .startswith ('Misc' ):
17
+ results [file_name ] = files [file_name ]
18
+ return results
19
19
20
20
21
- def main (pull_requests ):
22
- return change_values_to_list (pull_requests )
21
+ def get_titles (pull_requests ):
22
+ pr_titles = dict ()
23
+ for pr in pull_requests :
24
+ pr_titles .update ({pr ['number' ]: pr ['title' ]})
25
+ return pr_titles
Original file line number Diff line number Diff line change 13
13
headers = {'Authorization' : f'bearer { oauth_token } ' }
14
14
15
15
16
+ class PullRequests :
17
+ def __init__ (self , data ):
18
+ self .pr_data = data
19
+ self .files = process_pulls .get_files (self .pr_data )
20
+ self .titles = process_pulls .get_titles (self .pr_data )
21
+
22
+
16
23
def get_pull_request_details (endCursor = None ):
17
24
graphql_query = '''query($previousEndCursor:String) {
18
25
repository(owner:"python", name:"cpython") {
@@ -57,14 +64,15 @@ def get_pull_request_details(endCursor=None):
57
64
def main ():
58
65
page = 1
59
66
response = get_pull_request_details ()
60
- pull_requests = response ['data' ]['repository' ]['pullRequests' ]['nodes' ]
67
+ results = response ['data' ]['repository' ]['pullRequests' ]['nodes' ]
61
68
while response ['data' ]['repository' ]['pullRequests' ]['pageInfo' ]['hasNextPage' ]:
62
69
page = page + 1
63
- response = get_pull_request_details (response ['data' ]['repository' ]['pullRequests' ]['pageInfo' ]['endCursor' ])
64
- pull_requests = pull_requests + response ['data' ]['repository' ]['pullRequests' ]['nodes' ]
65
-
66
- files = process_pulls .main (pull_requests )
67
- return files
70
+ response = get_pull_request_details (
71
+ response ['data' ]['repository' ]['pullRequests' ]['pageInfo' ]['endCursor' ]
72
+ )
73
+ results = results + response ['data' ]['repository' ]['pullRequests' ]['nodes' ]
74
+ pr_data = PullRequests (results )
75
+ return pr_data
68
76
69
77
70
78
if __name__ == "__main__" :
Original file line number Diff line number Diff line change 15
15
padding-top : 100px ;
16
16
padding-bottom : 100px ;
17
17
}
18
+
19
+ .pr-number {
20
+ position : relative;
21
+ display : inline-block;
22
+ }
23
+
24
+ /* Tooltip text */
25
+ .pr-number .pr-title {
26
+ visibility : hidden;
27
+ width : 200px ;
28
+ background-color : black;
29
+ color : # fff ;
30
+ text-align : center;
31
+ padding : 3px 3px 3px 3px ;
32
+ margin-left : 5px ;
33
+ border-radius : 7px ;
34
+ position : absolute;
35
+ z-index : 1 ;
36
+ }
37
+
38
+ /* Show the tooltip text when you mouse over the tooltip container */
39
+ .pr-number : hover .pr-title {
40
+ visibility : visible;
41
+ }
18
42
</ style >
19
43
< link rel ="stylesheet " href ="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css "
20
44
integrity ="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm " crossorigin ="anonymous ">
49
73
</ thead >
50
74
51
75
< tbody >
52
- {% for file_name in results %}
76
+ {% for file_name in results.files %}
53
77
< tr >
54
78
< td > < a href ="https://github.com/python/cpython/blob/master/{{file_name}} "> {{ file_name }}</ a > </ td >
55
- {% for pr in results[file_name] %}
56
- < td > < a href ="https://github.com/python/cpython/pull/{{pr}} " target ="_blank "> {{ pr }}</ a > </ td >
79
+ {% for pr in results.files[file_name] %}
80
+ < td class ="pr-number ">
81
+ < a href ="https://github.com/python/cpython/pull/{{pr}} " target ="_blank "> {{ pr }}</ a >
82
+ < span class ="pr-title "> {{ results.titles[pr] }}</ span >
83
+ </ td >
57
84
{% endfor %}
58
85
</ tr >
59
86
{% endfor %}
Original file line number Diff line number Diff line change 2
2
import pull_request_files
3
3
from apscheduler .schedulers .background import BackgroundScheduler
4
4
5
- files = pull_request_files .main ()
5
+ pr_data = pull_request_files .main ()
6
6
7
7
8
8
def timed_job ():
9
- global files
10
- files = pull_request_files .main ()
9
+ global pr_data
10
+ pr_data = pull_request_files .main ()
11
11
12
12
13
13
scheduler = BackgroundScheduler ()
14
- scheduler .add_job (timed_job , 'interval' , minutes = 1 )
14
+ scheduler .add_job (timed_job , 'interval' , minutes = 5 )
15
15
scheduler .start ()
16
16
17
17
@@ -22,13 +22,7 @@ def timed_job():
22
22
@app .route ("/" )
23
23
@app .route ("/index" )
24
24
def index ():
25
- results = files
26
-
27
- final_results = dict ()
28
- for file_name in results .keys ():
29
- if not file_name .startswith ('Misc' ):
30
- final_results [file_name ] = results [file_name ]
31
- return render_template ('index.html' , results = final_results )
25
+ return render_template ('index.html' , results = pr_data )
32
26
33
27
34
28
if __name__ == '__main__' :
You can’t perform that action at this time.
0 commit comments