From 8f1e2b0aaef79ef3f3f9c592e252394b56614425 Mon Sep 17 00:00:00 2001 From: Mal Miller <59854849+mmiller-max@users.noreply.github.com> Date: Thu, 23 Dec 2021 08:46:22 +0000 Subject: [PATCH] Add environment variable for default request method (#521) --- clearml/backend_api/session/defs.py | 9 +++++++++ clearml/backend_api/session/request.py | 11 +++++++++-- clearml/backend_api/session/session.py | 3 +++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/clearml/backend_api/session/defs.py b/clearml/backend_api/session/defs.py index 69f42082..b553f838 100644 --- a/clearml/backend_api/session/defs.py +++ b/clearml/backend_api/session/defs.py @@ -17,3 +17,12 @@ ENV_CLEARML_NO_DEFAULT_SERVER = EnvEntry("CLEARML_NO_DEFAULT_SERVER", "TRAINS_NO ENV_DISABLE_VAULT_SUPPORT = EnvEntry('CLEARML_DISABLE_VAULT_SUPPORT', type=bool) ENV_ENABLE_ENV_CONFIG_SECTION = EnvEntry('CLEARML_ENABLE_ENV_CONFIG_SECTION', type=bool) ENV_ENABLE_FILES_CONFIG_SECTION = EnvEntry('CLEARML_ENABLE_FILES_CONFIG_SECTION', type=bool) + +""" +Experimental option to set the request method for all API requests and auth login. +This could be useful when GET requests with payloads are blocked by a server as +POST requests can be used instead. + +However this has not been vigorously tested and may have unintended consequences. +""" +ENV_API_DEFAULT_REQ_METHOD = EnvEntry("CLEARML_API_DEFAULT_REQ_METHOD") diff --git a/clearml/backend_api/session/request.py b/clearml/backend_api/session/request.py index 2390fa55..2d84d00d 100644 --- a/clearml/backend_api/session/request.py +++ b/clearml/backend_api/session/request.py @@ -1,15 +1,22 @@ import abc import jsonschema +import os import six from .apimodel import ApiModel from .datamodel import DataModel +from .defs import ENV_API_DEFAULT_REQ_METHOD +if ENV_API_DEFAULT_REQ_METHOD.exists() and ENV_API_DEFAULT_REQ_METHOD.get().upper() not in ("GET", "POST"): + raise ValueError( + "CLEARML_API_DEFAULT_REQ_METHOD environment variable must be 'get' or 'post' (any case is allowed)." + ) + class Request(ApiModel): - _method = 'get' - + _method = ENV_API_DEFAULT_REQ_METHOD.get(default="get") + def __init__(self, **kwargs): allow_extra_fields = kwargs.pop("_allow_extra_fields_", False) if not allow_extra_fields and kwargs: diff --git a/clearml/backend_api/session/session.py b/clearml/backend_api/session/session.py index e60d8cd6..5a69dba4 100644 --- a/clearml/backend_api/session/session.py +++ b/clearml/backend_api/session/session.py @@ -1,4 +1,5 @@ import json as json_lib +import os import sys import types from socket import gethostname @@ -24,6 +25,7 @@ from .defs import ( ENV_DISABLE_VAULT_SUPPORT, ENV_ENABLE_ENV_CONFIG_SECTION, ENV_ENABLE_FILES_CONFIG_SECTION, + ENV_API_DEFAULT_REQ_METHOD, ) from .request import Request, BatchRequest # noqa: F401 from .token_manager import TokenManager @@ -709,6 +711,7 @@ class Session(TokenManager): try: data = {"expiration_sec": exp} if exp else {} res = self._send_request( + method=ENV_API_DEFAULT_REQ_METHOD.get(default="get"), service="auth", action="login", auth=auth,