55import requests
66from requests .sessions import merge_setting
77from requests .cookies import merge_cookies
8+ from requests .structures import CaseInsensitiveDict
89import logging
910from requests .packages .urllib3 .util import Retry
1011import robot
@@ -96,7 +97,7 @@ def _create_session(
9697 ``disable_warnings`` Disable requests warning useful when you have large number of testcases
9798 """
9899
99- self . builtin . log ('Creating session: %s' % alias , 'DEBUG' )
100+ logger . debug ('Creating session: %s' % alias )
100101 s = session = requests .Session ()
101102 s .headers .update (headers )
102103 s .auth = auth if auth else s .auth
@@ -595,9 +596,9 @@ def post_request(
595596 headers = headers ,
596597 allow_redirects = redir ,
597598 timeout = timeout )
598- dataStr = self ._format_data_to_log_string_according_to_header (data , headers )
599+ data_str = self ._format_data_to_log_string_according_to_header (session , data , headers )
599600 logger .info ('Post Request using : alias=%s, uri=%s, data=%s, headers=%s, files=%s, allow_redirects=%s '
600- % (alias , uri , dataStr , headers , files , redir ))
601+ % (alias , uri , data_str , headers , files , redir ))
601602
602603 return response
603604
@@ -764,7 +765,6 @@ def delete_request(
764765
765766 return response
766767
767-
768768 def head_request (
769769 self ,
770770 alias ,
@@ -851,7 +851,8 @@ def _common_request(
851851 self ._print_debug ()
852852 session .last_resp = resp
853853
854- self .builtin .log (method + ' response: ' + resp .text , 'DEBUG' )
854+ # TODO centralize also requests log
855+ logger .debug ('%s response: %s' % (method , resp .text ))
855856
856857 return resp
857858
@@ -894,7 +895,7 @@ def _print_debug(self):
894895 # Remove empty lines
895896 debug_info = "\n " .join (
896897 [ll .rstrip () for ll in debug_info .splitlines () if ll .strip ()])
897- self . builtin . log (debug_info , 'DEBUG' )
898+ logger . debug (debug_info )
898899
899900 def _json_pretty_print (self , content ):
900901 """
@@ -912,7 +913,6 @@ def _json_pretty_print(self, content):
912913 ': ' ))
913914
914915 def _utf8_urlencode (self , data ):
915-
916916 if self ._is_string_type (data ):
917917 return data .encode ('utf-8' )
918918
@@ -927,6 +927,7 @@ def _utf8_urlencode(self, data):
927927 return urlencode (utf8_data )
928928
929929 def _format_data_according_to_header (self , session , data , headers ):
930+ # Merged headers are already case insensitive
930931 headers = self ._merge_headers (session , headers )
931932
932933 if data is not None and headers is not None and 'Content-Type' in headers and not self ._is_json (data ):
@@ -940,30 +941,40 @@ def _format_data_according_to_header(self, session, data, headers):
940941
941942 return data
942943
943- def _format_data_to_log_string_according_to_header (self , data , headers ):
944- dataStr = "<empty>"
944+ def _format_data_to_log_string_according_to_header (self , session , data , headers ):
945+ data_str = "<empty>"
946+ # Merged headers are already case insensitive
947+ headers = self ._merge_headers (session , headers )
948+
945949 if data is not None and headers is not None and 'Content-Type' in headers :
946950 if (headers ['Content-Type' ].find ("application/json" ) != - 1 ) or \
947951 (headers ['Content-Type' ].find ("application/x-www-form-urlencoded" ) != - 1 ):
948952 if isinstance (data , bytes ):
949- dataStr = data .decode ('utf-8' )
953+ data_str = data .decode ('utf-8' )
950954 else :
951- dataStr = data
955+ data_str = data
952956 else :
953- dataStr = "<" + headers ['Content-Type' ] + ">"
957+ data_str = "<" + headers ['Content-Type' ] + ">"
954958
955- return dataStr
959+ return data_str
956960
957961 @staticmethod
958962 def _merge_headers (session , headers ):
959963 if headers is None :
960964 headers = {}
965+ if session .headers is None :
966+ merged_headers = {}
961967 else :
962- headers = headers .copy ()
968+ # Session headers are the default but local headers
969+ # have priority and can override values
970+ merged_headers = session .headers .copy ()
963971
964- headers .update (session .headers )
972+ # Make sure merged_headers are CaseIsensitiveDict
973+ if not isinstance (merged_headers , CaseInsensitiveDict ):
974+ merged_headers = CaseInsensitiveDict (merged_headers )
965975
966- return headers
976+ merged_headers .update (headers )
977+ return merged_headers
967978
968979 @staticmethod
969980 def _is_json (data ):
0 commit comments