28
28
from .patterns import COMMAND_PROPERTY
29
29
30
30
31
- def do_api_call (command , uri , verb , headers , json_data ):
31
+ def do_api_call (command , uri , verb , headers , data ):
32
32
logger = logging .getLogger (__name__ )
33
33
34
34
if verb == 'PUT' :
35
- return put (logger , uri , headers = headers , data = json_data )
35
+ return put (logger , uri , headers = headers , data = data )
36
36
elif verb == 'POST' :
37
- return post (logger , uri , headers = headers , data = json_data )
37
+ return post (logger , uri , headers = headers , data = data )
38
38
elif verb == 'DELETE' :
39
- return delete (logger , uri , headers = headers )
39
+ return delete (logger , uri , headers = headers , data = data )
40
40
else :
41
41
raise Exception ('Unknown HTTP verb in command {}' .
42
42
format (command ))
@@ -47,6 +47,8 @@ def call_rest_api(command, pattern, name):
47
47
Make RESTful API call. Occurrence of the pattern in the URI
48
48
(first part of the command) or data payload will be replaced by the name.
49
49
50
+ Default content type is application/json.
51
+
50
52
:param command: command (list of URI, HTTP verb, data payload)
51
53
:param pattern: pattern for command name and/or data substitution
52
54
:param name: command name
@@ -56,14 +58,34 @@ def call_rest_api(command, pattern, name):
56
58
uri = command [0 ].replace (pattern , name )
57
59
verb = command [1 ]
58
60
data = command [2 ]
61
+ try :
62
+ headers = command [3 ]
63
+ except IndexError :
64
+ headers = {}
59
65
60
66
logger = logging .getLogger (__name__ )
61
67
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
+
64
73
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 ))
68
88
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