Added type annotations and doc fixes

This commit is contained in:
Jamie Hardt
2023-05-31 11:59:26 -07:00
parent 2b38d8aaf9
commit 179808fbf2
4 changed files with 38 additions and 34 deletions

View File

@@ -15,18 +15,19 @@
import os import os
import sys import sys
sys.path.insert(0, os.path.abspath('../..')) sys.path.insert(0, os.path.abspath('../..'))
print(sys.path)
import pycmx
# -- Project information ----------------------------------------------------- # -- Project information -----------------------------------------------------
project = u'pycmx' project = u'pycmx'
copyright = u'2022, Jamie Hardt' copyright = u'(c) 2023, Jamie Hardt'
author = u'Jamie Hardt' author = u'Jamie Hardt'
# The short X.Y version # The short X.Y version
version = u'' version = pycmx.__version__
# The full version, including alpha/beta/rc tags # The full version, including alpha/beta/rc tags
release = u'' release = pycmx.__version__
# -- General configuration --------------------------------------------------- # -- General configuration ---------------------------------------------------

View File

@@ -3,7 +3,9 @@
from .transition import Transition from .transition import Transition
from .channel_map import ChannelMap from .channel_map import ChannelMap
from .parse_cmx_statements import StmtEffectsName # from .parse_cmx_statements import StmtEffectsName
from typing import Optional
class Edit: class Edit:
""" """
@@ -18,7 +20,7 @@ class Edit:
self.trans_name_statement = trans_name_statement self.trans_name_statement = trans_name_statement
@property @property
def line_number(self): def line_number(self) -> int:
""" """
Get the line number for the "standard form" statement associated with Get the line number for the "standard form" statement associated with
this edit. Line numbers a zero-indexed, such that the this edit. Line numbers a zero-indexed, such that the
@@ -27,7 +29,7 @@ class Edit:
return self.edit_statement.line_number return self.edit_statement.line_number
@property @property
def channels(self): def channels(self) -> ChannelMap:
""" """
Get the :obj:`ChannelMap` object associated with this Edit. Get the :obj:`ChannelMap` object associated with this Edit.
""" """
@@ -38,7 +40,7 @@ class Edit:
return cm return cm
@property @property
def transition(self): def transition(self) -> Transition:
""" """
Get the :obj:`Transition` object associated with this edit. Get the :obj:`Transition` object associated with this edit.
""" """
@@ -48,14 +50,14 @@ class Edit:
return Transition(self.edit_statement.trans, self.edit_statement.trans_op, None) return Transition(self.edit_statement.trans, self.edit_statement.trans_op, None)
@property @property
def source_in(self): def source_in(self) -> str:
""" """
Get the source in timecode. Get the source in timecode.
""" """
return self.edit_statement.source_in return self.edit_statement.source_in
@property @property
def source_out(self): def source_out(self) -> str:
""" """
Get the source out timecode. Get the source out timecode.
""" """
@@ -63,7 +65,7 @@ class Edit:
return self.edit_statement.source_out return self.edit_statement.source_out
@property @property
def record_in(self): def record_in(self) -> str:
""" """
Get the record in timecode. Get the record in timecode.
""" """
@@ -71,7 +73,7 @@ class Edit:
return self.edit_statement.record_in return self.edit_statement.record_in
@property @property
def record_out(self): def record_out(self) -> str:
""" """
Get the record out timecode. Get the record out timecode.
""" """
@@ -79,7 +81,7 @@ class Edit:
return self.edit_statement.record_out return self.edit_statement.record_out
@property @property
def source(self): def source(self) -> str:
""" """
Get the source column. This is the 8, 32 or 128-character string on the Get the source column. This is the 8, 32 or 128-character string on the
event record line, this usually references the tape name of the source. event record line, this usually references the tape name of the source.
@@ -87,21 +89,21 @@ class Edit:
return self.edit_statement.source return self.edit_statement.source
@property @property
def black(self): def black(self) -> bool:
""" """
Black video or silence should be used as the source for this event. Black video or silence should be used as the source for this event.
""" """
return self.source == "BL" return self.source == "BL"
@property @property
def aux_source(self): def aux_source(self) -> bool:
""" """
An auxiliary source is the source of this event. An auxiliary source is the source of this event.
""" """
return self.source == "AX" return self.source == "AX"
@property @property
def source_file(self): def source_file(self) -> Optional[str]:
""" """
Get the source file, as attested by a "* SOURCE FILE" remark on the Get the source file, as attested by a "* SOURCE FILE" remark on the
EDL. This will return None if the information is not present. EDL. This will return None if the information is not present.
@@ -112,7 +114,7 @@ class Edit:
return self.source_file_statement.filename return self.source_file_statement.filename
@property @property
def clip_name(self): def clip_name(self) -> Optional[str]:
""" """
Get the clip name, as attested by a "* FROM CLIP NAME" or "* TO CLIP Get the clip name, as attested by a "* FROM CLIP NAME" or "* TO CLIP
NAME" remark on the EDL. This will return None if the information is NAME" remark on the EDL. This will return None if the information is

