Skip to content

Commit

Permalink
Implement get_pr_diff for Pagure
Browse files Browse the repository at this point in the history
  • Loading branch information
lbarcziova committed Dec 12, 2023
1 parent ed4342e commit 554d912
Show file tree
Hide file tree
Showing 7 changed files with 271 additions and 0 deletions.
1 change: 1 addition & 0 deletions COMPATIBILITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ In case you find any error, please [create a new issue](https://github.com/packi
| `add_group` ||||
| `remove_group` ||||
| `which_groups_can_merge_pr` ||||
| `get_pr_files_diff` ||||

## User

Expand Down
12 changes: 12 additions & 0 deletions ogr/abstract.py
Original file line number Diff line number Diff line change
Expand Up @@ -1688,6 +1688,18 @@ def get_pr(self, pr_id: int) -> "PullRequest":
"""
raise NotImplementedError()

def get_pr_files_diff(self, pr_id: int) -> dict:
"""
Get files diff of a pull request.
Args:
pr_id: ID of the pull request.
Returns:
Dictionary representing files diff.
"""
raise NotImplementedError()

def get_tags(self) -> list["GitTag"]:
"""
Returns:
Expand Down
4 changes: 4 additions & 0 deletions ogr/services/pagure/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,10 @@ def get_pr_list(
def get_pr(self, pr_id: int) -> PullRequest:
pass

@indirect(PagurePullRequest.get_files_diff)
def get_pr_files_diff(self, pr_id: int) -> dict:
pass

@if_readonly(return_function=GitProjectReadOnly.create_pr)
@indirect(PagurePullRequest.create)
def create_pr(
Expand Down
14 changes: 14 additions & 0 deletions ogr/services/pagure/pull_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,20 @@ def get(project: "ogr_pagure.PagureProject", pr_id: int) -> "PullRequest":
raw_pr = project._call_project_api("pull-request", str(pr_id))
return PagurePullRequest(raw_pr, project)

@staticmethod
def get_files_diff(project: "ogr_pagure.PagureProject", pr_id: int) -> dict:
try:
return project._call_project_api(
"pull-request",
str(pr_id),
"diffstats",
method="GET",
)
except PagureAPIException as ex:
if "No statistics" in ex.pagure_error:
return {}
raise ex

@staticmethod
def get_list(
project: "ogr_pagure.PagureProject",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
_requre:
DataTypes: 1
key_strategy: StorageKeysInspectSimple
version_storage_file: 3
requests.sessions:
send:
GET:
https://pagure.io/api/0/ogr-tests/pull-request/13/diffstats:
- metadata:
latency: 0.2961406707763672
module_call_list:
- unittest.case
- requre.record_and_replace
- tests.integration.pagure.test_pull_requests
- ogr.abstract
- ogr.utils
- ogr.abstract
- ogr.services.pagure.pull_request
- ogr.abstract
- ogr.services.pagure.project
- ogr.abstract
- ogr.services.pagure.service
- ogr.abstract
- ogr.services.pagure.service
- ogr.abstract
- ogr.services.pagure.service
- requests.sessions
- requre.objects
- requre.cassette
- requests.sessions
- send
output:
__store_indicator: 2
_content:
README.md:
lines_added: 5
lines_removed: 1
new_id: 3953698d00a5c8c8ef0582a05083a242beca4033
old_id: a40a52a2ba46ddf4f9a4ecd04b47f717573467a6
old_path: README.md
status: M
_next: null
elapsed: 0.2
encoding: utf-8
headers:
Connection: Keep-Alive
Content-Length: '239'
Content-Security-Policy: default-src 'self';script-src 'self' 'nonce-YqLDC0BS8d7iY8mKO7VtBbIne'
https://apps.fedoraproject.org; style-src 'self' 'nonce-YqLDC0BS8d7iY8mKO7VtBbIne';
object-src 'none';base-uri 'self';img-src 'self' https:;
Content-Type: application/json
Date: Fri, 01 Nov 2019 13-36-03 GMT
Keep-Alive: timeout=5, max=99
Referrer-Policy: same-origin
Server: Apache/2.4.37 (Red Hat Enterprise Linux) OpenSSL/1.1.1k mod_wsgi/4.6.4
Python/3.6
Set-Cookie: pagure=eyJfcGVybWFuZW50Ijp0cnVlLCJjc3JmX3Rva2VuIjoiOGRjYjBkOTVmZWVhYTdjMjhjNmNkNWNhN2ZlZmFmNGE3ZjMxZDliMSJ9.GFnCeg.6mYem_Ppb-t6pkIsrmcLGfZk3jg;
Expires=Fri, 12-Jan-2024 10:07:54 GMT; Secure; HttpOnly; Path=/
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
X-Content-Type-Options: nosniff
X-Frame-Options: ALLOW-FROM https://pagure.io/
X-Xss-Protection: 1; mode=block
raw: !!binary ""
reason: OK
status_code: 200
POST:
https://pagure.io/api/0/-/whoami:
- metadata:
latency: 0.8561291694641113
module_call_list:
- unittest.case
- requre.record_and_replace
- tests.integration.pagure.test_pull_requests
- tests.integration.pagure.base
- ogr.abstract
- ogr.services.pagure.service
- ogr.abstract
- ogr.services.pagure.user
- ogr.abstract
- ogr.services.pagure.service
- ogr.abstract
- ogr.services.pagure.service
- ogr.abstract
- ogr.services.pagure.service
- requests.sessions
- requre.objects
- requre.cassette
- requests.sessions
- send
output:
__store_indicator: 2
_content:
username: lbarczio
_next: null
elapsed: 0.2
encoding: utf-8
headers:
Connection: Upgrade, Keep-Alive
Content-Length: '29'
Content-Security-Policy: default-src 'self';script-src 'self' 'nonce-YqLDC0BS8d7iY8mKO7VtBbIne'
https://apps.fedoraproject.org; style-src 'self' 'nonce-YqLDC0BS8d7iY8mKO7VtBbIne';
object-src 'none';base-uri 'self';img-src 'self' https:;
Content-Type: application/json
Date: Fri, 01 Nov 2019 13-36-03 GMT
Keep-Alive: timeout=5, max=100
Referrer-Policy: same-origin
Server: Apache/2.4.37 (Red Hat Enterprise Linux) OpenSSL/1.1.1k mod_wsgi/4.6.4
Python/3.6
Set-Cookie: pagure=eyJfcGVybWFuZW50Ijp0cnVlLCJjc3JmX3Rva2VuIjoiOGRjYjBkOTVmZWVhYTdjMjhjNmNkNWNhN2ZlZmFmNGE3ZjMxZDliMSJ9.GFnCeQ.AxPTspgeBuxKKhTR48bGrHZf2lE;
Expires=Fri, 12-Jan-2024 10:07:53 GMT; Secure; HttpOnly; Path=/
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Upgrade: h2,h2c
X-Content-Type-Options: nosniff
X-Frame-Options: ALLOW-FROM https://pagure.io/
X-Xss-Protection: 1; mode=block
raw: !!binary ""
reason: OK
status_code: 200
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
_requre:
DataTypes: 1
key_strategy: StorageKeysInspectSimple
version_storage_file: 3
requests.sessions:
send:
GET:
https://pagure.io/api/0/ogr-tests/pull-request/6/diffstats:
- metadata:
latency: 0.2965199947357178
module_call_list:
- unittest.case
- requre.record_and_replace
- tests.integration.pagure.test_pull_requests
- ogr.abstract
- ogr.utils
- ogr.abstract
- ogr.services.pagure.pull_request
- ogr.abstract
- ogr.services.pagure.project
- ogr.abstract
- ogr.services.pagure.service
- ogr.abstract
- ogr.services.pagure.service
- ogr.abstract
- ogr.services.pagure.service
- requests.sessions
- requre.objects
- requre.cassette
- requests.sessions
- send
output:
__store_indicator: 2
_content:
error: No statistics could be computed for this PR
error_code: ENOPRSTATS
_next: null
elapsed: 0.2
encoding: utf-8
headers:
Connection: close
Content-Length: '92'
Content-Security-Policy: default-src 'self';script-src 'self' 'nonce-YqLDC0BS8d7iY8mKO7VtBbIne'
https://apps.fedoraproject.org; style-src 'self' 'nonce-YqLDC0BS8d7iY8mKO7VtBbIne';
object-src 'none';base-uri 'self';img-src 'self' https:;
Content-Type: application/json
Date: Fri, 01 Nov 2019 13-36-03 GMT
Referrer-Policy: same-origin
Server: Apache/2.4.37 (Red Hat Enterprise Linux) OpenSSL/1.1.1k mod_wsgi/4.6.4
Python/3.6
Set-Cookie: pagure=eyJfcGVybWFuZW50Ijp0cnVlLCJjc3JmX3Rva2VuIjoiMzU0YmExMTNlMWFhMGU0MzliZDFjN2UwZGY3ODg4OTBjODdhMzkwMSJ9.GFnGGw.MvcSSJ61ycB9FCodU3kj9hWZeGY;
Expires=Fri, 12-Jan-2024 10:23:23 GMT; Secure; HttpOnly; Path=/
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
X-Content-Type-Options: nosniff
X-Frame-Options: ALLOW-FROM https://pagure.io/
X-Xss-Protection: 1; mode=block
raw: !!binary ""
reason: BAD REQUEST
status_code: 400
POST:
https://pagure.io/api/0/-/whoami:
- metadata:
latency: 0.565004825592041
module_call_list:
- unittest.case
- requre.record_and_replace
- tests.integration.pagure.test_pull_requests
- tests.integration.pagure.base
- ogr.abstract
- ogr.services.pagure.service
- ogr.abstract
- ogr.services.pagure.user
- ogr.abstract
- ogr.services.pagure.service
- ogr.abstract
- ogr.services.pagure.service
- ogr.abstract
- ogr.services.pagure.service
- requests.sessions
- requre.objects
- requre.cassette
- requests.sessions
- send
output:
__store_indicator: 2
_content:
username: lbarczio
_next: null
elapsed: 0.2
encoding: utf-8
headers:
Connection: Upgrade, Keep-Alive
Content-Length: '29'
Content-Security-Policy: default-src 'self';script-src 'self' 'nonce-YqLDC0BS8d7iY8mKO7VtBbIne'
https://apps.fedoraproject.org; style-src 'self' 'nonce-YqLDC0BS8d7iY8mKO7VtBbIne';
object-src 'none';base-uri 'self';img-src 'self' https:;
Content-Type: application/json
Date: Fri, 01 Nov 2019 13-36-03 GMT
Keep-Alive: timeout=5, max=100
Referrer-Policy: same-origin
Server: Apache/2.4.37 (Red Hat Enterprise Linux) OpenSSL/1.1.1k mod_wsgi/4.6.4
Python/3.6
Set-Cookie: pagure=eyJfcGVybWFuZW50Ijp0cnVlLCJjc3JmX3Rva2VuIjoiMzU0YmExMTNlMWFhMGU0MzliZDFjN2UwZGY3ODg4OTBjODdhMzkwMSJ9.GFnGGw.MvcSSJ61ycB9FCodU3kj9hWZeGY;
Expires=Fri, 12-Jan-2024 10:23:23 GMT; Secure; HttpOnly; Path=/
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Upgrade: h2,h2c
X-Content-Type-Options: nosniff
X-Frame-Options: ALLOW-FROM https://pagure.io/
X-Xss-Protection: 1; mode=block
raw: !!binary ""
reason: OK
status_code: 200
10 changes: 10 additions & 0 deletions tests/integration/pagure/test_pull_requests.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,3 +118,13 @@ def test_commits_url(self):
def test_get_comment(self):
comment = self.ogr_project.get_pr(5).get_comment(comment_id=162373)
assert "Billy: what the hell is going on up there?" in comment.body

def test_pr_diff(self):
diff = self.ogr_project.get_pr_files_diff(13)
assert isinstance(diff, dict)
assert "README.md" in diff

def test_pr_diff_empty_diff(self):
diff = self.ogr_project.get_pr_files_diff(6)
assert isinstance(diff, dict)
assert diff == {}

0 comments on commit 554d912

Please sign in to comment.