diff --git a/encord/client.py b/encord/client.py index 48f43917d..ac26a1d4c 100644 --- a/encord/client.py +++ b/encord/client.py @@ -64,11 +64,9 @@ DatasetUser, DatasetUserRole, DatasetUsers, - DicomSeries, Image, ImageGroup, ImageGroupOCR, - Images, LongPollingStatus, ReEncodeVideoTask, Video, @@ -90,7 +88,6 @@ ShadowDataState, ) from encord.orm.labeling_algorithm import ( - BoundingBoxFittingParams, LabelingAlgorithm, ObjectInterpolationParams, ) diff --git a/encord/collection.py b/encord/collection.py index f8aeb07c3..0f029c804 100644 --- a/encord/collection.py +++ b/encord/collection.py @@ -37,7 +37,7 @@ UpdateCollectionPayload, ) from encord.orm.collection import ProjectCollection as OrmProjectCollection -from encord.orm.label_row import LabelRowMetadata, label_row_metadata_dto_to_label_row_metadata +from encord.orm.label_row import label_row_metadata_dto_to_label_row_metadata from encord.storage import StorageItem, StorageItemInaccessible log = logging.getLogger(__name__) diff --git a/encord/common/bitmask_operations/__init__.py b/encord/common/bitmask_operations/__init__.py index 4dcdd7739..90c4c4a09 100644 --- a/encord/common/bitmask_operations/__init__.py +++ b/encord/common/bitmask_operations/__init__.py @@ -20,6 +20,10 @@ ) __all__ = [ + "_mask_to_rle", + "_rle_to_mask", + "_rle_to_string", + "_string_to_rle", "deserialise_bitmask", "serialise_bitmask", "transpose_bytearray", diff --git a/encord/common/bitmask_operations/bitmask_operations_numpy.py b/encord/common/bitmask_operations/bitmask_operations_numpy.py index bead3c56e..be7489929 100644 --- a/encord/common/bitmask_operations/bitmask_operations_numpy.py +++ b/encord/common/bitmask_operations/bitmask_operations_numpy.py @@ -1,4 +1,4 @@ -from typing import List, Sequence, Tuple +from typing import List, Tuple import numpy as np diff --git a/encord/common/range_manager.py b/encord/common/range_manager.py index 187ad1469..971833070 100644 --- a/encord/common/range_manager.py +++ b/encord/common/range_manager.py @@ -1,4 +1,4 @@ -from typing import Iterable, List, Optional, Set, Union, cast +from typing import Optional, Set, cast from encord.objects.frames import Frames, Range, Ranges diff --git a/encord/filter_preset.py b/encord/filter_preset.py index ee375d9f5..a3f7dea13 100644 --- a/encord/filter_preset.py +++ b/encord/filter_preset.py @@ -2,7 +2,6 @@ from typing import Iterator, List, Optional, Union from uuid import UUID -from encord.client import EncordClientProject from encord.exceptions import ( AuthorisationError, EncordException, diff --git a/encord/http/__init__.py b/encord/http/__init__.py index feea4cc1f..341d711f6 100644 --- a/encord/http/__init__.py +++ b/encord/http/__init__.py @@ -1 +1,5 @@ from encord.http.constants import RequestsSettings + +__all__ = [ + "RequestsSettings", +] diff --git a/encord/http/utils.py b/encord/http/utils.py index 645fde46f..5f4cc9b10 100644 --- a/encord/http/utils.py +++ b/encord/http/utils.py @@ -15,23 +15,16 @@ from concurrent.futures import ThreadPoolExecutor from dataclasses import dataclass from pathlib import Path -from typing import Dict, Iterable, List, Optional, Tuple, Type, Union +from typing import Dict, Iterable, List, Optional, Union from tqdm import tqdm from encord.configs import BaseConfig from encord.exceptions import CloudUploadError, EncordException -from encord.http.querier import Querier, create_new_session +from encord.http.querier import create_new_session from encord.http.v2.api_client import ApiClient from encord.http.v2.payloads import Page from encord.orm.base_dto import BaseDTO -from encord.orm.dataset import ( - Audio, - DicomSeries, - Images, - SignedImagesURL, - Video, -) from encord.orm.storage import StorageItemType, UploadSignedUrl PROGRESS_BAR_FILE_FACTOR = 100 diff --git a/encord/issues/issue_client.py b/encord/issues/issue_client.py index 0b7c1956a..23fc4555f 100644 --- a/encord/issues/issue_client.py +++ b/encord/issues/issue_client.py @@ -1,6 +1,5 @@ from __future__ import annotations -from dataclasses import dataclass from enum import auto from typing import List, Literal, Union from uuid import UUID diff --git a/encord/objects/classification.py b/encord/objects/classification.py index eb0ce9d1e..f582f2ef9 100644 --- a/encord/objects/classification.py +++ b/encord/objects/classification.py @@ -12,7 +12,6 @@ from __future__ import annotations from dataclasses import dataclass -from enum import Enum from typing import Any, Dict, List, Optional, Sequence, Type from encord.common.enum import StringEnum diff --git a/encord/objects/classification_instance.py b/encord/objects/classification_instance.py index 8ac26ac77..3facd35cc 100644 --- a/encord/objects/classification_instance.py +++ b/encord/objects/classification_instance.py @@ -24,7 +24,6 @@ NoReturn, Optional, Sequence, - Set, Tuple, Union, ) @@ -42,9 +41,9 @@ TextAttribute, _get_attribute_by_hash, ) -from encord.objects.classification import Classification, OntologyClassificationLevel +from encord.objects.classification import Classification from encord.objects.constants import DEFAULT_CONFIDENCE, DEFAULT_MANUAL_ANNOTATION -from encord.objects.frames import Frames, Ranges, frames_class_to_frames_list, frames_to_ranges +from encord.objects.frames import Frames, Ranges, frames_class_to_frames_list from encord.objects.internal_helpers import ( _infer_attribute_from_answer, _search_child_attributes, diff --git a/encord/objects/common.py b/encord/objects/common.py index c6631d5b8..23871c7a5 100644 --- a/encord/objects/common.py +++ b/encord/objects/common.py @@ -5,21 +5,31 @@ from typing import Any, Dict, List, Union from encord.common.enum import StringEnum -from encord.objects.attributes import ( # pylint: disable=unused-import +from encord.objects.attributes import ( Attribute, ChecklistAttribute, RadioAttribute, TextAttribute, ) - -# Following imports need to be here for backwards compatibility -from encord.objects.ontology_element import NestedID # pylint: disable=unused-import -from encord.objects.options import ( # pylint: disable=unused-import +from encord.objects.ontology_element import NestedID +from encord.objects.options import ( FlatOption, NestableOption, Option, ) +# Following imports need to be here for backwards compatibility +__all__ = [ + "Attribute", + "ChecklistAttribute", + "FlatOption", + "NestableOption", + "NestedID", + "Option", + "RadioAttribute", + "TextAttribute", +] + class PropertyType(StringEnum): RADIO = "radio" diff --git a/encord/objects/constants.py b/encord/objects/constants.py index b9784a045..ce6c381e7 100644 --- a/encord/objects/constants.py +++ b/encord/objects/constants.py @@ -11,9 +11,14 @@ from __future__ import annotations -# for backwards compatibility from encord.common.constants import DATETIME_LONG_STRING_FORMAT +# for backwards compatibility +__all__ = [ + "DATETIME_LONG_STRING_FORMAT", +] + + DEFAULT_CONFIDENCE = 1.0 DEFAULT_MANUAL_ANNOTATION = True AVAILABLE_COLORS = ( diff --git a/encord/objects/html_node.py b/encord/objects/html_node.py index 22bb5cab3..a1514890b 100644 --- a/encord/objects/html_node.py +++ b/encord/objects/html_node.py @@ -11,8 +11,7 @@ from __future__ import annotations -from dataclasses import dataclass -from typing import Collection, List, Union, cast +from typing import List from encord.orm.base_dto import BaseDTO diff --git a/encord/objects/ontology_labels_impl.py b/encord/objects/ontology_labels_impl.py index b85896d9d..0ebf9ffa6 100644 --- a/encord/objects/ontology_labels_impl.py +++ b/encord/objects/ontology_labels_impl.py @@ -71,9 +71,7 @@ Range, Ranges, frames_class_to_frames_list, - frames_to_ranges, ranges_list_to_ranges, - ranges_to_list, ) from encord.objects.html_node import HtmlRange from encord.objects.metadata import DataGroupMetadata, DICOMSeriesMetadata, DICOMSliceMetadata @@ -86,7 +84,6 @@ from encord.orm import storage as orm_storage from encord.orm.label_row import ( AnnotationTaskStatus, - LabelRow, LabelRowMetadata, LabelStatus, WorkflowGraphNode, diff --git a/encord/objects/ontology_object_instance.py b/encord/objects/ontology_object_instance.py index 533212305..9131ff6a2 100644 --- a/encord/objects/ontology_object_instance.py +++ b/encord/objects/ontology_object_instance.py @@ -28,7 +28,6 @@ Union, ) -from encord.common.range_manager import RangeManager from encord.common.time_parser import parse_datetime from encord.constants.enums import DataType from encord.exceptions import LabelRowError @@ -52,7 +51,7 @@ frames_to_ranges, ranges_list_to_ranges, ) -from encord.objects.html_node import HtmlRange, HtmlRanges +from encord.objects.html_node import HtmlRanges from encord.objects.internal_helpers import ( _infer_attribute_from_answer, _search_child_attributes, diff --git a/encord/objects/project.py b/encord/objects/project.py index bb9e2a5d0..12bc14ad5 100644 --- a/encord/objects/project.py +++ b/encord/objects/project.py @@ -1,2 +1,6 @@ -# Import for backward compatibility from encord.orm.project import ProjectDataset + +# Export for backward compatibility +__all__ = [ + "ProjectDataset", +] diff --git a/encord/objects/skeleton_template.py b/encord/objects/skeleton_template.py index a0e3e1cc1..20263c54e 100644 --- a/encord/objects/skeleton_template.py +++ b/encord/objects/skeleton_template.py @@ -11,12 +11,10 @@ from __future__ import annotations -from dataclasses import dataclass -from typing import Any, List, Optional, Set, Type +from typing import List, Set from encord.objects.coordinates import SkeletonCoordinate, SkeletonCoordinates from encord.orm.skeleton_template import SkeletonTemplate as SkeletonTemplateORM -from encord.orm.skeleton_template import SkeletonTemplateCoordinate class SkeletonTemplate(SkeletonTemplateORM): diff --git a/encord/orm/analytics.py b/encord/orm/analytics.py index dffd8d85e..368568f81 100644 --- a/encord/orm/analytics.py +++ b/encord/orm/analytics.py @@ -1,11 +1,11 @@ from datetime import datetime from enum import Enum, auto -from typing import List, Literal, Optional +from typing import List, Optional from uuid import UUID from encord.common.utils import snake_to_camel from encord.orm.base_dto import BaseDTO -from encord.orm.workflow import BaseWorkflowNode, WorkflowNode, WorkflowStageType +from encord.orm.workflow import BaseWorkflowNode from encord.utilities.project_user import ProjectUserRole diff --git a/encord/orm/base_dto/__init__.py b/encord/orm/base_dto/__init__.py index 41d5f1b19..d9b0ecb80 100644 --- a/encord/orm/base_dto/__init__.py +++ b/encord/orm/base_dto/__init__.py @@ -25,3 +25,14 @@ RootModelDTO, dto_validator, ) + +__all__ = [ + "BaseDTO", + "BaseDTOInterface", + "BaseDTOWithExtra", + "Field", + "GenericBaseDTO", + "PrivateAttr", + "RootModelDTO", + "dto_validator", +] diff --git a/encord/orm/base_dto/base_dto_pydantic_v1.py b/encord/orm/base_dto/base_dto_pydantic_v1.py index cbb46e7fe..8b50a6e7b 100644 --- a/encord/orm/base_dto/base_dto_pydantic_v1.py +++ b/encord/orm/base_dto/base_dto_pydantic_v1.py @@ -5,8 +5,8 @@ from pydantic import ( BaseModel, - Field, - PrivateAttr, + Field, # noqa: F401 needed for imports elsewhere + PrivateAttr, # noqa: F401 needed for imports elsewhere ValidationError, root_validator, validator, diff --git a/encord/orm/base_dto/base_dto_pydantic_v2.py b/encord/orm/base_dto/base_dto_pydantic_v2.py index 0b725d137..49b1fd761 100644 --- a/encord/orm/base_dto/base_dto_pydantic_v2.py +++ b/encord/orm/base_dto/base_dto_pydantic_v2.py @@ -1,14 +1,12 @@ from datetime import datetime -from functools import wraps from typing import Any, Callable, Dict, Literal, Type, TypeVar, get_origin # TODO: invent some dependency version dependent type checking to get rid of this ignore from pydantic import ( # type: ignore[attr-defined] BaseModel, ConfigDict, # type: ignore[attr-defined] - Extra, - Field, - PrivateAttr, + Field, # noqa: F401 needed for imports elsewhere + PrivateAttr, # noqa: F401 needed for imports elsewhere RootModel, # type: ignore[attr-defined] ValidationError, field_validator, diff --git a/encord/orm/base_orm.py b/encord/orm/base_orm.py index b8ff3076b..914e2bb89 100644 --- a/encord/orm/base_orm.py +++ b/encord/orm/base_orm.py @@ -1,5 +1,4 @@ import datetime -import json import logging from collections import OrderedDict, abc diff --git a/encord/orm/collection.py b/encord/orm/collection.py index 51bf770d6..671e3939a 100644 --- a/encord/orm/collection.py +++ b/encord/orm/collection.py @@ -1,7 +1,7 @@ import uuid from datetime import datetime from enum import Enum -from typing import Any, List, Optional, Union +from typing import List, Optional, Union from uuid import UUID from encord.orm.base_dto import BaseDTO, Field diff --git a/encord/orm/filter_preset.py b/encord/orm/filter_preset.py index 34bf63609..89afe6cdf 100644 --- a/encord/orm/filter_preset.py +++ b/encord/orm/filter_preset.py @@ -3,7 +3,7 @@ from typing import Dict, List, Optional from uuid import UUID -from encord.orm.base_dto import BaseDTO, Field, dto_validator +from encord.orm.base_dto import BaseDTO, Field class GetPresetParams(BaseDTO): diff --git a/encord/orm/ontology.py b/encord/orm/ontology.py index e01402bec..651bf692d 100644 --- a/encord/orm/ontology.py +++ b/encord/orm/ontology.py @@ -1,12 +1,11 @@ from __future__ import annotations from datetime import datetime -from enum import IntEnum from typing import Dict, Optional # pylint: disable=unused-import from encord.objects.ontology_structure import OntologyStructure -from encord.orm.base_dto import BaseDTO, dto_validator +from encord.orm.base_dto import BaseDTO from encord.orm.formatter import Formatter from encord.utilities.ontology_user import OntologyUserRole diff --git a/encord/orm/workflow.py b/encord/orm/workflow.py index 7536758c3..d504cd316 100644 --- a/encord/orm/workflow.py +++ b/encord/orm/workflow.py @@ -2,8 +2,6 @@ from typing import Any, List, Union from uuid import UUID -from typing_extensions import Annotated - from encord.orm.base_dto import BaseDTO, dto_validator diff --git a/encord/storage.py b/encord/storage.py index ca0da9279..7aab6c96c 100644 --- a/encord/storage.py +++ b/encord/storage.py @@ -17,7 +17,7 @@ from datetime import datetime from math import ceil from pathlib import Path -from typing import Any, Collection, Dict, Iterable, List, Literal, Optional, Sequence, TextIO, Union +from typing import Any, Collection, Dict, Iterable, List, Optional, Sequence, TextIO, Union from uuid import UUID import requests diff --git a/encord/user_client.py b/encord/user_client.py index d59a1b16c..dc0e81b43 100644 --- a/encord/user_client.py +++ b/encord/user_client.py @@ -32,7 +32,7 @@ from encord.common.deprecated import deprecated from encord.common.time_parser import parse_datetime, parse_datetime_optional from encord.configs import ENCORD_DOMAIN, BearerConfig, SshConfig, UserConfig, get_env_ssh_key -from encord.constants.string_constants import TYPE_DATASET, TYPE_ONTOLOGY, TYPE_PROJECT +from encord.constants.string_constants import TYPE_DATASET, TYPE_PROJECT from encord.dataset import Dataset from encord.filter_preset import FilterPreset from encord.http.constants import DEFAULT_REQUESTS_SETTINGS, RequestsSettings @@ -62,12 +62,9 @@ DatasetInfo, DatasetsWithUserRolesListParams, DatasetsWithUserRolesListResponse, - DicomDeidentifyTask, - Images, StorageLocation, dataset_user_role_str_enum_to_int_enum, ) -from encord.orm.dataset import Dataset as OrmDataset from encord.orm.deidentification import ( DicomDeIdGetResultLongPollingStatus, DicomDeIdGetResultParams, @@ -79,7 +76,6 @@ ) from encord.orm.group import Group as OrmGroup from encord.orm.ontology import CreateOrUpdateOntologyPayload -from encord.orm.ontology import Ontology as OrmOntology from encord.orm.project import ( BenchmarkQaWorkflowSettings, CvatExportType, @@ -108,7 +104,7 @@ Issues, LocalImport, ) -from encord.utilities.ontology_user import OntologiesFilterParams, OntologyUserRole, OntologyWithUserRole +from encord.utilities.ontology_user import OntologiesFilterParams, OntologyWithUserRole from encord.utilities.project_user import ProjectUserRole CVAT_LONG_POLLING_RESPONSE_RETRY_N = 3 diff --git a/encord/utilities/coco/exporter.py b/encord/utilities/coco/exporter.py index 4e8482a22..d4fd5e96d 100644 --- a/encord/utilities/coco/exporter.py +++ b/encord/utilities/coco/exporter.py @@ -1,7 +1,5 @@ try: import cv2 - import pycocotools - import shapely except ImportError as e: raise ImportError( "The 'opencv-python', 'pycocotools' and 'shapely' packages are required for the COCO export. " diff --git a/encord/utilities/ontology_user.py b/encord/utilities/ontology_user.py index 02dda974c..b0c31be3d 100644 --- a/encord/utilities/ontology_user.py +++ b/encord/utilities/ontology_user.py @@ -9,7 +9,6 @@ --- """ -from dataclasses import dataclass from datetime import datetime from enum import IntEnum from typing import Optional, Union diff --git a/pyproject.toml b/pyproject.toml index 069aa67ac..29c4f23eb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ documentation = "https://python.docs.encord.com/" [dependency-groups] -dev = [ # 'dev' group is synced by default in uv (no explicit configuration needed) +dev = [# 'dev' group is synced by default in uv (no explicit configuration needed) "pytest>=7.4.1,<8.0.0", "pre-commit>=3.5.0,<4.0.0", "deepdiff>=8.6.1,<9.0.0", @@ -81,5 +81,6 @@ select = ["W", "Q", "I", "D417", "RUF022", "F"] [tool.ruff.lint.pydocstyle] ignore-var-parameters = true + [tool.ruff.lint.per-file-ignores] -"encord/*" = ["F401", "E402"] +"*" = ["E501"] diff --git a/tests/objects/test_ontology.py b/tests/objects/test_ontology.py index 67c18761c..7b519a094 100644 --- a/tests/objects/test_ontology.py +++ b/tests/objects/test_ontology.py @@ -9,8 +9,9 @@ import encord.objects.ontology_structure import encord.objects.options from encord.objects.common import Shape -from encord.objects.skeleton_template import SkeletonTemplate, SkeletonTemplateCoordinate +from encord.objects.skeleton_template import SkeletonTemplate from encord.objects.utils import short_uuid_str +from encord.orm.skeleton_template import SkeletonTemplateCoordinate from tests.objects.data.data_editor_blob import EDITOR_BLOB log = logging.getLogger(__name__) diff --git a/tests/objects/test_skeleton_template.py b/tests/objects/test_skeleton_template.py index 0d073d1d4..9543d52bc 100644 --- a/tests/objects/test_skeleton_template.py +++ b/tests/objects/test_skeleton_template.py @@ -1,6 +1,7 @@ from deepdiff import DeepDiff -from encord.objects.skeleton_template import SkeletonTemplate, SkeletonTemplateCoordinate +from encord.objects.skeleton_template import SkeletonTemplate +from encord.orm.skeleton_template import SkeletonTemplateCoordinate SKELETON_TEMPLATE_COORDINATES = [ SkeletonTemplateCoordinate(x=0, y=0, name="point_0"),