1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
# -*- coding: utf-8 -*-
import configparser
def parse_mysql_cnf(dbinfo):
"""
Attempt to parse mysql database config file for connection settings.
Ideally we would hook into django's code to do this, but read_default_file is
handled by the mysql C libs so we have to emulate the behaviour
Settings that are missing will return ''
returns (user, password, database_name, database_host, database_port)
"""
read_default_file = dbinfo.get("OPTIONS", {}).get("read_default_file")
if read_default_file:
config = configparser.RawConfigParser(
{
"user": "",
"password": "",
"database": "",
"host": "",
"port": "",
"socket": "",
}
)
import os
config.read(os.path.expanduser(read_default_file))
try:
user = config.get("client", "user")
password = config.get("client", "password")
database_name = config.get("client", "database")
database_host = config.get("client", "host")
database_port = config.get("client", "port")
socket = config.get("client", "socket")
if database_host == "localhost" and socket:
# mysql actually uses a socket if host is localhost
database_host = socket
return user, password, database_name, database_host, database_port
except configparser.NoSectionError:
pass
return "", "", "", "", ""
|