mirror of
https://github.com/iluvcapra/pycmx.git
synced 2025-12-31 08:50:54 +00:00
Added type annotations and doc fixes
This commit is contained in:
@@ -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 ---------------------------------------------------
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -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.
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user