Python plugin framework