diff --git a/.github/workflows/python-package-shared.yml b/.github/workflows/python-package-shared.yml index d0d2d1c8d..92971c2e7 100644 --- a/.github/workflows/python-package-shared.yml +++ b/.github/workflows/python-package-shared.yml @@ -15,7 +15,7 @@ on: test-env: required: true type: string - fixture-profile: + fixture-profile: required: true type: boolean @@ -30,9 +30,12 @@ jobs: with: rye-version: ${{ vars.RYE_VERSION }} python-version: ${{ inputs.python-version }} + - name: MyPy Type Checking + working-directory: libs/labelbox + run: rye run mypy-lint - name: Linting working-directory: libs/labelbox - run: rye run lint + run: rye lint integration: runs-on: ubuntu-latest concurrency: @@ -75,4 +78,4 @@ jobs: run: | rye sync -f --features labelbox/data rye run unit -n 32 - rye run data -n 32 \ No newline at end of file + rye run data -n 32 diff --git a/libs/labelbox/src/labelbox/__init__.py b/libs/labelbox/src/labelbox/__init__.py index bcd1f9fee..ecfed264d 100644 --- a/libs/labelbox/src/labelbox/__init__.py +++ b/libs/labelbox/src/labelbox/__init__.py @@ -2,44 +2,3 @@ __version__ = "3.75.1" -from labelbox.client import Client -from labelbox.schema.project import Project -from labelbox.schema.model import Model -from labelbox.schema.model_config import ModelConfig -from labelbox.schema.bulk_import_request import BulkImportRequest -from labelbox.schema.annotation_import import MALPredictionImport, MEAPredictionImport, LabelImport, MEAToMALPredictionImport -from labelbox.schema.dataset import Dataset -from labelbox.schema.data_row import DataRow -from labelbox.schema.catalog import Catalog -from labelbox.schema.enums import AnnotationImportState -from labelbox.schema.label import Label -from labelbox.schema.batch import Batch -from labelbox.schema.review import Review -from labelbox.schema.user import User -from labelbox.schema.organization import Organization -from labelbox.schema.task import Task -from labelbox.schema.export_task import StreamType, ExportTask, JsonConverter, JsonConverterOutput, FileConverter, FileConverterOutput, BufferedJsonConverterOutput -from labelbox.schema.labeling_frontend import LabelingFrontend, LabelingFrontendOptions -from labelbox.schema.asset_attachment import AssetAttachment -from labelbox.schema.webhook import Webhook -from labelbox.schema.ontology import Ontology, OntologyBuilder, Classification, Option, Tool, FeatureSchema -from labelbox.schema.ontology import PromptResponseClassification -from labelbox.schema.ontology import ResponseOption -from labelbox.schema.role import Role, ProjectRole -from labelbox.schema.invite import Invite, InviteLimit -from labelbox.schema.data_row_metadata import DataRowMetadataOntology, DataRowMetadataField, DataRowMetadata, DeleteDataRowMetadata -from labelbox.schema.model_run import ModelRun, DataSplit -from labelbox.schema.benchmark import Benchmark -from labelbox.schema.iam_integration import IAMIntegration -from labelbox.schema.resource_tag import ResourceTag -from labelbox.schema.project_model_config import ProjectModelConfig -from labelbox.schema.project_resource_tag import ProjectResourceTag -from labelbox.schema.media_type import MediaType -from labelbox.schema.slice import Slice, CatalogSlice, ModelSlice -from labelbox.schema.queue_mode import QueueMode -from labelbox.schema.task_queue import TaskQueue -from labelbox.schema.label_score import LabelScore -from labelbox.schema.identifiables import UniqueIds, GlobalKeys, DataRowIds -from labelbox.schema.identifiable import UniqueId, GlobalKey -from labelbox.schema.ontology_kind import OntologyKind -from labelbox.schema.project_overview import ProjectOverview, ProjectOverviewDetailed diff --git a/libs/labelbox/src/labelbox/client.py b/libs/labelbox/src/labelbox/client.py index 76d6636e3..e75de38a5 100644 --- a/libs/labelbox/src/labelbox/client.py +++ b/libs/labelbox/src/labelbox/client.py @@ -24,7 +24,6 @@ from labelbox.orm.model import Entity, Field from labelbox.pagination import PaginatedCollection from labelbox.schema import role -from labelbox.schema.conflict_resolution_strategy import ConflictResolutionStrategy from labelbox.schema.data_row import DataRow from labelbox.schema.catalog import Catalog from labelbox.schema.data_row_metadata import DataRowMetadataOntology @@ -259,7 +258,7 @@ def check_errors(keywords, *path): def get_error_status_code(error: dict) -> int: try: return int(error["extensions"].get("exception").get("status")) - except: + except: # noqa: E722 return 500 if check_errors(["AUTHENTICATION_ERROR"], "extensions", @@ -454,7 +453,7 @@ def upload_data(self, errors = response.json().get("errors", []) error_msg = next(iter(errors), {}).get("message", "Unknown error") - except Exception as e: + except Exception: error_msg = "Unknown error" raise labelbox.exceptions.LabelboxError( "Failed to upload, message: %s" % error_msg) @@ -538,7 +537,7 @@ def _get_all(self, db_object_type, where, filter_deleted=True): An iterable of `db_object_type` instances. """ if filter_deleted: - not_deleted = db_object_type.deleted == False + not_deleted = db_object_type.deleted is False where = not_deleted if where is None else where & not_deleted query_str, params = query.get_all(db_object_type, where) @@ -742,7 +741,7 @@ def create_dataset(self, if not validation_result['validateDataset']['valid']: raise labelbox.exceptions.LabelboxError( - f"IAMIntegration was not successfully added to the dataset." + "IAMIntegration was not successfully added to the dataset." ) except Exception as e: dataset.delete() @@ -2072,11 +2071,11 @@ def delete_feature_schema_from_ontology( if response.status_code == requests.codes.ok: response_json = response.json() - if response_json['archived'] == True: + if response_json['archived'] is True: logger.info( 'Feature schema was archived from the ontology because it had associated labels.' ) - elif response_json['deleted'] == True: + elif response_json['deleted'] is True: logger.info( 'Feature schema was successfully removed from the ontology') result = DeleteFeatureFromOntologyResult() diff --git a/libs/labelbox/src/labelbox/data/annotation_types/__init__.py b/libs/labelbox/src/labelbox/data/annotation_types/__init__.py index 85b7ae1af..584ba8795 100644 --- a/libs/labelbox/src/labelbox/data/annotation_types/__init__.py +++ b/libs/labelbox/src/labelbox/data/annotation_types/__init__.py @@ -1,66 +1,10 @@ -from .geometry import Line -from .geometry import Point -from .geometry import Mask -from .geometry import Polygon -from .geometry import Rectangle -from .geometry import Geometry -from .geometry import DocumentRectangle -from .geometry import RectangleUnit -from .annotation import ClassificationAnnotation -from .annotation import ObjectAnnotation -from .relationship import RelationshipAnnotation -from .relationship import Relationship -from .video import VideoClassificationAnnotation -from .video import VideoObjectAnnotation -from .video import DICOMObjectAnnotation -from .video import GroupKey -from .video import MaskFrame -from .video import MaskInstance -from .video import VideoMaskAnnotation -from .video import DICOMMaskAnnotation -from .ner import ConversationEntity -from .ner import DocumentEntity -from .ner import DocumentTextSelection -from .ner import TextEntity -from .classification import Checklist -from .classification import ClassificationAnswer -from .classification import Dropdown -from .classification import Radio -from .classification import Text -from .data import AudioData -from .data import ConversationData -from .data import DicomData -from .data import DocumentData -from .data import HTMLData -from .data import ImageData -from .data import MaskData -from .data import TextData -from .data import VideoData -from .data import LlmPromptResponseCreationData -from .data import LlmPromptCreationData -from .data import LlmResponseCreationData -from .label import Label -from .collection import LabelGenerator -from .metrics import ScalarMetric -from .metrics import ScalarMetricAggregation -from .metrics import ConfusionMatrixMetric -from .metrics import ConfusionMatrixAggregation -from .metrics import ScalarMetricValue -from .metrics import ConfusionMatrixMetricValue -from .data.tiled_image import EPSG -from .data.tiled_image import EPSGTransformer -from .data.tiled_image import TiledBounds -from .data.tiled_image import TiledImageData -from .data.tiled_image import TileLayer -from .llm_prompt_response.prompt import PromptText -from .llm_prompt_response.prompt import PromptClassificationAnnotation \ No newline at end of file diff --git a/libs/labelbox/src/labelbox/data/annotation_types/classification/__init__.py b/libs/labelbox/src/labelbox/data/annotation_types/classification/__init__.py index c396a510f..e69de29bb 100644 --- a/libs/labelbox/src/labelbox/data/annotation_types/classification/__init__.py +++ b/libs/labelbox/src/labelbox/data/annotation_types/classification/__init__.py @@ -1,2 +0,0 @@ -from .classification import (Checklist, ClassificationAnswer, Dropdown, Radio, - Text) diff --git a/libs/labelbox/src/labelbox/data/annotation_types/classification/classification.py b/libs/labelbox/src/labelbox/data/annotation_types/classification/classification.py index 9a1867ff2..dc4e38bfc 100644 --- a/libs/labelbox/src/labelbox/data/annotation_types/classification/classification.py +++ b/libs/labelbox/src/labelbox/data/annotation_types/classification/classification.py @@ -1,13 +1,9 @@ -from typing import Any, Dict, List, Union, Optional +from typing import Any, Dict, List, Union, Optional, Literal import warnings from labelbox.data.annotation_types.base_annotation import BaseAnnotation from labelbox.data.mixins import ConfidenceMixin, CustomMetricsMixin -try: - from typing import Literal -except: - from typing_extensions import Literal from labelbox import pydantic_compat from ..feature import FeatureSchema diff --git a/libs/labelbox/src/labelbox/data/annotation_types/collection.py b/libs/labelbox/src/labelbox/data/annotation_types/collection.py index 04c78a583..64eeaa9fd 100644 --- a/libs/labelbox/src/labelbox/data/annotation_types/collection.py +++ b/libs/labelbox/src/labelbox/data/annotation_types/collection.py @@ -1,14 +1,10 @@ import logging -from concurrent.futures import ThreadPoolExecutor, as_completed -from typing import Callable, Generator, Iterable, Union, Optional -from uuid import uuid4 +from typing import Callable, Generator, Iterable, Union import warnings -from tqdm import tqdm from labelbox.schema import ontology from labelbox.orm.model import Entity -from ..ontology import get_classifications, get_tools from ..generator import PrefetchGenerator from .label import Label diff --git a/libs/labelbox/src/labelbox/data/annotation_types/data/__init__.py b/libs/labelbox/src/labelbox/data/annotation_types/data/__init__.py index 99978caac..e69de29bb 100644 --- a/libs/labelbox/src/labelbox/data/annotation_types/data/__init__.py +++ b/libs/labelbox/src/labelbox/data/annotation_types/data/__init__.py @@ -1,12 +0,0 @@ -from .audio import AudioData -from .conversation import ConversationData -from .dicom import DicomData -from .document import DocumentData -from .html import HTMLData -from .raster import ImageData -from .raster import MaskData -from .text import TextData -from .video import VideoData -from .llm_prompt_response_creation import LlmPromptResponseCreationData -from .llm_prompt_creation import LlmPromptCreationData -from .llm_response_creation import LlmResponseCreationData \ No newline at end of file diff --git a/libs/labelbox/src/labelbox/data/annotation_types/data/conversation.py b/libs/labelbox/src/labelbox/data/annotation_types/data/conversation.py index 302b2c487..f14c9cca5 100644 --- a/libs/labelbox/src/labelbox/data/annotation_types/data/conversation.py +++ b/libs/labelbox/src/labelbox/data/annotation_types/data/conversation.py @@ -1,5 +1,4 @@ from labelbox.typing_imports import Literal -from labelbox.utils import _NoCoercionMixin from .base_data import BaseData diff --git a/libs/labelbox/src/labelbox/data/annotation_types/data/raster.py b/libs/labelbox/src/labelbox/data/annotation_types/data/raster.py index 94b8a2a7e..82748dfc4 100644 --- a/libs/labelbox/src/labelbox/data/annotation_types/data/raster.py +++ b/libs/labelbox/src/labelbox/data/annotation_types/data/raster.py @@ -163,7 +163,7 @@ def validate_args(cls, values): arr = values.get("arr") uid = values.get('uid') global_key = values.get('global_key') - if uid == file_path == im_bytes == url == global_key == None and arr is None: + if uid == file_path == im_bytes == url == global_key is None and arr is None: raise ValueError( "One of `file_path`, `im_bytes`, `url`, `uid`, `global_key` or `arr` required." ) @@ -179,7 +179,9 @@ def validate_args(cls, values): return values def __repr__(self) -> str: - symbol_or_none = lambda data: '...' if data is not None else None + def symbol_or_none(data): + return '...' if data is not None else None + return f"{self.__class__.__name__}(im_bytes={symbol_or_none(self.im_bytes)}," \ f"file_path={self.file_path}," \ f"url={self.url}," \ diff --git a/libs/labelbox/src/labelbox/data/annotation_types/data/text.py b/libs/labelbox/src/labelbox/data/annotation_types/data/text.py index e46eee507..21913a0cd 100644 --- a/libs/labelbox/src/labelbox/data/annotation_types/data/text.py +++ b/libs/labelbox/src/labelbox/data/annotation_types/data/text.py @@ -64,7 +64,7 @@ def fetch_remote(self) -> str: """ response = requests.get(self.url) if response.status_code in [500, 502, 503, 504]: - raise labelbox.exceptions.InternalServerError(response.text) + raise InternalServerError(response.text) response.raise_for_status() return response.text @@ -97,7 +97,7 @@ def validate_date(cls, values): url = values.get("url") uid = values.get('uid') global_key = values.get('global_key') - if uid == file_path == text == url == global_key == None: + if uid == file_path == text == url == global_key is None: raise ValueError( "One of `file_path`, `text`, `uid`, `global_key` or `url` required." ) diff --git a/libs/labelbox/src/labelbox/data/annotation_types/data/tiled_image.py b/libs/labelbox/src/labelbox/data/annotation_types/data/tiled_image.py index 6a3bd6988..38eec5b32 100644 --- a/libs/labelbox/src/labelbox/data/annotation_types/data/tiled_image.py +++ b/libs/labelbox/src/labelbox/data/annotation_types/data/tiled_image.py @@ -1,4 +1,3 @@ -from functools import lru_cache import math import logging from enum import Enum @@ -288,7 +287,7 @@ def _fetch_image_for_bounds(self, row.append(tiles[(x, y)].result()) else: row.append(self._fetch_tile(x, y, zoom)) - except: + except: # noqa: E722 row.append( np.zeros(shape=(self.tile_size, self.tile_size, 3), dtype=np.uint8)) diff --git a/libs/labelbox/src/labelbox/data/annotation_types/data/video.py b/libs/labelbox/src/labelbox/data/annotation_types/data/video.py index 3ebda5c4c..596b78dd5 100644 --- a/libs/labelbox/src/labelbox/data/annotation_types/data/video.py +++ b/libs/labelbox/src/labelbox/data/annotation_types/data/video.py @@ -156,7 +156,7 @@ def validate_data(cls, values): uid = values.get("uid") global_key = values.get("global_key") - if uid == file_path == frames == url == global_key == None: + if uid == file_path == frames == url == global_key is None: raise ValueError( "One of `file_path`, `frames`, `uid`, `global_key` or `url` required." ) diff --git a/libs/labelbox/src/labelbox/data/annotation_types/geometry/__init__.py b/libs/labelbox/src/labelbox/data/annotation_types/geometry/__init__.py index cbfdd2c16..e69de29bb 100644 --- a/libs/labelbox/src/labelbox/data/annotation_types/geometry/__init__.py +++ b/libs/labelbox/src/labelbox/data/annotation_types/geometry/__init__.py @@ -1,8 +0,0 @@ -from .line import Line -from .point import Point -from .mask import Mask -from .polygon import Polygon -from .rectangle import Rectangle -from .rectangle import DocumentRectangle -from .rectangle import RectangleUnit -from .geometry import Geometry diff --git a/libs/labelbox/src/labelbox/data/annotation_types/label.py b/libs/labelbox/src/labelbox/data/annotation_types/label.py index cd209a493..2460f3411 100644 --- a/libs/labelbox/src/labelbox/data/annotation_types/label.py +++ b/libs/labelbox/src/labelbox/data/annotation_types/label.py @@ -222,6 +222,6 @@ def validate_union(cls, value): prompt_count+=1 if prompt_count > 1: raise TypeError( - f"Only one prompt annotation is allowed per label" + "Only one prompt annotation is allowed per label" ) return value diff --git a/libs/labelbox/src/labelbox/data/annotation_types/llm_prompt_response/__init__.py b/libs/labelbox/src/labelbox/data/annotation_types/llm_prompt_response/__init__.py index 7c0b63abc..e69de29bb 100644 --- a/libs/labelbox/src/labelbox/data/annotation_types/llm_prompt_response/__init__.py +++ b/libs/labelbox/src/labelbox/data/annotation_types/llm_prompt_response/__init__.py @@ -1,2 +0,0 @@ -from .prompt import PromptText -from .prompt import PromptClassificationAnnotation \ No newline at end of file diff --git a/libs/labelbox/src/labelbox/data/annotation_types/llm_prompt_response/prompt.py b/libs/labelbox/src/labelbox/data/annotation_types/llm_prompt_response/prompt.py index c235526b0..90194248d 100644 --- a/libs/labelbox/src/labelbox/data/annotation_types/llm_prompt_response/prompt.py +++ b/libs/labelbox/src/labelbox/data/annotation_types/llm_prompt_response/prompt.py @@ -1,4 +1,3 @@ -from typing import Union from labelbox.data.annotation_types.base_annotation import BaseAnnotation diff --git a/libs/labelbox/src/labelbox/data/annotation_types/metrics/__init__.py b/libs/labelbox/src/labelbox/data/annotation_types/metrics/__init__.py index 2c7e45178..e69de29bb 100644 --- a/libs/labelbox/src/labelbox/data/annotation_types/metrics/__init__.py +++ b/libs/labelbox/src/labelbox/data/annotation_types/metrics/__init__.py @@ -1,2 +0,0 @@ -from .scalar import ScalarMetric, ScalarMetricAggregation, ScalarMetricValue -from .confusion_matrix import ConfusionMatrixMetric, ConfusionMatrixAggregation, ConfusionMatrixMetricValue diff --git a/libs/labelbox/src/labelbox/data/annotation_types/ner/__init__.py b/libs/labelbox/src/labelbox/data/annotation_types/ner/__init__.py index 58a96c642..e69de29bb 100644 --- a/libs/labelbox/src/labelbox/data/annotation_types/ner/__init__.py +++ b/libs/labelbox/src/labelbox/data/annotation_types/ner/__init__.py @@ -1,3 +0,0 @@ -from .conversation_entity import ConversationEntity -from .document_entity import DocumentEntity, DocumentTextSelection -from .text_entity import TextEntity diff --git a/libs/labelbox/src/labelbox/data/annotation_types/video.py b/libs/labelbox/src/labelbox/data/annotation_types/video.py index 91b258de3..c5d4c0403 100644 --- a/libs/labelbox/src/labelbox/data/annotation_types/video.py +++ b/libs/labelbox/src/labelbox/data/annotation_types/video.py @@ -4,7 +4,6 @@ from labelbox import pydantic_compat from labelbox.data.annotation_types.annotation import ClassificationAnnotation, ObjectAnnotation -from labelbox.data.annotation_types.annotation import ClassificationAnnotation, ObjectAnnotation from labelbox.data.annotation_types.feature import FeatureSchema from labelbox.data.mixins import ConfidenceNotSupportedMixin, CustomMetricsNotSupportedMixin from labelbox.utils import _CamelCaseMixin, is_valid_uri @@ -97,7 +96,7 @@ def validate_args(cls, values): im_bytes = values.get("im_bytes") instance_uri = values.get("instance_uri") - if im_bytes == instance_uri == None: + if im_bytes == instance_uri is None: raise ValueError("One of `instance_uri`, `im_bytes` required.") return values diff --git a/libs/labelbox/src/labelbox/data/generator.py b/libs/labelbox/src/labelbox/data/generator.py index 891dc1315..db4e2c64c 100644 --- a/libs/labelbox/src/labelbox/data/generator.py +++ b/libs/labelbox/src/labelbox/data/generator.py @@ -2,7 +2,6 @@ import threading from queue import Queue from typing import Any, Iterable -import threading logger = logging.getLogger(__name__) diff --git a/libs/labelbox/src/labelbox/data/metrics/__init__.py b/libs/labelbox/src/labelbox/data/metrics/__init__.py index f99fc85a8..e69de29bb 100644 --- a/libs/labelbox/src/labelbox/data/metrics/__init__.py +++ b/libs/labelbox/src/labelbox/data/metrics/__init__.py @@ -1,2 +0,0 @@ -from .confusion_matrix import confusion_matrix_metric, feature_confusion_matrix_metric -from .iou import miou_metric, feature_miou_metric diff --git a/libs/labelbox/src/labelbox/data/metrics/confusion_matrix/__init__.py b/libs/labelbox/src/labelbox/data/metrics/confusion_matrix/__init__.py index f0bdf80f4..e1732bd21 100644 --- a/libs/labelbox/src/labelbox/data/metrics/confusion_matrix/__init__.py +++ b/libs/labelbox/src/labelbox/data/metrics/confusion_matrix/__init__.py @@ -1,2 +1,2 @@ -from .calculation import * -from .confusion_matrix import * +from .calculation import * # noqa: F403 +from .confusion_matrix import * # noqa: F403 \ No newline at end of file diff --git a/libs/labelbox/src/labelbox/data/metrics/confusion_matrix/confusion_matrix.py b/libs/labelbox/src/labelbox/data/metrics/confusion_matrix/confusion_matrix.py index 19caab426..daa9b857e 100644 --- a/libs/labelbox/src/labelbox/data/metrics/confusion_matrix/confusion_matrix.py +++ b/libs/labelbox/src/labelbox/data/metrics/confusion_matrix/confusion_matrix.py @@ -1,15 +1,12 @@ # type: ignore -from collections import defaultdict -from labelbox.data.annotation_types import feature from labelbox.data.annotation_types.metrics import ConfusionMatrixMetric -from typing import List, Optional, Union -from ...annotation_types import (Label, ObjectAnnotation, +from typing import List, Union +from ...annotation_types import (ObjectAnnotation, ClassificationAnnotation) from ..group import get_feature_pairs from .calculation import confusion_matrix from .calculation import feature_confusion_matrix -import numpy as np def confusion_matrix_metric(ground_truths: List[Union[ diff --git a/libs/labelbox/src/labelbox/data/metrics/group.py b/libs/labelbox/src/labelbox/data/metrics/group.py index 5579ac9ce..44b244bd5 100644 --- a/libs/labelbox/src/labelbox/data/metrics/group.py +++ b/libs/labelbox/src/labelbox/data/metrics/group.py @@ -5,14 +5,14 @@ from typing import Dict, List, Tuple, Union from labelbox.data.annotation_types.annotation import ClassificationAnnotation -from labelbox.data.annotation_types.classification.classification import Checklist, ClassificationAnswer, Radio, Text +from labelbox.data.annotation_types.classification.classification import Checklist, Radio, Text try: from typing import Literal except ImportError: from typing_extensions import Literal from ..annotation_types.feature import FeatureSchema -from ..annotation_types import ObjectAnnotation, ClassificationAnnotation, Label +from ..annotation_types import ObjectAnnotation, Label def get_identifying_key( diff --git a/libs/labelbox/src/labelbox/data/metrics/iou/__init__.py b/libs/labelbox/src/labelbox/data/metrics/iou/__init__.py index c522daf61..8e3884a2e 100644 --- a/libs/labelbox/src/labelbox/data/metrics/iou/__init__.py +++ b/libs/labelbox/src/labelbox/data/metrics/iou/__init__.py @@ -1,2 +1,2 @@ -from .calculation import * -from .iou import * +from .calculation import * # noqa: F403 +from .iou import * # noqa: F403 diff --git a/libs/labelbox/src/labelbox/data/serialization/__init__.py b/libs/labelbox/src/labelbox/data/serialization/__init__.py index 6ca25b5d5..e69de29bb 100644 --- a/libs/labelbox/src/labelbox/data/serialization/__init__.py +++ b/libs/labelbox/src/labelbox/data/serialization/__init__.py @@ -1,3 +0,0 @@ -from .labelbox_v1 import LBV1Converter -from .ndjson import NDJsonConverter -from .coco import COCOConverter diff --git a/libs/labelbox/src/labelbox/data/serialization/coco/__init__.py b/libs/labelbox/src/labelbox/data/serialization/coco/__init__.py index 4511e89ee..e69de29bb 100644 --- a/libs/labelbox/src/labelbox/data/serialization/coco/__init__.py +++ b/libs/labelbox/src/labelbox/data/serialization/coco/__init__.py @@ -1 +0,0 @@ -from .converter import COCOConverter diff --git a/libs/labelbox/src/labelbox/data/serialization/coco/annotation.py b/libs/labelbox/src/labelbox/data/serialization/coco/annotation.py index 64742c8e2..10122dc69 100644 --- a/libs/labelbox/src/labelbox/data/serialization/coco/annotation.py +++ b/libs/labelbox/src/labelbox/data/serialization/coco/annotation.py @@ -1,14 +1,7 @@ -from typing import Any, Tuple, List, Union +from typing import Tuple, List, Union from pathlib import Path from collections import defaultdict -import warnings - -from ...annotation_types.relationship import RelationshipAnnotation -from ...annotation_types.metrics.confusion_matrix import ConfusionMatrixMetric -from ...annotation_types.metrics.scalar import ScalarMetric -from ...annotation_types.video import VideoMaskAnnotation -from ...annotation_types.annotation import ObjectAnnotation -from ...annotation_types.classification.classification import ClassificationAnnotation + from .... import pydantic_compat import numpy as np diff --git a/libs/labelbox/src/labelbox/data/serialization/coco/categories.py b/libs/labelbox/src/labelbox/data/serialization/coco/categories.py index 167737c67..d04f3a24a 100644 --- a/libs/labelbox/src/labelbox/data/serialization/coco/categories.py +++ b/libs/labelbox/src/labelbox/data/serialization/coco/categories.py @@ -1,4 +1,3 @@ -import sys from hashlib import md5 from .... import pydantic_compat diff --git a/libs/labelbox/src/labelbox/data/serialization/labelbox_v1/__init__.py b/libs/labelbox/src/labelbox/data/serialization/labelbox_v1/__init__.py index 60814be58..e69de29bb 100644 --- a/libs/labelbox/src/labelbox/data/serialization/labelbox_v1/__init__.py +++ b/libs/labelbox/src/labelbox/data/serialization/labelbox_v1/__init__.py @@ -1 +0,0 @@ -from .converter import LBV1Converter diff --git a/libs/labelbox/src/labelbox/data/serialization/labelbox_v1/converter.py b/libs/labelbox/src/labelbox/data/serialization/labelbox_v1/converter.py index 17595b5e7..6396a9f64 100644 --- a/libs/labelbox/src/labelbox/data/serialization/labelbox_v1/converter.py +++ b/libs/labelbox/src/labelbox/data/serialization/labelbox_v1/converter.py @@ -1,4 +1,3 @@ -from labelbox.data.serialization.labelbox_v1.objects import LBV1Mask from typing import Any, Dict, Generator, Iterable, Union import logging diff --git a/libs/labelbox/src/labelbox/data/serialization/labelbox_v1/label.py b/libs/labelbox/src/labelbox/data/serialization/labelbox_v1/label.py index ee45bc8f0..d0f59e8a0 100644 --- a/libs/labelbox/src/labelbox/data/serialization/labelbox_v1/label.py +++ b/libs/labelbox/src/labelbox/data/serialization/labelbox_v1/label.py @@ -115,7 +115,8 @@ class Config: alias_generator = camel_case -Extra = lambda name: pydantic_compat.Field(None, alias=name, extra_field=True) +def Extra (name: str): + return pydantic_compat.Field(None, alias=name, extra_field=True) class LBV1Label(pydantic_compat.BaseModel): diff --git a/libs/labelbox/src/labelbox/data/serialization/labelbox_v1/objects.py b/libs/labelbox/src/labelbox/data/serialization/labelbox_v1/objects.py index 19f6c0717..645177c9c 100644 --- a/libs/labelbox/src/labelbox/data/serialization/labelbox_v1/objects.py +++ b/libs/labelbox/src/labelbox/data/serialization/labelbox_v1/objects.py @@ -1,8 +1,4 @@ -from typing import Any, Dict, List, Optional, Union, Type -try: - from typing import Literal -except: - from typing_extensions import Literal +from typing import Any, Dict, List, Optional, Union, Type, Literal from labelbox import pydantic_compat import numpy as np diff --git a/libs/labelbox/src/labelbox/data/serialization/ndjson/__init__.py b/libs/labelbox/src/labelbox/data/serialization/ndjson/__init__.py index c65f93b69..e69de29bb 100644 --- a/libs/labelbox/src/labelbox/data/serialization/ndjson/__init__.py +++ b/libs/labelbox/src/labelbox/data/serialization/ndjson/__init__.py @@ -1 +0,0 @@ -from .converter import NDJsonConverter diff --git a/libs/labelbox/src/labelbox/data/serialization/ndjson/label.py b/libs/labelbox/src/labelbox/data/serialization/ndjson/label.py index 9d34c451b..1f0db161a 100644 --- a/libs/labelbox/src/labelbox/data/serialization/ndjson/label.py +++ b/libs/labelbox/src/labelbox/data/serialization/ndjson/label.py @@ -2,7 +2,6 @@ from operator import itemgetter from typing import Dict, Generator, List, Tuple, Union from collections import defaultdict -import warnings from labelbox import pydantic_compat @@ -215,7 +214,7 @@ def _get_segment_frame_ranges( return frame_ranges else: raise ValueError( - f"Video annotations cannot partially have `segment_index` set") + "Video annotations cannot partially have `segment_index` set") @classmethod def _create_video_annotations( diff --git a/libs/labelbox/src/labelbox/data/serialization/ndjson/objects.py b/libs/labelbox/src/labelbox/data/serialization/ndjson/objects.py index fd13a6bf6..573fc691c 100644 --- a/libs/labelbox/src/labelbox/data/serialization/ndjson/objects.py +++ b/libs/labelbox/src/labelbox/data/serialization/ndjson/objects.py @@ -9,7 +9,6 @@ from labelbox import pydantic_compat from PIL import Image -from labelbox.data.annotation_types import feature from labelbox.data.annotation_types.data.video import VideoData @@ -19,7 +18,7 @@ from ...annotation_types.geometry import DocumentRectangle, Rectangle, Polygon, Line, Point, Mask from ...annotation_types.annotation import ClassificationAnnotation, ObjectAnnotation from ...annotation_types.video import VideoMaskAnnotation, DICOMMaskAnnotation, MaskFrame, MaskInstance -from .classification import NDClassification, NDSubclassification, NDSubclassificationType +from .classification import NDSubclassification, NDSubclassificationType from .base import DataRow, NDAnnotation, NDJsonBase diff --git a/libs/labelbox/src/labelbox/data/serialization/ndjson/relationship.py b/libs/labelbox/src/labelbox/data/serialization/ndjson/relationship.py index 82976aedb..7a7a88089 100644 --- a/libs/labelbox/src/labelbox/data/serialization/ndjson/relationship.py +++ b/libs/labelbox/src/labelbox/data/serialization/ndjson/relationship.py @@ -5,7 +5,6 @@ from ...annotation_types.relationship import RelationshipAnnotation from ...annotation_types.relationship import Relationship from .objects import NDObjectType -from .base import DataRow SUPPORTED_ANNOTATIONS = NDObjectType diff --git a/libs/labelbox/src/labelbox/orm/db_object.py b/libs/labelbox/src/labelbox/orm/db_object.py index 326043d32..e19637ccb 100644 --- a/libs/labelbox/src/labelbox/orm/db_object.py +++ b/libs/labelbox/src/labelbox/orm/db_object.py @@ -155,7 +155,7 @@ def _to_many(self, where=None, order_by=None): (self.source.type_name(), rel.name)) if rel.filter_deleted: - not_deleted = rel.destination_type.deleted == False + not_deleted = rel.destination_type.deleted is False where = not_deleted if where is None else where & not_deleted query_string, params = query.relationship( diff --git a/libs/labelbox/src/labelbox/schema/__init__.py b/libs/labelbox/src/labelbox/schema/__init__.py index 32f28e7b6..e69de29bb 100644 --- a/libs/labelbox/src/labelbox/schema/__init__.py +++ b/libs/labelbox/src/labelbox/schema/__init__.py @@ -1,28 +0,0 @@ -import labelbox.schema.asset_attachment -import labelbox.schema.bulk_import_request -import labelbox.schema.annotation_import -import labelbox.schema.benchmark -import labelbox.schema.data_row -import labelbox.schema.dataset -import labelbox.schema.invite -import labelbox.schema.label -import labelbox.schema.labeling_frontend -import labelbox.schema.model -import labelbox.schema.model_run -import labelbox.schema.ontology -import labelbox.schema.organization -import labelbox.schema.project -import labelbox.schema.review -import labelbox.schema.role -import labelbox.schema.task -import labelbox.schema.user -import labelbox.schema.webhook -import labelbox.schema.data_row_metadata -import labelbox.schema.batch -import labelbox.schema.iam_integration -import labelbox.schema.media_type -import labelbox.schema.identifiables -import labelbox.schema.identifiable -import labelbox.schema.catalog -import labelbox.schema.ontology_kind -import labelbox.schema.project_overview \ No newline at end of file diff --git a/libs/labelbox/src/labelbox/schema/batch.py b/libs/labelbox/src/labelbox/schema/batch.py index 313d02c16..32e5f8fbb 100644 --- a/libs/labelbox/src/labelbox/schema/batch.py +++ b/libs/labelbox/src/labelbox/schema/batch.py @@ -1,6 +1,6 @@ from typing import Generator, TYPE_CHECKING -from labelbox.orm.db_object import DbObject, experimental +from labelbox.orm.db_object import DbObject from labelbox.orm import query from labelbox.orm.model import Entity, Field, Relationship from labelbox.exceptions import LabelboxError, ResourceNotFoundError diff --git a/libs/labelbox/src/labelbox/schema/bulk_import_request.py b/libs/labelbox/src/labelbox/schema/bulk_import_request.py index 9c282879e..e7f4120f5 100644 --- a/libs/labelbox/src/labelbox/schema/bulk_import_request.py +++ b/libs/labelbox/src/labelbox/schema/bulk_import_request.py @@ -14,7 +14,6 @@ Type, Set, TYPE_CHECKING) from labelbox import exceptions as lb_exceptions -from labelbox.orm.model import Entity from labelbox import utils from labelbox.orm import query from labelbox.orm.db_object import DbObject diff --git a/libs/labelbox/src/labelbox/schema/catalog.py b/libs/labelbox/src/labelbox/schema/catalog.py index c377703b1..e6c464874 100644 --- a/libs/labelbox/src/labelbox/schema/catalog.py +++ b/libs/labelbox/src/labelbox/schema/catalog.py @@ -1,5 +1,4 @@ from typing import Any, Dict, List, Optional, Tuple, Union -from labelbox.orm.db_object import experimental from labelbox.schema.export_filters import CatalogExportFilters, build_filters from labelbox.schema.export_params import (CatalogExportParams, diff --git a/libs/labelbox/src/labelbox/schema/create_batches_task.py b/libs/labelbox/src/labelbox/schema/create_batches_task.py index eb7b5d150..3de8834e5 100644 --- a/libs/labelbox/src/labelbox/schema/create_batches_task.py +++ b/libs/labelbox/src/labelbox/schema/create_batches_task.py @@ -4,7 +4,6 @@ from labelbox.orm.model import Entity if TYPE_CHECKING: - from labelbox import User def lru_cache() -> Callable[..., Callable[..., Dict[str, Any]]]: pass diff --git a/libs/labelbox/src/labelbox/schema/data_row.py b/libs/labelbox/src/labelbox/schema/data_row.py index b7c9b324d..c71645282 100644 --- a/libs/labelbox/src/labelbox/schema/data_row.py +++ b/libs/labelbox/src/labelbox/schema/data_row.py @@ -1,10 +1,10 @@ import logging from enum import Enum -from typing import TYPE_CHECKING, List, Optional, Tuple, Union, Any +from typing import TYPE_CHECKING, List, Optional, Tuple, Union import json from labelbox.orm import query -from labelbox.orm.db_object import DbObject, Updateable, BulkDeletable, experimental +from labelbox.orm.db_object import DbObject, Updateable, BulkDeletable from labelbox.orm.model import Entity, Field, Relationship from labelbox.schema.asset_attachment import AttachmentType from labelbox.schema.data_row_metadata import DataRowMetadataField # type: ignore diff --git a/libs/labelbox/src/labelbox/schema/data_row_metadata.py b/libs/labelbox/src/labelbox/schema/data_row_metadata.py index 3a6b58706..55e447e05 100644 --- a/libs/labelbox/src/labelbox/schema/data_row_metadata.py +++ b/libs/labelbox/src/labelbox/schema/data_row_metadata.py @@ -397,7 +397,7 @@ def update_enum_option(self, name: str, option: str, schema = self._validate_custom_schema_by_name(name) if schema.kind != DataRowMetadataKind.enum: raise ValueError( - f"Updating Enum option is only supported for Enum metadata schema" + "Updating Enum option is only supported for Enum metadata schema" ) valid_options: List[str] = [o.name for o in schema.options] @@ -757,11 +757,11 @@ def _convert_metadata_field(metadata_field): if isinstance(metadata_field, DataRowMetadataField): return metadata_field elif isinstance(metadata_field, dict): - if not "value" in metadata_field: + if "value" not in metadata_field: raise ValueError( f"Custom metadata field '{metadata_field}' must have a 'value' key" ) - if not "schema_id" in metadata_field and not "name" in metadata_field: + if "schema_id" not in metadata_field and "name" not in metadata_field: raise ValueError( f"Custom metadata field '{metadata_field}' must have either 'schema_id' or 'name' key" ) @@ -901,9 +901,9 @@ def _validate_custom_schema_by_name(self, def _batch_items(iterable: List[Any], size: int) -> Generator[Any, None, None]: - l = len(iterable) - for ndx in range(0, l, size): - yield iterable[ndx:min(ndx + size, l)] + iterable_len = len(iterable) + for ndx in range(0, iterable_len, size): + yield iterable[ndx:min(ndx + size, iterable_len)] def _batch_operations( diff --git a/libs/labelbox/src/labelbox/schema/dataset.py b/libs/labelbox/src/labelbox/schema/dataset.py index 3d026a623..3612dd29f 100644 --- a/libs/labelbox/src/labelbox/schema/dataset.py +++ b/libs/labelbox/src/labelbox/schema/dataset.py @@ -1,9 +1,7 @@ -from datetime import datetime -from typing import Dict, Generator, List, Optional, Any, Final, Tuple, Union +from typing import Dict, Generator, List, Optional, Any, Tuple, Union import os import json import logging -from collections.abc import Iterable from string import Template import time import warnings @@ -17,26 +15,21 @@ from labelbox.exceptions import InvalidQueryError, LabelboxError, ResourceNotFoundError, ResourceCreationError from labelbox.orm.comparison import Comparison -from labelbox.orm.db_object import DbObject, Updateable, Deletable, experimental +from labelbox.orm.db_object import DbObject, Updateable, Deletable from labelbox.orm.model import Entity, Field, Relationship from labelbox.orm import query -from labelbox.exceptions import MalformedQueryException from labelbox.pagination import PaginatedCollection -from labelbox.pydantic_compat import BaseModel from labelbox.schema.data_row import DataRow -from labelbox.schema.embedding import EmbeddingVector from labelbox.schema.export_filters import DatasetExportFilters, build_filters from labelbox.schema.export_params import CatalogExportParams, validate_catalog_export_params from labelbox.schema.export_task import ExportTask from labelbox.schema.identifiable import UniqueId, GlobalKey from labelbox.schema.task import Task, DataUpsertTask -from labelbox.schema.user import User from labelbox.schema.iam_integration import IAMIntegration from labelbox.schema.internal.data_row_upsert_item import (DataRowItemBase, DataRowUpsertItem, DataRowCreateItem) import labelbox.schema.internal.data_row_uploader as data_row_uploader -from labelbox.schema.internal.descriptor_file_creator import DescriptorFileCreator from labelbox.schema.internal.datarow_upload_constants import ( FILE_UPLOAD_THREAD_COUNT, UPSERT_CHUNK_SIZE_BYTES) @@ -334,7 +327,7 @@ def data_row_for_external_id(self, external_id) -> "DataRow": limit=2) if len(data_rows) > 1: logger.warning( - f"More than one data_row has the provided external_id : `%s`. Use function data_rows_for_external_id to fetch all", + "More than one data_row has the provided external_id : `%s`. Use function data_rows_for_external_id to fetch all", external_id) return data_rows[0] @@ -688,7 +681,7 @@ def add_iam_integration( self.client.get_organization().get_iam_integrations() if integration.uid == iam_integration_id ][0] - except: + except: # noqa: E722 raise LabelboxError( f"Can't retrieve IAM integration {iam_integration_id}") diff --git a/libs/labelbox/src/labelbox/schema/export_filters.py b/libs/labelbox/src/labelbox/schema/export_filters.py index aa97cbced..3129b3bce 100644 --- a/libs/labelbox/src/labelbox/schema/export_filters.py +++ b/libs/labelbox/src/labelbox/schema/export_filters.py @@ -1,12 +1,7 @@ -import sys - from datetime import datetime, timezone from typing import Collection, Dict, Tuple, List, Optional -from labelbox.typing_imports import Literal -if sys.version_info >= (3, 8): - from typing import TypedDict -else: - from typing_extensions import TypedDict +from typing import TypedDict, Literal + SEARCH_LIMIT_PER_EXPORT_V2 = 2_000 ISO_8061_FORMAT = "%Y-%m-%dT%H:%M:%S%z" diff --git a/libs/labelbox/src/labelbox/schema/export_params.py b/libs/labelbox/src/labelbox/schema/export_params.py index 5229e2bfa..6a1b3cf8e 100644 --- a/libs/labelbox/src/labelbox/schema/export_params.py +++ b/libs/labelbox/src/labelbox/schema/export_params.py @@ -2,14 +2,13 @@ from typing import Optional, List -EXPORT_LIMIT = 30 - from labelbox.schema.media_type import MediaType if sys.version_info >= (3, 8): from typing import TypedDict else: from typing_extensions import TypedDict +EXPORT_LIMIT = 30 class DataRowParams(TypedDict): data_row_details: Optional[bool] diff --git a/libs/labelbox/src/labelbox/schema/foundry/foundry_client.py b/libs/labelbox/src/labelbox/schema/foundry/foundry_client.py index c184a2a81..4affb3dd4 100644 --- a/libs/labelbox/src/labelbox/schema/foundry/foundry_client.py +++ b/libs/labelbox/src/labelbox/schema/foundry/foundry_client.py @@ -52,7 +52,7 @@ def _get_app(self, id: str) -> App: try: response = self.client.execute(query_str, params) - except exceptions.InvalidQueryError as e: + except exceptions.InvalidQueryError: raise exceptions.ResourceNotFoundError(App, params) except Exception as e: raise exceptions.LabelboxError(f'Unable to get app with id {id}', e) diff --git a/libs/labelbox/src/labelbox/schema/internal/data_row_uploader.py b/libs/labelbox/src/labelbox/schema/internal/data_row_uploader.py index 7d4224eb9..caaa9bd73 100644 --- a/libs/labelbox/src/labelbox/schema/internal/data_row_uploader.py +++ b/libs/labelbox/src/labelbox/schema/internal/data_row_uploader.py @@ -1,9 +1,8 @@ -from concurrent.futures import ThreadPoolExecutor, as_completed from typing import List from labelbox import pydantic_compat -from labelbox.schema.internal.data_row_upsert_item import DataRowItemBase, DataRowUpsertItem, DataRowCreateItem +from labelbox.schema.internal.data_row_upsert_item import DataRowItemBase from labelbox.schema.internal.descriptor_file_creator import DescriptorFileCreator diff --git a/libs/labelbox/src/labelbox/schema/internal/data_row_upsert_item.py b/libs/labelbox/src/labelbox/schema/internal/data_row_upsert_item.py index 5ae001983..371c40269 100644 --- a/libs/labelbox/src/labelbox/schema/internal/data_row_upsert_item.py +++ b/libs/labelbox/src/labelbox/schema/internal/data_row_upsert_item.py @@ -2,7 +2,6 @@ from typing import List, Tuple, Optional -from labelbox.pydantic_compat import BaseModel from labelbox.schema.identifiable import UniqueId, GlobalKey from labelbox import pydantic_compat from labelbox.schema.data_row import DataRow diff --git a/libs/labelbox/src/labelbox/schema/internal/descriptor_file_creator.py b/libs/labelbox/src/labelbox/schema/internal/descriptor_file_creator.py index 07128fdd1..dbf0f9de6 100644 --- a/libs/labelbox/src/labelbox/schema/internal/descriptor_file_creator.py +++ b/libs/labelbox/src/labelbox/schema/internal/descriptor_file_creator.py @@ -1,19 +1,17 @@ import json import os -import sys from concurrent.futures import ThreadPoolExecutor, as_completed from typing import Iterable, List, Generator from labelbox.exceptions import InvalidQueryError from labelbox.exceptions import InvalidAttributeError -from labelbox.exceptions import MalformedQueryException from labelbox.orm.model import Entity from labelbox.orm.model import Field from labelbox.schema.embedding import EmbeddingVector from labelbox.schema.internal.datarow_upload_constants import ( FILE_UPLOAD_THREAD_COUNT) -from labelbox.schema.internal.data_row_upsert_item import DataRowItemBase, DataRowUpsertItem +from labelbox.schema.internal.data_row_upsert_item import DataRowItemBase from typing import TYPE_CHECKING if TYPE_CHECKING: @@ -144,7 +142,7 @@ def check_message_keys(message): "canLabel" ]) for key in message.keys(): - if not key in accepted_message_keys: + if key not in accepted_message_keys: raise KeyError( f"Invalid {key} key found! Accepted keys in messages list is {accepted_message_keys}" ) diff --git a/libs/labelbox/src/labelbox/schema/model_run.py b/libs/labelbox/src/labelbox/schema/model_run.py index 7f8714008..2b1097d76 100644 --- a/libs/labelbox/src/labelbox/schema/model_run.py +++ b/libs/labelbox/src/labelbox/schema/model_run.py @@ -17,7 +17,7 @@ from labelbox.schema.conflict_resolution_strategy import ConflictResolutionStrategy from labelbox.schema.export_params import ModelRunExportParams from labelbox.schema.export_task import ExportTask -from labelbox.schema.identifiables import UniqueIds, GlobalKeys, DataRowIds +from labelbox.schema.identifiables import GlobalKeys, DataRowIds from labelbox.schema.send_to_annotate_params import SendToAnnotateFromModelParams, build_destination_task_queue_input, \ build_predictions_input from labelbox.schema.task import Task @@ -176,7 +176,7 @@ def _wait_until_done(self, status_fn, timeout_seconds=120, sleep_time=5): if res['status'] == 'COMPLETE': return True elif res['status'] == 'FAILED': - raise Exception(f"Job failed.") + raise Exception("Job failed.") timeout_seconds -= sleep_time if timeout_seconds <= 0: raise TimeoutError( diff --git a/libs/labelbox/src/labelbox/schema/ontology.py b/libs/labelbox/src/labelbox/schema/ontology.py index 985405059..6b3d250b4 100644 --- a/libs/labelbox/src/labelbox/schema/ontology.py +++ b/libs/labelbox/src/labelbox/schema/ontology.py @@ -10,6 +10,7 @@ from labelbox.orm.db_object import DbObject from labelbox.orm.model import Field, Relationship from labelbox import pydantic_compat +from labelbox import Project import json FeatureSchemaId: Type[str] = pydantic_compat.constr(min_length=25, @@ -578,7 +579,7 @@ def _update_colors(self): self.tools[index].color = '#%02x%02x%02x' % rgb_color @classmethod - def from_project(cls, project: "project.Project") -> "OntologyBuilder": + def from_project(cls, project: Project) -> "OntologyBuilder": ontology = project.ontology().normalized return cls.from_dict(ontology) diff --git a/libs/labelbox/src/labelbox/schema/organization.py b/libs/labelbox/src/labelbox/schema/organization.py index 3a5e23efc..f3b84ece4 100644 --- a/libs/labelbox/src/labelbox/schema/organization.py +++ b/libs/labelbox/src/labelbox/schema/organization.py @@ -1,4 +1,3 @@ -import json from typing import TYPE_CHECKING, List, Optional, Dict from labelbox.exceptions import LabelboxError diff --git a/libs/labelbox/src/labelbox/schema/project.py b/libs/labelbox/src/labelbox/schema/project.py index a07d8e19c..c2126547d 100644 --- a/libs/labelbox/src/labelbox/schema/project.py +++ b/libs/labelbox/src/labelbox/schema/project.py @@ -6,7 +6,7 @@ from collections import namedtuple from datetime import datetime, timezone from pathlib import Path -from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Optional, Tuple, TypeVar, Union, overload +from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Optional, Tuple, Union, overload from urllib.parse import urlparse import requests @@ -15,10 +15,9 @@ from labelbox import utils from labelbox.exceptions import error_message_for_unparsed_graphql_error from labelbox.exceptions import (InvalidQueryError, LabelboxError, - ProcessingWaitTimeout, ResourceConflict, - ResourceNotFoundError) + ProcessingWaitTimeout, ResourceNotFoundError) from labelbox.orm import query -from labelbox.orm.db_object import DbObject, Deletable, Updateable, experimental +from labelbox.orm.db_object import DbObject, Deletable, Updateable from labelbox.orm.model import Entity, Field, Relationship from labelbox.pagination import PaginatedCollection from labelbox.schema.consensus_settings import ConsensusSettings @@ -37,8 +36,7 @@ from labelbox.schema.resource_tag import ResourceTag from labelbox.schema.task import Task from labelbox.schema.task_queue import TaskQueue -from labelbox.schema.ontology_kind import (EditorTaskType, OntologyKind, - UploadType) +from labelbox.schema.ontology_kind import (EditorTaskType, UploadType) from labelbox.schema.project_overview import ProjectOverview, ProjectOverviewDetailed if TYPE_CHECKING: @@ -705,7 +703,7 @@ def upsert_instructions(self, instructions_file: str) -> None: if frontend.name != "Editor": logger.warning( - f"This function has only been tested to work with the Editor front end. Found %s", + "This function has only been tested to work with the Editor front end. Found %s", frontend.name) supported_instruction_formats = (".pdf", ".html") @@ -923,7 +921,7 @@ def create_batch( if row_count > 100_000: raise ValueError( - f"Batch exceeds max size, break into smaller batches") + "Batch exceeds max size, break into smaller batches") if not row_count: raise ValueError("You need at least one data row in a batch") @@ -1184,7 +1182,7 @@ def _create_batch_async(self, task = self._wait_for_task(task_id) if task.status != "COMPLETE": - raise LabelboxError(f"Batch was not created successfully: " + + raise LabelboxError("Batch was not created successfully: " + json.dumps(task.errors)) return self.client.get_batch(self.uid, batch_id) @@ -1504,7 +1502,7 @@ def update_data_row_labeling_priority( task = self._wait_for_task(task_id) if task.status != "COMPLETE": - raise LabelboxError(f"Priority was not updated successfully: " + + raise LabelboxError("Priority was not updated successfully: " + json.dumps(task.errors)) return True @@ -1674,7 +1672,7 @@ def move_data_rows_to_task_queue(self, data_row_ids, task_queue_id: str): task = self._wait_for_task(task_id) if task.status != "COMPLETE": - raise LabelboxError(f"Data rows were not moved successfully: " + + raise LabelboxError("Data rows were not moved successfully: " + json.dumps(task.errors)) def _wait_for_task(self, task_id: str) -> Task: diff --git a/libs/labelbox/src/labelbox/schema/project_resource_tag.py b/libs/labelbox/src/labelbox/schema/project_resource_tag.py index bfb024c5a..8514b6076 100644 --- a/libs/labelbox/src/labelbox/schema/project_resource_tag.py +++ b/libs/labelbox/src/labelbox/schema/project_resource_tag.py @@ -1,5 +1,5 @@ from labelbox.orm.db_object import DbObject, Updateable -from labelbox.orm.model import Field, Relationship +from labelbox.orm.model import Field class ProjectResourceTag(DbObject, Updateable): diff --git a/libs/labelbox/src/labelbox/schema/resource_tag.py b/libs/labelbox/src/labelbox/schema/resource_tag.py index b1f5d6e62..3661c8c8a 100644 --- a/libs/labelbox/src/labelbox/schema/resource_tag.py +++ b/libs/labelbox/src/labelbox/schema/resource_tag.py @@ -1,5 +1,5 @@ from labelbox.orm.db_object import DbObject, Updateable -from labelbox.orm.model import Field, Relationship +from labelbox.orm.model import Field class ResourceTag(DbObject, Updateable): diff --git a/libs/labelbox/src/labelbox/schema/role.py b/libs/labelbox/src/labelbox/schema/role.py index 90930fab9..035c2f571 100644 --- a/libs/labelbox/src/labelbox/schema/role.py +++ b/libs/labelbox/src/labelbox/schema/role.py @@ -1,7 +1,7 @@ from dataclasses import dataclass from typing import Dict, Optional, TYPE_CHECKING -from labelbox.orm.model import Field, Entity +from labelbox.orm.model import Field from labelbox.orm.db_object import DbObject if TYPE_CHECKING: diff --git a/libs/labelbox/src/labelbox/schema/serialization.py b/libs/labelbox/src/labelbox/schema/serialization.py index cfbbb04f8..d5b0d64e4 100644 --- a/libs/labelbox/src/labelbox/schema/serialization.py +++ b/libs/labelbox/src/labelbox/schema/serialization.py @@ -1,4 +1,4 @@ -from typing import cast, Any, Dict, Generator, List, TYPE_CHECKING, Union +from typing import cast, Any, Dict, List, TYPE_CHECKING, Union if TYPE_CHECKING: from labelbox.types import Label diff --git a/libs/labelbox/src/labelbox/schema/slice.py b/libs/labelbox/src/labelbox/schema/slice.py index ffd1f2768..3d004f85f 100644 --- a/libs/labelbox/src/labelbox/schema/slice.py +++ b/libs/labelbox/src/labelbox/schema/slice.py @@ -1,7 +1,7 @@ from dataclasses import dataclass from typing import Optional, Tuple, Union import warnings -from labelbox.orm.db_object import DbObject, experimental +from labelbox.orm.db_object import DbObject from labelbox.orm.model import Field from labelbox.pagination import PaginatedCollection from labelbox.schema.export_params import CatalogExportParams, validate_catalog_export_params diff --git a/libs/labelbox/src/labelbox/schema/task.py b/libs/labelbox/src/labelbox/schema/task.py index 95febc386..19d27c325 100644 --- a/libs/labelbox/src/labelbox/schema/task.py +++ b/libs/labelbox/src/labelbox/schema/task.py @@ -2,7 +2,7 @@ import logging import requests import time -from typing import TYPE_CHECKING, Callable, Optional, Dict, Any, List, Union, Final +from typing import TYPE_CHECKING, Callable, Optional, Dict, Any, List, Union from labelbox import parser from labelbox.exceptions import ResourceNotFoundError diff --git a/libs/labelbox/src/labelbox/schema/webhook.py b/libs/labelbox/src/labelbox/schema/webhook.py index 1f1653c52..b6373eaa3 100644 --- a/libs/labelbox/src/labelbox/schema/webhook.py +++ b/libs/labelbox/src/labelbox/schema/webhook.py @@ -1,6 +1,6 @@ import logging from enum import Enum -from typing import Iterable, List +from typing import Iterable from labelbox.orm import query from labelbox.orm.db_object import DbObject, Updateable diff --git a/libs/labelbox/src/labelbox/typing_imports.py b/libs/labelbox/src/labelbox/typing_imports.py index 2c2716710..c351df608 100644 --- a/libs/labelbox/src/labelbox/typing_imports.py +++ b/libs/labelbox/src/labelbox/typing_imports.py @@ -5,6 +5,6 @@ import sys if sys.version_info >= (3, 8): - from typing import Literal + pass else: - from typing_extensions import Literal \ No newline at end of file + pass \ No newline at end of file diff --git a/libs/labelbox/src/labelbox/utils.py b/libs/labelbox/src/labelbox/utils.py index f606932c7..12efed577 100644 --- a/libs/labelbox/src/labelbox/utils.py +++ b/libs/labelbox/src/labelbox/utils.py @@ -47,7 +47,7 @@ def is_valid_uri(uri): try: result = urlparse(uri) return all([result.scheme, result.netloc]) - except: + except ValueError: return False diff --git a/libs/labelbox/tests/conftest.py b/libs/labelbox/tests/conftest.py index 272b1c9c4..81bab2edd 100644 --- a/libs/labelbox/tests/conftest.py +++ b/libs/labelbox/tests/conftest.py @@ -23,19 +23,10 @@ from labelbox.schema.queue_mode import QueueMode from labelbox import Client -from labelbox import Dataset, DataRow from labelbox import LabelingFrontend -from labelbox import OntologyBuilder, Tool, Option, Classification, MediaType -from labelbox.orm import query -from labelbox.pagination import PaginatedCollection +from labelbox import OntologyBuilder, Tool, Option, Classification from labelbox.schema.annotation_import import LabelImport -from labelbox.schema.catalog import Catalog from labelbox.schema.enums import AnnotationImportState -from labelbox.schema.invite import Invite -from labelbox.schema.quality_mode import QualityMode -from labelbox.schema.queue_mode import QueueMode -from labelbox.schema.user import User -from labelbox import Client IMG_URL = "https://picsum.photos/200/300.jpg" MASKABLE_IMG_URL = "https://storage.googleapis.com/labelbox-datasets/image_sample_data/2560px-Kitano_Street_Kobe01s5s4110.jpeg" @@ -299,11 +290,6 @@ def ephmeral_client() -> EphemeralClient: return EphemeralClient -@pytest.fixture -def admin_client() -> AdminClient: - return AdminClient - - @pytest.fixture def integration_client() -> IntegrationClient: return IntegrationClient diff --git a/libs/labelbox/tests/data/annotation_import/conftest.py b/libs/labelbox/tests/data/annotation_import/conftest.py index e2b0a838c..66cac094d 100644 --- a/libs/labelbox/tests/data/annotation_import/conftest.py +++ b/libs/labelbox/tests/data/annotation_import/conftest.py @@ -1,4 +1,3 @@ -import itertools import uuid from labelbox.schema.model_run import ModelRun @@ -13,8 +12,9 @@ from typing import Tuple, Type from labelbox.schema.annotation_import import LabelImport, AnnotationImportState -from pytest import FixtureRequest from contextlib import suppress +from labelbox.exceptions import MalformedQueryException +from pytest import FixtureRequest """ The main fixtures of this library are configured_project and configured_project_by_global_key. Both fixtures generate data rows with a parametrize media type. They create the amount of data rows equal to the DATA_ROW_COUNT variable below. The data rows are generated with a factory fixture that returns a function that allows you to pass a global key. The ontologies are generated normalized and based on the MediaType given (i.e. only features supported by MediaType are created). This ontology is later used to obtain the correct annotations with the prediction_id_mapping and corresponding inferences. Each data row will have all possible annotations attached supported for the MediaType. @@ -1439,11 +1439,8 @@ def model(client, rand_gen, configured_project): data = {"name": rand_gen(str), "ontology_id": ontology.uid} model = client.create_model(data["name"], data["ontology_id"]) yield model - try: - model.delete() - except: - # Already was deleted by the test - pass + with suppress(MalformedQueryException): + model_run.delete() @pytest.fixture @@ -1451,11 +1448,8 @@ def model_run(rand_gen, model): name = rand_gen(str) model_run = model.create_model_run(name) yield model_run - try: + with suppress(MalformedQueryException): model_run.delete() - except: - # Already was deleted by the test - pass @pytest.fixture @@ -1464,11 +1458,8 @@ def model_run_with_training_metadata(rand_gen, model): training_metadata = {"batch_size": 1000} model_run = model.create_model_run(name, training_metadata) yield model_run - try: + with suppress(MalformedQueryException): model_run.delete() - except: - # Already was deleted by the test - pass @pytest.fixture @@ -2020,7 +2011,6 @@ def expected_export_v2_llm_prompt_response_creation(): 'radio_answer': {'classifications': [], 'name': 'first_radio_answer', 'value': 'first_radio_answer'}, - 'name': 'radio-response', 'value': 'radio-response'}, ], "relationships": [], @@ -2066,7 +2056,6 @@ def expected_export_v2_llm_response_creation(): 'radio_answer': {'classifications': [], 'name': 'first_radio_answer', 'value': 'first_radio_answer'}, - 'name': 'radio-response', 'value': 'radio-response'}, ], } diff --git a/libs/labelbox/tests/data/annotation_import/test_annotation_import_limit.py b/libs/labelbox/tests/data/annotation_import/test_annotation_import_limit.py index 297f45c52..c762eb245 100644 --- a/libs/labelbox/tests/data/annotation_import/test_annotation_import_limit.py +++ b/libs/labelbox/tests/data/annotation_import/test_annotation_import_limit.py @@ -1,6 +1,5 @@ import itertools -import uuid -from labelbox.schema.annotation_import import AnnotationImport, MALPredictionImport +from labelbox.schema.annotation_import import AnnotationImport from labelbox.schema.media_type import MediaType import pytest from unittest.mock import patch diff --git a/libs/labelbox/tests/data/annotation_import/test_bulk_import_request.py b/libs/labelbox/tests/data/annotation_import/test_bulk_import_request.py index 9e9abd47f..f8c9ebe06 100644 --- a/libs/labelbox/tests/data/annotation_import/test_bulk_import_request.py +++ b/libs/labelbox/tests/data/annotation_import/test_bulk_import_request.py @@ -1,25 +1,11 @@ -from unittest.mock import patch import uuid from labelbox import parser, Project -from labelbox.data.annotation_types.data.generic_data_row_data import GenericDataRowData import pytest -import random -from labelbox.data.annotation_types.annotation import ObjectAnnotation -from labelbox.data.annotation_types.classification.classification import Checklist, ClassificationAnnotation, ClassificationAnswer, Radio -from labelbox.data.annotation_types.data.video import VideoData -from labelbox.data.annotation_types.geometry.point import Point -from labelbox.data.annotation_types.geometry.rectangle import Rectangle, RectangleUnit -from labelbox.data.annotation_types.label import Label -from labelbox.data.annotation_types.data.text import TextData -from labelbox.data.annotation_types.ner import DocumentEntity, DocumentTextSelection -from labelbox.data.annotation_types.video import VideoObjectAnnotation from labelbox.data.serialization import NDJsonConverter from labelbox.exceptions import MALValidationError, UuidError from labelbox.schema.bulk_import_request import BulkImportRequest from labelbox.schema.enums import BulkImportRequestState -from labelbox.schema.annotation_import import LabelImport, MALPredictionImport -from labelbox.schema.media_type import MediaType """ - Here we only want to check that the uploads are calling the validation - Then with unit tests we can check the types of errors raised @@ -126,7 +112,7 @@ def test_get(client, module_project): def test_validate_ndjson(tmp_path, module_project): - file_name = f"broken.ndjson" + file_name = "broken.ndjson" file_path = tmp_path / file_name with file_path.open("w") as f: f.write("test") @@ -137,7 +123,7 @@ def test_validate_ndjson(tmp_path, module_project): def test_validate_ndjson_uuid(tmp_path, module_project, predictions): - file_name = f"repeat_uuid.ndjson" + file_name = "repeat_uuid.ndjson" file_path = tmp_path / file_name repeat_uuid = predictions.copy() uid = str(uuid.uuid4()) diff --git a/libs/labelbox/tests/data/annotation_import/test_data_types.py b/libs/labelbox/tests/data/annotation_import/test_data_types.py index 74695470d..f699c92bf 100644 --- a/libs/labelbox/tests/data/annotation_import/test_data_types.py +++ b/libs/labelbox/tests/data/annotation_import/test_data_types.py @@ -1,12 +1,8 @@ -import datetime -from labelbox.schema.label import Label import pytest -import uuid from labelbox.data.annotation_types.data import ( AudioData, ConversationData, - DicomData, DocumentData, HTMLData, ImageData, @@ -15,11 +11,8 @@ from labelbox.data.serialization import NDJsonConverter from labelbox.data.annotation_types.data.video import VideoData -import labelbox as lb import labelbox.types as lb_types from labelbox.schema.media_type import MediaType -from labelbox.schema.annotation_import import AnnotationImportState -from labelbox import Project, Client # Unit test for label based on data type. # TODO: Dicom removed it is unstable when you deserialize and serialize on label import. If we intend to keep this library this needs add generic data types tests work with this data type. diff --git a/libs/labelbox/tests/data/annotation_import/test_ndjson_validation.py b/libs/labelbox/tests/data/annotation_import/test_ndjson_validation.py index ac197a321..3b5b4d123 100644 --- a/libs/labelbox/tests/data/annotation_import/test_ndjson_validation.py +++ b/libs/labelbox/tests/data/annotation_import/test_ndjson_validation.py @@ -1,5 +1,4 @@ from labelbox.schema.media_type import MediaType -from labelbox.schema.project import Project import pytest from labelbox import parser @@ -8,7 +7,7 @@ from labelbox.exceptions import MALValidationError from labelbox.schema.bulk_import_request import (NDChecklist, NDClassification, NDMask, NDPolygon, NDPolyline, - NDRadio, NDRectangle, NDText, + NDRectangle, NDText, NDTextEntity, NDTool, _validate_ndjson) """ @@ -190,7 +189,7 @@ def test_missing_feature_schema(module_project, def test_validate_ndjson(tmp_path, configured_project): - file_name = f"broken.ndjson" + file_name = "broken.ndjson" file_path = tmp_path / file_name with file_path.open("w") as f: f.write("test") @@ -202,7 +201,7 @@ def test_validate_ndjson(tmp_path, configured_project): def test_validate_ndjson_uuid(tmp_path, configured_project, predictions): - file_name = f"repeat_uuid.ndjson" + file_name = "repeat_uuid.ndjson" file_path = tmp_path / file_name repeat_uuid = predictions.copy() repeat_uuid[0]['uuid'] = 'test_uuid' diff --git a/libs/labelbox/tests/data/annotation_import/test_send_to_annotate_mea.py b/libs/labelbox/tests/data/annotation_import/test_send_to_annotate_mea.py index 1f8b84742..c46a2d3f7 100644 --- a/libs/labelbox/tests/data/annotation_import/test_send_to_annotate_mea.py +++ b/libs/labelbox/tests/data/annotation_import/test_send_to_annotate_mea.py @@ -1,4 +1,3 @@ -import pytest from labelbox import UniqueIds, OntologyBuilder from labelbox.schema.conflict_resolution_strategy import ConflictResolutionStrategy diff --git a/libs/labelbox/tests/data/annotation_types/classification/test_classification.py b/libs/labelbox/tests/data/annotation_types/classification/test_classification.py index 11a3a0514..2f8091151 100644 --- a/libs/labelbox/tests/data/annotation_types/classification/test_classification.py +++ b/libs/labelbox/tests/data/annotation_types/classification/test_classification.py @@ -64,7 +64,6 @@ def test_subclass(): name=name, feature_schema_id=feature_schema_id) assert classification.dict() == { - 'name': None, 'feature_schema_id': feature_schema_id, 'extra': {}, 'value': { diff --git a/libs/labelbox/tests/data/annotation_types/data/test_raster.py b/libs/labelbox/tests/data/annotation_types/data/test_raster.py index 40c8d5648..a4331b2e2 100644 --- a/libs/labelbox/tests/data/annotation_types/data/test_raster.py +++ b/libs/labelbox/tests/data/annotation_types/data/test_raster.py @@ -11,7 +11,7 @@ def test_validate_schema(): with pytest.raises(pydantic_compat.ValidationError): - data = ImageData() + ImageData() def test_im_bytes(): diff --git a/libs/labelbox/tests/data/annotation_types/data/test_text.py b/libs/labelbox/tests/data/annotation_types/data/test_text.py index 970b8382b..bf05b348e 100644 --- a/libs/labelbox/tests/data/annotation_types/data/test_text.py +++ b/libs/labelbox/tests/data/annotation_types/data/test_text.py @@ -8,7 +8,7 @@ def test_validate_schema(): with pytest.raises(pydantic_compat.ValidationError): - data = TextData() + TextData() def test_text(): diff --git a/libs/labelbox/tests/data/annotation_types/data/test_video.py b/libs/labelbox/tests/data/annotation_types/data/test_video.py index f0e42b83f..213f2807c 100644 --- a/libs/labelbox/tests/data/annotation_types/data/test_video.py +++ b/libs/labelbox/tests/data/annotation_types/data/test_video.py @@ -7,7 +7,7 @@ def test_validate_schema(): with pytest.raises(pydantic_compat.ValidationError): - data = VideoData() + VideoData() def test_frames(): diff --git a/libs/labelbox/tests/data/annotation_types/geometry/test_mask.py b/libs/labelbox/tests/data/annotation_types/geometry/test_mask.py index 7a2b713ee..9f54a87b1 100644 --- a/libs/labelbox/tests/data/annotation_types/geometry/test_mask.py +++ b/libs/labelbox/tests/data/annotation_types/geometry/test_mask.py @@ -9,7 +9,7 @@ def test_mask(): with pytest.raises(pydantic_compat.ValidationError): - mask = Mask() + Mask() mask_data = np.zeros((32, 32, 3), dtype=np.uint8) mask_data = cv2.rectangle(mask_data, (0, 0), (10, 10), (255, 255, 255), -1) diff --git a/libs/labelbox/tests/data/annotation_types/geometry/test_point.py b/libs/labelbox/tests/data/annotation_types/geometry/test_point.py index 47c152d2b..09532f983 100644 --- a/libs/labelbox/tests/data/annotation_types/geometry/test_point.py +++ b/libs/labelbox/tests/data/annotation_types/geometry/test_point.py @@ -7,10 +7,10 @@ def test_point(): with pytest.raises(pydantic_compat.ValidationError): - line = Point() + Point() with pytest.raises(TypeError): - line = Point([0, 1]) + Point([0, 1]) point = Point(x=0, y=1) expected = {"coordinates": [0, 1], "type": "Point"} diff --git a/libs/labelbox/tests/data/annotation_types/test_collection.py b/libs/labelbox/tests/data/annotation_types/test_collection.py index 34b868162..6ef03bf61 100644 --- a/libs/labelbox/tests/data/annotation_types/test_collection.py +++ b/libs/labelbox/tests/data/annotation_types/test_collection.py @@ -106,7 +106,7 @@ def test_adding_to_dataset(signer): assert label.data.url != uuid generated_label = next(generator) assert generated_label.data.url == uuid - assert generated_label.data.external_id != None + assert generated_label.data.external_id is not None assert generated_label.data.uid == dataset.uid assert label.data.url == uuid diff --git a/libs/labelbox/tests/data/annotation_types/test_label.py b/libs/labelbox/tests/data/annotation_types/test_label.py index a6947cd4b..0380c6ea2 100644 --- a/libs/labelbox/tests/data/annotation_types/test_label.py +++ b/libs/labelbox/tests/data/annotation_types/test_label.py @@ -207,6 +207,6 @@ def test_prompt_classification_validation(): name="prompt text", value=PromptText(answer="test") ) - with pytest.raises(ValidationError) as e_info: - label = Label(data={"global_key": global_key}, - annotations=[prompt_text, prompt_text_2]) + with pytest.raises(ValidationError): + Label(data={"global_key": global_key}, + annotations=[prompt_text, prompt_text_2]) diff --git a/libs/labelbox/tests/data/annotation_types/test_metrics.py b/libs/labelbox/tests/data/annotation_types/test_metrics.py index c68324842..00e1fed9e 100644 --- a/libs/labelbox/tests/data/annotation_types/test_metrics.py +++ b/libs/labelbox/tests/data/annotation_types/test_metrics.py @@ -2,7 +2,7 @@ from labelbox.data.annotation_types.metrics import ConfusionMatrixAggregation, ScalarMetricAggregation from labelbox.data.annotation_types.metrics import ConfusionMatrixMetric, ScalarMetric -from labelbox.data.annotation_types import ScalarMetric, Label, ImageData +from labelbox.data.annotation_types import Label, ImageData from labelbox.data.annotation_types.metrics.scalar import RESERVED_METRIC_NAMES from labelbox import pydantic_compat @@ -157,38 +157,38 @@ def test_custom_confusison_matrix_metric(feature_name, subclass_name, def test_name_exists(): # Name is only required for ConfusionMatrixMetric for now. with pytest.raises(pydantic_compat.ValidationError) as exc_info: - metric = ConfusionMatrixMetric(value=[0, 1, 2, 3]) + ConfusionMatrixMetric(value=[0, 1, 2, 3]) assert "field required (type=value_error.missing)" in str(exc_info.value) def test_invalid_aggregations(): with pytest.raises(pydantic_compat.ValidationError) as exc_info: - metric = ScalarMetric( + ScalarMetric( metric_name="invalid aggregation", value=0.1, aggregation=ConfusionMatrixAggregation.CONFUSION_MATRIX) assert "value is not a valid enumeration member" in str(exc_info.value) with pytest.raises(pydantic_compat.ValidationError) as exc_info: - metric = ConfusionMatrixMetric(metric_name="invalid aggregation", - value=[0, 1, 2, 3], - aggregation=ScalarMetricAggregation.SUM) + ConfusionMatrixMetric(metric_name="invalid aggregation", + value=[0, 1, 2, 3], + aggregation=ScalarMetricAggregation.SUM) assert "value is not a valid enumeration member" in str(exc_info.value) def test_invalid_number_of_confidence_scores(): with pytest.raises(pydantic_compat.ValidationError) as exc_info: - metric = ScalarMetric(metric_name="too few scores", value={0.1: 0.1}) + ScalarMetric(metric_name="too few scores", value={0.1: 0.1}) assert "Number of confidence scores must be greater" in str(exc_info.value) with pytest.raises(pydantic_compat.ValidationError) as exc_info: - metric = ConfusionMatrixMetric(metric_name="too few scores", - value={0.1: [0, 1, 2, 3]}) + ConfusionMatrixMetric(metric_name="too few scores", + value={0.1: [0, 1, 2, 3]}) assert "Number of confidence scores must be greater" in str(exc_info.value) with pytest.raises(pydantic_compat.ValidationError) as exc_info: - metric = ScalarMetric(metric_name="too many scores", - value={i / 20.: 0.1 for i in range(20)}) + ScalarMetric(metric_name="too many scores", + value={i / 20.: 0.1 for i in range(20)}) assert "Number of confidence scores must be greater" in str(exc_info.value) with pytest.raises(pydantic_compat.ValidationError) as exc_info: - metric = ConfusionMatrixMetric( + ConfusionMatrixMetric( metric_name="too many scores", value={i / 20.: [0, 1, 2, 3] for i in range(20)}) assert "Number of confidence scores must be greater" in str(exc_info.value) diff --git a/libs/labelbox/tests/data/annotation_types/test_tiled_image.py b/libs/labelbox/tests/data/annotation_types/test_tiled_image.py index cd96fee6d..9e5363355 100644 --- a/libs/labelbox/tests/data/annotation_types/test_tiled_image.py +++ b/libs/labelbox/tests/data/annotation_types/test_tiled_image.py @@ -29,8 +29,8 @@ def test_tiled_bounds(epsg): def test_tiled_bounds_same(epsg): single_bound = Point(x=0, y=0) with pytest.raises(pydantic_compat.ValidationError): - tiled_bounds = TiledBounds(epsg=epsg, - bounds=[single_bound, single_bound]) + TiledBounds(epsg=epsg, + bounds=[single_bound, single_bound]) def test_create_tiled_image_data(): diff --git a/libs/labelbox/tests/data/export/conftest.py b/libs/labelbox/tests/data/export/conftest.py index 104ee41dc..52596c3ac 100644 --- a/libs/labelbox/tests/data/export/conftest.py +++ b/libs/labelbox/tests/data/export/conftest.py @@ -2,9 +2,10 @@ import time import pytest from labelbox.schema.queue_mode import QueueMode -from labelbox.schema.media_type import MediaType from labelbox.schema.labeling_frontend import LabelingFrontend from labelbox.schema.annotation_import import LabelImport, AnnotationImportState +from contextlib import suppress +from labelbox.exceptions import MalformedQueryException @pytest.fixture @@ -248,28 +249,6 @@ def ontology(): return {"tools": tools, "classifications": classifications} -@pytest.fixture -def polygon_inference(prediction_id_mapping): - polygon = prediction_id_mapping['polygon'].copy() - polygon.update({ - "polygon": [{ - "x": 147.692, - "y": 118.154 - }, { - "x": 142.769, - "y": 104.923 - }, { - "x": 57.846, - "y": 118.769 - }, { - "x": 28.308, - "y": 169.846 - }] - }) - del polygon['tool'] - return polygon - - @pytest.fixture def configured_project_with_ontology(client, initial_dataset, ontology, rand_gen, image_url): @@ -346,11 +325,8 @@ def model(client, rand_gen, configured_project): data = {"name": rand_gen(str), "ontology_id": ontology.uid} model = client.create_model(data["name"], data["ontology_id"]) yield model - try: - model.delete() - except: - # Already was deleted by the test - pass + with suppress(MalformedQueryException): + model_run.delete() @pytest.fixture @@ -358,11 +334,8 @@ def model_run(rand_gen, model): name = rand_gen(str) model_run = model.create_model_run(name) yield model_run - try: + with suppress(MalformedQueryException): model_run.delete() - except: - # Already was deleted by the test - pass @pytest.fixture diff --git a/libs/labelbox/tests/data/export/streamable/test_export_data_rows_streamable.py b/libs/labelbox/tests/data/export/streamable/test_export_data_rows_streamable.py index 0d98d8a89..de82bcac1 100644 --- a/libs/labelbox/tests/data/export/streamable/test_export_data_rows_streamable.py +++ b/libs/labelbox/tests/data/export/streamable/test_export_data_rows_streamable.py @@ -1,7 +1,6 @@ import json import time -import pytest from labelbox import DataRow, ExportTask, StreamType diff --git a/libs/labelbox/tests/data/export/streamable/test_export_embeddings_streamable.py b/libs/labelbox/tests/data/export/streamable/test_export_embeddings_streamable.py index b0c683486..6d1bc09bf 100644 --- a/libs/labelbox/tests/data/export/streamable/test_export_embeddings_streamable.py +++ b/libs/labelbox/tests/data/export/streamable/test_export_embeddings_streamable.py @@ -68,6 +68,6 @@ def test_export_embeddings_custom(self, client, dataset, image_url, if emb["id"] == embedding.id: assert emb["name"] == embedding.name assert emb["dimensions"] == embedding.dims - assert emb["is_custom"] == True + assert emb["is_custom"] is True assert len(emb["values"]) == 1 assert emb["values"][0]["value"] == vector diff --git a/libs/labelbox/tests/data/export/streamable/test_export_model_run_streamable.py b/libs/labelbox/tests/data/export/streamable/test_export_model_run_streamable.py index 0d1244660..18f44835e 100644 --- a/libs/labelbox/tests/data/export/streamable/test_export_model_run_streamable.py +++ b/libs/labelbox/tests/data/export/streamable/test_export_model_run_streamable.py @@ -1,5 +1,4 @@ import json -import time from labelbox import ExportTask, StreamType diff --git a/libs/labelbox/tests/data/metrics/confusion_matrix/conftest.py b/libs/labelbox/tests/data/metrics/confusion_matrix/conftest.py index ce82ff21d..9a7151c9e 100644 --- a/libs/labelbox/tests/data/metrics/confusion_matrix/conftest.py +++ b/libs/labelbox/tests/data/metrics/confusion_matrix/conftest.py @@ -32,14 +32,6 @@ def get_text(name, text_content): return ClassificationAnnotation(name=name, value=Text(answer=text_content)) -def get_checklist(name, answer_names): - return ClassificationAnnotation(name=name, - value=Radio(answer=[ - ClassificationAnswer(name=answer_name) - for answer_name in answer_names - ])) - - def get_polygon(name, points, subclasses=None): return ObjectAnnotation( name=name, @@ -79,11 +71,6 @@ def get_point(name, x, y, subclasses=None): classifications=[] if subclasses is None else subclasses) -def get_radio(name, answer_name): - return ClassificationAnnotation( - name=name, value=Radio(answer=ClassificationAnswer(name=answer_name))) - - def get_checklist(name, answer_names): return ClassificationAnnotation(name=name, value=Checklist(answer=[ diff --git a/libs/labelbox/tests/data/metrics/confusion_matrix/test_confusion_matrix_data_row.py b/libs/labelbox/tests/data/metrics/confusion_matrix/test_confusion_matrix_data_row.py index e84207ac2..b77cff3cb 100644 --- a/libs/labelbox/tests/data/metrics/confusion_matrix/test_confusion_matrix_data_row.py +++ b/libs/labelbox/tests/data/metrics/confusion_matrix/test_confusion_matrix_data_row.py @@ -1,5 +1,5 @@ from pytest_cases import fixture_ref -from pytest_cases import parametrize, fixture_ref +from pytest_cases import parametrize from labelbox.data.metrics.confusion_matrix.confusion_matrix import confusion_matrix_metric diff --git a/libs/labelbox/tests/data/metrics/confusion_matrix/test_confusion_matrix_feature.py b/libs/labelbox/tests/data/metrics/confusion_matrix/test_confusion_matrix_feature.py index f55555e75..69e8045e2 100644 --- a/libs/labelbox/tests/data/metrics/confusion_matrix/test_confusion_matrix_feature.py +++ b/libs/labelbox/tests/data/metrics/confusion_matrix/test_confusion_matrix_feature.py @@ -1,5 +1,5 @@ from pytest_cases import fixture_ref -from pytest_cases import parametrize, fixture_ref +from pytest_cases import parametrize from labelbox.data.metrics.confusion_matrix.confusion_matrix import feature_confusion_matrix_metric diff --git a/libs/labelbox/tests/data/metrics/iou/data_row/conftest.py b/libs/labelbox/tests/data/metrics/iou/data_row/conftest.py index d25abe2cf..33e2eafc9 100644 --- a/libs/labelbox/tests/data/metrics/iou/data_row/conftest.py +++ b/libs/labelbox/tests/data/metrics/iou/data_row/conftest.py @@ -1,8 +1,6 @@ -from io import BytesIO from types import SimpleNamespace import pytest import numpy as np -from PIL import Image import base64 @@ -330,8 +328,6 @@ def matching_checklist(): classifications=[{ 'featureId': '1234567890111213141516171', - 'schemaId': - 'ckppid25v0000aeyjmxfwlc7t', 'uuid': '76e0dcea-fe46-43e5-95f5-a5e3f378520a', 'schemaId': @@ -370,8 +366,6 @@ def partially_matching_checklist_1(): classifications=[{ 'featureId': '1234567890111213141516171', - 'schemaId': - 'ckppid25v0000aeyjmxfwlc7t', 'uuid': '76e0dcea-fe46-43e5-95f5-a5e3f378520a', 'schemaId': @@ -417,8 +411,6 @@ def partially_matching_checklist_2(): classifications=[{ 'featureId': '1234567890111213141516171', - 'schemaId': - 'ckppid25v0000aeyjmxfwlc7t', 'uuid': '76e0dcea-fe46-43e5-95f5-a5e3f378520a', 'schemaId': @@ -460,8 +452,6 @@ def partially_matching_checklist_3(): classifications=[{ 'featureId': '1234567890111213141516171', - 'schemaId': - 'ckppid25v0000aeyjmxfwlc7t', 'uuid': '76e0dcea-fe46-43e5-95f5-a5e3f378520a', 'schemaId': diff --git a/libs/labelbox/tests/data/metrics/iou/data_row/test_data_row_iou.py b/libs/labelbox/tests/data/metrics/iou/data_row/test_data_row_iou.py index e4f161e3e..7cfee91c1 100644 --- a/libs/labelbox/tests/data/metrics/iou/data_row/test_data_row_iou.py +++ b/libs/labelbox/tests/data/metrics/iou/data_row/test_data_row_iou.py @@ -1,6 +1,5 @@ from labelbox.data.metrics.iou.iou import miou_metric from pytest_cases import parametrize, fixture_ref -from unittest.mock import patch import math import numpy as np import base64 diff --git a/libs/labelbox/tests/data/metrics/iou/feature/conftest.py b/libs/labelbox/tests/data/metrics/iou/feature/conftest.py index c89d30056..f92df0b78 100644 --- a/libs/labelbox/tests/data/metrics/iou/feature/conftest.py +++ b/libs/labelbox/tests/data/metrics/iou/feature/conftest.py @@ -2,7 +2,7 @@ import pytest -from labelbox.data.annotation_types import ClassificationAnnotation, ObjectAnnotation +from labelbox.data.annotation_types import ObjectAnnotation from labelbox.data.annotation_types import Polygon, Point diff --git a/libs/labelbox/tests/data/serialization/coco/test_coco.py b/libs/labelbox/tests/data/serialization/coco/test_coco.py index 0113b555d..e591fedcc 100644 --- a/libs/labelbox/tests/data/serialization/coco/test_coco.py +++ b/libs/labelbox/tests/data/serialization/coco/test_coco.py @@ -10,7 +10,7 @@ def run_instances(tmpdir): instance_json = json.load(open(Path(COCO_ASSETS_DIR, 'instances.json'))) res = COCOConverter.deserialize_instances(instance_json, Path(COCO_ASSETS_DIR, 'images')) - back = COCOConverter.serialize_instances( + COCOConverter.serialize_instances( res, Path(tmpdir), ) @@ -20,7 +20,7 @@ def test_rle_objects(tmpdir): rle_json = json.load(open(Path(COCO_ASSETS_DIR, 'rle.json'))) res = COCOConverter.deserialize_instances(rle_json, Path(COCO_ASSETS_DIR, 'images')) - back = COCOConverter.serialize_instances(res, tmpdir) + COCOConverter.serialize_instances(res, tmpdir) def test_panoptic(tmpdir): @@ -29,6 +29,6 @@ def test_panoptic(tmpdir): Path(COCO_ASSETS_DIR, dir_name) for dir_name in ['images', 'masks'] ] res = COCOConverter.deserialize_panoptic(panoptic_json, image_dir, mask_dir) - back = COCOConverter.serialize_panoptic(res, - Path(f'/{tmpdir}/images_panoptic'), - Path(f'/{tmpdir}/masks_panoptic')) + COCOConverter.serialize_panoptic(res, + Path(f'/{tmpdir}/images_panoptic'), + Path(f'/{tmpdir}/masks_panoptic')) diff --git a/libs/labelbox/tests/data/serialization/labelbox_v1/test_tiled_image.py b/libs/labelbox/tests/data/serialization/labelbox_v1/test_tiled_image.py index e5afce4ef..284b2e5c7 100644 --- a/libs/labelbox/tests/data/serialization/labelbox_v1/test_tiled_image.py +++ b/libs/labelbox/tests/data/serialization/labelbox_v1/test_tiled_image.py @@ -7,7 +7,6 @@ from labelbox.data.annotation_types.geometry.rectangle import Rectangle from labelbox.data.serialization.labelbox_v1.converter import LBV1Converter -from labelbox.schema.bulk_import_request import Bbox @pytest.mark.parametrize( diff --git a/libs/labelbox/tests/data/serialization/labelbox_v1/test_unknown_media.py b/libs/labelbox/tests/data/serialization/labelbox_v1/test_unknown_media.py index 4607d7be3..4a6c53a0c 100644 --- a/libs/labelbox/tests/data/serialization/labelbox_v1/test_unknown_media.py +++ b/libs/labelbox/tests/data/serialization/labelbox_v1/test_unknown_media.py @@ -1,6 +1,5 @@ import json -import pytest from labelbox.data.serialization.labelbox_v1.converter import LBV1Converter diff --git a/libs/labelbox/tests/data/serialization/ndjson/test_data_gen.py b/libs/labelbox/tests/data/serialization/ndjson/test_data_gen.py index 7b7b33994..e72d18f0d 100644 --- a/libs/labelbox/tests/data/serialization/ndjson/test_data_gen.py +++ b/libs/labelbox/tests/data/serialization/ndjson/test_data_gen.py @@ -1,8 +1,5 @@ -from copy import copy -import pytest import labelbox.types as lb_types from labelbox.data.serialization import NDJsonConverter -from labelbox.data.serialization.ndjson.objects import NDDicomSegments, NDDicomSegment, NDDicomLine """ Data gen prompt test data """ diff --git a/libs/labelbox/tests/data/serialization/ndjson/test_dicom.py b/libs/labelbox/tests/data/serialization/ndjson/test_dicom.py index da47127f6..9ba9ff48c 100644 --- a/libs/labelbox/tests/data/serialization/ndjson/test_dicom.py +++ b/libs/labelbox/tests/data/serialization/ndjson/test_dicom.py @@ -1,6 +1,5 @@ from copy import copy import pytest -import base64 import labelbox.types as lb_types from labelbox.data.serialization import NDJsonConverter from labelbox.data.serialization.ndjson.objects import NDDicomSegments, NDDicomSegment, NDDicomLine diff --git a/libs/labelbox/tests/data/serialization/ndjson/test_global_key.py b/libs/labelbox/tests/data/serialization/ndjson/test_global_key.py index 6de2dcc51..8552c4a3f 100644 --- a/libs/labelbox/tests/data/serialization/ndjson/test_global_key.py +++ b/libs/labelbox/tests/data/serialization/ndjson/test_global_key.py @@ -1,10 +1,8 @@ import json import pytest -from labelbox.data.serialization.ndjson.classification import NDRadio from labelbox.data.serialization.ndjson.converter import NDJsonConverter -from labelbox.data.serialization.ndjson.objects import NDLine def round_dict(data): diff --git a/libs/labelbox/tests/data/serialization/ndjson/test_radio.py b/libs/labelbox/tests/data/serialization/ndjson/test_radio.py index 583eb1fa0..1d57b974d 100644 --- a/libs/labelbox/tests/data/serialization/ndjson/test_radio.py +++ b/libs/labelbox/tests/data/serialization/ndjson/test_radio.py @@ -1,4 +1,3 @@ -import json from labelbox.data.annotation_types.annotation import ClassificationAnnotation from labelbox.data.annotation_types.classification.classification import ClassificationAnswer from labelbox.data.annotation_types.classification.classification import Radio diff --git a/libs/labelbox/tests/data/serialization/ndjson/test_text.py b/libs/labelbox/tests/data/serialization/ndjson/test_text.py index 534068e14..2c2ca47db 100644 --- a/libs/labelbox/tests/data/serialization/ndjson/test_text.py +++ b/libs/labelbox/tests/data/serialization/ndjson/test_text.py @@ -1,5 +1,5 @@ from labelbox.data.annotation_types.annotation import ClassificationAnnotation -from labelbox.data.annotation_types.classification.classification import ClassificationAnswer, Radio, Text +from labelbox.data.annotation_types.classification.classification import Text from labelbox.data.annotation_types.data.text import TextData from labelbox.data.annotation_types.label import Label diff --git a/libs/labelbox/tests/data/serialization/ndjson/test_video.py b/libs/labelbox/tests/data/serialization/ndjson/test_video.py index 3eba37e18..3590e3e6f 100644 --- a/libs/labelbox/tests/data/serialization/ndjson/test_video.py +++ b/libs/labelbox/tests/data/serialization/ndjson/test_video.py @@ -1,15 +1,12 @@ import json -from labelbox.client import Client from labelbox.data.annotation_types.classification.classification import Checklist, ClassificationAnnotation, ClassificationAnswer, Radio from labelbox.data.annotation_types.data.video import VideoData from labelbox.data.annotation_types.geometry.line import Line from labelbox.data.annotation_types.geometry.point import Point from labelbox.data.annotation_types.geometry.rectangle import Rectangle -from labelbox.data.annotation_types.geometry.point import Point from labelbox.data.annotation_types.label import Label from labelbox.data.annotation_types.video import VideoObjectAnnotation -from labelbox import parser from labelbox.data.serialization.ndjson.converter import NDJsonConverter @@ -68,7 +65,7 @@ def test_video_classification_global_subclassifications(): } } - expected_second_annotation = nested_checklist_annotation_ndjson = { + expected_second_annotation = { "name": "nested_checklist_question", "answer": [{ "name": diff --git a/libs/labelbox/tests/integration/conftest.py b/libs/labelbox/tests/integration/conftest.py index 6333be300..9e39ba5ad 100644 --- a/libs/labelbox/tests/integration/conftest.py +++ b/libs/labelbox/tests/integration/conftest.py @@ -1,30 +1,15 @@ from collections import defaultdict from itertools import islice -import json import os import sys -import re import time -import uuid -import requests -from types import SimpleNamespace -from typing import Type, List -from enum import Enum -from typing import Tuple +from typing import Type import pytest -import requests -from labelbox import Dataset, DataRow +from labelbox import Dataset from labelbox import LabelingFrontend from labelbox import OntologyBuilder, Tool, Option, Classification, MediaType, PromptResponseClassification, ResponseOption -from labelbox.orm import query -from labelbox.pagination import PaginatedCollection -from labelbox.schema.annotation_import import LabelImport -from labelbox.schema.catalog import Catalog -from labelbox.schema.enums import AnnotationImportState -from labelbox.schema.invite import Invite -from labelbox.schema.quality_mode import QualityMode from labelbox.schema.queue_mode import QueueMode from labelbox.schema.user import User from labelbox import Client diff --git a/libs/labelbox/tests/integration/schema/test_user_group.py b/libs/labelbox/tests/integration/schema/test_user_group.py index 3cd708465..47b038bd9 100644 --- a/libs/labelbox/tests/integration/schema/test_user_group.py +++ b/libs/labelbox/tests/integration/schema/test_user_group.py @@ -1,9 +1,8 @@ import pytest import faker from uuid import uuid4 -from labelbox import Client from labelbox.schema.user_group import UserGroup, UserGroupColor -from labelbox.exceptions import ResourceNotFoundError, ResourceCreationError, UnprocessableEntityError +from labelbox.exceptions import ResourceNotFoundError, ResourceCreationError data = faker.Faker() diff --git a/libs/labelbox/tests/integration/test_batch.py b/libs/labelbox/tests/integration/test_batch.py index d5e3b7a0f..47432bc65 100644 --- a/libs/labelbox/tests/integration/test_batch.py +++ b/libs/labelbox/tests/integration/test_batch.py @@ -1,4 +1,3 @@ -import time from typing import List from uuid import uuid4 import pytest @@ -275,7 +274,7 @@ def test_delete_labels(project, small_dataset): export_task.wait_till_done() stream = export_task.get_buffered_stream() data_rows = [dr.json["data_row"]["id"] for dr in stream] - batch = project.create_batch("batch to delete labels", data_rows) + project.create_batch("batch to delete labels", data_rows) @pytest.mark.skip( @@ -294,7 +293,7 @@ def test_delete_labels_with_templates(project: Project, small_dataset: Dataset): stream = export_task.get_buffered_stream() exported_data_rows = [dr.json["data_row"]["id"] for dr in stream] - res = batch.delete_labels(labels_as_template=True) + batch.delete_labels(labels_as_template=True) export_task = project.export(filters={"batch_ids": [batch.uid]}) export_task.wait_till_done() diff --git a/libs/labelbox/tests/integration/test_batches.py b/libs/labelbox/tests/integration/test_batches.py index 5c24a65f0..b9510bdb6 100644 --- a/libs/labelbox/tests/integration/test_batches.py +++ b/libs/labelbox/tests/integration/test_batches.py @@ -1,6 +1,5 @@ from typing import List -import pytest from labelbox import Project, Dataset diff --git a/libs/labelbox/tests/integration/test_benchmark.py b/libs/labelbox/tests/integration/test_benchmark.py index c10542bda..661f83bd7 100644 --- a/libs/labelbox/tests/integration/test_benchmark.py +++ b/libs/labelbox/tests/integration/test_benchmark.py @@ -1,17 +1,17 @@ def test_benchmark(configured_project_with_label): project, _, data_row, label = configured_project_with_label assert set(project.benchmarks()) == set() - assert label.is_benchmark_reference == False + assert label.is_benchmark_reference is False benchmark = label.create_benchmark() assert set(project.benchmarks()) == {benchmark} assert benchmark.reference_label() == label # Refresh label data to check it's benchmark reference label = list(data_row.labels())[0] - assert label.is_benchmark_reference == True + assert label.is_benchmark_reference is True benchmark.delete() assert set(project.benchmarks()) == set() # Refresh label data to check it's benchmark reference label = list(data_row.labels())[0] - assert label.is_benchmark_reference == False + assert label.is_benchmark_reference is False diff --git a/libs/labelbox/tests/integration/test_chat_evaluation_ontology_project.py b/libs/labelbox/tests/integration/test_chat_evaluation_ontology_project.py index aafcddbcc..9e3fd1bab 100644 --- a/libs/labelbox/tests/integration/test_chat_evaluation_ontology_project.py +++ b/libs/labelbox/tests/integration/test_chat_evaluation_ontology_project.py @@ -3,7 +3,6 @@ from labelbox import MediaType from labelbox.schema.ontology_kind import OntologyKind -from labelbox.exceptions import MalformedQueryException def test_create_chat_evaluation_ontology_project( diff --git a/libs/labelbox/tests/integration/test_client_errors.py b/libs/labelbox/tests/integration/test_client_errors.py index 411b9e3b0..671515fc2 100644 --- a/libs/labelbox/tests/integration/test_client_errors.py +++ b/libs/labelbox/tests/integration/test_client_errors.py @@ -4,7 +4,7 @@ import pytest from google.api_core.exceptions import RetryError -from labelbox import Project, Dataset, User +from labelbox import Project, User import labelbox.client import labelbox.exceptions @@ -27,7 +27,7 @@ def test_bad_key(rand_gen): bad_key = "BAD_KEY_" + rand_gen(str) client = labelbox.client.Client(api_key=bad_key) - with pytest.raises(labelbox.exceptions.AuthenticationError) as excinfo: + with pytest.raises(labelbox.exceptions.AuthenticationError): client.create_project(name=rand_gen(str)) @@ -44,7 +44,7 @@ def test_semantic_error(client): def test_timeout_error(client, project): - with pytest.raises(RetryError) as excinfo: + with pytest.raises(RetryError): query_str = """query getOntology { project (where: {id: %s}) { ontology { @@ -73,7 +73,7 @@ def test_network_error(client): client = labelbox.client.Client(api_key=client.api_key, endpoint="not_a_valid_URL") - with pytest.raises(labelbox.exceptions.NetworkError) as excinfo: + with pytest.raises(labelbox.exceptions.NetworkError): client.create_project(name="Project name") diff --git a/libs/labelbox/tests/integration/test_data_row_delete_metadata.py b/libs/labelbox/tests/integration/test_data_row_delete_metadata.py index 6c3928617..b87045883 100644 --- a/libs/labelbox/tests/integration/test_data_row_delete_metadata.py +++ b/libs/labelbox/tests/integration/test_data_row_delete_metadata.py @@ -87,7 +87,7 @@ def make_named_metadata(dr_id) -> DataRowMetadata: @pytest.mark.order(1) -def test_bulk_delete_datarow_metadata(data_row, mdo): +def test_bulk_delete_datarow_metadata_all_fields(data_row, mdo): """test bulk deletes for all fields""" metadata = make_metadata(data_row.uid) mdo.bulk_upsert([metadata]) diff --git a/libs/labelbox/tests/integration/test_data_rows.py b/libs/labelbox/tests/integration/test_data_rows.py index 454d55b87..3f5da98a1 100644 --- a/libs/labelbox/tests/integration/test_data_rows.py +++ b/libs/labelbox/tests/integration/test_data_rows.py @@ -11,7 +11,7 @@ from labelbox.schema.media_type import MediaType from labelbox import DataRow, AssetAttachment from labelbox.exceptions import MalformedQueryException, ResourceCreationError, InvalidQueryError -from labelbox.schema.task import Task, DataUpsertTask +from labelbox.schema.task import Task from labelbox.schema.data_row_metadata import DataRowMetadataField, DataRowMetadataKind SPLIT_SCHEMA_ID = "cko8sbczn0002h2dkdaxb5kal" @@ -170,7 +170,6 @@ def test_lookup_data_rows(client, dataset): def test_data_row_bulk_creation(dataset, rand_gen, image_url): - client = dataset.client data_rows = [] assert len(list(dataset.data_rows())) == 0 @@ -359,7 +358,7 @@ def test_create_data_row_with_dict_unpacked(dataset, image_url): def test_create_data_row_with_invalid_input(dataset, image_url): - with pytest.raises(ResourceCreationError) as exc: + with pytest.raises(ResourceCreationError): dataset.create_data_row("asdf") @@ -566,7 +565,7 @@ def test_create_data_rows_with_metadata_missing_value(dataset, image_url): fields = make_metadata_fields() fields.append({"schemaId": "some schema id"}) - with pytest.raises(ValueError) as exc: + with pytest.raises(ValueError): dataset.create_data_rows([ { DataRow.row_data: image_url, @@ -580,7 +579,7 @@ def test_create_data_rows_with_metadata_missing_schema_id(dataset, image_url): fields = make_metadata_fields() fields.append({"value": "some value"}) - with pytest.raises(ValueError) as exc: + with pytest.raises(ValueError): dataset.create_data_rows([ { DataRow.row_data: image_url, @@ -594,8 +593,8 @@ def test_create_data_rows_with_metadata_wrong_type(dataset, image_url): fields = make_metadata_fields() fields.append("Neither DataRowMetadataField or dict") - with pytest.raises(ValueError) as exc: - task = dataset.create_data_rows([ + with pytest.raises(ValueError): + dataset.create_data_rows([ { DataRow.row_data: image_url, DataRow.external_id: "row1", @@ -639,12 +638,14 @@ def test_data_row_update(client, dataset, rand_gen, image_url, data_row.update(row_data=image_url) data_row = wait_for_data_row_processing(client, data_row) assert data_row.row_data == image_url + + def custom_check(data_row): + return data_row.row_data and 'pdfUrl' not in data_row.row_data # tileLayer becomes a media attribute pdf_url = "https://storage.googleapis.com/labelbox-datasets/arxiv-pdf/data/99-word-token-pdfs/0801.3483.pdf" tileLayerUrl = "https://storage.googleapis.com/labelbox-datasets/arxiv-pdf/data/99-word-token-pdfs/0801.3483-lb-textlayer.json" data_row.update(row_data={'pdfUrl': pdf_url, "tileLayerUrl": tileLayerUrl}) - custom_check = lambda data_row: data_row.row_data and 'pdfUrl' not in data_row.row_data data_row = wait_for_data_row_processing(client, data_row, custom_check=custom_check) @@ -753,7 +754,7 @@ def test_data_row_attachments(dataset, image_url): assert len(list(data_row.attachments())) == 1 assert data_row.external_id == "test-id" - with pytest.raises(ValueError) as exc: + with pytest.raises(ValueError): task = dataset.create_data_rows([{ "row_data": image_url, "external_id": "test-id", @@ -961,9 +962,9 @@ def test_data_row_bulk_creation_with_same_global_keys(dataset, sample_image, task.wait_till_done() assert task.status == "COMPLETE" - assert type(task.failed_data_rows) is list + assert isinstance(task.failed_data_rows, list) assert len(task.failed_data_rows) == 1 - assert type(task.created_data_rows) is list + assert isinstance(task.created_data_rows, list) assert len(task.created_data_rows) == 1 assert task.failed_data_rows[0][ 'message'] == f"Duplicate global key: '{global_key_1}'" @@ -1132,7 +1133,7 @@ def test_create_data_row_with_attachments(dataset): def test_create_data_row_with_media_type(dataset, image_url): with pytest.raises(ResourceCreationError) as exc: - dr = dataset.create_data_row( + dataset.create_data_row( row_data={'invalid_object': 'invalid_value'}, media_type="IMAGE") assert "Expected type image/*, detected: application/json" in str(exc.value) diff --git a/libs/labelbox/tests/integration/test_data_upload.py b/libs/labelbox/tests/integration/test_data_upload.py index e10dac943..c4f7d206e 100644 --- a/libs/labelbox/tests/integration/test_data_upload.py +++ b/libs/labelbox/tests/integration/test_data_upload.py @@ -1,4 +1,3 @@ -import pytest import requests diff --git a/libs/labelbox/tests/integration/test_dataset.py b/libs/labelbox/tests/integration/test_dataset.py index 51a43a09c..a2aa7ad38 100644 --- a/libs/labelbox/tests/integration/test_dataset.py +++ b/libs/labelbox/tests/integration/test_dataset.py @@ -63,13 +63,6 @@ def test_dataset_filtering(client, dataset_for_filtering): assert list(client.get_datasets(where=Dataset.name == name_2)) == [d2] -def test_dataset_filtering(client, dataset_for_filtering): - name_1, d1, name_2, d2 = dataset_for_filtering - - assert list(client.get_datasets(where=Dataset.name == name_1)) == [d1] - assert list(client.get_datasets(where=Dataset.name == name_2)) == [d2] - - def test_get_data_row_for_external_id(dataset, rand_gen, image_url): external_id = rand_gen(str) diff --git a/libs/labelbox/tests/integration/test_global_keys.py b/libs/labelbox/tests/integration/test_global_keys.py index 3fd3d84d9..56f29e293 100644 --- a/libs/labelbox/tests/integration/test_global_keys.py +++ b/libs/labelbox/tests/integration/test_global_keys.py @@ -9,7 +9,6 @@ def test_assign_global_keys_to_data_rows(client, dataset, image_url): dr_1 = dataset.create_data_row(row_data=image_url, external_id="hello") dr_2 = dataset.create_data_row(row_data=image_url, external_id="world") - row_ids = set([dr_1.uid, dr_2.uid]) gk_1 = str(uuid.uuid4()) gk_2 = str(uuid.uuid4()) @@ -182,7 +181,7 @@ def test_get_data_row_ids_for_invalid_global_keys(client, dataset, image_url): gk_1 = str(uuid.uuid4()) gk_2 = str(uuid.uuid4()) - dr_1 = dataset.create_data_row(row_data=image_url, external_id="hello") + dataset.create_data_row(row_data=image_url, external_id="hello") dr_2 = dataset.create_data_row(row_data=image_url, external_id="world", global_key=gk_2) diff --git a/libs/labelbox/tests/integration/test_labeling_frontend.py b/libs/labelbox/tests/integration/test_labeling_frontend.py index 59ab0b924..bd47c38dd 100644 --- a/libs/labelbox/tests/integration/test_labeling_frontend.py +++ b/libs/labelbox/tests/integration/test_labeling_frontend.py @@ -1,5 +1,4 @@ from labelbox import LabelingFrontend -import pytest def test_get_labeling_frontends(client): @@ -19,4 +18,4 @@ def test_labeling_frontend_connecting_to_project(project): assert project.labeling_frontend() == default_labeling_frontend project.labeling_frontend.disconnect(default_labeling_frontend) - assert project.labeling_frontend() == None + assert project.labeling_frontend() is None diff --git a/libs/labelbox/tests/integration/test_ontology.py b/libs/labelbox/tests/integration/test_ontology.py index 61dfac0bc..f8005ddf7 100644 --- a/libs/labelbox/tests/integration/test_ontology.py +++ b/libs/labelbox/tests/integration/test_ontology.py @@ -12,18 +12,18 @@ def test_feature_schema_is_not_archived(client, ontology): feature_schema_to_check = ontology.normalized['tools'][0] result = client.is_feature_schema_archived( ontology.uid, feature_schema_to_check['featureSchemaId']) - assert result == False + assert result is False def test_feature_schema_is_archived(client, configured_project_with_label): - project, _, _, label = configured_project_with_label + project, _, _, _ = configured_project_with_label ontology = project.ontology() feature_schema_id = ontology.normalized['tools'][0]['featureSchemaId'] result = client.delete_feature_schema_from_ontology(ontology.uid, feature_schema_id) - assert result.archived == True and result.deleted == False + assert result.archived is True and result.deleted is False assert client.is_feature_schema_archived(ontology.uid, - feature_schema_id) == True + feature_schema_id) is True def test_is_feature_schema_archived_for_non_existing_feature_schema( @@ -50,8 +50,8 @@ def test_delete_tool_feature_from_ontology(client, ontology): assert len(ontology.normalized['tools']) == 2 result = client.delete_feature_schema_from_ontology( ontology.uid, feature_schema_to_delete['featureSchemaId']) - assert result.deleted == True - assert result.archived == False + assert result.deleted is True + assert result.archived is False updatedOntology = client.get_ontology(ontology.uid) assert len(updatedOntology.normalized['tools']) == 1 @@ -247,7 +247,7 @@ def test_unarchive_feature_schema_node(client, ontology): feature_schema_to_unarchive = ontology.normalized['tools'][0] result = client.unarchive_feature_schema_node( ontology.uid, feature_schema_to_unarchive['featureSchemaId']) - assert result == None + assert result is None def test_unarchive_feature_schema_node_for_non_existing_feature_schema( diff --git a/libs/labelbox/tests/integration/test_pagination.py b/libs/labelbox/tests/integration/test_pagination.py index 1d500c9fa..9f31c4131 100644 --- a/libs/labelbox/tests/integration/test_pagination.py +++ b/libs/labelbox/tests/integration/test_pagination.py @@ -1,5 +1,4 @@ from copy import copy -import time import pytest diff --git a/libs/labelbox/tests/integration/test_project_setup.py b/libs/labelbox/tests/integration/test_project_setup.py index 8404b0e50..d70488eab 100644 --- a/libs/labelbox/tests/integration/test_project_setup.py +++ b/libs/labelbox/tests/integration/test_project_setup.py @@ -5,7 +5,7 @@ import pytest from labelbox import LabelingFrontend -from labelbox.exceptions import InvalidQueryError, ResourceConflict +from labelbox.exceptions import InvalidQueryError def simple_ontology(): diff --git a/libs/labelbox/tests/integration/test_prompt_response_generation_project.py b/libs/labelbox/tests/integration/test_prompt_response_generation_project.py index 20d42d92c..809189762 100644 --- a/libs/labelbox/tests/integration/test_prompt_response_generation_project.py +++ b/libs/labelbox/tests/integration/test_prompt_response_generation_project.py @@ -2,8 +2,6 @@ from unittest.mock import patch from labelbox import MediaType -from labelbox.schema.ontology_kind import OntologyKind -from labelbox.exceptions import MalformedQueryException @pytest.mark.parametrize( "prompt_response_ontology, prompt_response_generation_project_with_new_dataset", diff --git a/libs/labelbox/tests/integration/test_task.py b/libs/labelbox/tests/integration/test_task.py index bec0d0414..f875b10e4 100644 --- a/libs/labelbox/tests/integration/test_task.py +++ b/libs/labelbox/tests/integration/test_task.py @@ -1,5 +1,4 @@ import json -import pytest import collections.abc from labelbox import DataRow from labelbox.schema.data_row_metadata import DataRowMetadataField diff --git a/libs/labelbox/tests/integration/test_toggle_mal.py b/libs/labelbox/tests/integration/test_toggle_mal.py index 41dfbe395..566c4210c 100644 --- a/libs/labelbox/tests/integration/test_toggle_mal.py +++ b/libs/labelbox/tests/integration/test_toggle_mal.py @@ -1,9 +1,9 @@ def test_enable_model_assisted_labeling(project): response = project.enable_model_assisted_labeling() - assert response == True + assert response is True response = project.enable_model_assisted_labeling(True) - assert response == True + assert response is True response = project.enable_model_assisted_labeling(False) - assert response == False + assert response is False diff --git a/libs/labelbox/tests/unit/schema/test_user_group.py b/libs/labelbox/tests/unit/schema/test_user_group.py index 0eb0381d6..983096a08 100644 --- a/libs/labelbox/tests/unit/schema/test_user_group.py +++ b/libs/labelbox/tests/unit/schema/test_user_group.py @@ -54,7 +54,7 @@ def test_constructor_experimental_needed(self): client = MagicMock(Client) client.enable_experimental = False with pytest.raises(RuntimeError): - group = UserGroup(client) + UserGroup(client) def test_constructor(self): group = UserGroup(self.client) @@ -65,7 +65,7 @@ def test_constructor(self): assert len(group.projects) == 0 assert len(group.users) == 0 - def test_update_with_exception_name(self): + def test_get_update_with_exception_name(self): group = self.group group.id = "" @@ -174,7 +174,7 @@ def test_update_resource_error_unknown_id(self): group.name = "Test Group" group.id = "group_id" - with pytest.raises(ResourceNotFoundError) as e: + with pytest.raises(ResourceNotFoundError): group.update() def test_update_with_exception_name(self): @@ -184,7 +184,7 @@ def test_update_with_exception_name(self): with pytest.raises(UnprocessableEntityError): group.update() - def test_update_with_exception_name(self): + def test_update_with_exception_id(self): group = self.group group.id = "" diff --git a/libs/labelbox/tests/unit/test_label_data_type.py b/libs/labelbox/tests/unit/test_label_data_type.py index 737136a36..a140441aa 100644 --- a/libs/labelbox/tests/unit/test_label_data_type.py +++ b/libs/labelbox/tests/unit/test_label_data_type.py @@ -1,6 +1,4 @@ -from email import message import pytest -from pydantic import ValidationError from labelbox.data.annotation_types.data.generic_data_row_data import GenericDataRowData from labelbox.data.annotation_types.data.video import VideoData diff --git a/libs/labelbox/tests/unit/test_unit_delete_batch_data_row_metadata.py b/libs/labelbox/tests/unit/test_unit_delete_batch_data_row_metadata.py index d1a901230..55809d480 100644 --- a/libs/labelbox/tests/unit/test_unit_delete_batch_data_row_metadata.py +++ b/libs/labelbox/tests/unit/test_unit_delete_batch_data_row_metadata.py @@ -1,4 +1,3 @@ -from re import U from labelbox.schema.data_row_metadata import _DeleteBatchDataRowMetadata from labelbox.schema.identifiable import GlobalKey, UniqueId diff --git a/libs/labelbox/tests/unit/test_unit_descriptor_file_creator.py b/libs/labelbox/tests/unit/test_unit_descriptor_file_creator.py index 630d80573..2e399570a 100644 --- a/libs/labelbox/tests/unit/test_unit_descriptor_file_creator.py +++ b/libs/labelbox/tests/unit/test_unit_descriptor_file_creator.py @@ -1,7 +1,6 @@ import json -from unittest.mock import MagicMock, Mock -import pytest +from unittest.mock import MagicMock from labelbox.schema.internal.descriptor_file_creator import DescriptorFileCreator diff --git a/libs/labelbox/tests/unit/test_unit_filter.py b/libs/labelbox/tests/unit/test_unit_filter.py index 8b49a6f58..60a7836d4 100644 --- a/libs/labelbox/tests/unit/test_unit_filter.py +++ b/libs/labelbox/tests/unit/test_unit_filter.py @@ -61,6 +61,6 @@ def test_logical_expr_ops(): # Can't create logical expressions with anything except comparisons and # other logical expressions. with pytest.raises(TypeError): - logical_op = comparison_1 & 42 + comparison_1 & 42 with pytest.raises(TypeError): - logical_op = comparison_1 | 42 + comparison_1 | 42 diff --git a/libs/labelbox/tests/unit/test_unit_query.py b/libs/labelbox/tests/unit/test_unit_query.py index 12db00d2b..e121dd35f 100644 --- a/libs/labelbox/tests/unit/test_unit_query.py +++ b/libs/labelbox/tests/unit/test_unit_query.py @@ -1,4 +1,3 @@ -import pytest from labelbox import Project, Dataset from labelbox.orm import query