Back to the connect method, it takes the class returned from the adapter_class method, and just instantiates a new instance of that class using the given options.
That's basically all you need to do for the initial setup to work. As long as all subclasses implement the appropriate methods, the wrapping is fairly transparent.
Any questions about this technique?
Note that this isn't all you have to do, because to provide a good expereince you have to handle exceptions raised by the underlying backends.