auto un-VipsBlob-ification
This commit is contained in:
parent
8f39f8ba3b
commit
8a976a1e73
@ -68,7 +68,7 @@ class Argument:
|
|||||||
|
|
||||||
# blob-ize
|
# blob-ize
|
||||||
if GObject.type_is_a(self.prop.value_type, vips_type_blob):
|
if GObject.type_is_a(self.prop.value_type, vips_type_blob):
|
||||||
if not isinstance(gi.repository.Vips.Blob, value):
|
if not isinstance(value, Vips.Blob):
|
||||||
value = Vips.Blob.new(None, value)
|
value = Vips.Blob.new(None, value)
|
||||||
|
|
||||||
logging.debug('assigning %s' % self.prop.value_type)
|
logging.debug('assigning %s' % self.prop.value_type)
|
||||||
@ -76,9 +76,17 @@ class Argument:
|
|||||||
self.op.props.__setattr__(self.name, value)
|
self.op.props.__setattr__(self.name, value)
|
||||||
|
|
||||||
def get_value(self):
|
def get_value(self):
|
||||||
x = self.op.props.__getattribute__(self.name)
|
value = self.op.props.__getattribute__(self.name)
|
||||||
|
|
||||||
return x
|
logging.debug('read out %s from %s' % (value, self.name))
|
||||||
|
|
||||||
|
# turn VipsBlobs into strings
|
||||||
|
# FIXME ... this will involve a copy, we should use
|
||||||
|
# buffer() instead
|
||||||
|
if isinstance(value, Vips.Blob):
|
||||||
|
value = value.get()
|
||||||
|
|
||||||
|
return value
|
||||||
|
|
||||||
def _call_base(name, required, optional, self = None, option_string = None):
|
def _call_base(name, required, optional, self = None, option_string = None):
|
||||||
logging.debug('_call_base name=%s, required=%s optional=%s' %
|
logging.debug('_call_base name=%s, required=%s optional=%s' %
|
||||||
@ -151,24 +159,28 @@ def _call_base(name, required, optional, self = None, option_string = None):
|
|||||||
if op2 == None:
|
if op2 == None:
|
||||||
raise Error('Error calling operator %s.' % name)
|
raise Error('Error calling operator %s.' % name)
|
||||||
|
|
||||||
# find all required output args ... just need the names
|
# rescan args, op2 has changed
|
||||||
|
args = [Argument(op2, x) for x in op2.props]
|
||||||
|
args.sort(lambda a, b: a.priority - b.priority)
|
||||||
|
|
||||||
|
# find all required output args
|
||||||
# we can't check assigned here (since we captured the value before the call)
|
# we can't check assigned here (since we captured the value before the call)
|
||||||
# but the getattr will test that for us anyway
|
# but the getattr will test that for us anyway
|
||||||
required_output = [x.name for x in args if x.flags & enm.OUTPUT and
|
required_output = [x for x in args if x.flags & enm.OUTPUT and
|
||||||
x.flags & enm.REQUIRED]
|
x.flags & enm.REQUIRED]
|
||||||
|
|
||||||
# gather output args
|
# gather output args
|
||||||
out = []
|
out = []
|
||||||
for x in required_output:
|
for x in required_output:
|
||||||
out.append(op2.props.__getattribute__(x))
|
out.append(x.get_value())
|
||||||
|
|
||||||
# find all optional output args ... just need the names
|
# find all optional output args
|
||||||
optional_output = [x.name for x in args if x.flags & enm.OUTPUT and
|
optional_output = [x.name for x in args if x.flags & enm.OUTPUT and
|
||||||
not x.flags & enm.REQUIRED]
|
not x.flags & enm.REQUIRED]
|
||||||
|
|
||||||
for x in optional.keys():
|
for x in optional.keys():
|
||||||
if x in optional_output:
|
if x in optional_output:
|
||||||
out.append(op2.props.__getattribute__(x))
|
out.append(x.get_value())
|
||||||
|
|
||||||
if len(out) == 1:
|
if len(out) == 1:
|
||||||
out = out[0]
|
out = out[0]
|
||||||
@ -176,7 +188,7 @@ def _call_base(name, required, optional, self = None, option_string = None):
|
|||||||
# unref everything now we have refs to all outputs we want
|
# unref everything now we have refs to all outputs we want
|
||||||
op2.unref_outputs()
|
op2.unref_outputs()
|
||||||
|
|
||||||
logging.debug('success, out = %s' % out)
|
logging.debug('success')
|
||||||
|
|
||||||
return out
|
return out
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user