Failed uploads are reported as success: Version.deploy() / Workspace.deploy_model() don't raise, and roboflow model upload / roboflow image upload <dir> exit 0
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
- #554 de @tonylampada — fechado sem integrar
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 55/100
Direção de pesquisa
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.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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
- Linguagem predominante
- Python
- Estrelas
- 634
- Forks
- 144
- Merge médio
- 1d 19h
- PRs com merge (30d)
- 18
Preparar o ambiente
Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.
- Sem Dockerfile nem arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de roboflow/roboflow-python
-
`--json` output is not valid JSON for `search --export`, `image upload <dir>`, `model upload` and `version download`Talvez já em andamento @cdeil assumiu há 8 dias. Aberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 20/100
roboflow/roboflow-python#546 ·
Mantenedores costumam responder em até 1 dia
-
RLE segmentation mask visible in dataset thumbnail, but invisible in annotation preview/editorAberta
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 45/100
roboflow/roboflow-python#505 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 30/100
roboflow/roboflow-python#433 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dataset Download StuckAberta
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 25/100
roboflow/roboflow-python#429 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 35/100
roboflow/roboflow-python#427 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
Todas as issues de roboflow/roboflow-python
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
common-workflow-language/cwl-utils#477 ·
Mantenedores costumam responder em até 1 dia
-
Add dependabotAbertafeat
Dificuldade 2/5 Menos de uma hora Facilidade para iniciantes 72/100
open-nudge/opentemplate#204 ·
Mantenedores costumam responder em até 1 dia
-
github-stale-ci-pr-closer: KV state is double-wrapped, never persists, and hits the depth-32 limitTalvez já em andamento @VascoSch92 assumiu hoje. Abertapriority:medium ready-for-dev
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
OpenHands/extensions#781 ·
Mantenedores costumam responder em até 1 dia
-
bug good first issue
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
Mantenedores costumam responder em até 1 dia
-
curriculum documentation quality
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
githubnext/gh-aw-workshop#4638 ·
Mantenedores costumam responder em até 1 dia