#77 Rework the pagure PRs widget
Merged 8 years ago by ralph. Opened 8 years ago by pingou.
pingou/fedora-hubs pagure_widget  into  develop

file modified
+1 -1
@@ -30,5 +30,5 @@ 

          'irc', 'email', 'android', 'desktop', 'hubs',

      ]

  

- def repo(session, value):

+ def pagure_repo(session, value):

      return value

file modified
+2 -2
@@ -51,8 +51,8 @@ 

  

  @argument(name="repo",

            default=None,

-           validator=validators.repo,

-           help="Repo")

+           validator=validators.github_organization,

+           help="Github Organization or username")

  def data(session, widget, display_number, org, repo):

    url = '/'.join(['https://api.github.com/repos',org,repo,"issues"])

    issue_response = requests.get(url)

file modified
+91 -54
@@ -4,77 +4,114 @@ 

  import requests

  from hubs.widgets.base import argument

  import hubs.validators as validators

- chrome = panel("Pagure: Newest Open Pull Requests")

+ chrome = panel("Newest Open Pull Requests on Pagure")

  

  pagure_url = "https://pagure.io/api/0"

  

  template = jinja2.Template("""

-   <br />

-     <div class="container">

-       {% for i in range(0,total_req) %}

-         <div>

-           <table class="table-responsive table-condensed">

-             <tr>

-               <td valign="top" class="panel-heading">

-                 <b>#{{ all_pr[i]['pr_id'] }}</b>

-               </td>

-               <td width="260px">

-                 <b>{{ all_pr[i]['pr_title'] }} ...</b>

-               </td>

-             </tr>

-            </table>

-          <table class="table-responsive table-condensed">

-             <tr>

-               <td width="280px" >

-                 <font size="2">

-                   <i>Opened by <a href="https://pagure.io/user/{{ all_pr[i]['pr_openedby'] }}" target="_blank">{{ all_pr[i]['pr_openedby'] }}</a>

-                   {% if all_pr[i]['pr_assignee'] %}

-                     <br>Assigned to <a href="https://pagure.io/user/{{ all_pr[i]['pr_assignee'] }}" target="_blank">{{ all_pr[i]['pr_assignee'] }}</a></i>

-                   {% endif %}

-                 </font>

-               </td>

-               <td>

-                 <a href="https://pagure.io/{{ repo }}/pull-request/{{ all_pr[i]['pr_id'] }}" target="_blank">

-                   <button type="button" class="btn btn-default" aria-label="Left Align">

-                     <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>

-                   </button>

-                 </a>

-               </td>

-             </tr>

-           </table>

-         </div>

-       {%endfor%}

-     <br />

+   <div class="container">

+     <table id="pagure-pr-list"

+         class="table table-hover table-striped m-b-0">

+       <thead class="thead-default">

+         <tr>

+           <th id="project-title">Project</th>

+           <th id="pr-title">Pull-Request</th>

+           <th class="open_by">Reporter</th>

+           <th class="assigned">Assignee</th>

+         </tr>

+       </thead>

+       <tfoot>

+       </tfoot>

+       <tbody>

+         {% for pr in all_pr %}

+         <tr>

+           <td>

+             {% if pr['pr_project_user'] %}

+             <a href="https://pagure.io/forks/{{

+                 pr['pr_project_user'] }}/{{ pr['pr_project_name'] }}"

+               target="_blank">

+               {{ pr['pr_project_user'] }}/{{ pr['pr_project_name'] }}

+             {% else %}

+             <a href="https://pagure.io/{{

+               pr['pr_project_name'] }}" target="_blank">

+               {{ pr['pr_project_name'] }}

+             {% endif %}

+             </a>

+           </td>

+           <td>

+             <span class="label label-default">#{{ pr['pr_id'] }}</span>

+             <a href="https://pagure.io/{{ repo }}/pull-request/{{

+               pr['pr_id'] }}" target="_blank"

+               title="{{ pr['pr_title_full'] }}">

+               {{ pr['pr_title'] }} ...

+             </a>

+           </td>

+           <td>

+             <a href="https://pagure.io/user/{{ pr['pr_openedby'] }}"

+                 target="_blank">

+               {{ pr['pr_openedby'] }}

+             </a>

+           </td>

+           <td>

+             {% if pr['pr_assignee'] %}

+               <a href="https://pagure.io/user/{{ pr['pr_assignee'] }}"

+                   target="_blank">

+                 {{ pr['pr_assignee'] }}

+               </a>

+             {% else %}

+               <span class="text-muted">unassigned</span>

+             {% endif %}

+           </td>

+         </tr>

+         {% endfor %}

+       </tbody>

+     </table>

      </div class="row">

-       <center><a href="https://pagure.io/{{ repo }}/pull-requests" target="_blank">All Pull-Requests</a><center>

+       <center>

+         <a href="https://pagure.io/{{ repo }}/pull-requests" target="_blank">

+           All Pull-Requests

+         </a>

+       <center>

      </div>

    </div>

  """)

  

+ 

  @argument(name="repo",

            default=None,

-           validator=validators.repo,

-           help="Repo")

+           validator=validators.pagure_repo,

+           help="Pagure repo name")

  def data(session, widget, repo):

-     repo="pagure"

      url = '/'.join([pagure_url, repo, "pull-requests"])

      response = requests.get(url)

      data = response.json()

      total_req = data['total_requests']

      all_pr = list()

-     for i in range(0,total_req):

-       all_pr.append(dict(

-       pr_id=data['requests'][i]['id'],

-       pr_title=data['requests'][i]['title'][:45],

-       pr_openedby=data['requests'][i]['user']['name'],

-       pr_assignee=data['requests'][i]['assignee'],

-     ))

-     all_pr.reverse()

-     return dict(all_pr=all_pr,

-     total_req=total_req,

-     repo=repo,

- )

+ 

+     for request in data['requests']:

+         pr_project_user = None

+         if request['project']['parent']:

+             pr_project_user = request['project']['user']['username']

+ 

+         all_pr.append(

+             dict(

+                 pr_project_name=request['project']['name'],

+                 pr_project_user=pr_project_user,

+                 pr_id=request['id'],

+                 pr_title=request['title'][:45],

+                 pr_title_full=request['title'],

+                 pr_openedby=request['user']['name'],

+                 pr_assignee=request['assignee'],

+             )

+         )

+ 

+     return dict(

+         all_pr=all_pr,

+         total_req=total_req,

+         repo=repo,

+     )

+ 

  

  @hint()

  def should_invalidate(message, session, widget):

-    raise NotImplementedError

+     raise NotImplementedError

file modified
+2 -2
@@ -99,8 +99,8 @@ 

  

  @argument(name="repo",

            default=None,

-           validator=validators.repo,

-           help="Repo")

+           validator=validators.pagure_repo,

+           help="Pagure repo name")

  def data(session, widget, repo):

      repo = "pagure"