How to set Marker Line symbol for QgsVectorLayer by using Python?

The only documentation I found is here, but it doesn't help much in practice.

Here is an example I used to set the renderer of the current layer to a symbol with two layers: one 'Simple Line' and one 'Marker Line'. The marker line is tricky, because you need to work with a subSymbol.

# Use the currently selected layer
layer = qgis.utils.iface.mapCanvas().currentLayer()

registry = QgsSymbolLayerV2Registry.instance()
lineMeta = registry.symbolLayerMetadata("SimpleLine")
markerMeta = registry.symbolLayerMetadata("MarkerLine")

symbol = QgsSymbolV2.defaultSymbol(layer.geometryType())

# Line layer
lineLayer = lineMeta.createSymbolLayer({'width': '0.26', 'color': '255,0,0', 'offset': '-1.0', 'penstyle': 'solid', 'use_custom_dash': '0', 'joinstyle': 'bevel', 'capstyle': 'square'})

# Marker layer
markerLayer = markerMeta.createSymbolLayer({'width': '0.26', 'color': '255,0,0', 'interval': '3', 'rotate': '1', 'placement': 'interval', 'offset': '-1.0'})
subSymbol = markerLayer.subSymbol()
# Replace the default layer with our own SimpleMarker
subSymbol.deleteSymbolLayer(0)
triangle = registry.symbolLayerMetadata("SimpleMarker").createSymbolLayer({'name': 'filled_arrowhead', 'color': '255,0,0', 'color_border': '0,0,0', 'offset': '0,0', 'size': '1.5', 'angle': '0'})
subSymbol.appendSymbolLayer(triangle)

# Replace the default layer with our two custom layers
symbol.deleteSymbolLayer(0)
symbol.appendSymbolLayer(lineLayer)
symbol.appendSymbolLayer(markerLayer)

# Replace the renderer of the current layer
renderer = QgsSingleSymbolRendererV2(symbol)
layer.setRendererV2(renderer)

You can also inspect (and probably modify) the symbols for a layer, for example:

layer.rendererV2().symbol().symbolLayer(0).properties()

I did it this way mimicking the way I see QGIS Desktop doing it:

enter image description here

Using the same names as in the image the python code looks like this:

# Base style.    
line = QgsLineSymbolV2()    

# Create an marker line.
marker_line = QgsMarkerLineSymbolLayerV2()
marker_line.setInterval(10)

# Configure the marker.
simple_marker = QgsSimpleMarkerSymbolLayerV2()
simple_marker.setShape(QgsSimpleMarkerSymbolLayerBase.ArrowHeadFilled)
simple_marker.setSize(3)
simple_marker.setAngle(180)
simple_marker.setColor(QColor(255,255,255))
simple_marker.setOutlineColor(QColor(255,255,255))

# The marker has its own symbol layer.
marker = QgsMarkerSymbolV2()
marker.changeSymbolLayer(0, simple_marker)

# Add the layer to the marker layer.
marker_line.setSubSymbol(marker)

# Finally replace the symbol layer in the base style.
line.changeSymbolLayer(0, marker_line)

# Add the style to the line layer.        
renderer = QgsSingleSymbolRendererV2(line)
layer.setRendererV2(renderer)