from datetime import datetime, timezone from sqlalchemy import create_engine, text from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import sessionmaker from backend.ConexionSql.Base_conexion import ConexionBase from backend.Credenciales.postgres_credencial import PostgresCredencial class PostgresConexion(ConexionBase): def __init__(self, *args, **kwargs): self.estado = "pendiente" self.timestamp = datetime.now(timezone.utc) if args and isinstance(args[0], PostgresCredencial): credencial = args[0] self.host = credencial.host self.port = credencial.port self.dbname = credencial.dbname self.user = credencial.user self.password = credencial.password # se guarda la contraseƱa uri = credencial.get_uri() else: self.user = kwargs.get("user") self.password = kwargs.get("password") # se guarda la contraseƱa self.host = kwargs.get("host") self.port = kwargs.get("port", 5432) self.dbname = kwargs.get("db") or kwargs.get("dbname") uri = f"postgresql://{self.user}:{self.password}@{self.host}:{self.port}/{self.dbname}" self.engine = create_engine(uri) self.SessionLocal = sessionmaker(bind=self.engine) def get_session(self): return self.SessionLocal() def probar_conexion(self) -> bool: try: with self.engine.connect() as connection: connection.execute(text("SELECT 1")) self.estado = "exito" return True except SQLAlchemyError: self.estado = "fallo" return False