Skip to content

Commit

Permalink
fixed keyring
Browse files Browse the repository at this point in the history
  • Loading branch information
kozlov721 committed Feb 20, 2025
1 parent a4f481e commit 6069027
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 22 deletions.
39 changes: 25 additions & 14 deletions modelconverter/hub/hub_requests.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from json import JSONDecodeError
from typing import Any, Dict, Final, Optional
from typing import Any, Dict, Optional

import requests
from requests import HTTPError, Response
Expand All @@ -8,12 +8,23 @@


class Request:
URL: Final[str] = f"{environ.HUBAI_URL.rstrip('/')}/models/api/v1"
DAG_URL: Final[str] = URL.replace("models", "dags")
HEADERS: Final[Dict[str, str]] = {
"accept": "application/json",
"Authorization": f"Bearer {environ.HUBAI_API_KEY}",
}
@staticmethod
def url() -> str:
return f"{environ.HUBAI_URL.rstrip('/')}/models/api/v1"

@staticmethod
def dag_url() -> str:
return f"{environ.HUBAI_URL.rstrip('/')}/dags/api/v1"

@staticmethod
def headers() -> Dict[str, str]:
if environ.HUBAI_API_KEY is None:
raise ValueError("HUBAI_API_KEY is not set")

return {
"accept": "application/json",
"Authorization": f"Bearer {environ.HUBAI_API_KEY}",
}

@staticmethod
def _process_response(response: Response) -> Any:
Expand All @@ -40,7 +51,7 @@ def get(endpoint: str = "", **kwargs) -> Any:
return Request._process_response(
requests.get(
Request._get_url(endpoint),
headers=Request.HEADERS,
headers=Request.headers(),
**kwargs,
)
)
Expand All @@ -49,17 +60,17 @@ def get(endpoint: str = "", **kwargs) -> Any:
def dag_get(endpoint: str = "", **kwargs) -> Any:
return Request._process_response(
requests.get(
Request._get_url(endpoint, Request.DAG_URL),
headers=Request.HEADERS,
Request._get_url(endpoint, Request.dag_url()),
headers=Request.headers(),
**kwargs,
)
)

@staticmethod
def post(endpoint: str = "", **kwargs) -> Any:
headers = Request.HEADERS
headers = Request.headers()
if "headers" in kwargs:
headers = {**Request.HEADERS, **kwargs.pop("headers")}
headers = {**Request.headers(), **kwargs.pop("headers")}
return Request._process_response(
requests.post(
Request._get_url(endpoint), headers=headers, **kwargs
Expand All @@ -70,11 +81,11 @@ def post(endpoint: str = "", **kwargs) -> Any:
def delete(endpoint: str = "", **kwargs) -> Any:
return Request._process_response(
requests.delete(
Request._get_url(endpoint), headers=Request.HEADERS, **kwargs
Request._get_url(endpoint), headers=Request.headers(), **kwargs
)
)

@staticmethod
def _get_url(endpoint: str, base_url: Optional[str] = None) -> str:
base_url = base_url or Request.URL
base_url = base_url or Request.url()
return f"{base_url}/{endpoint.lstrip('/')}".rstrip("/")
1 change: 0 additions & 1 deletion modelconverter/utils/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,6 @@ class RVC2Config(BlobBaseConfig):
@model_validator(mode="after")
def _validate_cmx_slices(self) -> Self:
if self.superblob:
logger.info("Superblob enabled. Setting number of shaves to 8.")
self.number_of_cmx_slices = self.number_of_shaves = 8

elif self.number_of_cmx_slices < self.number_of_shaves:
Expand Down
36 changes: 29 additions & 7 deletions modelconverter/utils/environ.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,47 @@
from typing import Optional
from concurrent.futures import ThreadPoolExecutor
from contextlib import suppress
from typing import Optional, Union

import keyring
from luxonis_ml.utils import Environ as BaseEnviron
from pydantic import AliasChoices, Field, model_validator
from typing_extensions import Annotated, Self


def get_password_with_timeout(
service_name: str, username: str, timeout: Union[float, int] = 5
):
def _get_password():
return keyring.get_password(service_name, username)

with ThreadPoolExecutor(max_workers=1) as executor:
future = executor.submit(_get_password)
try:
return future.result(timeout=timeout)
except TimeoutError:
return None


class Environ(BaseEnviron):
HUBAI_API_KEY: Annotated[
Optional[str], Field(validation_alias=AliasChoices("HUB_AI_API_KEY"))
Optional[str],
Field(
validation_alias=AliasChoices("HUBAI_API_KEY", "HUB_AI_API_KEY")
),
] = None
HUBAI_URL: str = "https://easyml.cloud.luxonis.com/models/"
HUBAI_URL: Annotated[
str, Field(validation_alias=AliasChoices("HUBAI_URL", "HUB_AI_URL"))
] = "https://easyml.cloud.luxonis.com/models/"

@model_validator(mode="after")
def validate_hubai_api_key(self) -> Self:
if self.HUBAI_API_KEY:
return self

# with suppress(Exception):
# self.HUBAI_API_KEY = keyring.get_password(
# "ModelConverter", "api_key"
# )
with suppress(Exception):
self.HUBAI_API_KEY = get_password_with_timeout(
"ModelConverter", "api_key"
)

return self

Expand Down

0 comments on commit 6069027

Please sign in to comment.