CLI: --output=json list-refs emits one object per retention property instead of per ref
Les mainteneurs répondent en général sous 1 jour
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 87/100
Piste de recherche
Lisez pyiceberg/cli/output.py et examinez JsonOutput.describe_refs() avec ConsoleOutput.describe_refs(). Ajoutez des tests de régression pour une référence et plusieurs références, puis exécutez les tests pertinents de sortie. Le travail est terminé lorsque chaque référence produit un objet JSON contenant toutes ses propriétés de rétention.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Apache Iceberg version
None
Please describe the bug 🐞
Apache Iceberg version
main (development)
Please describe the bug
JsonOutput.describe_refs() emits one JSON object for each retention property rather than one object per snapshot reference.
As a result, pyiceberg --output=json list-refs <table> can return three objects for a table containing only one snapshot reference.
Reproduction
from pyiceberg.cli.output import JsonOutput
from pyiceberg.table.refs import SnapshotRefType
JsonOutput().describe_refs([
(
"main",
SnapshotRefType.BRANCH,
{
"min_snapshots_to_keep": "1",
"max_snapshot_age_ms": "432000000",
"max_ref_age_ms": "forever",
},
)
])
Actual output
[
{"name": "main", "type": "branch", "min_snapshots_to_keep": "1"},
{"name": "main", "type": "branch", "max_snapshot_age_ms": "432000000"},
{"name": "main", "type": "branch", "max_ref_age_ms": "forever"}
]
Expected output
[
{
"name": "main",
"type": "branch",
"min_snapshots_to_keep": "1",
"max_snapshot_age_ms": "432000000",
"max_ref_age_ms": "forever"
}
]
Root cause
In pyiceberg/cli/output.py, JsonOutput.describe_refs() uses a nested list comprehension:
[
{"name": name, "type": type, detail_key: detail_val}
for name, type, detail in refs
for detail_key, detail_val in detail.items()
]
The inner loop creates a separate object for every entry in detail.
This is inconsistent with ConsoleOutput.describe_refs(), which renders one row per reference.
Suggested fix
Construct one dictionary per reference and merge the retention properties into it. Add a regression test ensuring that one input reference produces one complete JSON object, ideally also covering multiple references.
I reproduced the incorrect output by executing the current list-comprehension logic in isolation. I have not yet run the full CLI against a catalog.
Willingness to contribute
I'd be happy to submit a focused fix with regression tests if the proposed JSON structure is correct.
Willingness to contribute
- I can contribute a fix for this bug independently
- I would be willing to contribute a fix for this bug with guidance from the Iceberg community
- I cannot contribute a fix for this bug at this time
- Langage dominant
- Python
- Étoiles
- 1.2k
- Forks
- 618
- Merge moyen
- 1 j 3 h
- PR mergées (30 j)
- 45
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Aucun guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de apache/iceberg-python
-
REST: Send empty first-page pageToken when rest-page-size is setPeut-être pris @ehddnr301 l’a pris il y a 1 jour. Ouvertekind:bug
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
apache/iceberg-python#4096 ·
Les mainteneurs répondent en général sous 1 jour
-
PyArrowFileIO: every small S3 write is a 3-request multipart upload; expose allow_delayed_openOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
apache/iceberg-python#4093 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
View does not expose metadata_location: RestCatalog.load_view discards it from the server's responsePeut-être pris @Soumo-git-hub l’a pris il y a 6 jours. Ouvertekind:bug
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
apache/iceberg-python#4073 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
apache/iceberg-python#4010 · 3 commentaires · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
-
to_bytes silently rescales a Decimal with a negative scalePeut-être pris @Rodrigo-Palma l’a pris il y a 26 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
apache/iceberg-python#3996 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de apache/iceberg-python
Issues similaires
-
vis.image() reports "Unsupported number of image channels: 224" for an HxWxC imagePeut-être pris @piyush182004 l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
fossasia/visdom#1997 · 3 commentaires ·
Les mainteneurs répondent en général sous 6 jours
-
Byse new domainOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
Gujal00/ResolveURL#1525 ·
Les mainteneurs répondent en général sous 1 jour
-
Serialisation fails with pydantic 2.14: wrap serialisers pass SerializationInfo as index_keyPeut-être pris @hugohills-regnosys l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
finos/rune-python-runtime#45 ·
-
[Bug]: LangGraph Store sync put bypasses namespace validationPeut-être pris @ktz03 l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
volcengine/OpenViking#6050 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
hummingbot/condor#283 ·
Les mainteneurs répondent en général sous 1 jour