Failed uploads are reported as success: Version.deploy() / Workspace.deploy_model() don't raise, and roboflow model upload / roboflow image upload <dir> exit 0
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
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).
Version._upload_zip()andWorkspace._upload_zip()wrap both the request for the signed upload URL and the PUT intry/except Exception: print(...).Version.deploy()andWorkspace.deploy_model()therefore return normally when the upload failed, androboflow model upload(_upload_modelinroboflow/cli/handlers/model.py) prints{"status": "uploaded"}and exits 0. The 429 branch raises aRuntimeErrorinside the sametry, so it is swallowed too; since a version can own several models (#497), its message may also be outdated.Workspace.upload_dataset()(per-image flow) prints[ERR] <path> (...)for each failed image and returnsNone.roboflow image upload <dir>(_handle_upload_directoryinroboflow/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 statusfailedis 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
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de roboflow/roboflow-python
-
`--json` output is not valid JSON for `search --export`, `image upload <dir>`, `model upload` and `version download`Posiblemente ocupada @cdeil la tomó hace 3 días. Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 20/100
roboflow/roboflow-python#546 ·
Los mantenedores suelen responder en 1 día
-
RLE segmentation mask visible in dataset thumbnail, but invisible in annotation preview/editorAbierto
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
roboflow/roboflow-python#505 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 30/100
roboflow/roboflow-python#433 ·
Los mantenedores suelen responder en 1 día
-
Dataset Download StuckAbierto
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
roboflow/roboflow-python#429 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
roboflow/roboflow-python#427 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de roboflow/roboflow-python
Issues similares
-
Update Python support to 3.15Abiertopython-version
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día
-
bug javascript P2-medium python release:v3.1
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
adrirubio/claude-deck#546 ·
Los mantenedores suelen responder en 1 día
-
area: desktop area: website priority: P2 type: feature
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
appandflow/stim#3411 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 Menos de una hora Aptitud para principiantes 88/100
baptistehamon/lsapy#185 ·
Los mantenedores suelen responder en 1 día