77
88import requests
99import requests_toolbelt
10+ from requests .auth import HTTPBasicAuth
1011
1112from ._helper import build_folder_names , get_executor , raise_on_kwargs_not_empty , update_field , update_multiline_field
1213from .const import PRIORITY_NORMAL , STATUS_APPROVED , STATUS_NOT_EXECUTED , STEP_TYPE_BY_STEP , TEST_CASE , TEST_PLAN , TEST_RUN
@@ -26,11 +27,16 @@ def __init__(self, jira_server: str, jira_username: str, jira_password: str):
2627 self .jira_server = jira_server
2728 self .jira_username = jira_username
2829
30+ self ._session = requests .Session ()
2931 self ._adaptavist_api_url = f"{ self .jira_server } /rest/atm/1.0"
30- self ._authentication = requests . auth . HTTPBasicAuth (self .jira_username , jira_password )
31- self ._headers = {"Accept" : "application/json" , "Content-type" : "application/json" }
32+ self ._session . auth = HTTPBasicAuth (self .jira_username , jira_password )
33+ self ._session . headers . update ( {"Accept" : "application/json" , "Content-type" : "application/json" })
3234 self ._logger = logging .getLogger (__name__ )
3335
36+ def __del__ (self ):
37+ """Close session."""
38+ self ._session .close ()
39+
3440 def get_users (self ) -> List [str ]:
3541 """
3642 Get a list of users known to Adaptavist/Jira.
@@ -990,7 +996,7 @@ def add_test_script_attachment(
990996 def _delete (self , request_url : str ) -> Optional [requests .Response ]:
991997 """DELETE data from Jira/Adaptavist."""
992998 try :
993- request = requests . delete (request_url , auth = self . _authentication , headers = self . _headers , timeout = 60 )
999+ request = self . _session . delete (request_url , timeout = 60 )
9941000 request .raise_for_status ()
9951001 except (
9961002 requests .exceptions .ConnectionError ,
@@ -1004,7 +1010,7 @@ def _delete(self, request_url: str) -> Optional[requests.Response]:
10041010 def _get (self , request_url : str ) -> Optional [requests .Response ]:
10051011 """GET data from Jira/Adaptavist."""
10061012 try :
1007- request = requests . get (request_url , auth = self . _authentication , headers = self . _headers , timeout = 60 )
1013+ request = self . _session . get (request_url , timeout = 60 )
10081014 request .raise_for_status ()
10091015 except (
10101016 requests .exceptions .ConnectionError ,
@@ -1018,9 +1024,7 @@ def _get(self, request_url: str) -> Optional[requests.Response]:
10181024 def _post (self , request_url : str , data : Any ) -> Optional [requests .Response ]:
10191025 """POST data to Jira/Adaptavist."""
10201026 try :
1021- request = requests .post (
1022- request_url , auth = self ._authentication , headers = self ._headers , data = json .dumps (data ), timeout = 60
1023- )
1027+ request = self ._session .post (request_url , data = json .dumps (data ), timeout = 60 )
10241028 request .raise_for_status ()
10251029 except requests .exceptions .HTTPError as ex :
10261030 self ._logger .error ("request failed. %s %s" , ex , request .text )
@@ -1033,9 +1037,7 @@ def _post(self, request_url: str, data: Any) -> Optional[requests.Response]:
10331037 def _put (self , request_url : str , data : Any ) -> Optional [requests .Response ]:
10341038 """PUT data to Jira/Adaptavist."""
10351039 try :
1036- request = requests .put (
1037- request_url , auth = self ._authentication , headers = self ._headers , data = json .dumps (data ), timeout = 60
1038- )
1040+ request = self ._session .put (request_url , data = json .dumps (data ), timeout = 60 )
10391041 request .raise_for_status ()
10401042 except requests .exceptions .HTTPError as ex :
10411043 self ._logger .error ("request failed. %s %s" , ex , request .text )
@@ -1049,17 +1051,15 @@ def _upload_file(self, request_url: str, attachment: BinaryIO, filename: str) ->
10491051 """Upload file to Adaptavist."""
10501052 stream = requests_toolbelt .MultipartEncoder (fields = {"file" : (filename , attachment , "application/octet-stream" )})
10511053 headers = {
1052- ** self ._headers ,
1054+ ** self ._session . headers ,
10531055 "Content-type" : stream .content_type ,
10541056 "X-Atlassian-Token" : "nocheck" ,
10551057 }
10561058
10571059 filename = filename or attachment .name
10581060
10591061 try :
1060- request = requests .post (
1061- request_url , auth = self ._authentication , headers = headers , data = stream
1062- ) # pylint: disable=missing-timeout
1062+ request = self ._session .post (request_url , headers = headers , data = stream ) # pylint: disable=missing-timeout
10631063 request .raise_for_status ()
10641064 except (
10651065 requests .exceptions .ConnectionError ,
0 commit comments