def __get_res_connector(self, temp_filename): if use_ado: is64bit_python = check64bit(current_system="python") if is64bit_python: constr = 'Provider=Microsoft.ACE.OLEDB.12.0; Data Source=%s' % temp_filename else: constr = 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source=%s' % temp_filename return constr if SEARCH_FOR_ODBC_DRIVERS: logging.debug("Searching for odbc drivers") try: drivers = [driver for driver in dbloader.drivers() if 'Microsoft Access Driver' in driver] logging.debug(f"Found these: {drivers}") driver = drivers[0] except IndexError as e: logging.debug("Unfortunately, it seems the " "list of drivers is emtpy.") logging.debug("Use driver-name from config (if existing).") driver = driver_dll if is_macos: driver = "/usr/local/lib/libmdbodbc.dylib" else: if not driver: print("\nCould not find any odbc-drivers suitable " "for .res-type files. " "Check out the homepage of pydobc for info on " "installing drivers") print("One solution that might work is downloading " "the Microsoft Access database engine (in correct" " bytes (32 or 64)) " "from:\n" "https://www.microsoft.com/en-us/download/" "details.aspx?id=13255") print("Or install mdbtools and set it up " "(check the cellpy docs for help)") print("\n") else: logging.debug("Using driver dll from config file") logging.debug(f"driver dll: {driver}") self.logger.debug(f"odbc constr: {driver}") else: is64bit_python = check64bit(current_system="python") if is64bit_python: driver = '{Microsoft Access Driver (*.mdb, *.accdb)}' else: driver = 'Microsoft Access Driver (*.mdb)' self.logger.debug("odbc constr: {}".format(driver)) constr = 'Driver=%s;Dbq=%s' % (driver, temp_filename) logging.debug(f"constr: {constr}") return constr
def _check_import_pyodbc(): from cellpy.parameters import prms import platform ODBC = prms._odbc SEARCH_FOR_ODBC_DRIVERS = prms._search_for_odbc_driver use_subprocess = prms.Instruments.Arbin.use_subprocess detect_subprocess_need = prms.Instruments.Arbin.detect_subprocess_need click.echo() click.echo(f" reading prms") click.echo(f" - ODBC: {ODBC}") click.echo(f" - SEARCH_FOR_ODBC_DRIVERS: {SEARCH_FOR_ODBC_DRIVERS}") click.echo(f" - use_subprocess: {use_subprocess}") click.echo(f" - detect_subprocess_need: {detect_subprocess_need}") click.echo( f" - stated office version: {prms.Instruments.Arbin.office_version}") click.echo(" checking system") is_posix = False is_macos = False if os.name == "posix": is_posix = True click.echo(f" - running on posix") current_platform = platform.system() if current_platform == "Darwin": is_macos = True click.echo(f" - running on a mac") python_version, os_version = platform.architecture() click.echo(f" - python version: {python_version}") click.echo(f" - os version: {os_version}") if not is_posix: if not prms.Instruments.Arbin.sub_process_path: sub_process_path = str(prms._sub_process_path) else: sub_process_path = str(prms.Instruments.Arbin.sub_process_path) click.echo(f" stated path to sub-process: {sub_process_path}") if not os.path.isfile(sub_process_path): click.echo(f" - OBS! missing") if is_posix: click.echo(" checking existence of mdb-export") sub_process_path = "mdb-export" from subprocess import PIPE, run command = ["command", "-v", sub_process_path] try: result = run(command, stdout=PIPE, stderr=PIPE, universal_newlines=True) if result.returncode == 0: click.echo(f" - found it: {result.stdout}") else: click.echo(f" - failed finding it") if is_macos: driver = "/usr/local/lib/libmdbodbc.dylib" click.echo( f" looks like you are on a mac (driver set to\n {driver})") if not os.path.isfile(driver): click.echo(" - but cannot find it!") return False return True except AssertionError: click.echo(" - not found") return False # not posix - checking for odbc drivers # 1) checking if you have defined one try: driver = prms.Instruments.Arbin.odbc_driver if not driver: raise AttributeError click.echo("You have defined an odbc driver in your conifg file") click.echo(f"driver: {driver}") except AttributeError: click.echo("FYI: you have not defined any odbc_driver(s)") click.echo( "(The name of the driver from the configuration file is " "used as a backup when cellpy cannot locate a driver by itself)") use_ado = False if ODBC == "ado": use_ado = True click.echo(" you stated that you prefer the ado loader") click.echo(" checking if adodbapi is installed") try: import adodbapi as dbloader except ImportError: use_ado = False click.echo(" Failed! Try setting pyodbc as your loader or install") click.echo(" adodbapi (http://adodbapi.sourceforge.net/)") if not use_ado: if ODBC == "pyodbc": click.echo(" you stated that you prefer the pyodbc loader") try: import pyodbc as dbloader except ImportError: click.echo(" Failed! Could not import it.") click.echo(" Try 'pip install pyodbc'") dbloader = None elif ODBC == "pypyodbc": click.echo(" you stated that you prefer the pypyodbc loader") try: import pypyodbc as dbloader except ImportError: click.echo(" Failed! Could not import it.") click.echo(" try 'pip install pypyodbc'") click.echo(" or set pyodbc as your loader in your prm file") click.echo(" (and install it)") dbloader = None click.echo(" searching for odbc drivers") try: drivers = [ driver for driver in dbloader.drivers() if "Microsoft Access Driver" in driver ] click.echo(f"Found these: {drivers}") driver = drivers[0] click.echo(f"odbc driver: {driver}") return True except IndexError as e: logging.debug("Unfortunately, it seems the list of drivers is emtpy.") click.echo( "\nCould not find any odbc-drivers suitable for .res-type files. " "Check out the homepage of pydobc for info on installing drivers") click.echo( "One solution that might work is downloading " "the Microsoft Access database engine " "(in correct bytes (32 or 64)) " "from:\n" "https://www.microsoft.com/en-us/download/details.aspx?id=13255") click.echo("Or install mdbtools and set it up " "(check the cellpy docs for help)") click.echo("\n") return False