| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- """module server."""
- from __future__ import annotations
- import json
- from typing import TYPE_CHECKING, Any
- from wandb import util
- if TYPE_CHECKING:
- from wandb.sdk.wandb_settings import Settings
- class Server:
- def __init__(
- self,
- settings: Settings,
- ) -> None:
- from wandb.apis import InternalApi
- self._api = InternalApi(default_settings=settings)
- self._viewer: dict[str, Any] = {}
- self._flags: dict[str, Any] = {}
- self._settings: Settings = settings
- def query_with_timeout(self, timeout: int | float = 5) -> None:
- if self._settings.x_disable_viewer:
- return
- async_viewer = util.async_call(self._api.viewer_server_info, timeout=timeout)
- try:
- viewer_tuple, viewer_thread = async_viewer()
- except Exception:
- return
- if viewer_thread.is_alive():
- # this is likely a DNS hang
- return
- # TODO(jhr): should we kill the thread?
- self._viewer, self._serverinfo = viewer_tuple
- self._flags = json.loads(self._viewer.get("flags", "{}"))
- @property
- def viewer(self) -> dict[str, Any]:
- """Returns information about the currently authenticated user.
- If the API key is valid, the following is returned:
- - id
- - entity
- - username
- - flags
- - teams
- If the API key is not valid or the server is not reachable,
- an empty dict is returned.
- """
- if not self._viewer and not self._settings._offline:
- self.query_with_timeout()
- return self._viewer
|