mirror of
https://github.com/clearml/clearml
synced 2025-06-26 18:16:07 +00:00
Add offline support using Task.set_offline() and Task.import_offline_session()
This commit is contained in:
@@ -31,7 +31,7 @@ class ApiServiceProxy(object):
|
||||
]]
|
||||
|
||||
# get the most advanced service version that supports our api
|
||||
version = [str(v) for v in ApiServiceProxy._available_versions if Version(Session.api_version) >= v][-1]
|
||||
version = [str(v) for v in ApiServiceProxy._available_versions if Session.check_min_api_version(v)][-1]
|
||||
self.__dict__["__wrapped_version__"] = Session.api_version
|
||||
name = ".v{}.{}".format(
|
||||
version.replace(".", "_"), self.__dict__.get("__wrapped_name__")
|
||||
|
||||
@@ -8,3 +8,4 @@ ENV_ACCESS_KEY = EnvEntry("TRAINS_API_ACCESS_KEY", "ALG_API_ACCESS_KEY")
|
||||
ENV_SECRET_KEY = EnvEntry("TRAINS_API_SECRET_KEY", "ALG_API_SECRET_KEY")
|
||||
ENV_VERBOSE = EnvEntry("TRAINS_API_VERBOSE", "ALG_API_VERBOSE", type=bool, default=False)
|
||||
ENV_HOST_VERIFY_CERT = EnvEntry("TRAINS_API_HOST_VERIFY_CERT", "ALG_API_HOST_VERIFY_CERT", type=bool, default=True)
|
||||
ENV_OFFLINE_MODE = EnvEntry("TRAINS_OFFLINE_MODE", "ALG_OFFLINE_MODE", type=bool)
|
||||
|
||||
@@ -11,7 +11,8 @@ from requests.auth import HTTPBasicAuth
|
||||
from six.moves.urllib.parse import urlparse, urlunparse
|
||||
|
||||
from .callresult import CallResult
|
||||
from .defs import ENV_VERBOSE, ENV_HOST, ENV_ACCESS_KEY, ENV_SECRET_KEY, ENV_WEB_HOST, ENV_FILES_HOST
|
||||
from .defs import ENV_VERBOSE, ENV_HOST, ENV_ACCESS_KEY, ENV_SECRET_KEY, ENV_WEB_HOST, \
|
||||
ENV_FILES_HOST, ENV_OFFLINE_MODE
|
||||
from .request import Request, BatchRequest # noqa: F401
|
||||
from .token_manager import TokenManager
|
||||
from ..config import load
|
||||
@@ -50,6 +51,8 @@ class Session(TokenManager):
|
||||
_write_session_timeout = (300.0, 300.)
|
||||
_sessions_created = 0
|
||||
_ssl_error_count_verbosity = 2
|
||||
_offline_mode = ENV_OFFLINE_MODE.get()
|
||||
_offline_default_version = '2.5'
|
||||
|
||||
_client = [(__package__.partition(".")[0], __version__)]
|
||||
|
||||
@@ -153,6 +156,9 @@ class Session(TokenManager):
|
||||
|
||||
self.client = ", ".join("{}-{}".format(*x) for x in self._client)
|
||||
|
||||
if self._offline_mode:
|
||||
return
|
||||
|
||||
self.refresh_token()
|
||||
|
||||
# update api version from server response
|
||||
@@ -197,6 +203,9 @@ class Session(TokenManager):
|
||||
server-side permissions have changed but are not reflected in the current token. Refreshing the token will
|
||||
generate a token with the updated permissions.
|
||||
"""
|
||||
if self._offline_mode:
|
||||
return None
|
||||
|
||||
host = self.host
|
||||
headers = headers.copy() if headers else {}
|
||||
headers[self._WORKER_HEADER] = self.worker
|
||||
@@ -406,6 +415,9 @@ class Session(TokenManager):
|
||||
"""
|
||||
self.validate_request(req_obj)
|
||||
|
||||
if self._offline_mode:
|
||||
return None
|
||||
|
||||
if isinstance(req_obj, BatchRequest):
|
||||
# TODO: support async for batch requests as well
|
||||
if async_enable:
|
||||
@@ -526,11 +538,14 @@ class Session(TokenManager):
|
||||
|
||||
# If no session was created, create a default one, in order to get the backend api version.
|
||||
if cls._sessions_created <= 0:
|
||||
# noinspection PyBroadException
|
||||
try:
|
||||
cls()
|
||||
except Exception:
|
||||
pass
|
||||
if cls._offline_mode:
|
||||
cls.api_version = cls._offline_default_version
|
||||
else:
|
||||
# noinspection PyBroadException
|
||||
try:
|
||||
cls()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return version_tuple(cls.api_version) >= version_tuple(str(min_api_version))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user