Skip to content

Commit e2eebda

Browse files
author
Travis Wrightsman
authored
feat(grzctl): add configurable display limit for db list command (#344)
Resolves #340 feat(grz-db): add limit parameter to database list_submissions
1 parent 14b3b93 commit e2eebda

4 files changed

Lines changed: 17 additions & 6 deletions

File tree

packages/grz-db/src/grz_db/models/submission.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -449,15 +449,19 @@ def get_submission(self, submission_id: str) -> Submission | None:
449449
submission = session.exec(statement).first()
450450
return submission
451451

452-
def list_submissions(self) -> Sequence[Submission]:
452+
def list_submissions(self, limit: int | None) -> Sequence[Submission]:
453453
"""
454454
Lists all submissions in the database.
455455
456456
Returns:
457-
A list of all submissions in the database, ordered by their ID.
457+
A list of all submissions in the database, ordered by their submission date, latest first.
458458
"""
459459
with self._get_session() as session:
460-
statement = select(Submission).options(selectinload(Submission.states)).order_by(Submission.id) # type: ignore[arg-type]
460+
statement = (
461+
select(Submission).options(selectinload(Submission.states)).order_by(Submission.submission_date.desc()) # type: ignore[arg-type,union-attr]
462+
)
463+
if limit is not None:
464+
statement = statement.limit(limit)
461465
submissions = session.exec(statement).all()
462466
return submissions
463467

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
11
"""
22
Command modules for the grzctl package.
33
"""
4+
5+
import click
6+
7+
limit = click.option("--limit", type=click.IntRange(min=0), default=10)

packages/grzctl/src/grzctl/commands/db.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
from grz_pydantic_models.submission.metadata import GrzSubmissionMetadata, LibraryType
3838

3939
from ..models.config import DbConfig
40+
from . import limit
4041
from .pruefbericht import get_pruefbericht_library_type
4142

4243
console = rich.console.Console()
@@ -140,14 +141,15 @@ def upgrade(
140141

141142
@db.command("list")
142143
@output_json
144+
@limit
143145
@click.pass_context
144-
def list_submissions(ctx: click.Context, output_json: bool = False):
146+
def list_submissions(ctx: click.Context, output_json: bool, limit: int):
145147
"""Lists all submissions in the database with their latest state."""
146148
db = ctx.obj["db_url"]
147149
db_service = get_submission_db_instance(db)
148150

149151
try:
150-
submissions = db_service.list_submissions()
152+
submissions = db_service.list_submissions(limit=limit)
151153
except Exception as e:
152154
raise click.ClickException(str(e)) from e
153155

packages/grzctl/src/grzctl/commands/list_submissions.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from pydantic_core import to_jsonable_python
1616

1717
from ..models.config import ListConfig
18+
from . import limit
1819
from .db import get_submission_db_instance
1920

2021
log = logging.getLogger(__name__)
@@ -90,7 +91,7 @@ def _prepare_table(summaries: list[InboxSubmissionSummary], database_states: dic
9091
@config_file
9192
@output_json
9293
@click.option("--show-cleaned/--hide-cleaned", help="Show cleaned submissions.")
93-
@click.option("--limit", type=click.IntRange(min=0), default=10)
94+
@limit
9495
def list_submissions(config_file: Path, output_json: bool, show_cleaned: bool, limit: int):
9596
"""
9697
List submissions within an inbox from oldest to newest, up to the requested limit.

0 commit comments

Comments
 (0)