From fbf4d7291526555a24dd5880cddab2c0bae4ec91 Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Wed, 16 Nov 2022 20:40:07 -0800 Subject: [PATCH] Added a punch of type annotations For documentation --- docs/source/metadata_scopes/bext.rst | 16 ++++++++---- docs/source/metadata_scopes/info.rst | 17 +++++++------ docs/source/metadata_scopes/ixml.rst | 15 +++++------ wavinfo/wave_info_reader.py | 37 ++++++++++++++-------------- wavinfo/wave_ixml_reader.py | 18 ++++++++------ 5 files changed, 57 insertions(+), 46 deletions(-) diff --git a/docs/source/metadata_scopes/bext.rst b/docs/source/metadata_scopes/bext.rst index 520f5e5..be7b0d1 100644 --- a/docs/source/metadata_scopes/bext.rst +++ b/docs/source/metadata_scopes/bext.rst @@ -1,11 +1,6 @@ Broadcast WAV Extension ======================= -.. module:: wavinfo - -.. autoclass:: wavinfo.wave_bext_reader.WavBextReader - :members: - Notes ----- @@ -63,3 +58,14 @@ Result: Originator Time: 12:40:00 Time Reference: 2190940753 A=PCM,F=48000,W=24,M=stereo,R=48000,T=2 Ch + + +Class Reference +--------------- + +.. module:: wavinfo + +.. autoclass:: wavinfo.wave_bext_reader.WavBextReader + :members: + + diff --git a/docs/source/metadata_scopes/info.rst b/docs/source/metadata_scopes/info.rst index 4c51548..72c6a59 100644 --- a/docs/source/metadata_scopes/info.rst +++ b/docs/source/metadata_scopes/info.rst @@ -1,14 +1,6 @@ INFO Metadata ============= - -.. module:: wavinfo - -.. autoclass:: wavinfo.wave_info_reader.WavInfoChunkReader - :members: - - - Notes ----- @@ -28,5 +20,14 @@ music library software. print("INFO Comment:", bullet.info.comment) +Class Reference +--------------- + +.. module:: wavinfo + +.. autoclass:: wavinfo.wave_info_reader.WavInfoChunkReader + :members: + + diff --git a/docs/source/metadata_scopes/ixml.rst b/docs/source/metadata_scopes/ixml.rst index 15efcfc..fa6ac86 100644 --- a/docs/source/metadata_scopes/ixml.rst +++ b/docs/source/metadata_scopes/ixml.rst @@ -1,13 +1,6 @@ iXML Production Recorder Metadata ================================= - -.. module:: wavinfo - -.. autoclass:: wavinfo.wave_ixml_reader.WavIXMLFormat - :members: - - Notes ----- iXML allows an XML document to be embedded in a WAV file. @@ -41,4 +34,12 @@ Result: iXML File Family UID: USSDVGR1112089007124001008206300 +Class Reference +--------------- + +.. module:: wavinfo + +.. autoclass:: wavinfo.wave_ixml_reader.WavIXMLFormat + :members: + diff --git a/wavinfo/wave_info_reader.py b/wavinfo/wave_info_reader.py index d15cf23..626c11d 100644 --- a/wavinfo/wave_info_reader.py +++ b/wavinfo/wave_info_reader.py @@ -1,5 +1,6 @@ from .riff_parser import parse_chunk, ListChunkDescriptor +from typing import Optional class WavInfoChunkReader: @@ -14,40 +15,40 @@ class WavInfoChunkReader: self.info_chunk = next((chunk for chunk in list_chunks if chunk.signature == b'INFO'), None) #: 'ICOP' Copyright - self.copyright = self._get_field(f, b'ICOP') + self.copyright : Optional[str] = self._get_field(f, b'ICOP') #: 'IPRD' Product - self.product = self._get_field(f, b'IPRD') - self.album = self.product + self.product : Optional[str]= self._get_field(f, b'IPRD') + self.album : Optional[str] = self.product #: 'IGNR' Genre - self.genre = self._get_field(f, b'IGNR') + self.genre : Optional[str] = self._get_field(f, b'IGNR') #: 'ISBJ' Supject - self.subject = self._get_field(f, b'ISBJ') + self.subject : Optional[str] = self._get_field(f, b'ISBJ') #: 'IART' Artist, composer, author - self.artist = self._get_field(f, b'IART') + self.artist : Optional[str] = self._get_field(f, b'IART') #: 'ICMT' Comment - self.comment = self._get_field(f, b'ICMT') + self.comment : Optional[str] = self._get_field(f, b'ICMT') #: 'ISFT' Software, encoding application - self.software = self._get_field(f, b'ISFT') + self.software : Optional[str] = self._get_field(f, b'ISFT') #: 'ICRD' Created date - self.created_date = self._get_field(f, b'ICRD') + self.created_date : Optional[str] = self._get_field(f, b'ICRD') #: 'IENG' Engineer - self.engineer = self._get_field(f, b'IENG') + self.engineer : Optional[str] = self._get_field(f, b'IENG') #: 'ITCH' Technician - self.technician = self._get_field(f, b'ITCH') + self.technician : Optional[str] = self._get_field(f, b'ITCH') #: 'IKEY' Keywords, keyword list - self.keywords = self._get_field(f, b'IKEY') + self.keywords : Optional[str] = self._get_field(f, b'IKEY') #: 'INAM' Name, title - self.title = self._get_field(f, b'INAM') + self.title : Optional[str] = self._get_field(f, b'INAM') #: 'ISRC' Source - self.source = self._get_field(f, b'ISRC') + self.source : Optional[str] = self._get_field(f, b'ISRC') #: 'TAPE' Tape - self.tape = self._get_field(f, b'TAPE') + self.tape : Optional[str] = self._get_field(f, b'TAPE') #: 'IARL' Archival Location - self.archival_location = self._get_field(f, b'IARL') + self.archival_location : Optional[str] = self._get_field(f, b'IARL') #: 'ICSM' Commissioned - self.commissioned = self._get_field(f, b'ICMS') + self.commissioned : Optional[str] = self._get_field(f, b'ICMS') - def _get_field(self, f, field_ident): + def _get_field(self, f, field_ident) -> Optional[str]: search = next(((chunk.start, chunk.length) for chunk in self.info_chunk.children if chunk.ident == field_ident), None) diff --git a/wavinfo/wave_ixml_reader.py b/wavinfo/wave_ixml_reader.py index 042a17d..3dd82cd 100644 --- a/wavinfo/wave_ixml_reader.py +++ b/wavinfo/wave_ixml_reader.py @@ -1,7 +1,7 @@ from lxml import etree as ET import io from collections import namedtuple - +from typing import Optional IXMLTrack = namedtuple('IXMLTrack', ['channel_index', 'interleave_index', 'name', 'function']) @@ -20,10 +20,12 @@ class WavIXMLFormat: parser = ET.XMLParser(recover=True) self.parsed = ET.parse(xml_bytes, parser=parser) - def _get_text_value(self, xpath): + def _get_text_value(self, xpath) -> Optional[str]: e = self.parsed.find("./" + xpath) if e is not None: return e.text + else: + return None @property def raw_xml(self): @@ -46,35 +48,35 @@ class WavIXMLFormat: function=track.xpath('string(FUNCTION/text())')) @property - def project(self): + def project(self) -> Optional[str]: """ The project/film name entered for the recording. """ return self._get_text_value("PROJECT") @property - def scene(self): + def scene(self) -> Optional[str]: """ Scene/slate. """ return self._get_text_value("SCENE") @property - def take(self): + def take(self) -> Optional[str]: """ Take number. """ return self._get_text_value("TAKE") @property - def tape(self): + def tape(self) -> Optional[str]: """ Tape name. """ return self._get_text_value("TAPE") @property - def family_uid(self): + def family_uid(self) -> Optional[str]: """ The globally-unique ID for this file family. This may be in the format of a GUID, or an EBU Rec 9 source identifier, or some other dumb number. @@ -82,7 +84,7 @@ class WavIXMLFormat: return self._get_text_value("FILE_SET/FAMILY_UID") @property - def family_name(self): + def family_name(self) -> Optional[str]: """ The name of this file's file family. """