From c371c953d5e042bb4dbba533facf472b1f09e672 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Sun, 26 May 2024 05:41:07 +0200 Subject: [PATCH] Handle YouTube test ConnectionErrors (#13133) Co-authored-by: UltralyticsAssistant --- .gitignore | 1 - tests/test_cli.py | 3 +-- tests/test_cuda.py | 7 +++---- tests/test_engine.py | 3 +-- tests/test_exports.py | 2 +- tests/test_integrations.py | 3 +-- tests/test_python.py | 20 ++++++++++++-------- 7 files changed, 19 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index 42eccd65060..1b68ec6b2c0 100644 --- a/.gitignore +++ b/.gitignore @@ -141,7 +141,6 @@ dmypy.json datasets/ runs/ wandb/ -tests/ .DS_Store # Neural Network weights ----------------------------------------------------------------------------------------------- diff --git a/tests/test_cli.py b/tests/test_cli.py index 24eab756538..3f710c3c897 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -4,11 +4,10 @@ import pytest +from tests import CUDA_DEVICE_COUNT, CUDA_IS_AVAILABLE from ultralytics.cfg import TASK2DATA, TASK2MODEL, TASKS from ultralytics.utils import ASSETS, WEIGHTS_DIR, checks -from tests import CUDA_DEVICE_COUNT, CUDA_IS_AVAILABLE - # Constants TASK_MODEL_DATA = [(task, WEIGHTS_DIR / TASK2MODEL[task], TASK2DATA[task]) for task in TASKS] MODELS = [WEIGHTS_DIR / TASK2MODEL[task] for task in TASKS] diff --git a/tests/test_cuda.py b/tests/test_cuda.py index e3de070d6bf..31d838cccd9 100644 --- a/tests/test_cuda.py +++ b/tests/test_cuda.py @@ -1,16 +1,15 @@ # Ultralytics YOLO 🚀, AGPL-3.0 license -from pathlib import Path from itertools import product +from pathlib import Path import pytest import torch +from tests import CUDA_DEVICE_COUNT, CUDA_IS_AVAILABLE, MODEL, SOURCE from ultralytics import YOLO -from ultralytics.utils import ASSETS, WEIGHTS_DIR from ultralytics.cfg import TASK2DATA, TASK2MODEL, TASKS - -from tests import CUDA_DEVICE_COUNT, CUDA_IS_AVAILABLE, MODEL, SOURCE +from ultralytics.utils import ASSETS, WEIGHTS_DIR def test_checks(): diff --git a/tests/test_engine.py b/tests/test_engine.py index cc21a4feaa1..60c2273f696 100644 --- a/tests/test_engine.py +++ b/tests/test_engine.py @@ -3,14 +3,13 @@ import sys from unittest import mock +from tests import MODEL from ultralytics import YOLO from ultralytics.cfg import get_cfg from ultralytics.engine.exporter import Exporter from ultralytics.models.yolo import classify, detect, segment from ultralytics.utils import ASSETS, DEFAULT_CFG, WEIGHTS_DIR -from tests import MODEL - def test_func(*args): # noqa """Test function callback.""" diff --git a/tests/test_exports.py b/tests/test_exports.py index 2a500a7198c..fb6851775e8 100644 --- a/tests/test_exports.py +++ b/tests/test_exports.py @@ -7,6 +7,7 @@ import pytest +from tests import MODEL, SOURCE from ultralytics import YOLO from ultralytics.cfg import TASK2DATA, TASK2MODEL, TASKS from ultralytics.utils import ( @@ -18,7 +19,6 @@ checks, ) from ultralytics.utils.torch_utils import TORCH_1_9, TORCH_1_13 -from tests import MODEL, SOURCE def test_export_torchscript(): diff --git a/tests/test_integrations.py b/tests/test_integrations.py index 74ebc690b80..f2fa4836582 100644 --- a/tests/test_integrations.py +++ b/tests/test_integrations.py @@ -8,12 +8,11 @@ import pytest +from tests import MODEL, SOURCE, TMP from ultralytics import YOLO, download from ultralytics.utils import DATASETS_DIR, SETTINGS from ultralytics.utils.checks import check_requirements -from tests import MODEL, SOURCE, TMP - @pytest.mark.skipif(not check_requirements("ray", install=False), reason="ray[tune] not installed") def test_model_ray_tune(): diff --git a/tests/test_python.py b/tests/test_python.py index fb6f36efd7f..2687b1d3739 100644 --- a/tests/test_python.py +++ b/tests/test_python.py @@ -7,27 +7,28 @@ import cv2 import numpy as np import pytest +import requests import torch import yaml from PIL import Image +from tests import CFG, IS_TMP_WRITEABLE, MODEL, SOURCE, TMP from ultralytics import RTDETR, YOLO -from ultralytics.cfg import MODELS, TASKS, TASK2DATA +from ultralytics.cfg import MODELS, TASK2DATA, TASKS from ultralytics.data.build import load_inference_source from ultralytics.utils import ( ASSETS, DEFAULT_CFG, DEFAULT_CFG_PATH, + LOGGER, ONLINE, ROOT, WEIGHTS_DIR, WINDOWS, - Retry, checks, ) -from ultralytics.utils.downloads import download, is_url +from ultralytics.utils.downloads import download from ultralytics.utils.torch_utils import TORCH_1_9 -from tests import CFG, IS_TMP_WRITEABLE, MODEL, SOURCE, TMP def test_model_forward(): @@ -130,16 +131,19 @@ def test_predict_grey_and_4ch(): @pytest.mark.slow @pytest.mark.skipif(not ONLINE, reason="environment is offline") -@pytest.mark.skipif(not is_url("https://youtu.be/G17sBkb38XQ"), reason="YouTube URL issue") -@Retry(times=3, delay=10) def test_youtube(): """ Test YouTube inference. - Marked --slow to reduce YouTube API rate limits risk. + Note: YouTube connection errors frequently occur during this test due to + the nature of network instability or YouTube server availability issues. + These errors are caught and logged to avoid test failures caused by external factors. """ model = YOLO(MODEL) - model.predict("https://youtu.be/G17sBkb38XQ", imgsz=96, save=True) + try: + model.predict("https://youtu.be/G17sBkb38XQ", imgsz=96, save=True) + except (requests.exceptions.ConnectionError, requests.exceptions.HTTPError) as e: + LOGGER.warning(f"YouTube connection error: {e}") @pytest.mark.skipif(not ONLINE, reason="environment is offline")