more Vips.py cleanups
This commit is contained in:
parent
9e272ce78a
commit
e1ed7f28d5
|
@ -616,51 +616,9 @@ class Image(Vips.Image):
|
||||||
def exp10(self):
|
def exp10(self):
|
||||||
return self.math(Vips.OperationMath.EXP10)
|
return self.math(Vips.OperationMath.EXP10)
|
||||||
|
|
||||||
Image = override(Image)
|
# add operators which needs to be class methods
|
||||||
__all__.append('Image')
|
|
||||||
|
|
||||||
# Search for all VipsOperation which don't have an input image object ... these
|
# use find_class_methods.py to generate this list
|
||||||
# become class methods
|
|
||||||
|
|
||||||
# This is slow :-(
|
|
||||||
|
|
||||||
def vips_image_class_method(name, args, kwargs):
|
|
||||||
logging.debug('vips_image_class_method %s' % name)
|
|
||||||
|
|
||||||
# the first arg is the class we are called from ... drop it
|
|
||||||
args = tuple(list(args)[1::])
|
|
||||||
|
|
||||||
return _call_base(name, args, kwargs)
|
|
||||||
|
|
||||||
def define_class_methods(cls):
|
|
||||||
if not cls.is_abstract():
|
|
||||||
op = Vips.Operation.new(cls.name)
|
|
||||||
|
|
||||||
found = False
|
|
||||||
for prop in op.props:
|
|
||||||
flags = op.get_argument_flags(prop.name)
|
|
||||||
if flags & Vips.ArgumentFlags.INPUT and flags & Vips.ArgumentFlags.REQUIRED:
|
|
||||||
if GObject.type_is_a(vips_type_image, prop.value_type):
|
|
||||||
found = True
|
|
||||||
break
|
|
||||||
|
|
||||||
if not found:
|
|
||||||
gtype = Vips.type_find("VipsOperation", cls.name)
|
|
||||||
nickname = Vips.nickname_find(gtype)
|
|
||||||
logging.debug('adding %s as a class method' % nickname)
|
|
||||||
method = lambda *args, **kwargs: vips_image_class_method(nickname, args, kwargs)
|
|
||||||
setattr(Vips.Image, nickname, classmethod(method))
|
|
||||||
|
|
||||||
if len(cls.children) > 0:
|
|
||||||
for child in cls.children:
|
|
||||||
# not easy to get at the deprecated flag in an abtract type?
|
|
||||||
if cls.name != 'VipsWrap7':
|
|
||||||
define_class_methods(child)
|
|
||||||
|
|
||||||
# for speed, only run this occasionally ... we add class methods from the list
|
|
||||||
# below
|
|
||||||
|
|
||||||
# define_class_methods(vips_type_operation)
|
|
||||||
|
|
||||||
class_methods = [
|
class_methods = [
|
||||||
"system",
|
"system",
|
||||||
|
@ -711,6 +669,17 @@ class_methods = [
|
||||||
"fitsload",
|
"fitsload",
|
||||||
"openexrload"]
|
"openexrload"]
|
||||||
|
|
||||||
|
def generate_class_method(name):
|
||||||
|
@classmethod
|
||||||
|
def class_method(cls, *args, **kwargs):
|
||||||
|
return _call_base(name, args, kwargs)
|
||||||
|
|
||||||
|
return class_method
|
||||||
|
|
||||||
for nickname in class_methods:
|
for nickname in class_methods:
|
||||||
method = lambda *args, **kwargs: vips_image_class_method(nickname, args, kwargs)
|
logging.debug('adding %s as a class method' % nickname)
|
||||||
setattr(Vips.Image, nickname, classmethod(method))
|
method = generate_class_method(nickname)
|
||||||
|
setattr(Vips.Image, nickname, method)
|
||||||
|
|
||||||
|
Image = override(Image)
|
||||||
|
__all__.append('Image')
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
import logging
|
||||||
|
#logging.basicConfig(level = logging.DEBUG)
|
||||||
|
|
||||||
|
from gi.repository import Vips, GObject
|
||||||
|
|
||||||
|
# Search for all VipsOperation which don't have an input image object ... these
|
||||||
|
# should be class methods and need to have their names pasted into Vips.py
|
||||||
|
|
||||||
|
# This is slow :-( so we don't do this dynamically
|
||||||
|
|
||||||
|
vips_type_image = GObject.GType.from_name("VipsImage")
|
||||||
|
vips_type_operation = GObject.GType.from_name("VipsOperation")
|
||||||
|
|
||||||
|
def find_class_methods(cls):
|
||||||
|
if not cls.is_abstract():
|
||||||
|
op = Vips.Operation.new(cls.name)
|
||||||
|
|
||||||
|
found = False
|
||||||
|
for prop in op.props:
|
||||||
|
flags = op.get_argument_flags(prop.name)
|
||||||
|
if not flags & Vips.ArgumentFlags.INPUT:
|
||||||
|
continue
|
||||||
|
if not flags & Vips.ArgumentFlags.REQUIRED:
|
||||||
|
continue
|
||||||
|
if GObject.type_is_a(vips_type_image, prop.value_type):
|
||||||
|
found = True
|
||||||
|
break
|
||||||
|
|
||||||
|
if not found:
|
||||||
|
gtype = Vips.type_find("VipsOperation", cls.name)
|
||||||
|
nickname = Vips.nickname_find(gtype)
|
||||||
|
print ' "%s",' % nickname
|
||||||
|
|
||||||
|
if len(cls.children) > 0:
|
||||||
|
for child in cls.children:
|
||||||
|
# not easy to get at the deprecated flag in an abtract type?
|
||||||
|
if cls.name != 'VipsWrap7':
|
||||||
|
find_class_methods(child)
|
||||||
|
|
||||||
|
print 'found class methods:'
|
||||||
|
|
||||||
|
find_class_methods(vips_type_operation)
|
||||||
|
|
Loading…
Reference in New Issue