o
    i\                  
   @   s  d dl mZ 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 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 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 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$ 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. d d!l/m0Z0 d d"l/m1Z1 d d#l2m3Z3 d$d%l4m5Z5 d$d&l6m7Z7 d$d'l8m9Z9 d$d(l:m;Z; ee<Z=e7 Z>d)Z?e@h d*ZAd+eBd,e	eCeB  fd-d.ZDd/d0 ZEd1eBd,eCeFeGeGf  fd2d3ZHed4 ZIe
deGeJeBeKeCd5 eLeBd5f f ZMG d6d7 d7ZNd,eLeBeNf fd8d9ZOG d:d; d;ePZQeQ ZdS )<    )deepcopyN)Any)Callable)Literal)Optional)Union)gitmetadata)_PROPAGATION_BEHAVIOR_DEFAULT)_PROPAGATION_BEHAVIOR_IGNORE)_PROPAGATION_STYLE_DEFAULT)_PROPAGATION_STYLE_NONE)DEFAULT_BUFFER_SIZE)DEFAULT_MAX_PAYLOAD_SIZE)DEFAULT_PROCESSING_INTERVAL)DEFAULT_REUSE_CONNECTIONS)DEFAULT_SAMPLING_RATE_LIMIT)DEFAULT_TIMEOUT)PROPAGATION_STYLE_ALL)get_log_injection_state)
get_logger)config)DEFAULT_SPAN_SERVICE_NAME)in_aws_lambda)in_azure_function)in_gcp_function)
get_config)telemetry_writer)1validate_and_report_otel_metrics_exporter_enabled)validate_otel_envs)cachedmethod)DDTraceDeprecationWarning)asbool)parse_tags_str)	deprecate   )detect_service)fetch_config_from_endpoint)
HttpConfig)IntegrationConfiga1  (?ix)(?:(?:"|%22)?)(?:(?:old[-_]?|new[-_]?)?p(?:ass)?w(?:or)?d(?:1|2)?|pass(?:[-_]?phrase)?|secret|(?:api[-_]?|private[-_]?|public[-_]?|access[-_]?|secret[-_]?|app(?:lication)?[-_]?)key(?:[-_]?id)?|token|consumer[-_]?(?:id|key|secret)|sign(?:ed|ature)?|auth(?:entication|orization)?)(?:(?:\s|%20)*(?:=|%3D)[^&]+|(?:"|%22)(?:\s|%20)*(?::|%3A)(?:\s|%20)*(?:"|%22)(?:%2[^2]|%[^2]|[^"%])+(?:"|%22))|(?: bearer(?:\s|%20)+[a-z0-9._\-]+|token(?::|%3A)[a-z0-9]{13}|gh[opsu]_[0-9a-zA-Z]{36}|ey[I-L](?:[\w=-]|%3D)+\.ey[I-L](?:[\w=-]|%3D)+(?:\.(?:[\w.+/=-]|%3D|%2F|%2B)+)?|-{5}BEGIN(?:[a-z\s]|%20)+PRIVATE(?:\s|%20)KEY-{5}[^\-]+-{5}END(?:[a-z\s]|%20)+PRIVATE(?:\s|%20)KEY(?:-{5})?(?:\n|%0A)?|(?:ssh-(?:rsa|dss)|ecdsa-[a-z0-9]+-[a-z0-9]+)(?:\s|%20|%09)+(?:[a-z0-9/.+]|%2F|%5C|%2B){100,}(?:=|%3D)*(?:(?:\s|%20|%09)+[a-z0-9._-]+)?)>g   rqmcprayasgiavrobotogrpcmakovllmwsgiaiopgflaskgenaihttpxkafkakombumysqlredissanicaredisbottleceleryconsulcrewaidbapi2djangofalcongeventjinja2logurumoltenopenaipyodbcpytestsqlitevalkeyaiohttpasyncioasyncpgfastapifuturesgraphqlhttpliblitellmlogbookloggingmariadbmysqldbpsycopgpylibmcpymongopymysqlpyramidsqlite3tornadourllib3verticaaiokafkaaiomysqlbotocorecherrypycoveragedramatiqprotobufpynamodbrequestsseleniumunittestvertexaiyaaredis	anthropic	langchain	langgraph	rq_worker	snowflake	starlette	structlog
aws_lambda
google_adk
pymemcache
pytest_bdd
sqlalchemy
subprocessaiobotocoreflask_cachegrpc_clientgrpc_serverpydantic_aigoogle_genairedisclusteralgoliasearchdogpile_cacheelasticsearchopenai_agentsaiohttp_clientaiohttp_jinja2azure_eventhubsazure_functionsgrpc_aio_clientgrpc_aio_servertest_visibilityazure_servicebusclaude_agent_sdk
styles_strreturnc                 C   sT   g }|  dD ] }|  }|r|tkrq|tvr"td|t q|| q|S )a,  Helper to parse http propagation extract/inject styles via env variables.

    The expected format is::

        <style>[,<style>...]


    The allowed values are:

    - "datadog"
    - "b3multi"
    - "b3" (formerly 'b3 single header')
    - "tracecontext"
    - "baggage"
    - "none"


    The default value is ``"datadog,tracecontext,baggage"``.


    Examples::

        # Extract and inject b3 headers:
        DD_TRACE_PROPAGATION_STYLE="b3multi"

        # Disable header propagation:
        DD_TRACE_PROPAGATION_STYLE="none"

        # Extract trace context from "x-datadog-*" or "x-b3-*" headers from upstream headers
        DD_TRACE_PROPAGATION_STYLE_EXTRACT="datadog,b3multi"

        # Inject the "b3: *" header into downstream requests headers
        DD_TRACE_PROPAGATION_STYLE_INJECT="b3"
    ,z?Unknown DD_TRACE_PROPAGATION_STYLE: {!r}, allowed values are %r)splitstriplowerr   r   logwarningappend)r   stylesstyle r   U/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/internal/settings/_config.py_parse_propagation_styles   s   #r   c                 C   s@   |   D ]\}}t|tr||i }t|| q|||< q|S )z
    Merge the first provided ``dict`` into the second.

    :param dict source: The ``dict`` to merge into ``destination``
    :param dict destination: The ``dict`` that should get updated
    :rtype: dict
    :returns: ``destination`` modified
    )items
