From 9b862332f35d546c14ec12b14f35aeda5b14786e Mon Sep 17 00:00:00 2001 From: Val Brodsky Date: Wed, 15 Jan 2025 11:05:28 -0800 Subject: [PATCH] [PLT-2336] Vb/backport export charset plt 2336 (#1943) --- .python-version | 2 +- docs/conf.py | 2 +- libs/labelbox/CHANGELOG.md | 5 + libs/labelbox/pyproject.toml | 2 +- libs/labelbox/src/labelbox/__init__.py | 95 ++++++++++++------- .../src/labelbox/schema/export_task.py | 15 +-- 6 files changed, 76 insertions(+), 45 deletions(-) diff --git a/.python-version b/.python-version index 143c2f5d0..43077b246 100644 --- a/.python-version +++ b/.python-version @@ -1 +1 @@ -3.8.19 +3.9.18 diff --git a/docs/conf.py b/docs/conf.py index 55a4fbbf6..7da98f8fc 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -16,7 +16,7 @@ project = 'Python SDK reference' copyright = '2024, Labelbox' author = 'Labelbox' -release = '3.78.1' +release = '3.78.2' # -- General configuration --------------------------------------------------- diff --git a/libs/labelbox/CHANGELOG.md b/libs/labelbox/CHANGELOG.md index d666f16d7..5cdde1040 100644 --- a/libs/labelbox/CHANGELOG.md +++ b/libs/labelbox/CHANGELOG.md @@ -1,4 +1,9 @@ # Changelog +# Version 3.78.2 (2025-01-15) +## Fixed +* Exporter encoding + * NOTE: backported from v.5.2.1 + # Version 3.78.1 (2024-09-10) ## Fixed * Labeling dashboard query for tags diff --git a/libs/labelbox/pyproject.toml b/libs/labelbox/pyproject.toml index 1e02365d1..8cae471fc 100644 --- a/libs/labelbox/pyproject.toml +++ b/libs/labelbox/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "labelbox" -version = "3.78.1" +version = "3.78.2" description = "Labelbox Python API" authors = [{ name = "Labelbox", email = "engineering@labelbox.com" }] dependencies = [ diff --git a/libs/labelbox/src/labelbox/__init__.py b/libs/labelbox/src/labelbox/__init__.py index cd238f263..dd113eebb 100644 --- a/libs/labelbox/src/labelbox/__init__.py +++ b/libs/labelbox/src/labelbox/__init__.py @@ -1,48 +1,73 @@ name = "labelbox" -__version__ = "3.78.1" +__version__ = "3.78.2" 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.annotation_import import ( + LabelImport, + MALPredictionImport, + MEAPredictionImport, + MEAToMALPredictionImport, +) +from labelbox.schema.asset_attachment import AssetAttachment +from labelbox.schema.batch import Batch +from labelbox.schema.benchmark import Benchmark 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.data_row import DataRow +from labelbox.schema.data_row_metadata import ( + DataRowMetadata, + DataRowMetadataField, + DataRowMetadataOntology, + DeleteDataRowMetadata, +) +from labelbox.schema.dataset import Dataset from labelbox.schema.enums import AnnotationImportState +from labelbox.schema.export_task import ( + BufferedJsonConverterOutput, + ExportTask, + FileConverter, + FileConverterOutput, + JsonConverter, + JsonConverterOutput, + StreamType, +) +from labelbox.schema.iam_integration import IAMIntegration +from labelbox.schema.identifiable import GlobalKey, UniqueId +from labelbox.schema.identifiables import DataRowIds, GlobalKeys, UniqueIds +from labelbox.schema.invite import Invite, InviteLimit 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.label_score import LabelScore 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.labeling_service import LabelingService +from labelbox.schema.labeling_service_dashboard import LabelingServiceDashboard +from labelbox.schema.labeling_service_status import LabelingServiceStatus +from labelbox.schema.media_type import MediaType +from labelbox.schema.model import Model +from labelbox.schema.model_config import ModelConfig +from labelbox.schema.model_run import DataSplit, ModelRun +from labelbox.schema.ontology import ( + Classification, + FeatureSchema, + Ontology, + OntologyBuilder, + Option, + PromptResponseClassification, + ResponseOption, + Tool, +) +from labelbox.schema.ontology_kind import OntologyKind +from labelbox.schema.organization import Organization +from labelbox.schema.project import Project from labelbox.schema.project_model_config import ProjectModelConfig +from labelbox.schema.project_overview import ProjectOverview, ProjectOverviewDetailed 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.resource_tag import ResourceTag +from labelbox.schema.review import Review +from labelbox.schema.role import ProjectRole, Role +from labelbox.schema.slice import CatalogSlice, ModelSlice, Slice +from labelbox.schema.task import Task 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 -from labelbox.schema.labeling_service import LabelingService -from labelbox.schema.labeling_service_dashboard import LabelingServiceDashboard -from labelbox.schema.labeling_service_status import LabelingServiceStatus +from labelbox.schema.user import User +from labelbox.schema.webhook import Webhook diff --git a/libs/labelbox/src/labelbox/schema/export_task.py b/libs/labelbox/src/labelbox/schema/export_task.py index 06715748c..0dd04d18a 100644 --- a/libs/labelbox/src/labelbox/schema/export_task.py +++ b/libs/labelbox/src/labelbox/schema/export_task.py @@ -1,11 +1,16 @@ +import json +import os +import tempfile +import warnings from abc import ABC, abstractmethod from dataclasses import dataclass from enum import Enum from functools import lru_cache from io import TextIOWrapper -import json from pathlib import Path from typing import ( + TYPE_CHECKING, + Any, Callable, Generic, Iterator, @@ -14,17 +19,12 @@ Tuple, TypeVar, Union, - TYPE_CHECKING, overload, - Any, ) import requests -import warnings -import tempfile -import os -from labelbox import pydantic_compat +from labelbox import pydantic_compat from labelbox.schema.task import Task from labelbox.utils import _CamelCaseMixin @@ -236,6 +236,7 @@ def _get_file_content( f"{self._ctx.stream_type.value} stream") response = requests.get(file_info.file, timeout=30) response.raise_for_status() + response.encoding = "utf-8" assert len( response.content ) == file_info.offsets.end - file_info.offsets.start + 1, (