
    uYf#                     N   d dl Z d dlZd dlZd dlmZ d dlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ erd d	lmZ d d
lmZ d dlmZ d dlmZ  ee      Zi ddddddddddddddddddddddddddddddddddi ddd dd!dd"dd#dd$dd%dd&dd'dd(dd)dd*dd+dd,dd-dd.dd/di d0d1d2d1d3dd4dd5dd6dd7d1d8d1d9d1d:dd;dd<dd=dd>dd?dd@d1dAdi dBddCddDej,                  dEej,                  dFej,                  dGej,                  dHddIddJddKddLddMddNddOd1dPddQddRddd1dSZdOdTiZ ej2                         Z e       ZdUdVdWdXdYdZd[d\d]d^d_d`ZdaZ G db dce      Z  G dd dee       Z!djdfZ"dg Z#defdhZ$di Z%y)k    N)TYPE_CHECKING)when_imported   )
get_logger)formats)_config)config)Any)Callable)List)UnionaioredisTaiomysqlaredisasynciobotobotocorebottle	cassandraceleryconsuldjangodramatiqelasticsearchalgoliasearchfuturesgeventgraphqlgrpchttpxkafkamongoenginemysqlmysqldbpymysqlmariadbpsycopgpylibmc
pymemcachepymongoredisredisclusterrequestsrqsanic	snowflakeF
sqlalchemysqlite3aiohttpaiohttp_jinja2aiopgaiobotocorehttpliburllib3verticamoltenjinja2makoflaskflask_loginkombu	starlettefalconpyramidlogbookloggingloguru	structlogpynamodbpyodbcfastapidogpile_cacheyaaredisasyncpg
aws_lambdatornadoopenai	langchain
subprocess)unittestcoverage)r   )r   elasticsearch1elasticsearch2elasticsearch5elasticsearch6elasticsearch7elastic_transportopensearchpy)r'   psycopg2)zsnowflake.connector)zcassandra.cluster)zdogpile.cache)MySQLdb)zconcurrent.futures.thread)vertica_python)datadog_lambda)zhttp.client)confluent_kafka)r   r'   r0   r   rJ   r$   r   r9   rM   r7   r!   ddtrace.contribc                       e Zd ZdZy)PatchExceptionz5Wraps regular `Exception` class when patching modulesN)__name__
__module____qualname____doc__     O/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/ddtrace/_monkey.pyrb   rb      s    ?rh   rb   c                       e Zd Zy)ModuleNotFoundExceptionN)rc   rd   re   rg   rh   ri   rk   rk      s    rh   rk   c                       fd}|S )z=Factory to create an import hook for the provided module namec                    t         j                  rddlm} d
}	 t	        j
                  |      }|j                          t         j                  rt        |d      r^|j                         }|j                         D ]:  \  }}j                  j                  |dt        j                  
      du d|       < nE|j                         }j                  j                  
dt        j                  
      du d|       t        |d      r|j                         y y # t         $ r}r d	|d
}	t"        j%                  |	d       t         j                  roj                  j                  
dt        j                  
      du |	       |j                  j'                  dddd
fdt)        |      j*                  ff       Y d }~y Y d }~y d }~ww xY w)Nr   )	telemetry.get_versionsT )versionpatch_submodulesz failed to import ddtrace module z when patching on import)exc_infoFtracersintegration_errorsintegration_name
error_type)r	   _telemetry_enabledinternalrn   	importlibimport_modulepatchhasattrrp   itemstelemetry_writeradd_integrationPATCH_MODULESgetget_versionrs   	Exceptionlogerroradd_count_metrictyperc   )hookrn   pathimported_moduleversionsnamevrr   e	error_msgmodulepatch_indicatorprefixraise_errorss             ri   	on_importz%_on_import_factory.<locals>.on_import   s   $$+ &)	B'55d;O !!#((?N;.;;=H#+>>#3 a!22BB $(9(9&(AT(I2WX C 
 .99;G..>>m&7&7&?4&GU\ ?  (:;00A <3  		 X\^IIIi$I/((**::65-J[J[\bJcgkJkmvw**;;3Q:Lf9UXdfjklfmfvfvWw8x  )		s   D# #	G,BGGrg   )r   r   r   r   r   s   ```` ri   _on_import_factoryr      s    !BF rh   c                  0   t         j                         }|j                         D ]y  \  }}d|j                         z  }|t        j
                  v r)t        j                  t        j
                  |         ||<   ||   sZt        j                  |d      D ]  }d||<   	 { |j                  |        t        dddi| t        j                  rddlm} ddlm}  |         |        t        j$                  st        j                  rdd	lm}  |        y