isinstancedict
setdefault
_deepmerge)sourcedestinationkeyvaluenoder   r   r   r      s   	

r   error_range_strc              	   C   sz   g }|   } | d}|D ]-}|d}z	dd |D }W n ty,   td| Y qw t|t|f}|| q|S )Nr   -c                 S   s   g | ]}t |qS r   )int).0vr   r   r   
<listcomp>  s    z$get_error_ranges.<locals>.<listcomp>z&Error status codes was not a number %s)r   r   
ValueErrorr   	exceptionminmaxr   )r   error_rangeserror_ranges_strerror_rangevaluesr   r   r   get_error_ranges  s   

r   )defaultenv_varcoderemote_config	_JSONTypec                   @   s   e Zd ZdZ	ddeeeg ef f dee deege	f de
e ddf
dd	Zd
e	deddfddZdefddZdefddZdd ZdS )_ConfigItemzNConfiguration item that tracks the value of a setting, and where it came from.Nr   envsmodifierotel_envr   c                 C   sb   |d | _ d | _d | _d | _t|r| | _n|| _|| _t|| j||}|| jur/|| _d S d S )Nr   )_name
_env_value_code_value	_rc_valuecallable_default_value_envs_get_config)selfr   r   r   r   valr   r   r   __init__+  s   



