Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de 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

Abierto
#545 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
55/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
python
Área
api, cli

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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

Lenguaje dominante
Python
Estrellas
633
Forks
141
Merge medio
1 d 19 h
PR fusionados (30 d)
14

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de roboflow/roboflow-python

Todos los issues de roboflow/roboflow-python

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.