python: Cleanup overrides using monkey patching

Following the PyGObject guidelines[0], this starts monkey patching
overridden elements instead of subclassing them.

[0]: https://pygobject.readthedocs.io/en/latest/devguide/override_guidelines.html#python-override-guidelines
This commit is contained in:
Thibault Saunier 2020-03-03 18:07:32 -03:00
parent dc463e2550
commit e7b2570c39

View file

@ -51,62 +51,44 @@ python module to use with GES 0.10"
warnings.warn(warn_msg, RuntimeWarning)
class TimelineElement(GES.TimelineElement):
def __repr__(self):
return "%s [%s (%s) %s]" % (
self.props.name,
Gst.TIME_ARGS(self.props.start),
Gst.TIME_ARGS(self.props.in_point),
Gst.TIME_ARGS(self.props.duration),
)
def __timeline_element__repr__(self):
return "%s [%s (%s) %s]" % (
self.props.name,
Gst.TIME_ARGS(self.props.start),
Gst.TIME_ARGS(self.props.in_point),
Gst.TIME_ARGS(self.props.duration),
)
def set_child_property(self, prop_name, prop_value):
res, _, pspec = GES.TimelineElement.lookup_child(self, prop_name)
if not res:
return res
__prev_set_child_property = GES.TimelineElement.set_child_property
def __timeline_element_set_child_property(self, prop_name, prop_value):
res, _, pspec = GES.TimelineElement.lookup_child(self, prop_name)
if not res:
return res
v = GObject.Value()
v.init(pspec.value_type)
v.set_value(prop_value)
v = GObject.Value()
v.init(pspec.value_type)
v.set_value(prop_value)
return GES.TimelineElement.set_child_property(self, prop_name, v)
return __prev_set_child_property(self, prop_name, v)
TimelineElement = override(TimelineElement)
__all__.append('TimelineElement')
GES.TimelineElement.__repr__ = __timeline_element__repr__
GES.TimelineElement.set_child_property = __timeline_element_set_child_property
GES.TrackElement.set_child_property = GES.TimelineElement.set_child_property
GES.Container.edit = GES.TimelineElement.edit
class TrackElement(GES.TrackElement):
def set_child_property(self, prop_name, prop_value):
return TimelineElement.set_child_property(self, prop_name, prop_value)
def __asset__repr__(self):
return "%s(%s)" % (super(type(self)).__repr__(), self.props.id)
TrackElement = override(TrackElement)
__all__.append('TrackElement')
GES.Asset.__repr__ = __asset__repr__
def __timeline_iter_clips(self):
"""Iterate all clips in a timeline"""
for layer in self.get_layers():
for clip in layer.get_clips():
yield clip
class Container(GES.Container):
def edit(self, layers, new_layer_priority, mode, edge, position):
return GES.TimelineElement.edit(self, layers, new_layer_priority, mode, edge, position)
Container = override(Container)
__all__.append('Container')
class Asset(GES.Asset):
def __repr__(self):
return "%s(%s)" % (super().__repr__(), self.props.id)
Asset = override(Asset)
__all__.append('Asset')
class Timeline(GES.Timeline):
def iter_clips(self):
"""Iterate all clips in a timeline"""
for layer in self.get_layers():
for clip in layer.get_clips():
yield clip
Timeline = override(Timeline)
__all__.append('Timeline')
GES.Timeline.iter_clips = __timeline_iter_clips
try:
from gi.repository import Gst