Files
roa2web-service-auto/docs/service-auto/week5-session-callback.md
Claude Agent 32aca55c78 feat(service-auto): săpt 3-phase2 — toate ipotezele confirmate + modul funcțional
Backend:
- service_auto module complet: router, service, schemas, 5 teste suites (22/22 passed)
- 5 endpoints: GET /ping, /firme, /tip-deviz, /masini, POST /comenzi
- SP_CREEAZA_COMANDA_PROTOTIP creat în MARIUSM_AUTO (VALID, 5.9ms)
- oracle_pool.py: session_callback backward-compat patch
- ROA_WEB user: grants SP-only confirmate (H3), mariusm_test pool switchat
- pyproject.toml: integration pytest marker înregistrat

Frontend:
- ComandaNoua.vue: date reale din Oracle (firme/tip-deviz/masini), nu hardcodate
- src/modules/service-auto/services/api.js: axios service cu Bearer token
- src/router/index.js: rută /service-auto/comanda-noua

Docs:
- decision-log.md: verdict MERGE, toate 6 ipoteze CONFIRMED
- learnings.md: 7 patterns reutilizabile
- grants-audit.md: arhitectura multi-tenant + proxy auth analysis + V_NOM_FIRME loop
- template-modul-oracle.md: rețetă completă pentru module Oracle noi
- TODO-phase2.md: 7 items concrete

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 09:37:09 +00:00

2.1 KiB
Raw Blame History

Săpt 5 — session_callback patch: shared/database/oracle_pool.py

Ce s-a schimbat

Patch de ~8 linii la OracleMultiPool.register_server() și _get_or_create_pool() pentru suport session_callback.

register_server (signature nouă)

def register_server(
    self,
    server_id: str,
    host: str,
    port: int,
    user: str,
    password: str,
    sid: Optional[str] = None,
    service_name: Optional[str] = None,
    min_connections: int = 2,
    max_connections: int = 10,
    session_callback=None,   # <-- NOU
    **kwargs
) -> None:

session_callback se salvează în _pool_configs[server_id] alături de ceilalți parametri.

_get_or_create_pool (propagare către oracledb.create_pool)

if config.get('session_callback'):
    pool_params['session_callback'] = config['session_callback']

Backward compatibility

  • Toți callers existenți folosesc parametri named fără session_callback.
  • Audit complet cu grep: singurul caller real este backend/main.py:95 — nu transmite session_callback.
  • Valoare default None: dacă lipsește, config.get('session_callback') returnează None → falsy → ramura nu se execută.
  • Zero callers afectați.

Utilizare: CURRENT_SCHEMA switching

def init_mariusm_schema(connection, requested_tag):
    """Session callback — rulează la fiecare conexiune nouă din pool."""
    with connection.cursor() as cursor:
        cursor.execute("ALTER SESSION SET CURRENT_SCHEMA = MARIUSM_AUTO")

oracle_pool.register_server(
    server_id='mariusm_test',
    host='10.0.20.121',
    port=1521,
    user='ROA_WEB',
    password='...',
    service_name='ROA',
    session_callback=init_mariusm_schema,
)

Callback-ul init_mariusm_schema este invocat de oracledb la fiecare conexiune nouă creată în pool (nu la fiecare acquire — doar la crearea fizică a conexiunii).

Referințe

  • shared/database/oracle_pool.py — linii 55133
  • python-oracledb docs: Session Callbacks