U 췀g@sddlmZmZddlmZmZddlmZmZddl m Z m Z m Z z(ddl mZddlmZddlmZWnek redYnXdd lmZerdd lmZdd lmZdd lmZdd lmZGdddeZe eddZe eddZddZddZ ddZ!dS)) SPANSTATUSSPANDATA) Integration DidNotEnable)add_query_sourcerecord_sql_queries)capture_internal_exceptionsensure_integration_enabled parse_version)Engine)listen) __version__zSQLAlchemy not installed.) TYPE_CHECKING)Any)ContextManager)Optional)Spanc@s&eZdZdZdeZeddZdS)SqlalchemyIntegration sqlalchemyzauto.db.cCsVtt}|dkrtdt|dkr.tdttdtttdtttdtdS)Nz!Unparsable SQLAlchemy version: {})z!SQLAlchemy 1.2 or newer required.Zbefore_cursor_executeZafter_cursor_execute handle_error) r SQLALCHEMY_VERSIONrformatr r _before_cursor_execute_after_cursor_execute _handle_error)versionrP/opt/hc_python/lib/python3.8/site-packages/sentry_sdk/integrations/sqlalchemy.py setup_onces  z SqlalchemyIntegration.setup_onceN)__name__ __module__ __qualname__ identifierorigin staticmethodr rrrrrs rc GsRt||||r|jr|jjpd|tjd}||_|}|dk rNt||||_dS)N) paramstyle executemanyZ span_origin) rdialectr'rr%_sentry_sql_span_manager __enter__ _set_db_data_sentry_sql_span) conncursor statement parameterscontextr(argsctx_mgrspanrrrr2s rc GsZt|dd}|dk r(d|_|dddt|dd}|dk rVtt|W5QRXdS)Nr*r-)getattrr*__exit__rr)r.r/r0r1r2r3r4r5rrrrHs rcGs^|j}|dkrdSt|dd}|dk r2|tjt|dd}|dk rZd|_|ddddS)Nr-r*)execution_contextr6Z set_statusrINTERNAL_ERRORr*r7)r2r3r8r5r4rrrrYs  rcCsHt|}d|krdSd|kr dSd|kr,dSd|kr8dSd|krDdSdS)NZsqlitepostgres postgresqlZmariadbmysqloracle)str)namerrr_get_db_systemqsr@cCst|jj}|dk r"|tj||jjdkr2dS|jjj}|dk rR|tj||jjj }|dk rr|tj ||jjj }|dk r|tj |dS)N) r@Zenginer?set_datarZ DB_SYSTEMurlZdatabaseZDB_NAMEhostZSERVER_ADDRESSportZ SERVER_PORT)r5r.Z db_systemZdb_nameserver_addressZ server_portrrrr,s     r,N)"Zsentry_sdk.constsrrZsentry_sdk.integrationsrrZsentry_sdk.tracing_utilsrrZsentry_sdk.utilsrr r Zsqlalchemy.enginer Zsqlalchemy.eventr rr r ImportErrortypingrrrrZsentry_sdk.tracingrrrrrr@r,rrrrs.