
    fl^i                     P   d 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	Zd
ZddededefdZ eee      Z ej,                  e      Z	 ddlmZ dZddde dZdeddZedd       Z ddZ!d Z"d dZ#d!dZ$y# e$ r ej;                  d       d
ZY Bw xY w)"z{Manages OpenTelemetry tracing span creation and handling. This is a PREVIEW FEATURE: Coverage and functionality may change.    N)contextmanager)urlparse)
exceptions)retry)__version__)ConditionalRetryPolicy$ENABLE_GCS_PYTHON_CLIENT_OTEL_TRACESFnamedefaultreturnc                     t         j                  j                  | d       }||S t        |      j	                         j                         dv S )N>   1onyestrue)osenvirongetstrstriplower)r
   r   vals      i/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/google/cloud/storage/_opentelemetry_tracing.py_parse_bool_envr       s@    
**..t
$C
{s8>>!!#'AAA    )traceTzThis service is instrumented using OpenTelemetry. OpenTelemetry or one of its components could not be imported; please add compatible versions of opentelemetry-api and opentelemetry-instrumentation packages in order to get Storage Tracing data.CloudStoragehttpzgcloud-python/)zrpc.servicez
rpc.systemzuser_agent.originalstoragezgoogleapis/python-storage)zgcp.client.servicezgcp.client.versionzgcp.client.repoc              #     K   t         rt        sd yt        j                  t              }t        ||||      }|j                  | t        j                  j                  |      5 }	 | 	 ddd       y# t        j                  $ rS}|j                  t        j                  t        j                  j                               |j                  |        d}~ww xY w# 1 sw Y   yxY ww)zCreates a context manager for a new span and set it as the current span
    in the configured tracer. If no configuration exists yields None.N)r
   kind
attributes)HAS_OPENTELEMETRYenable_otel_tracesr   
get_tracer__name___get_final_attributesstart_as_current_spanSpanKindCLIENTapi_exceptionsGoogleAPICallError
set_statusStatus
StatusCodeERRORrecord_exception)	r
   r"   clientapi_requestr   tracerfinal_attributesspanerrors	            r   create_trace_spanr8   H   s      $6
h'F,ZeT		%	%--:J 
& 
 		J	 
 00 	OOELL)9)9)?)?@A!!%(	 s=   A%C,'C )A7.	C,7C
ACCC  C)%C,c                    t         j                         }|j                  t               |r|j                  t	        ||             t        |t        j                        r|j                  t        |             t        |t              r/|j                  t        |j                  |j                               | r|j                  |        |j                         D ci c]  \  }}|	|| }}}|S c c}}w N)_default_attributescopyupdate_cloud_trace_adoption_attrs_set_api_request_attr
isinstance	api_retryRetry_set_retry_attrr   retry_policyconditional_predicateitems)r"   r2   r3   r   collected_attrkvr5   s           r   r'   r'   ^   s    (--/N563KHI%)oe45%/0E..0K0KL	
 j))7)=)=)?QA1=1QQ Rs    
C5+C5c                 D   i }| j                  d      r| j                  d      |d<   | j                  d      rF|j                  j                  | j                  d            }|j                  t	        |d             d| v rt        | j                  d            |d<   |S )Nmethodzhttp.request.methodpathT)strip_querytimeoutzconnect_timeout,read_timeout)r   _connectionbuild_api_urlr=   &_get_opentelemetry_attributes_from_urlr   )requestr2   attrfull_urls       r   r?   r?   o   s    D{{8&-kk(&;"#{{6%%33GKK4GH:8QUVWG/27;;y3I/J+,Kr   c           
          |r|n| j                   }d| j                   d| j                   d| j                   d| j                   d| 
}d|iS )N
multiplierz	/deadlinez/maxz/initialz
/predicater   )
_predicate_multiplier	_deadline_maximum_initial)r   rE   	predicate
retry_infos       r   rC   rC   {   sm    )>%EDTDTIe//0	%//9J$u~~N^^fglgugufv  wA  BK  AL  MJZ  r   c                 &   t        |       }|j                  }d|v r|j                  dd      d   }d|v r&|j                  d      s|j                  dd      d   }||j                  |j
                  |j                  d}|s|j                  |d<   |S )z<Helper to assemble OpenTelemetry span attributes from a URL.@   :]r   )zserver.addresszserver.portz
url.schemezurl.pathz	url.query)r   netlocsplitendswithportschemerL   query)urlrM   urc   r"   s        r   rQ   rQ      s    AXXF f}c1%a(
f}V__S1c1%a( !vvhhFF	J "#''
;r   )F)NNNNr:   )T)%__doc__loggingr   
contextlibr   urllib.parser   google.api_corer   r+   r   rA   google.cloud.storager   google.cloud.storage.retryr   ENABLE_OTEL_TRACES_ENV_VAR!_DEFAULT_ENABLE_OTEL_TRACES_VALUEr   boolr   r$   	getLoggerr&   loggeropentelemetryr   r#   ImportErrordebugr;   r>   r8   r'   r?   rC   rQ    r   r   <module>r{      s   B  	 % ! 8 . , = D $) !B# B B B % A  
		8	$# "+K=9  $%2   *"	!a  
LL	 s   B
 
B%$B%