Coverage for backend \ app \ database.py: 53.85%

26 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2025-12-29 16:13 -0500

1import os 

2from sqlalchemy import create_engine 

3from sqlalchemy.ext.declarative import declarative_base 

4from sqlalchemy.orm import sessionmaker 

5 

6 

7BASEDATOS_URL = os.getenv( 

8 "DATABASE_URL","postgresql://dalctuser:Dalct1234@servicio-bdpostgres:5432/dalctmarket" 

9) 

10 

11engine = create_engine(BASEDATOS_URL) 

12 

13# Establecer la zona horaria por conexión (por defecto Quito) para que funciones de servidor 

14# como now() devuelvan la hora en la zona deseada. Se puede sobreescribir con la variable 

15# de entorno DB_TIMEZONE. 

16from sqlalchemy import event 

17DB_TIMEZONE = os.getenv("DB_TIMEZONE", "America/Guayaquil") 

18 

19@event.listens_for(engine, "connect") 

20def _set_timezone(dbapi_connection, connection_record): 

21 try: 

22 cursor = dbapi_connection.cursor() 

23 cursor.execute(f"SET TIME ZONE '{DB_TIMEZONE}'") 

24 cursor.close() 

25 except Exception: 

26 # No bloquear si la conexión no soporta cursor (por ejemplo, motores no-Postgres) 

27 pass 

28 

29SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) 

30Base = declarative_base() 

31 

32# Obtener la sesión actual de la base de datos 

33def obtenerSesion(): 

34 databaseSesion = SessionLocal() 

35 try: 

36 yield databaseSesion 

37 finally: 

38 databaseSesion.close() 

39 

40def obtenerSesionDirecta(): 

41 db = SessionLocal() 

42 return db 

43 

44