Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Get all pages #171

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 24 additions & 5 deletions cloudsmith_cli/cli/commands/list_.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,11 +174,30 @@ def packages(ctx, opts, owner_repo, page, page_size, query):
click.echo("Getting list of packages ... ", nl=False, err=use_stderr)

context_msg = "Failed to get list of packages!"
with handle_api_exceptions(ctx, opts=opts, context_msg=context_msg):
with maybe_spinner(opts):
packages_, page_info = list_packages(
owner=owner, repo=repo, page=page, page_size=page_size, query=query
)
if page != -1:
with handle_api_exceptions(ctx, opts=opts, context_msg=context_msg):
with maybe_spinner(opts):
packages_, page_info = list_packages(
owner=owner, repo=repo, page=page, page_size=page_size, query=query
)
else:
with handle_api_exceptions(ctx, opts=opts, context_msg=context_msg):
with maybe_spinner(opts):
packages_ = []
page_number = 1
page_max = 999999999999 # Infinity... until we get the first page and know the real size
while page_number <= page_max:
partial_packages, page_info = list_packages(
owner=owner,
repo=repo,
page=page_number,
page_size=page_size,
query=query,
)
packages_.extend(partial_packages)
page_number += 1
page_max = page_info.page_total
page_info = None

click.secho("OK", fg="green", err=use_stderr)

Expand Down
22 changes: 18 additions & 4 deletions cloudsmith_cli/cli/commands/repos.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,10 +117,24 @@ def get(ctx, opts, owner_repo, page, page_size):

context_msg = "Failed to get list of repositories!"
with handle_api_exceptions(ctx, opts=opts, context_msg=context_msg):
with maybe_spinner(opts):
repos_, page_info = api.list_repos(
owner=owner, repo=repo, page=page, page_size=page_size
)
if page != -1:
with maybe_spinner(opts):
repos_, page_info = api.list_repos(
owner=owner, repo=repo, page=page, page_size=page_size
)
else:
with maybe_spinner(opts):
repos_ = []
page_number = 1
page_max = 999999999999 # Infinity... until we get the first page and know the real size
while page_number <= page_max:
partial_repos, page_info = api.list_repos(
owner=owner, repo=repo, page=page_number, page_size=page_size
)
repos_.extend(partial_repos)
page_number += 1
page_max = page_info.page_total
page_info = None

click.secho("OK", fg="green", err=use_stderr)

Expand Down
6 changes: 6 additions & 0 deletions cloudsmith_cli/cli/decorators.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,12 @@ def common_cli_list_options(f):
help="The amount of items to view per page for lists.",
callback=validators.validate_page_size,
)
@click.option(
"--show-all",
default=False,
type=bool,
help="Get all pages of results, not just the first page (ls repos/pkgs only).",
)
@click.pass_context
@functools.wraps(f)
def wrapper(ctx, *args, **kwargs):
Expand Down
2 changes: 2 additions & 0 deletions cloudsmith_cli/cli/validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,8 @@ def validate_owner_repo_distro(ctx, param, value):
def validate_page(ctx, param, value):
"""Ensure that a valid value for page is chosen."""
# pylint: disable=unused-argument
if value == -1:
return value
if value == 0:
raise click.BadParameter(
"Page is not zero-based, please set a value to 1 or higher.", param=param
Expand Down