Skip to content

Commit

Permalink
Merge pull request #53 from Genymobile/issue5-my-open-comments-merge-…
Browse files Browse the repository at this point in the history
…to-master

Issue #5: if a 'login' parameter is specified, user-specific info is displayed (merge to master)
  • Loading branch information
CedricCabessa committed Aug 28, 2015
2 parents 2f59531 + b148e73 commit 10b67b1
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 5 deletions.
3 changes: 2 additions & 1 deletion gm_pr/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,15 @@
class Pr:
""" Simple class wrapper for pr properties
"""
def __init__(self, url="", title="", updated_at="", user="",
def __init__(self, url="", title="", updated_at="", user="", my_open_comment_count=0,
repo="", nbreview=0, feedback_ok=0, feedback_weak=0,
feedback_ko=0, milestone=None, labels=None,
is_old=False):
self.url = url
self.title = title
self.updated_at = updated_at
self.user = user
self.my_open_comment_count = my_open_comment_count
self.repo = repo
self.nbreview = nbreview
self.feedback_ok = feedback_ok
Expand Down
22 changes: 19 additions & 3 deletions gm_pr/prfetcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def is_color_light(rgb_hex_color_string):
return y > 128

@app.task
def fetch_data(repo_name, url, org):
def fetch_data(repo_name, url, org, current_user):
""" Celery task, call github api
repo_name -- github repo name
url -- base url for this repo
Expand Down Expand Up @@ -83,6 +83,10 @@ def fetch_data(repo_name, url, org):
break

# look for tags only in main conversation and not in "file changed"
if current_user is not None:
my_open_comment_count = get_open_comment_count(json_pr['review_comments_url'], current_user)
else:
my_open_comment_count = 0
for jcomment in conversation_json:
body = jcomment['body']
if re.search(settings.FEEDBACK_OK['keyword'], body):
Expand All @@ -98,6 +102,7 @@ def fetch_data(repo_name, url, org):
title=json_pr['title'],
updated_at=date,
user=json_pr['user']['login'],
my_open_comment_count=my_open_comment_count,
repo=json_pr['base']['repo']['full_name'],
nbreview=int(detail_json['comments']) +
int(detail_json['review_comments']),
Expand All @@ -116,11 +121,21 @@ def fetch_data(repo_name, url, org):

return repo

# Return the number of non-obsolete review comments posted on the given PR url, by the given user.
def get_open_comment_count(url, user):
open_comment_count=0
review_comments = paginablejson.PaginableJson(url)
for review_comment in review_comments:
# In obsolote comments, the position is None
if review_comment['position'] is not None and review_comment['user']['login'] == user:
open_comment_count +=1
return open_comment_count


class PrFetcher:
""" Pr fetc
"""
def __init__(self, url, org, repos):
def __init__(self, url, org, repos, current_user):
"""
url -- top level url (eg: https://api.github.com)
org -- github organisation (eg: Genymobile)
Expand All @@ -129,6 +144,7 @@ def __init__(self, url, org, repos):
self.__url = url
self.__org = org
self.__repos = repos
self.__current_user = current_user

def get_prs(self):
"""
Expand All @@ -137,7 +153,7 @@ def get_prs(self):
return a list of { 'name' : repo_name, 'pr_list' : pr_list }
pr_list is a list of models.Pr
"""
res = group(fetch_data.s(repo_name, self.__url, self.__org)
res = group(fetch_data.s(repo_name, self.__url, self.__org, self.__current_user)
for repo_name in self.__repos)()
data = res.get()
return [repo for repo in data if repo != None]
3 changes: 3 additions & 0 deletions gm_pr/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,9 @@

ROOT_URLCONF = 'gm_pr.urls'

from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS
TEMPLATE_CONTEXT_PROCESSORS += ("django.core.context_processors.request",)

TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
Expand Down
5 changes: 5 additions & 0 deletions gm_pr/static/gm_pr.css
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,11 @@ td a:hover {
text-align: center;
width: 1.5em;
}
.my-open-comment-count{
color: black;
text-align: center;
width: 1.5em;
}
.feedback_ok,
.feedback_weak,
.feedback_ko {
Expand Down
10 changes: 10 additions & 0 deletions gm_pr/templates/pr.html
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@
<th>Title</th>
<th>User</th>
<th>Reviews</th>
{% if request.GET.login %}
<th>My Open Comments</th>
{% endif %}
<th class="feedback-name">{{feedback_ok|safe}}</th>
<th class="feedback-name">{{feedback_weak|safe}}</th>
<th class="feedback-name">{{feedback_ko|safe}}</th>
Expand All @@ -51,6 +54,13 @@
<td class="title"><a href="{{pr.url}}">{{pr.title}}</a></td>
<td class="user">{{pr.user}}</td>
<td class="nbrev">{{pr.nbreview}}</td>
{% if request.GET.login %}
<td class="my-open-comment-count">
{% if pr.my_open_comment_count > 0 %}
{{pr.my_open_comment_count}}
{% endif %}
</td>
{% endif %}
<td class="feedback_ok">{{pr.feedback_ok}}</td>
<td class="feedback_weak">{{pr.feedback_weak}}</td>
<td class="feedback_ko">{{pr.feedback_ko}}</td>
Expand Down
6 changes: 5 additions & 1 deletion web/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,11 @@ def index(request):
if repos != None:
before = time.time()

prf = PrFetcher(settings.TOP_LEVEL_URL, settings.ORG, repos)
current_user = None
if 'login' in request.GET:
current_user = request.GET['login']

prf = PrFetcher(settings.TOP_LEVEL_URL, settings.ORG, repos, current_user)
context = {"title" : "%s PR list" % project,
"project_list" : prf.get_prs(),
"feedback_ok" : settings.FEEDBACK_OK['name'],
Expand Down

0 comments on commit 10b67b1

Please sign in to comment.