Skip to content

Commit 0ee403d

Browse files
author
Vladimir Kotal
committed
allow to control the headers
1 parent e0c3b7e commit 0ee403d

File tree

2 files changed

+34
-12
lines changed

2 files changed

+34
-12
lines changed

opengrok-tools/src/main/python/opengrok_tools/utils/restful.py

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,15 @@
2828
from .patterns import COMMAND_PROPERTY
2929

3030

31-
def do_api_call(command, uri, verb, headers, json_data):
31+
def do_api_call(command, uri, verb, headers, data):
3232
logger = logging.getLogger(__name__)
3333

3434
if verb == 'PUT':
35-
return put(logger, uri, headers=headers, data=json_data)
35+
return put(logger, uri, headers=headers, data=data)
3636
elif verb == 'POST':
37-
return post(logger, uri, headers=headers, data=json_data)
37+
return post(logger, uri, headers=headers, data=data)
3838
elif verb == 'DELETE':
39-
return delete(logger, uri, headers=headers)
39+
return delete(logger, uri, headers=headers, data=data)
4040
else:
4141
raise Exception('Unknown HTTP verb in command {}'.
4242
format(command))
@@ -47,6 +47,8 @@ def call_rest_api(command, pattern, name):
4747
Make RESTful API call. Occurrence of the pattern in the URI
4848
(first part of the command) or data payload will be replaced by the name.
4949
50+
Default content type is application/json.
51+
5052
:param command: command (list of URI, HTTP verb, data payload)
5153
:param pattern: pattern for command name and/or data substitution
5254
:param name: command name
@@ -56,14 +58,34 @@ def call_rest_api(command, pattern, name):
5658
uri = command[0].replace(pattern, name)
5759
verb = command[1]
5860
data = command[2]
61+
try:
62+
headers = command[3]
63+
except IndexError:
64+
headers = {}
5965

6066
logger = logging.getLogger(__name__)
6167

62-
headers = None
63-
json_data = None
68+
CONTENT_TYPE = 'Content-Type'
69+
APPLICATION_JSON = 'application/json' # default
70+
71+
header_names = [x.lower() for x in headers.keys()]
72+
6473
if data:
65-
headers = {'Content-Type': 'application/json'}
66-
json_data = json.dumps(data).replace(pattern, name)
67-
logger.debug("JSON data: {}".format(json_data))
74+
if CONTENT_TYPE.lower() not in header_names:
75+
logger.debug("Adding header: {} = {}".
76+
format(CONTENT_TYPE, APPLICATION_JSON))
77+
headers[CONTENT_TYPE] = APPLICATION_JSON
78+
79+
for (k, v) in headers.items():
80+
if k.lower() == CONTENT_TYPE.lower():
81+
if headers[k].lower() == APPLICATION_JSON.lower():
82+
logger.debug("Converting {} to JSON".format(data))
83+
data = json.dumps(data)
84+
break
85+
86+
data = data.replace(pattern, name)
87+
logger.debug("entity data: {}".format(data))
6888

69-
return do_api_call(command, uri, verb, headers, json_data)
89+
logger.debug("{} API call: {} with data '{}' and headers: {}".
90+
format(verb, uri, data, headers))
91+
return do_api_call(command, uri, verb, headers, data)

opengrok-tools/src/main/python/opengrok_tools/utils/webutil.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ def get(logger, uri, params=None, headers=None):
3535
return None
3636

3737

38-
def delete(logger, uri, params=None, headers=None):
38+
def delete(logger, uri, params=None, headers=None, data=None):
3939
try:
4040
proxies = get_proxies(uri)
41-
return requests.delete(uri, params=params, proxies=proxies)
41+
return requests.delete(uri, data=data, params=params, proxies=proxies)
4242
except Exception:
4343
logger.debug(traceback.format_exc())
4444
return None

0 commit comments

Comments
 (0)