Skip to content

Commit

Permalink
support editing media_file, media_url, mime_type, relative_media_url
Browse files Browse the repository at this point in the history
  • Loading branch information
letuananh committed Jul 27, 2021
1 parent 05e2513 commit 71a13c2
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 11 deletions.
66 changes: 55 additions & 11 deletions speach/elan.py
Original file line number Diff line number Diff line change
Expand Up @@ -747,10 +747,10 @@ def __init__(self, **kwargs):
def media_path(self):
""" Try to determine the best path to source media file """
mpath = self.relative_media_url
if os.path.isfile(mpath):
if mpath and os.path.isfile(mpath):
return mpath
# try to join with eaf path if possible
if self.path:
if self.path and mpath:
mpath = os.path.join(os.path.dirname(self.path), mpath)
if os.path.isfile(mpath):
return mpath
Expand Down Expand Up @@ -861,21 +861,65 @@ def _update_info_xml(self, node):
self.fileformat = node.get('FORMAT')
self.version = node.get('VERSION')

@property
def _xml_media_node(self):
if self.__xml_header_node is not None:
return self.__xml_header_node.find('MEDIA_DESCRIPTOR')
else:
return None

@property
def media_file(self):
return self.__xml_header_node.get('MEDIA_FILE', '')

@media_file.setter
def media_file(self, value):
# TODO: what if __xml_header_node is None?
self.__xml_header_node.set('MEDIA_FILE', value)

@property
def time_units(self):
return self.__xml_header_node.get('TIME_UNITS')

@time_units.setter
def time_units(self, value):
# TODO: what if __xml_header_node is None?
self.__xml_header_node.set('TIME_UNITS', value)

@property
def media_url(self):
return self._xml_media_node.get('MEDIA_URL')

@media_url.setter
def media_url(self, value):
# TODO: what if __xml_header_node is None?
self._xml_media_node.set('MEDIA_URL', value)

@property
def mime_type(self):
return self._xml_media_node.get('MIME_TYPE')

@mime_type.setter
def mime_type(self, value):
# TODO: what if __xml_header_node is None?
self._xml_media_node.set('MIME_TYPE', value)

@property
def relative_media_url(self):
return self._xml_media_node.get('RELATIVE_MEDIA_URL')

@relative_media_url.setter
def relative_media_url(self, value):
# TODO: what if __xml_header_node is None?
self._xml_media_node.set('RELATIVE_MEDIA_URL', value)

def _update_header_xml(self, node):
""" [Internal function] Read ELAN doc information from a HEADER XML node
General users should not use this function.
"""
self.__xml_header_node = node
self.media_file = node.get('MEDIA_FILE')
self.time_units = node.get('TIME_UNITS')
# extract media information
media_node = node.find('MEDIA_DESCRIPTOR')
if media_node is not None:
self.media_url = media_node.get('MEDIA_URL')
self.mime_type = media_node.get('MIME_TYPE')
self.relative_media_url = media_node.get('RELATIVE_MEDIA_URL')
# extract properties
# extract extra properties
for prop_node in node.findall('PROPERTY'):
self.properties[prop_node.get('NAME')] = prop_node.text

Expand Down
16 changes: 16 additions & 0 deletions test/test_elan.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,22 @@ def test_edit_elan(self):
self.assertEqual(marker_annotations, expected_annotations)
self.assertEqual(eaf.to_csv_rows(), eaf2.to_csv_rows())

def test_updating_media_url(self):
eaf = read_eaf()
self.assertEqual(eaf.media_file, '')
self.assertEqual(eaf.media_url, 'file:///home/tuananh/Documents/ELAN/test.wav')
self.assertEqual(eaf.relative_media_url, './test.wav')
self.assertEqual(eaf.media_path(), '/home/tuananh/Documents/ELAN/test.wav')
eaf.media_file = 'test2.wav'
eaf.media_url = 'file:///home/user/Documents/ELAN/test2.wav'
eaf.relative_media_url = './test2.wav'
eaf2 = elan.parse_string(eaf.to_xml_str())
self.assertEqual(eaf2.media_file, 'test2.wav')
self.assertEqual(eaf2.media_url, 'file:///home/user/Documents/ELAN/test2.wav')
self.assertEqual(eaf2.relative_media_url, './test2.wav')
self.assertEqual(eaf2.media_path(), '/home/user/Documents/ELAN/test2.wav')


def test_edit_elan_participant_code(self):
eaf = elan.read_eaf(TEST_DATA / "test2.eaf")
participants = [(t.participant, t.name) for t in eaf]
Expand Down

0 comments on commit 71a13c2

Please sign in to comment.