Paul Moore wrote:
Maybe _parseURI should use urllib.url2pathname? That would still be
mildly suboptimal, as url2pathname doesn't accept the common form
'///C:/a/b/...'. But that's a stdlib issue.

Incidentally, while we're on the topic of URIs, I'd like to move all this URI parsing stuff into a library that doesn't have SQLObject dependencies, so that other people can use the same syntax for defining DB-API connections in any system. Since there's all sort of annoying aspects to URI parsing (many of which probably would have been avoided if I had used urllib from the start :( ), it seems like such a library would be useful. Such a library would probably produce a connection function and keyword parameters, so that actual connection creation could be held off until after parsing, i.e.:



# in dburi.py: def uri_connect(uri): func, args, kwargs = uri_parse('...') return func(*args, **kw)

module_aliases = {
    'pgsql': 'psycopg',
    'mysql': 'MySQLdb',
    # ...
    }

def uri_parse(uri):
    module_name = uri.split(':', 1)
    module_name = module_aliases.get(module_name.lower(), module_name)
    module = __import__(module_name)
    if hasattr(module, 'uri_parse'):
        return module.uri_parse(uri)
    elif globals().has_key('%s_uri_parse' % module_name):
        return globals()['%s_uri_parse' % module_name](uri, module)
    else:
        return generic_uri_parse(uri, module)


Then we'll start implementing parsers for backward compatibility, but perhaps upstream driver authors can start including their own uri_parse functions.


Well, the one missing part of this is that it would also be nice to construct a URI from an already-existing connection object, and to store the original URI if that's how that connection object was originally created.


-- Ian Bicking / [EMAIL PROTECTED] / http://blog.ianbicking.org _______________________________________________ DB-SIG maillist - [email protected] http://mail.python.org/mailman/listinfo/db-sig

Reply via email to