Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Failed uploads are reported as success: Version.deploy() / Workspace.deploy_model() don't raise, and roboflow model upload / roboflow image upload <dir> exit 0

Aperta
#545 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
55/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
python
Ambito
api, cli

Direzione di ricerca

Start with Version._upload_zip() and Workspace._upload_zip() for swallowed upload failures, then trace _upload_model in roboflow/cli/handlers/model.py and _handle_upload_directory in roboflow/cli/handlers/image.py. Read the related issue #497 and inspect tests for model and image uploads before deciding how to represent partial failures. Done means failed uploads propagate as errors and the CLI exits non-zero; add tests for both paths.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Several upload paths catch errors, print them and continue, so scripts and the CLI cannot detect a failed upload (roboflow 1.7.0, also current main).

  1. Version._upload_zip() and Workspace._upload_zip() wrap both the request for the signed upload URL and the PUT in try/except Exception: print(...). Version.deploy() and Workspace.deploy_model() therefore return normally when the upload failed, and roboflow model upload (_upload_model in roboflow/cli/handlers/model.py) prints {"status": "uploaded"} and exits 0. The 429 branch raises a RuntimeError inside the same try, so it is swallowed too; since a version can own several models (#497), its message may also be outdated.
  2. Workspace.upload_dataset() (per-image flow) prints [ERR] <path> (...) for each failed image and returns None. roboflow image upload <dir> (_handle_upload_directory in roboflow/cli/handlers/image.py) then reports {"status": "imported", "count": N}, where N is the number of image files on disk, and exits 0, even if every upload failed. In the zip flow, a final status failed is passed through as "status": "failed", also with exit code 0.

Reproducer for 1, run from a checkout (offline, mocked HTTP):

from types import SimpleNamespace
from unittest.mock import patch
import responses
from tests.helpers import get_version

bundle = SimpleNamespace(model_type="yolov8n", archive_path=SimpleNamespace(name="roboflow_deploy.zip"))
with responses.RequestsMock() as rsps, patch(
    "roboflow.core.version.package_custom_weights_interactive", return_value=bundle
):
    rsps.add(responses.GET, "https://api.roboflow.com/Test Workspace Name/Test Project Name/1/uploadModel", status=500)
    print(get_version().deploy("yolov8n", "/tmp/weights", "weights/best.pt"))  # prints the error, then None

With the same mock and roboflow.Roboflow patched to return that version, roboflow --json model upload -p proj -v 1 -t yolov8n -m <dir> exits 0, and stdout is the printed error followed by {"status": "uploaded"}. For 2: with Project.upload_image raising ImageUploadError for every image, roboflow --json image upload <dir with 3 images> -p proj exits 0 and prints three [ERR] lines followed by {"status": "imported", "count": 3}.

Suggested behavior: raise RoboflowError from both _upload_zip methods (keeping the printed hints as the message) and let the CLI report it through output_error. For upload_dataset, return a summary (uploaded, duplicates, failed with reasons) and let the CLI exit non-zero when anything failed; treat a zip status failed as an error.

I'm happy to send a PR with tests for part 1. Part 2 changes a return value, so I'd like to hear your preference first. Related: #528 (annotation retries), #302.

cc @leeclemnet @digaobarbosa

Lingua principale
Python
Stelle
633
Fork
141
Merge medio
1g 19h
PR unite (30g)
14

Preparare l'ambiente

Apri in Codespaces

Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di roboflow/roboflow-python

Tutte le issue di roboflow/roboflow-python

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.