View File

@@ -5,21 +5,21 @@ from .parse_cmx_statements import (StmtUnrecognized, StmtFCM, StmtEvent, StmtSou
from .event import Event from .event import Event
from .channel_map import ChannelMap from .channel_map import ChannelMap
from typing import Generator
class EditList: class EditList:
""" """
Represents an entire edit decision list as returned by `parse_cmx3600()`. Represents an entire edit decision list as returned by :func:`~pycmx.parse_cmx3600()`.
""" """
def __init__(self, statements): def __init__(self, statements):
self.title_statement = statements[0] self.title_statement = statements[0]
self.event_statements = statements[1:] self.event_statements = statements[1:]
@property @property
def format(self): def format(self) -> str:
""" """
The detected format of the EDL. Possible values are: `3600`,`File32`, The detected format of the EDL. Possible values are: "3600", "File32",
`File128`, and `unknown` "File128", and "unknown".
""" """
first_event = next( (s for s in self.event_statements if type(s) is StmtEvent), None) first_event = next( (s for s in self.event_statements if type(s) is StmtEvent), None)
@@ -37,7 +37,7 @@ class EditList:
@property @property
def channels(self): def channels(self) -> ChannelMap:
""" """
Return the union of every channel channel. Return the union of every channel channel.
""" """
@@ -51,7 +51,7 @@ class EditList:
@property @property
def title(self): def title(self) -> str:
""" """
The title of this edit list. The title of this edit list.
""" """
@@ -59,7 +59,7 @@ class EditList:
@property @property
def unrecognized_statements(self): def unrecognized_statements(self) -> Generator[StmtUnrecognized, None, None]:
""" """
A generator for all the unrecognized statements in the list. A generator for all the unrecognized statements in the list.
""" """
@@ -69,7 +69,7 @@ class EditList:
@property @property
def events(self): def events(self) -> Generator[Event, None, None]:
'A generator for all the events in the edit list' 'A generator for all the events in the edit list'
is_drop = None is_drop = None
current_event_num = None current_event_num = None
@@ -97,7 +97,7 @@ class EditList:
yield Event(statements=event_statements) yield Event(statements=event_statements)
@property @property
def sources(self): def sources(self) -> Generator[StmtSourceUMID, None, None]:
""" """
A generator for all of the sources in the list A generator for all of the sources in the list
""" """

View File

@@ -1,26 +1,28 @@
# pycmx # pycmx
# (c) 2018 Jamie Hardt # (c) 2023 Jamie Hardt
from .parse_cmx_statements import (StmtEvent, StmtClipName, StmtSourceFile, StmtAudioExt, StmtUnrecognized, StmtEffectsName) from .parse_cmx_statements import (StmtEvent, StmtClipName, StmtSourceFile, StmtAudioExt, StmtUnrecognized, StmtEffectsName)
from .edit import Edit from .edit import Edit
from typing import List, Generator
class Event: class Event:
""" """
Represents a collection of :class:`Edit`s, all with the same event number. Represents a collection of :class:`~pycmx.edit.Edit` s, all with the same event number.
""" """
def __init__(self, statements): def __init__(self, statements):
self.statements = statements self.statements = statements
@property @property
def number(self): def number(self) -> int:
""" """
Return the event number. Return the event number.
""" """
return int(self._edit_statements()[0].event) return int(self._edit_statements()[0].event)
@property @property
def edits(self): def edits(self) -> List[Edit]:
""" """
Returns the edits. Most events will have a single edit, a single event Returns the edits. Most events will have a single edit, a single event
will have multiple edits when a dissolve, wipe or key transition needs will have multiple edits when a dissolve, wipe or key transition needs
@@ -63,11 +65,10 @@ class Event:
except IndexError: except IndexError:
the_zip.append([None] * len(edits_audio) ) the_zip.append([None] * len(edits_audio) )
return [ Edit(e1[0],e1[1],n1,s1,u1) for (e1,n1,s1,u1) in zip(*the_zip) ] return [ Edit(e1[0],e1[1],n1,s1,u1) for (e1,n1,s1,u1) in zip(*the_zip) ]
@property @property
def unrecognized_statements(self): def unrecognized_statements(self) -> Generator[StmtUnrecognized, None, None]:
""" """
A generator for all the unrecognized statements in the event. A generator for all the unrecognized statements in the event.
""" """