Skip to content
This repository was archived by the owner on Nov 17, 2022. It is now read-only.

Commit ebc266c

Browse files
authored
Can delete (#22)
* add get_input_device_by_id method and delete useless template * fix avaliability problem * fix method name * fix test and lint * fix preview exception raising logic * add data file to package * add new param to template * remove 'sourceType' param in 'generate_preview' method * update version * add describe_event function and delete real password and username * add 'event_can_delete' method
1 parent 80755c8 commit ebc266c

File tree

6 files changed

+1747
-6
lines changed

6 files changed

+1747
-6
lines changed

elemental/client.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,25 @@ def stop_event(self, event_id):
140140
self.send_request(http_method="POST", url=url,
141141
headers=headers, body=body)
142142

143+
def describe_event(self, event_id):
144+
url = f'{self.server_ip}/live_events/{event_id}'
145+
146+
headers = self.generate_headers(url)
147+
148+
response = self.send_request(http_method="GET", url=url,
149+
headers=headers)
150+
# print(response.text)
151+
event_info = {}
152+
153+
destinations = ET.fromstring(response.text).iter('destination')
154+
event_info['origin_url'] = next(destinations).find('uri').text
155+
event_info['backup_url'] = next(destinations).find('uri').text
156+
157+
status = ET.fromstring(response.text).find('status')
158+
event_info['status'] = status.text
159+
160+
return event_info
161+
143162
def find_devices_in_use(self):
144163
events_url = f'{self.server_ip}/live_events?filter=active'
145164
events_headers = self.generate_headers(events_url)
@@ -211,3 +230,11 @@ def generate_preview(self, input_id):
211230
preview_url = f'{self.server_ip}/images/thumbs/' \
212231
f'p_{response_parse["preview_image_id"]}_job_0.jpg'
213232
return {'preview_url': preview_url}
233+
234+
def event_can_delete(self, channel_id):
235+
channel_info = self.describe_event(channel_id)
236+
if channel_info['status'] in ('pending', 'running',
237+
'preprocessing', 'postprocessing'):
238+
return {'deletable': False}
239+
else:
240+
return {'deletable': True}

elemental/client_test.py

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,3 +385,72 @@ def test_get_preview_will_raise_ElementalException_if_preview_unavaliable():
385385
assert str(exc_info.value).endswith(
386386
f"Response: 200\n"
387387
f"{respond_text}")
388+
389+
390+
def test_describe_event_will_call_send_request_as_expect():
391+
client = ElementalLive(ELEMENTAL_ADDRESS, USER, API_KEY)
392+
393+
client.generate_headers = mock.Mock()
394+
client.generate_headers.return_value = HEADERS
395+
396+
client.send_request = mock.Mock()
397+
response_from_elemental_api = file_fixture('sample_event.xml')
398+
client.send_request.return_value = mock_response(
399+
status=200, text=response_from_elemental_api)
400+
401+
event_id = 999
402+
client.describe_event(event_id)
403+
client.send_request.assert_called_once_with(
404+
http_method='GET',
405+
url=f'{ELEMENTAL_ADDRESS}/live_events/{event_id}',
406+
headers=HEADERS)
407+
408+
409+
def test_describe_event_will_return_event_info_as_expect():
410+
client = ElementalLive(ELEMENTAL_ADDRESS, USER, API_KEY)
411+
client.generate_headers = mock.Mock()
412+
client.generate_headers.return_value = HEADERS
413+
client.send_request = mock.Mock()
414+
response_from_elemental_api = file_fixture('sample_event.xml')
415+
client.send_request.return_value = mock_response(
416+
status=200, text=response_from_elemental_api)
417+
418+
event_id = '139'
419+
event_info = client.describe_event(event_id)
420+
assert event_info == {'origin_url':
421+
'https://vmjhch43nfkghi.data.mediastore.us-east-1.'
422+
'amazonaws.com/mortyg3b4/master/mortyg3b4.m3u8',
423+
'backup_url':
424+
'https://vmjhch43nfkghi.data.mediastore.us-east-1.'
425+
'amazonaws.com/mortyg3b4/backup/mortyg3b4.m3u8',
426+
'status': 'complete'}
427+
428+
429+
def test_event_can_delete_will_return_False_if_pending():
430+
client = ElementalLive(ELEMENTAL_ADDRESS, USER, API_KEY)
431+
432+
client.describe_event = mock.Mock()
433+
client.describe_event.return_value = {
434+
'status': 'pending',
435+
'origin_url': 'fake_origin',
436+
'backup_url': 'fake_backup'
437+
}
438+
d = client.event_can_delete('123')
439+
assert d == {
440+
'deletable': False
441+
}
442+
443+
444+
def test_event_can_delete_will_return_True_if_complete():
445+
client = ElementalLive(ELEMENTAL_ADDRESS, USER, API_KEY)
446+
447+
client.describe_event = mock.Mock()
448+
client.describe_event.return_value = {
449+
'status': 'complete',
450+
'origin_url': 'fake_origin',
451+
'backup_url': 'fake_backup'
452+
}
453+
d = client.event_can_delete('321')
454+
assert d == {
455+
'deletable': True
456+
}

0 commit comments

Comments
 (0)