z_ConfigItem.__init__r   r   c                 C   sH   |dkr|| _ n|dkr|| _ntd| t| j|  |   d S )Nr   r   zInvalid source: %s)	r   r   r   r   r   add_configurationr   r   r   )r   r   r   r   r   r   	set_valueA  s   z_ConfigItem.set_valuec                 C   s6   | j d ur| j S | jd ur| jS | jd ur| jS | jS N)r   r   r   r   r   r   r   r   r   J  s   


z_ConfigItem.valuec                 C   s.   | j d urdS | jd urdS | jd urdS dS )Nr   r   r   r   )r   r   r   r   r   r   r   r   S  s   


z_ConfigItem.sourcec                 C   s8   d| j j d| j d| j d| j d| j d| j dS )N<z name=z	 default=z env_value=z user_value=z remote_config_value=>)	__class____name__r   r   r   r   r   r   r   r   r   __repr__\  s   z_ConfigItem.__repr__r   )r   
__module____qualname____doc__r   r   r   liststrr   r   r   _ConfigSourcer   r   r   r   r   r   r   r   r   (  s$    
			r   c                
   C   sp   t dd dgdtdt ddgtdt d	d d
gtdt dd dgddd dt ddgdtdt d dgtddS )Nc                   S   s   dS )N r   r   r   r   r   <lambda>f      z!_default_config.<locals>.<lambda>DD_TRACE_SAMPLING_RULESOTEL_TRACES_SAMPLER)r   r   r   r   TDD_LOGS_INJECTION)r   r   r   c                   S      i S r   r   r   r   r   r   r   q  r   DD_TRACE_HEADER_TAGSc                   S   r   r   r   r   r   r   r   r   v  r   DD_TAGSOTEL_RESOURCE_ATTRIBUTESc                 S   s   t t| S r   )r   
clean_tagsr"   xr   r   r   r   y      DD_TRACE_ENABLEDOTEL_TRACES_EXPORTERDD_APPSEC_SCA_ENABLED)_trace_sampling_rules_logs_injection_trace_http_header_tagstags_tracing_enabled_sca_enabled)r   r   r   r"   r!   r   r   r   r   _default_configc  sD   r   c                       s   e Zd ZdZG dd deZd$ddZedefdd	Z	e	j
d
eddfdd	Z	defddZdeddfddZdee fddZd%ddZe dedee fddZd&ddZdd Zded
eddf fddZd$d d!Zd"d# Z  ZS )'ConfigzConfiguration object that exposes an API to set and retrieve
    global settings for each integration. All integrations must use
    this instance to register their defaults, so that they're public
    available and can be updated by users.
    c                   @   s   e Zd ZU eddZeed< eeZe	e
eef  ed< edefddZejdedd	fd
dZede	e
eef  fddZe dedefddZd	S )zConfig._HTTPServerConfig#DD_TRACE_HTTP_SERVER_ERROR_STATUSESz500-599_error_statuses_error_rangesr   c                 C      | j S r   )r   r   r   r   r   error_statuses     z'Config._HTTPServerConfig.error_statusesr   Nc                 C   s   || _ t|| _| j  d S r   )r   r   r   is_error_codecache_clearr   r   r   r   r   r     s   
c                 C   r   r   )r   r   r   r   r   r     r   z%Config._HTTPServerConfig.error_rangesstatus_codec                 C   s4   | j D ]}|d |  kr|d kr dS  qqdS )zMReturns a boolean representing whether or not a status code is an error code.r   r$   TF)r   )r   r   r   r   r   r   r     s
   
z&Config._HTTPServerConfig.is_error_code)r   r   r   r   r   r   __annotations__r   r   r   tupler   propertyr   setterr   r   boolr   r   r   r   r   _HTTPServerConfig  s   
 r  r   Nc                 C   s0  t   t| _t | _i | _tddtd| _tddt| _	tdt
