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) |