feature/integracion-cpanel-asrecovery
This commit is contained in:
71
app/config/odbc_setup.py
Normal file
71
app/config/odbc_setup.py
Normal file
@@ -0,0 +1,71 @@
|
||||
"""Configura ODBC portable desde config/odbc/."""
|
||||
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
from ..constants import IS_WINDOWS, ODBC_DIR
|
||||
from ..utils.logger import app_logger
|
||||
|
||||
|
||||
def _write_portable_odbc_ini(odbc_dir: Path) -> None:
|
||||
"""Genera odbcinst.ini mínimo si no existe."""
|
||||
inst = odbc_dir / "odbcinst.ini"
|
||||
if inst.exists():
|
||||
return
|
||||
|
||||
if IS_WINDOWS:
|
||||
driver_path = odbc_dir / "msodbcsql18.dll"
|
||||
if not driver_path.exists():
|
||||
for candidate in odbc_dir.glob("msodbcsql*.dll"):
|
||||
driver_path = candidate
|
||||
break
|
||||
driver_line = str(driver_path.resolve()) if driver_path.exists() else "msodbcsql18.dll"
|
||||
content = f"""[ODBC Driver 18 for SQL Server]
|
||||
Description=Microsoft ODBC Driver 18 for SQL Server
|
||||
Driver={driver_line}
|
||||
UsageCount=1
|
||||
"""
|
||||
else:
|
||||
so_path = None
|
||||
for pattern in ("libmsodbcsql-18*.so*", "msodbcsql-18*.so*"):
|
||||
matches = list(odbc_dir.glob(pattern))
|
||||
if matches:
|
||||
so_path = matches[0]
|
||||
break
|
||||
driver_line = str(so_path.resolve()) if so_path else "libmsodbcsql-18.so"
|
||||
content = f"""[ODBC Driver 18 for SQL Server]
|
||||
Description=Microsoft ODBC Driver 18 for SQL Server
|
||||
Driver={driver_line}
|
||||
UsageCount=1
|
||||
"""
|
||||
inst.write_text(content, encoding="utf-8")
|
||||
|
||||
ini = odbc_dir / "odbc.ini"
|
||||
if not ini.exists():
|
||||
ini.write_text("[ODBC Data Sources]\n", encoding="utf-8")
|
||||
|
||||
|
||||
def configure_odbc_environment() -> None:
|
||||
"""Apunta pyodbc al driver embebido en config/odbc si está disponible."""
|
||||
if not ODBC_DIR.is_dir():
|
||||
return
|
||||
|
||||
lib_dir = ODBC_DIR / "lib"
|
||||
if lib_dir.is_dir():
|
||||
existing = os.environ.get("LD_LIBRARY_PATH", "")
|
||||
lib_path = str(lib_dir.resolve())
|
||||
if lib_path not in existing.split(":"):
|
||||
os.environ["LD_LIBRARY_PATH"] = (
|
||||
f"{lib_path}:{existing}" if existing else lib_path
|
||||
)
|
||||
|
||||
_write_portable_odbc_ini(ODBC_DIR)
|
||||
odbc_sys = str(ODBC_DIR.resolve())
|
||||
os.environ["ODBCSYSINI"] = odbc_sys
|
||||
os.environ["ODBCINI"] = str((ODBC_DIR / "odbc.ini").resolve())
|
||||
|
||||
if IS_WINDOWS:
|
||||
os.environ["PATH"] = odbc_sys + os.pathsep + os.environ.get("PATH", "")
|
||||
|
||||
app_logger.debug(f"ODBC configurado: ODBCSYSINI={odbc_sys}")
|
||||
Reference in New Issue
Block a user