t| _| jt
kr4| jdv r4td| j tdd	t| _td
dt}|dk rNtd d| _n|| _t| jd| _tdd	t| _tddgdt| _td| _| jdkrwtd tdtt| _tdtt| _tdtt| _tdt t| _!tddt| _"tdd	t| _#td| _$tdt%t| _&tddt| _'td | _(td!dt| _)td"dt| _*td#| j+,d$| _-td%| j+,d&d d'd(| _.| j.d u| _/t0t1j2| _3| j.d u rt4 rtd)d*gt5| _.| j.d u r
t6 r
td+t5| _.| j.d u rt5rtd%t5| _.t7 | _8td,| j+,d-| _9| : | _;t7 | _<d | _=| jrEt> sEd.d/l?m@} | | _=td0d1| _AtB| jA| _C| j.r_d&| j+v r_| j+d&= | j9rmd-| j+v rm| j+d-= td2dt| _Dtd3dt| _Etd4d	t| _Ftd5d6t| _Gtd7d	t| _Htd8dtotI | _Jtd9d:gdt| _Ktd;t7 d<d= | _Ld>tMjNv rtOd?d@dAtPdB tQRtd>d	t tdCdt| _StdD| _TtdE| _UtdFgtV| jW| _X| jXtYkrtZtdGdHgt[dId(| _\n	t]dJ t^g| _\tZtdKdHgt[dId(| __tdLdt| _`tdMg dNdOd= | _atdPdQt}|d.k r,tdR| d.}|| _b|d.k| _ctdSdt| _dt4 pGt6 pGt1jedTk}tdUdVg|t| _ftdWdt| _gtdXdY| _htdZti}|d1k| _jd | _kd	| _lztmn|od[| _kW n tpy   tjd\d	d] d| _lY nw td^dt| _qtd_d1| _rtd`d	t| _stdadb| _ttdc| _utddd	t| _vtdedtdf| _wtdgdtdfotI | _xtdhdtdf| _y| jws| jys| jxrditMjNdj< | jwp| jxp| jy| _ztdk| _{tdl| _|tdmddn| _}tdodp| _~tdqdt| _tdrdst| _tdt| _tdud t| _tdvd dwd= | _tdxd t| _tdydtddn| _tdz| _td{dt| _td|dt| _td}dtd~| _tddtd~| _tddtd~| _tddtd~| _tddtd~| _tddt| _| jrt]d d| _d| _ft| dd1 d	| _Dd| _Ed S d S )NDD_TRACE_DEBUGFOTEL_LOG_LEVELDD_TRACE_STARTUP_LOGSDD_TRACE_RATE_LIMIT)r   z[]zDD_TRACE_RATE_LIMIT is set to %s and DD_TRACE_SAMPLING_RULES is not set. Tracer rate limiting is only applied to spans that match tracer sampling rules. All other spans will be rate limited by the Datadog Agent via DD_APM_MAX_TPS.DD_TRACE_PARTIAL_FLUSH_ENABLEDT DD_TRACE_PARTIAL_FLUSH_MIN_SPANSi,  r$   z>DD_TRACE_PARTIAL_FLUSH_MIN_SPANS must be >= 1, defaulting to 1)header_tagsDD_REMOTE_CONFIGURATION_ENABLED&DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDSDD_REMOTECONFIG_POLL_SECONDSg      @DD_TRACE_API_VERSIONzv0.3zdSetting DD_TRACE_API_VERSION to ``v0.3`` is not supported. The default ``v0.5`` format will be used.!DD_TRACE_WRITER_BUFFER_SIZE_BYTES&DD_TRACE_WRITER_MAX_PAYLOAD_SIZE_BYTES DD_TRACE_WRITER_INTERVAL_SECONDS!DD_TRACE_WRITER_REUSE_CONNECTIONS#_DD_TRACE_WRITER_LOG_ERROR_PAYLOADS_DD_TRACE_WRITER_NATIVEDD_TRACE_AGENT_URLDD_TRACE_AGENT_TIMEOUT_SECONDS DD_TRACE_SPAN_TRACEBACK_MAX_SIZE   DD_TRACE_CLIENT_IP_HEADERDD_TRACE_CLIENT_IP_ENABLED)DD_TRACE_PROPAGATION_HTTP_BAGGAGE_ENABLEDDD_ENVenv
DD_SERVICEserviceOTEL_SERVICE_NAME)r   	K_SERVICEFUNCTION_NAMEWEBSITE_SITE_NAME
DD_VERSIONversionr   )SharedStringFileDD_SERVICE_MAPPINGr   DD_TRACE_REPORT_HOSTNAMEDD_TRACE_HEALTH_METRICS_ENABLED$DD_INSTRUMENTATION_TELEMETRY_ENABLEDDD_TELEMETRY_HEARTBEAT_INTERVAL<   *DD_TELEMETRY_DEPENDENCY_COLLECTION_ENABLEDDD_RUNTIME_METRICS_ENABLED(DD_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED%DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED&DD_TRACE_EXPERIMENTAL_FEATURES_ENABLEDc                 S   s   t |   dS Nr   )setr   upperr   r   r   r   r   r   #  s    z!Config.__init__.<locals>.<lambda>+DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLEDz9DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED is deprecatedzC128-bit trace ID generation will become mandatory in version 5.0.0.z5.0.0)messageremoval_versioncategory(DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLEDDD_SPAN_SAMPLING_RULESDD_SPAN_SAMPLING_RULES_FILE%DD_TRACE_PROPAGATION_BEHAVIOR_EXTRACT"DD_TRACE_PROPAGATION_STYLE_EXTRACTDD_TRACE_PROPAGATION_STYLEOTEL_PROPAGATORSzDD_TRACE_PROPAGATION_BEHAVIOR_EXTRACT is set to ignore,
                setting DD_TRACE_PROPAGATION_STYLE_EXTRACT to empty list!DD_TRACE_PROPAGATION_STYLE_INJECT"DD_TRACE_PROPAGATION_EXTRACT_FIRSTDD_TRACE_BAGGAGE_TAG_KEYS)zuser.idz
