server/serverctl.py
branchstable
changeset 6060 353bec342e2a
parent 5990 6f3c77c79a88
child 6072 9d83b214066a
equal deleted inserted replaced
6059:47f84adcd676 6060:353bec342e2a
    40 def source_cnx(source, dbname=None, special_privs=False, verbose=True):
    40 def source_cnx(source, dbname=None, special_privs=False, verbose=True):
    41     """open and return a connection to the system database defined in the
    41     """open and return a connection to the system database defined in the
    42     given server.serverconfig
    42     given server.serverconfig
    43     """
    43     """
    44     from getpass import getpass
    44     from getpass import getpass
    45     from logilab.database import get_connection
    45     from logilab.database import get_connection, get_db_helper
    46     dbhost = source.get('db-host')
    46     dbhost = source.get('db-host')
    47     if dbname is None:
    47     if dbname is None:
    48         dbname = source['db-name']
    48         dbname = source['db-name']
    49     driver = source['db-driver']
    49     driver = source['db-driver']
       
    50     dbhelper = get_db_helper(driver)
    50     if verbose:
    51     if verbose:
    51         print '-> connecting to %s database' % driver,
    52         print '-> connecting to %s database' % driver,
    52         if dbhost:
    53         if dbhost:
    53             print '%s@%s' % (dbname, dbhost),
    54             print '%s@%s' % (dbname, dbhost),
    54         else:
    55         else:
    55             print dbname,
    56             print dbname,
    56     if not verbose or (not special_privs and source.get('db-user')):
    57     if dbhelper.users_support:
    57         user = source['db-user']
    58         if not verbose or (not special_privs and source.get('db-user')):
    58         if verbose:
    59             user = source['db-user']
    59             print 'as', user
    60             if verbose:
    60         if source.get('db-password'):
    61                 print 'as', user
    61             password = source['db-password']
    62             if source.get('db-password'):
    62         else:
    63                 password = source['db-password']
    63             password = getpass('password: ')
    64             else:
    64     else:
    65                 password = getpass('password: ')
    65         print
    66         else:
    66         if special_privs:
       
    67             print 'WARNING'
       
    68             print 'the user will need the following special access rights on the database:'
       
    69             print special_privs
       
    70             print
    67             print
       
    68             if special_privs:
       
    69                 print 'WARNING'
       
    70                 print ('the user will need the following special access rights '
       
    71                        'on the database:')
       
    72                 print special_privs
       
    73                 print
    71         default_user = source.get('db-user', os.environ.get('USER', ''))
    74         default_user = source.get('db-user', os.environ.get('USER', ''))
    72         user = raw_input('Connect as user ? [%r]: ' % default_user)
    75         user = raw_input('Connect as user ? [%r]: ' % default_user)
    73         user = user or default_user
    76         user = user or default_user
    74         if user == source.get('db-user') and source.get('db-password'):
    77         if user == source.get('db-user') and source.get('db-password'):
    75             password = source['db-password']
    78             password = source['db-password']
    76         else:
    79         else:
    77             password = getpass('password: ')
    80             password = getpass('password: ')
       
    81     else:
       
    82         user = password = None
    78     extra_args = source.get('db-extra-arguments')
    83     extra_args = source.get('db-extra-arguments')
    79     extra = extra_args and {'extra_args': extra_args} or {}
    84     extra = extra_args and {'extra_args': extra_args} or {}
    80     cnx = get_connection(driver, dbhost, dbname, user, password=password,
    85     cnx = get_connection(driver, dbhost, dbname, user, password=password,
    81                          port=source.get('db-port'),
    86                          port=source.get('db-port'),
    82                          **extra)
    87                          **extra)