Having said I don't want to get sidetracked....
I managed to convert most of the example, to python, but I couldn't work out where to find 'blit', it's probably not missing, but I did
# import Gegl
# dir(Gegl.Node)
['__class__', '__cmp__', '__copy__', '__deepcopy__', '__delattr__', '__dict__', '__doc__', '__format__', '__gdoc__', '__getattribute__', '__getitem__', '__gobject_init__', '__grefcount__', '__gtype__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rrshift__', '__rshift__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'chain', 'connect', 'connect_after', 'connect_from', 'connect_object', 'connect_object_after', 'connect_to', 'create_child', 'detect', 'disconnect', 'disconnect_by_func', 'emit', 'emit_stop_by_name', 'find_property', 'freeze_notify', 'get_bounding_box', 'get_children', 'get_consumer', 'get_consumers', 'get_data', 'get_input_proxy', 'get_operation', 'get_output_proxy', 'get_producer', 'get_properties', 'get_property', 'handler_block', 'handler_block_by_func', 'handler_disconnect', 'handler_is_connected', 'handler_unblock', 'handler_unblock_by_func', 'link',
'lookup', 'new_child', 'new_processor', 'notify', 'process', 'props', 'render', 'set_data', 'set_properties', 'set_property', 'stop_emission', 'thaw_notify', 'to_dot', 'to_xml', 'weak_ref']
Heres how far I got:
import cairo
import Gegl
gegl = Gegl.Node()
load = gegl.new_child("gegl:load", path="test.png")
size = load.get_bounding_box()
image = cairo.ImageSurface(cairo.FORMAT_ARGB32, size.width, size.height)
#gegl_node_blit (load,
# 1.0 /*scale*/,
# &size,
# babl_format ("R'G'B'A u8"),
# cairo_image_surface_get_data (image),
# GEGL_AUTO_ROWSTRIDE,
# GEGL_BLIT_DEFAULT);
image.write_to_png('/tmp/output.png')