account.idz
session.idc                 S   s   |   dS r1  )r   r   r   r   r   r   r   V  r   "DD_TRACE_X_DATADOG_TAGS_MAX_LENGTHi   zbInvalid value %r provided for DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH, only non-negative values allowedDD_TESTING_RAISE)      DD_TRACE_COMPUTE_STATS"DD_TRACE_STATS_COMPUTATION_ENABLEDDD_DATA_STREAMS_ENABLED%DD_TRACE_HTTP_CLIENT_TAG_QUERY_STRINGtrue(DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXPasciiz;Invalid obfuscation pattern, disabling query string tracing)exc_info!DD_CIVISIBILITY_AGENTLESS_ENABLEDDD_CIVISIBILITY_AGENTLESS_URLDD_CIVISIBILITY_ITR_ENABLEDDD_CIVISIBILITY_LOG_LEVELinfoDD_TEST_SESSION_NAME-DD_CIVISIBILITY_EARLY_FLAKE_DETECTION_ENABLEDDD_TRACE_OTEL_ENABLEDOTEL_SDK_DISABLEDDD_METRICS_OTEL_ENABLEDDD_LOGS_OTEL_ENABLEDddcontextvars_contextOTEL_PYTHON_CONTEXTDD_TRACE_METHODS
DD_API_KEY
DD_APP_KEY)report_telemetryDD_SITEzdatadoghq.comDD_LLMOBS_ENABLEDDD_LLMOBS_SAMPLE_RATEg      ?DD_LLMOBS_ML_APPDD_LLMOBS_AGENTLESS_ENABLED!DD_LLMOBS_INSTRUMENTED_PROXY_URLSc                 S   s   t |  dS r1  )r2  r   r   r   r   r   r   r     s    DD_INJECT_FORCE_DD_PY_SSI_INJECTDD_INJECTION_ENABLED(DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED%DD_TRACE_SAFE_INSTRUMENTATION_ENABLED"DD_TRACE_RESOURCE_RENAMING_ENABLED)r   r   5DD_TRACE_RESOURCE_RENAMING_ALWAYS_SIMPLIFIED_ENDPOINT.DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED1DD_TRACE_EXPERIMENTAL_LONG_RUNNING_FLUSH_INTERVALg      ^@9DD_TRACE_EXPERIMENTAL_LONG_RUNNING_INITIAL_FLUSH_INTERVALg      $@!_DD_APM_TRACING_AGENTLESS_ENABLEDzAPM Agentless enabled: sampling, rate limits, health metrics, and client-side stats are disabled. Hostnames will be resolved by ddtrace; spans will be sent directly to the Datadog intake, bypassing the agent.r   )r   ENDPOINT_FETCHED_CONFIG_from_endpointr   _config_integration_configsr   r!   _debug_mode_startup_logs_enabledr   r   _trace_rate_limitr   r   r   _partial_flush_enabled_partial_flush_min_spansr'   r   _http_remote_config_enabledfloat_remote_config_poll_interval
_trace_apierrorr   _trace_writer_buffer_sizer   _trace_writer_payload_sizer   _trace_writer_interval_secondsr   _trace_writer_connection_reuse_trace_writer_log_err_payload_trace_writer_native_trace_agent_urlr   _agent_timeout_seconds_span_traceback_max_size_client_ip_header_retrieve_client_ip!_propagation_http_baggage_enabledr   getr  r  _is_user_provided_servicer%   sysargv_inferred_base_servicer   r   r   r2  _extra_servicesr$  r  _http_server_extra_services_sent_extra_services_queuer   ddtrace.internal.ipcr%  _unparsed_service_mappingr"   service_mapping_report_hostname_health_metrics_enabled_telemetry_enabled_telemetry_heartbeat_interval _telemetry_dependency_collectionr   _runtime_metrics_enabled#_runtime_metrics_runtime_id_enabled_experimental_features_enabledosenvironr#   r    _native_configset_128_bit_trace_id_enabled!_128_bit_trace_id_logging_enabled_sampling_rules_sampling_rules_filer	   _lower_propagation_behavior_extractr
   r   r   _propagation_style_extractdebugr   _propagation_style_inject_propagation_extract_first_baggage_tag_keys_x_datadog_tags_max_length_x_datadog_tags_enabled_raiseversion_info_trace_compute_stats_data_streams_enabled_http_client_tag_query_string0DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP_DEFAULT)_global_query_string_obfuscation_disabled!_obfuscation_query_string_pattern_http_tag_query_stringrecompileencode	Exception _ci_visibility_agentless_enabled_ci_visibility_agentless_url-_ci_visibility_intelligent_testrunner_enabled_ci_visibility_log_level_test_session_name._test_visibility_early_flake_detection_enabled_otel_trace_enabled_otel_metrics_enabled_otel_logs_enabled_otel_enabled_trace_methods_dd_api_key_dd_app_key_dd_site_llmobs_enabled_llmobs_sample_rate_llmobs_ml_app_llmobs_agentless_enabled_llmobs_instrumented_proxy_urls_inject_force_lib_was_injected_inject_enabled _inferred_proxy_services_enabled#_trace_safe_instrumentation_enabled _trace_resource_renaming_enabled3_trace_resource_renaming_always_simplified_endpoint_process_tags_enabled_long_running_flush_interval$_long_running_initial_flush_interval_trace_agentless_enabledsetattr)r   partial_flush_min_spansr%  x_datadog_tags_max_lengthtrace_compute_stats_default(dd_trace_obfuscation_query_string_regexpr   r   r   r     s  

