y
)a  Automatically patches all available modules.

    In addition to ``patch_modules``, an override can be specified via an
    environment variable, ``DD_TRACE_<module>_ENABLED`` for each module.

    ``patch_modules`` have the highest precedence for overriding.

    :param dict patch_modules: Override whether particular modules are patched or not.

        >>> patch_all(redis=False, cassandra=False)
    zDD_TRACE_%s_ENABLEDrg   Tr   Fr   )
patch_iast)enable_iast_propagation)patch_common_modulesN)r   copyr   upperosenvironr   asboolCONTRIB_DEPENDENCIESr   updater}   
asm_config_iast_enabled#ddtrace.appsec._iast._patch_modulesr   ddtrace.appsec.iastr   _ep_enabled%ddtrace.appsec._common_module_patchesr   )	patch_modulesmodulesr   _enabledenv_vardepr   r   r   s	            ri   	patch_allr      s       "G $MMO $'&,,.8bjj %nnRZZ-@AGFO 6?+//; $#$$ NN=!	(u((B?!!9!9N ":rh   c           	         |j                         D ci c]  \  }}|s	|| }}}|j                         D ]  \  }}t        j                  j                  t        j                  j	                  t        j                  j                  t              d|d            s| rt        d|z        t        j                  ||f      }|D ]  } t        |      t        || |             ! t        5  t        j                  |       ddd        t        j!                  dt#        |      dj	                  |             yc c}}w # 1 sw Y   xY w)zPatch only a set of given modules.

    :param bool raise_errors: Raise error if one patch fail.
    :param dict patch_modules: List of modules to patch.

        >>> patch(psycopg=True, elasticsearch=True)
    contribz__init__.pyz\integration module ddtrace.contrib.%s does not exist, module will not have tracing available)r   r   NzeConfigured ddtrace instrumentation for %s integration(s). The following modules have been patched: %s,)r   r   r   isfilejoindirname__file__rk   _MODULES_FOR_CONTRIBr   r   r   _LOCK_PATCHED_MODULESaddr   infolen)	r   patch_modules_prefixr   cr   contribsr   modules_to_patchr   s	            ri   r}   r}      s2    >K=P=P=Rf'9q/Ve?"fHf$,NN$4 * ww~~bggll277??8+DiQXZghi-=?FG  033GgZH& 	F!M&!"7Wfg	  	*  )	* 	*!*& HHoH) g"	* 	*s   
D>D>.EE	c                  X    t         5  t        t              cddd       S # 1 sw Y   yxY w)zGet the list of patched modulesN)r   sortedr   rg   rh   ri   _get_patched_modulesr     s%     
 (&'( ( (s    ))r`   TT)&r{   r   	threadingtypingr   ddtrace.vendor.wrapt.importerr   internal.loggerr   internal.utilsr   settingsr   r	   settings.asmr   r
   r   r   r   rc   r   logs_injectionr   r   Lockr   setr   r   DEFAULT_MODULES_PREFIXr   rb   rk   r   r   r}   r   rg   rh   ri   <module>r      s    	    7 ' # ' .  III dI t	I
 DI I dI I dI dI dI I TI TI tI  d!I" t#I$ D%I& T'I( T)I* 4+I, T-I. t/I0 t1I2 t3I4 t5I6 t7I8 $9I: t;I< T=I> D?I@ AIB 	$CID TEIF GIH %IIJ tKIL tMIN dOIP TQIR 5SIT uUIV uWIX tYIZ d[I\ d]I^ D_I` TaIb 4cId UeIf gIj dkIl tmIp v$$qIr v$$sIt f##uIv &&wIx yIz d{I| t}I~ TI@ AIB tCID $EIF uGIH dIIJ KIL $MIN QI` | 
 		5  *''-"%!3 : + 	Y 		n 	'T(V 2H !H(rh   