# HG changeset patch # User Amine Sehili # Date 1567799969 -3600 # Node ID 7e430750f362c459de160a5252407807b34ae9ff # Parent b3095d23d0c365bb1f2265350db0d5cdc714c89d Refactor util.py and fix bugs in AudioDataSource diff -r b3095d23d0c3 -r 7e430750f362 auditok/util.py --- a/auditok/util.py Thu Sep 05 20:12:52 2019 +0100 +++ b/auditok/util.py Fri Sep 06 20:59:29 2019 +0100 @@ -622,11 +622,17 @@ self._audio_source = audio_source def rewind(self): - if self._audio_source.rewindable: + if self.rewindable: self._audio_source.rewind() else: raise AudioIOError("Audio stream is not rewindable") + def rewindable(self): + try: + return self._audio_source.rewindable + except AttributeError: + return False + def is_open(self): return self._audio_source.is_open() @@ -641,9 +647,9 @@ @property def data(self): - raise AttributeError( - "AudioDataSource is not a recorder, no recorded data can be accessed" - ) + err_msg = "AudioDataSource is not a recorder, no recorded data can " + err_msg += "be retrieved" + raise AttributeError(err_msg) def __getattr__(self, name): return getattr(self._audio_source, name) @@ -667,11 +673,14 @@ @property def data(self): if self._data is None: - raise RuntimeError( - "Unrewinded recorder. Call rewind before accessing recorded data" - ) + err_msg = "Unrewinded recorder. Call rewind before accessing " + err_msg += "recorded data" + raise RuntimeError(err_msg) return self._data + def rewindable(self): + return True + def rewind(self): if self._cache: self._data = self._concatenate(self._cache) @@ -704,7 +713,8 @@ class _Limiter(_AudioSourceProxy): """ A class for AudioDataSource objects that can read a fixed amount of data. - This can be useful when reading data from the microphone or from large audio files. + This can be useful when reading data from the microphone or from large + audio files. """ def __init__(self, audio_source, max_read): @@ -851,7 +861,6 @@ max_read=None, **kwargs ): - if not isinstance(source, AudioSource): source = get_audio_source(source, **kwargs) self._record = record