zConfig.__init__c                 C   s   t  S r   )r  get_128_bit_trace_id_enabledr   r   r   r   _128_bit_trace_id_enabled  s   z Config._128_bit_trace_id_enabledr   c                 C   s   t t| d S r   )r  r  r  r   r   r   r   r    s   c                 C   sl   || j v r| j |  S || jv r| j| S |tv r't| || j|< | j| S tt|  d| d| d)Nz object has no attribute , z is not a valid configuration)rs  r   rt  INTEGRATION_CONFIGSr(   AttributeErrortype)r   namer   r   r   __getattr__  s   



zConfig.__getattr__service_namec                 C   sB   | j d u rd S || jks|| jv rd S | j | | j| d S r   )r  r  r  putadd)r   r  r   r   r   _add_extra_service  s   
zConfig._add_extra_servicec                 C   sX   | j d u rt S | jt| j  dh  t| jdkr)| j  t| jdks| jS )Nr   @   )r  r2  r  update	snatchalllenpopr   r   r   r   _get_extra_services  s   

zConfig._get_extra_servicesTc                 C   sb   |t vrtd|| dS t| |}t|}|r&t| |t||| j|< dS t| ||| j|< dS )aS  Internal API that registers an integration with given default
        settings.

        :param str integration: The integration name (i.e. `requests`)
        :param dict settings: A dictionary that contains integration settings;
            to preserve immutability of these values, the dictionary is copied
            since it contains integration defaults.
        :param bool merge: Whether to merge any existing settings with those provided,
            or if we should overwrite the settings with those provided;
            Note: when merging existing settings take precedence.
        zO%s not found in INTEGRATION_CONFIGS, the following settings will be ignored: %sN)r  r   r  getattrr   r(   r   rt  )r   integrationsettingsmergeexistingr   r   r   _add  s   
	zConfig._addheader_namec                 C   s   | j |S r   )rz  _header_tag_name)r   r  r   r   r   r    s   zConfig._header_tag_namec                 C   s>   | j r| j | jkr| js|dur|S | j S | j dur| j S |S )z
        Returns the globally configured service or the default if none is configured.

        :param default: the default service to use if none is configured or
            found.
        :type default: str
        :rtype: str|None
        N)r  r  r  )r   r   r   r   r   _get_service  s   zConfig._get_servicec                 C   sD   | j }d| j }d| j }|j d|j d| d| S )Nr  .z integration_configs=z rc_configs=)r   joinrt  keysrs  r   r   )r   clsintegrations
