File: mysql.py

package info (click to toggle)
python-django-extensions 4.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,820 kB
  • sloc: python: 18,601; javascript: 7,354; makefile: 108; xml: 17
file content (46 lines) | stat: -rw-r--r-- 1,557 bytes parent folder | download
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 "", "", "", "", ""