Print

Print


imgserv has a new usecase, John is reading config file
(host/port/user/password), and adds database name.
While we could probably tweak imgserv to avoid that
(because he is only working with one database at the
moment), I do think it is a generic use case: there is
nothing wrong with defining host/port/credentials in
a file, and connecting to different databases using
the file + db name, right?

Our API does not support it now, and I want to avoid
disassembling / assembling URLs.

We now have

https://github.com/lsst/db/blob/tickets/DM-2299/python/lsst/db/engineFactory.py

How about tweaking getEngineFromFile as follows (pseudo, untested code):

def getEngineFromFile(fileName, urlExtras):
     if fileName.startswith('~'):
         fileName = os.path.expanduser(fileName)
     parser = ConfigParser()
     parser.readfp(open(fileName), fileName)
     try:
         options = dict(parser.items("database"))
     except NoSectionError:
         log.error("File %s does not contain section 'database'" % fileName)
         raise

     if urlExtras:
         url = URL.make_url(options['url'])
         if urlExtras.host:
             url.host = urlExtras.host
         if urlExtras.port:
             url.port = urlExtras.port
         if urlExtras.user:
             url.user = urlExtras.user
         if urlExtras.password:
             url.password = urlExtras.password
         if urlExtras.database:
             url.database = urlExtras.database
         options.url = url

     return sqlalchemy.create_engine(options, "")

and then we could just call:

getEngineFromFile(
     "myFile.ini",
     URL(drivername="mysql+mysqldb", database = "mydb"))

(BTW, I don't like that we have to specify driver name here)

(docs for URL:
https://github.com/zzzeek/sqlalchemy/blob/master/lib/sqlalchemy/engine/url.py)

Thoughts?

Jacek

########################################################################
Use REPLY-ALL to reply to list

To unsubscribe from the QSERV-L list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=QSERV-L&A=1