from __future__ import print_function
# This module may be retired as soon as Python 2.5 support is dropped.
#
# It exists only to allow trapping exceptions using the "except [exception list] as e" format
# which is a syntax error in Python 2.5

def try_connection(verbose, *args, **kwargs):
    import adodbapi

    if "proxy_host" in kwargs or "pyro_connection" in  kwargs or "proxy_host" in args:
        import adodbapi.remote
        import Pyro4
        pyroError = Pyro4.errors.PyroError
        dbconnect = adodbapi.remote.connect
        remote = True
    else:
        dbconnect = adodbapi.connect
        pyroError = NotImplementedError  # (will not occur)
        remote = False
    try:
        s = dbconnect(*args, **kwargs) # connect to server
        if verbose:
            print('Connected to:', s.connection_string)
            print('which has tables:', s.get_table_names())
        s.close()  # thanks, it worked, goodbye
    except adodbapi.DatabaseError as inst:
        print(inst.args[0])    # should be the error message
        print('***Failed getting connection using=',repr(args),repr(kwargs))
        if remote:
            print('** Are you running a *Python3* ado.connection server? **')
            print('* Have you run "setuptestframework.py" to create server_test.mdb?')
        return False, (args, kwargs), None

    if remote:
        print("   (remote)",end="")
    print("  (successful)")

    return True, (args, kwargs, remote), dbconnect


def try_operation_with_expected_exception(expected_exception_list, some_function, *args, **kwargs):
    try:
        some_function(*args, **kwargs)
    except expected_exception_list as e:
        return True, e
    except:
        raise  # an exception other than the expected occurred
    return False, 'The expected exception did not occur'