Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
S
swh-lister
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Nicolas Dandrimont
swh-lister
Commits
ce87a8f7
Verified
Commit
ce87a8f7
authored
4 years ago
by
Antoine R. Dumont
Browse files
Options
Downloads
Patches
Plain Diff
gitlab: Let the lister compute the internal project listing page
Related to T2987
parent
7f160926
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
swh/lister/gitlab/lister.py
+4
-1
4 additions, 1 deletion
swh/lister/gitlab/lister.py
swh/lister/gitlab/tests/test_lister.py
+16
-25
16 additions, 25 deletions
swh/lister/gitlab/tests/test_lister.py
with
20 additions
and
26 deletions
swh/lister/gitlab/lister.py
+
4
−
1
View file @
ce87a8f7
...
...
@@ -142,12 +142,15 @@ class GitLabLister(Lister[GitLabListerState, PageResult]):
return
PageResult
(
repositories
,
next_page
)
def
page_url
(
self
,
page_id
:
int
)
->
str
:
return
f
"
{
self
.
url
}
projects?page=
{
page_id
}
&order_by=id&sort=asc&per_page=20
"
def
get_pages
(
self
)
->
Iterator
[
PageResult
]:
next_page
:
Optional
[
str
]
if
self
.
incremental
and
self
.
state
and
self
.
state
.
last_seen_next_link
:
next_page
=
self
.
state
.
last_seen_next_link
else
:
next_page
=
f
"
{
self
.
url
}
projects?page=1&order_by=id&sort=asc&per_page=20
"
next_page
=
self
.
page_url
(
1
)
while
next_page
:
self
.
last_page
=
next_page
...
...
This diff is collapsed.
Click to expand it.
swh/lister/gitlab/tests/test_lister.py
+
16
−
25
View file @
ce87a8f7
...
...
@@ -24,10 +24,6 @@ def api_url(instance: str) -> str:
return
f
"
https://
{
instance
}
/api/v4/
"
def
url_page
(
api_url
:
str
,
page_id
:
int
)
->
str
:
return
f
"
{
api_url
}
projects?page=
{
page_id
}
&order_by=id&sort=asc&per_page=20
"
def
_match_request
(
request
):
return
request
.
headers
.
get
(
"
User-Agent
"
)
==
USER_AGENT
...
...
@@ -37,24 +33,20 @@ def test_lister_gitlab(datadir, swh_scheduler, requests_mock):
"""
instance
=
"
gitlab.com
"
url
=
api_url
(
instance
)
lister
=
GitLabLister
(
swh_scheduler
,
url
=
api_url
(
instance
),
instance
=
instance
)
response
=
gitlab_page_response
(
datadir
,
instance
,
1
)
requests_mock
.
get
(
url_
page
(
url
,
1
),
[{
"
json
"
:
response
}],
additional_matcher
=
_match_request
,
lister
.
page
_
url
(
1
),
[{
"
json
"
:
response
}],
additional_matcher
=
_match_request
,
)
lister_gitlab
=
GitLabLister
(
swh_scheduler
,
url
=
api_url
(
instance
),
instance
=
instance
)
listed_result
=
lister_gitlab
.
run
()
listed_result
=
lister
.
run
()
expected_nb_origins
=
len
(
response
)
assert
listed_result
==
ListerStats
(
pages
=
1
,
origins
=
expected_nb_origins
)
scheduler_origins
=
lister
_gitlab
.
scheduler
.
get_listed_origins
(
lister
_gitlab
.
lister_obj
.
id
scheduler_origins
=
lister
.
scheduler
.
get_listed_origins
(
lister
.
lister_obj
.
id
).
origins
assert
len
(
scheduler_origins
)
==
expected_nb_origins
...
...
@@ -74,22 +66,21 @@ def test_lister_gitlab_with_pages(swh_scheduler, requests_mock, datadir):
"""
instance
=
"
gite.lirmm.fr
"
url
=
api_url
(
instance
)
lister
=
GitLabLister
(
swh_scheduler
,
url
=
api_url
(
instance
)
)
response1
=
gitlab_page_response
(
datadir
,
instance
,
1
)
response2
=
gitlab_page_response
(
datadir
,
instance
,
2
)
requests_mock
.
get
(
url_
page
(
url
,
1
),
[{
"
json
"
:
response1
,
"
headers
"
:
{
"
Link
"
:
f
"
<
{
url_
page
(
url
,
2
)
}
>; rel=next
"
}}],
lister
.
page
_
url
(
1
),
[{
"
json
"
:
response1
,
"
headers
"
:
{
"
Link
"
:
f
"
<
{
lister
.
page
_
url
(
2
)
}
>; rel=next
"
}}],
additional_matcher
=
_match_request
,
)
requests_mock
.
get
(
url_
page
(
url
,
2
),
[{
"
json
"
:
response2
}],
additional_matcher
=
_match_request
,
lister
.
page
_
url
(
2
),
[{
"
json
"
:
response2
}],
additional_matcher
=
_match_request
,
)
lister
=
GitLabLister
(
swh_scheduler
,
url
=
url
)
listed_result
=
lister
.
run
()
expected_nb_origins
=
len
(
response1
)
+
len
(
response2
)
...
...
@@ -111,12 +102,13 @@ def test_lister_gitlab_incremental(swh_scheduler, requests_mock, datadir):
"""
instance
=
"
gite.lirmm.fr
"
url
=
api_url
(
instance
)
lister
=
GitLabLister
(
swh_scheduler
,
url
=
url
,
instance
=
instance
,
incremental
=
True
)
url_page1
=
url_
page
(
url
,
1
)
url_page1
=
lister
.
page
_
url
(
1
)
response1
=
gitlab_page_response
(
datadir
,
instance
,
1
)
url_page2
=
url_
page
(
url
,
2
)
url_page2
=
lister
.
page
_
url
(
2
)
response2
=
gitlab_page_response
(
datadir
,
instance
,
2
)
url_page3
=
url_
page
(
url
,
3
)
url_page3
=
lister
.
page
_
url
(
3
)
response3
=
gitlab_page_response
(
datadir
,
instance
,
3
)
requests_mock
.
get
(
...
...
@@ -128,7 +120,6 @@ def test_lister_gitlab_incremental(swh_scheduler, requests_mock, datadir):
url_page2
,
[{
"
json
"
:
response2
}],
additional_matcher
=
_match_request
,
)
lister
=
GitLabLister
(
swh_scheduler
,
url
=
url
,
instance
=
instance
,
incremental
=
True
)
listed_result
=
lister
.
run
()
expected_nb_origins
=
len
(
response1
)
+
len
(
response2
)
...
...
@@ -172,10 +163,11 @@ def test_lister_gitlab_rate_limit(swh_scheduler, requests_mock, datadir, mocker)
"""
instance
=
"
gite.lirmm.fr
"
url
=
api_url
(
instance
)
lister
=
GitLabLister
(
swh_scheduler
,
url
=
url
,
instance
=
instance
)
url_page1
=
url_
page
(
url
,
1
)
url_page1
=
lister
.
page
_
url
(
1
)
response1
=
gitlab_page_response
(
datadir
,
instance
,
1
)
url_page2
=
url_
page
(
url
,
2
)
url_page2
=
lister
.
page
_
url
(
2
)
response2
=
gitlab_page_response
(
datadir
,
instance
,
2
)
requests_mock
.
get
(
...
...
@@ -195,7 +187,6 @@ def test_lister_gitlab_rate_limit(swh_scheduler, requests_mock, datadir, mocker)
additional_matcher
=
_match_request
,
)
lister
=
GitLabLister
(
swh_scheduler
,
url
=
url
,
instance
=
instance
)
# To avoid this test being too slow, we mock sleep within the retry behavior
mock_sleep
=
mocker
.
patch
.
object
(
lister
.
get_page_result
.
retry
,
"
sleep
"
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment