2828from .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 )
0 commit comments