Skip to content

Generator packages.list(iterator=True) fails to paginate when deleting packages #2268

@andreirogov

Description

@andreirogov

Description of the problem, including code/CLI snippet

Generator for a project packages list does not return the complete list of packages when iterating through them with deletion.

Steps to reproduce:

  1. Upload more than 20 packages (e.g., 21 packages) to the project CI_PROJECT_ID
  2. Execute the code snippet to try to delete all the uploaded packages:
    import gitlab;
    from os import environ as env
    
    gl = gitlab.Gitlab(url=env['CI_SERVER_URL'], private_token=env['API_TOKEN'])
    project = gl.projects.get(env['CI_PROJECT_ID'])
    
    pkgs = project.packages.list(iterator=True)
    for pkg in pkgs:
        pkg.delete();
        print("Deleted package name=", pkg.name, " version=", pkg.version, sep='');
    

Notes:

  1. According to the doc, using generator list(iterator=True) is the recommended way to iterate through a large number of items.
  2. Returning the complete list with list(get_all=True) works as expected.
  3. If iterating using generator list(iterator=True) without deletion, generator returns the complete list, as expected.

Expected Behavior

Output:

Deleted package name=test version=1.1
Deleted package name=test version=1.2
Deleted package name=test version=1.3
Deleted package name=test version=1.4
Deleted package name=test version=1.5
Deleted package name=test version=1.6
Deleted package name=test version=1.7
Deleted package name=test version=1.8
Deleted package name=test version=1.9
Deleted package name=test version=1.10
Deleted package name=test version=1.11
Deleted package name=test version=1.12
Deleted package name=test version=1.13
Deleted package name=test version=1.14
Deleted package name=test version=1.15
Deleted package name=test version=1.16
Deleted package name=test version=1.17
Deleted package name=test version=1.18
Deleted package name=test version=1.19
Deleted package name=test version=1.20
Deleted package name=test version=1.21

Actual Behavior

Output:

Deleted package name=test version=1.1
Deleted package name=test version=1.2
Deleted package name=test version=1.3
Deleted package name=test version=1.4
Deleted package name=test version=1.5
Deleted package name=test version=1.6
Deleted package name=test version=1.7
Deleted package name=test version=1.8
Deleted package name=test version=1.9
Deleted package name=test version=1.10
Deleted package name=test version=1.11
Deleted package name=test version=1.12
Deleted package name=test version=1.13
Deleted package name=test version=1.14
Deleted package name=test version=1.15
Deleted package name=test version=1.16
Deleted package name=test version=1.17
Deleted package name=test version=1.18
Deleted package name=test version=1.19
Deleted package name=test version=1.20

Specifications

  • python-gitlab version: 3.8.0
  • API version you are using (v3/v4): v4
  • Gitlab server version (or gitlab.com): 14.8.6

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions