Skip to content

Vb/fix dd method dashboard #1880

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Oct 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions libs/labelbox/mypy.ini
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,6 @@ ignore_errors = True

[mypy-lbox.exceptions]
ignore_missing_imports = True

[mypy-lbox.call_info"]
ignore_missing_imports = True
2 changes: 1 addition & 1 deletion libs/labelbox/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ dependencies = [
"tqdm>=4.66.2",
"geojson>=3.1.0",
"mypy==1.10.1",
"lbox-clients==1.1.0",
"lbox-clients==1.1.1",
]
readme = "README.md"
requires-python = ">=3.9,<3.13"
Expand Down
6 changes: 6 additions & 0 deletions libs/labelbox/src/labelbox/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,12 @@ def enable_experimental(self) -> bool:
def app_url(self) -> str:
return self._request_client.app_url

def set_sdk_method(self, sdk_method: str):
self._request_client.sdk_method = sdk_method

def unset_sdk_method(self):
self._request_client.sdk_method = None

def execute(
self,
query=None,
Expand Down
22 changes: 18 additions & 4 deletions libs/labelbox/src/labelbox/pagination.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,18 @@
# Size of a single page in a paginated query.
from abc import ABC, abstractmethod
from typing import Any, Callable, Dict, List, Optional, Tuple, Type, Union

from typing import TYPE_CHECKING
from typing import (
TYPE_CHECKING,
Any,
Callable,
Dict,
List,
Optional,
Tuple,
Type,
Union,
)

from lbox.call_info import call_info_as_str

if TYPE_CHECKING:
from labelbox import Client
Expand Down Expand Up @@ -49,9 +59,11 @@ def __init__(
self._fetched_all = False
self._data: List[Dict[str, Any]] = []
self._data_ind = 0
self._client = client
self._client.set_sdk_method(call_info_as_str())

pagination_kwargs = {
"client": client,
"client": self._client,
"obj_class": obj_class,
"dereferencing": dereferencing,
"experimental": experimental,
Expand All @@ -72,11 +84,13 @@ def __iter__(self):
def __next__(self):
if len(self._data) <= self._data_ind:
if self._fetched_all:
self._client.unset_sdk_method()
raise StopIteration()

page_data, self._fetched_all = self.paginator.get_next_page()
self._data.extend(page_data)
if len(page_data) == 0:
self._client.unset_sdk_method()
raise StopIteration()

rval = self._data[self._data_ind]
Expand Down
2 changes: 1 addition & 1 deletion libs/lbox-clients/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "lbox-clients"
version = "1.1.0"
version = "1.1.1"
description = "This module contains client sdk uses to conntect to the Labelbox API and backends"
authors = [
{ name = "Labelbox", email = "engineering@labelbox.com" }
Expand Down
55 changes: 55 additions & 0 deletions libs/lbox-clients/src/lbox/call_info.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import inspect
import re
import sys
from typing import TypedDict


def python_version_info():
version_info = sys.version_info

return f"{version_info.major}.{version_info.minor}.{version_info.micro}-{version_info.releaselevel}"


LABELBOX_CALL_PATTERN = re.compile(r"/labelbox/")
TEST_FILE_PATTERN = re.compile(r".*test.*\.py$")


class _RequestInfo(TypedDict):
prefix: str
class_name: str
method_name: str


def call_info():
method_name: str = "Unknown"
prefix = ""
class_name = ""
skip_methods = ["wrapper", "__init__", "execute"]
skip_classes = ["PaginatedCollection", "_CursorPagination", "_OffsetPagination"]

try:
call_info = None
for stack in reversed(inspect.stack()):
if LABELBOX_CALL_PATTERN.search(stack.filename):
call_info = stack
method_name: str = call_info.function
class_name = call_info.frame.f_locals.get(
"self", None
).__class__.__name__
if method_name not in skip_methods:
if class_name not in skip_classes:
if TEST_FILE_PATTERN.search(call_info.filename):
prefix = "test:"
else:
if class_name == "NoneType":
class_name = ""
break

except Exception:
pass
return _RequestInfo(prefix=prefix, class_name=class_name, method_name=method_name)


def call_info_as_str():
info: _RequestInfo = call_info()
return f"{info['prefix']}{info['class_name']}:{info['method_name']}"
72 changes: 15 additions & 57 deletions libs/lbox-clients/src/lbox/request_client.py
Original file line number Diff line number Diff line change
@@ -1,75 +1,22 @@
# for the Labelbox Python SDK
import inspect
import json
import logging
import os
import re
import sys
from datetime import datetime, timezone
from types import MappingProxyType
from typing import Callable, Dict, Optional, TypedDict
from typing import Callable, Dict, Optional

import requests
import requests.exceptions
from google.api_core import retry
from lbox import exceptions # type: ignore
from lbox import exceptions
from lbox.call_info import call_info_as_str, python_version_info # type: ignore

logger = logging.getLogger(__name__)

_LABELBOX_API_KEY = "LABELBOX_API_KEY"


def python_version_info():
version_info = sys.version_info

return f"{version_info.major}.{version_info.minor}.{version_info.micro}-{version_info.releaselevel}"


LABELBOX_CALL_PATTERN = re.compile(r"/labelbox/")
TEST_FILE_PATTERN = re.compile(r".*test.*\.py$")


class _RequestInfo(TypedDict):
prefix: str
class_name: str
method_name: str


def call_info():
method_name = "Unknown"
prefix = ""
class_name = ""
skip_methods = ["wrapper", "__init__"]
skip_classes = ["PaginatedCollection", "_CursorPagination", "_OffsetPagination"]

try:
call_info = None
for stack in reversed(inspect.stack()):
if LABELBOX_CALL_PATTERN.search(stack.filename):
call_info = stack
method_name = call_info.function
class_name = call_info.frame.f_locals.get(
"self", None
).__class__.__name__

if method_name not in skip_methods and class_name not in skip_classes:
if TEST_FILE_PATTERN.search(call_info.filename):
prefix = "test:"
else:
if class_name == "NoneType":
class_name = ""
break

except Exception:
pass
return _RequestInfo(prefix=prefix, class_name=class_name, method_name=method_name)


def call_info_as_str():
info = call_info()
return f"{info['prefix']}{info['class_name']}:{info['method_name']}"


class RequestClient:
"""A Labelbox request client.

Expand Down Expand Up @@ -114,6 +61,7 @@ def __init__(
self.endpoint = endpoint
self.rest_endpoint = rest_endpoint
self.sdk_version = sdk_version
self._sdk_method = None
self._connection: requests.Session = self._init_connection()

def _init_connection(self) -> requests.Session:
Expand All @@ -126,6 +74,14 @@ def _init_connection(self) -> requests.Session:
def headers(self) -> MappingProxyType:
return self._connection.headers

@property
def sdk_method(self):
return self._sdk_method

@sdk_method.setter
def sdk_method(self, value):
self._sdk_method = value

def _default_headers(self):
return {
"Authorization": "Bearer %s" % self.api_key,
Expand Down Expand Up @@ -234,7 +190,9 @@ def convert_value(value):
if files:
del headers["Content-Type"]
del headers["Accept"]
headers["X-SDK-Method"] = call_info_as_str()
headers["X-SDK-Method"] = (
self.sdk_method if self.sdk_method else call_info_as_str()
)

request = requests.Request(
"POST",
Expand Down
Loading