@@ -32,10 +32,11 @@ class InvalidResponse(ElementalException):
3232
3333
3434class ElementalLive ():
35- def __init__ (self , server_ip , user = None , api_key = None ):
35+ def __init__ (self , server_ip , user = None , api_key = None , timeout = 5 ):
3636 self .server_ip = server_ip
3737 self .user = user
3838 self .api_key = api_key
39+ self .timeout = timeout
3940
4041 def generate_headers (self , url = "" ):
4142 # Generate headers according to how users create ElementalLive class
@@ -61,11 +62,12 @@ def generate_headers(self, url=""):
6162 'Content-Type' : 'application/xml'
6263 }
6364
64- def send_request (self , http_method , url , headers , body = "" ):
65+ def send_request (self , http_method , url , headers , body = "" , timeout = None ):
6566 # Send request according to different methods
6667 try :
68+ timeout = timeout or self .timeout
6769 response = requests .request (
68- method = http_method , url = url , data = body , headers = headers )
70+ method = http_method , url = url , data = body , headers = headers , timeout = timeout )
6971
7072 except requests .exceptions .RequestException as e :
7173 raise InvalidRequest (f"{ http_method } : { url } failed\n { e } " )
@@ -75,7 +77,7 @@ def send_request(self, http_method, url, headers, body=""):
7577 f"{ response .status_code } \n { response .text } " )
7678 return response
7779
78- def create_event (self , options ):
80+ def create_event (self , options , timeout = None ):
7981
8082 # Initiate url
8183 url = f'{ self .server_ip } /live_events'
@@ -92,7 +94,7 @@ def create_event(self, options):
9294
9395 # Send request and do exception handling
9496 response = self .send_request (
95- http_method = "POST" , url = url , headers = headers , body = body )
97+ http_method = "POST" , url = url , headers = headers , body = body , timeout = timeout )
9698
9799 # Find newly created event id
98100 xml_root = ET .fromstring (response .content )
@@ -101,7 +103,7 @@ def create_event(self, options):
101103
102104 return {'id' : event_id }
103105
104- def delete_event (self , event_id ):
106+ def delete_event (self , event_id , timeout = None ):
105107
106108 # Initial url
107109 url = f'{ self .server_ip } /live_events/{ event_id } '
@@ -110,9 +112,9 @@ def delete_event(self, event_id):
110112 headers = self .generate_headers (url )
111113
112114 # Send request and do exception handling
113- self .send_request (http_method = "DELETE" , url = url , headers = headers )
115+ self .send_request (http_method = "DELETE" , url = url , headers = headers , timeout = timeout )
114116
115- def start_event (self , event_id ):
117+ def start_event (self , event_id , timeout = None ):
116118 # Initail url
117119 url = f'{ self .server_ip } /live_events/{ event_id } /start'
118120
@@ -124,9 +126,9 @@ def start_event(self, event_id):
124126
125127 # Send request and do exception handling
126128 self .send_request (http_method = "POST" , url = url ,
127- headers = headers , body = body )
129+ headers = headers , body = body , timeout = timeout )
128130
129- def stop_event (self , event_id ):
131+ def stop_event (self , event_id , timeout = None ):
130132 # Initail url
131133 url = f'{ self .server_ip } /live_events/{ event_id } /stop'
132134
@@ -138,15 +140,15 @@ def stop_event(self, event_id):
138140
139141 # Send request and do exception handling
140142 self .send_request (http_method = "POST" , url = url ,
141- headers = headers , body = body )
143+ headers = headers , body = body , timeout = timeout )
142144
143- def describe_event (self , event_id ):
145+ def describe_event (self , event_id , timeout = None ):
144146 url = f'{ self .server_ip } /live_events/{ event_id } '
145147
146148 headers = self .generate_headers (url )
147149
148150 response = self .send_request (http_method = "GET" , url = url ,
149- headers = headers )
151+ headers = headers , timeout = timeout )
150152 # print(response.text)
151153 event_info = {}
152154
@@ -159,11 +161,11 @@ def describe_event(self, event_id):
159161
160162 return event_info
161163
162- def find_devices_in_use (self ):
164+ def find_devices_in_use (self , timeout = None ):
163165 events_url = f'{ self .server_ip } /live_events?filter=active'
164166 events_headers = self .generate_headers (events_url )
165167 events = self .send_request (
166- http_method = "GET" , url = events_url , headers = events_headers )
168+ http_method = "GET" , url = events_url , headers = events_headers , timeout = timeout )
167169 events_list = ET .fromstring (events .text )
168170
169171 # Find in use devices from active events
@@ -173,11 +175,11 @@ def find_devices_in_use(self):
173175
174176 return in_use_devices
175177
176- def get_input_devices (self ):
178+ def get_input_devices (self , timeout = None ):
177179 devices_url = f'{ self .server_ip } /devices'
178180 devices_headers = self .generate_headers (devices_url )
179181 devices = self .send_request (
180- http_method = "GET" , url = devices_url , headers = devices_headers )
182+ http_method = "GET" , url = devices_url , headers = devices_headers , timeout = timeout )
181183 devices_info = xmltodict .parse (devices .text )[
182184 'device_list' ]['device' ]
183185
@@ -192,19 +194,19 @@ def get_input_devices(self):
192194 devices_info , key = lambda d : int (d ["id" ]))
193195 return [dict (d ) for d in devices_info ]
194196
195- def get_input_device_by_id (self , input_device_id ):
197+ def get_input_device_by_id (self , input_device_id , timeout = None ):
196198 devices_url = f'{ self .server_ip } /devices/{ input_device_id } '
197199 devices_headers = self .generate_headers (devices_url )
198200 devices = self .send_request (
199- http_method = "GET" , url = devices_url , headers = devices_headers )
201+ http_method = "GET" , url = devices_url , headers = devices_headers , timeout = timeout )
200202 device_info = xmltodict .parse (devices .text )['device' ]
201203 devices_in_use = self .find_devices_in_use ()
202204 device_info ['availability' ] = (device_info ['device_name' ]
203205 not in devices_in_use )
204206 device_info .pop ('@href' )
205207 return dict (device_info )
206208
207- def generate_preview (self , input_id ):
209+ def generate_preview (self , input_id , timeout = None ):
208210 url = f'{ self .server_ip } /inputs/generate_preview'
209211 headers = self .generate_headers (url )
210212
@@ -219,7 +221,7 @@ def generate_preview(self, input_id):
219221 f"[input_format]=Auto&live_event[inputs_attributes][0]" \
220222 f"[device_input_attributes][device_id]={ input_id } "
221223 response = self .send_request (
222- http_method = "POST" , url = url , headers = headers , body = data )
224+ http_method = "POST" , url = url , headers = headers , body = data , timeout = timeout )
223225
224226 response_parse = ast .literal_eval (response .text )
225227
@@ -231,7 +233,7 @@ def generate_preview(self, input_id):
231233 f'p_{ response_parse ["preview_image_id" ]} _job_0.jpg'
232234 return {'preview_url' : preview_url }
233235
234- def event_can_delete (self , channel_id ):
236+ def event_can_delete (self , channel_id , timeout = None ):
235237 channel_info = self .describe_event (channel_id )
236238 if channel_info ['status' ] in ('pending' , 'running' ,
237239 'preprocessing' , 'postprocessing' ):
0 commit comments