rc_configsr   r   r   r   ,  s   zConfig.__repr__r   c                    sP   |dv rt | j| ||S || jv r| j| |d d S t | j| ||S )N)rs  rr  r   )superr   __setattr__rs  r   )r   r   r   r   r   r   r  2  s   
zConfig.__setattr__c                 C   s   t  | _d S r   )r   rs  r   r   r   r   _reset;  s   zConfig._resetc                 C   s   |  S r   )r   r   r   r   r   r  >  s   zConfig._lower)r   N)Tr   )r   r   r   r   objectr  r   r   r  r  r   r   r  r   r  r2  r  r  r   r   r  r  r   r  r  r  __classcell__r   r   r  r   r     s*    
  

%

	r   )Rcopyr   r  r  r  typingr   r   r   r   r   ddtrace.internalr   ddtrace.internal.constantsr	   r
   r   r   r   r   r   r   r   r   r   ddtrace.internal.loggerr   r   ddtrace.internal.nativer   r  ddtrace.internal.schemar   ddtrace.internal.serverlessr   r   r   ddtrace.internal.telemetryr   r   r   r   r   ddtrace.internal.utils.cacher   #ddtrace.internal.utils.deprecationsr    ddtrace.internal.utils.formatsr!   r"   ddtrace.vendor.debtcollectorr#   r  r%   endpoint_configr&   httpr'   r  r(   r   r   rq  r  	frozensetr  r   r   r   r   r   r   r   r   r|  r  r   r   r   r   r  r   r   r   r   r   <module>   sx    /m1";&   
<