Pythonでは、QgsVectorLayer.writeLayerXMLおよびQgsVectorLayer.readLayerXMLを使用してデータソースを直接変更し、DOMドキュメントをオンザフライで変更し、下の例のようにレイヤーを再ロードすることができます。
from PyQt4.QtXml import *
from qgis.core import *
from PyQt4.QtXml import *
layer = self.iface.legendInterface().currentLayer()
newDatasource = "NEW DATASOURCE STRING" # get datasource from layer properties general tab
newDatasourceProvider = "ogr" # possible values: (ogr, )
# read layer DOM definition
XMLDocument = QDomDocument("style")
XMLMapLayers = QDomElement()
XMLMapLayers = XMLDocument.createElement("maplayers")
XMLMapLayer = QDomElement()
XMLMapLayer = XMLDocument.createElement("maplayer")
layer.writeLayerXML(XMLMapLayer,XMLDocument)
# modify DOM element with new layer reference
XMLMapLayer.firstChildElement("datasource").firstChild().setNodeValue(newDatasource)
XMLMapLayer.firstChildElement("provider").firstChild().setNodeValue(newDatasourceProvider)
XMLMapLayers.appendChild(XMLMapLayer)
XMLDocument.appendChild(XMLMapLayers)
# reload layer definition
self.layer.readLayerXML(XMLMapLayer)
self.layer.reload()
# apply to canvas and legend
self.iface.actionDraw().trigger()
self.iface.legendInterface().refreshLayerSymbology(self.layer)
この機能は、クリックされたレイヤーと機能でアクションを実行できるPickLayerプラグインに含まれています