dbfdg 3 wh@sddlZddlZddlZddlmZddlZddlmZmZddlmZddlm Z ddlm Z ddl m Z m Z mZmZmZd d Zdd d ZddZddZdddZddZddZeZdS)N)SSLError)config constants) log_utils)utils)errors)Request std_urlopen HTTPErrorURLErrorhttplibc Ost|dr|j}n |}t|}|jdi}|jtjtjdx |jD]\}}|j ||qJWt j dj ||yltj rd|krtj|d<tj rttddrtj}d|_tj|_||d<t|f||St|f||Stk r.}z0|jd krtj|j|j|j|j|jWYdd}~Xn~t k r}z`|j!rt|j!d d r|j!d j"t"j#krtj|d t$|ddd j |||_%||_WYdd}~XnXdS) N get_full_urlheaders)z KC-VersionzKC-Patch-Versionz#Requesting url: `{0}`. Headers: {1}timeoutHAS_SNIFcontextirerrnozRequest for `{0}` failed: {1})&hasattrrr popupdaterVERSIONKC_PATCH_VERSIONitems add_headerrlogdebugformatPY2_6r HTTP_TIMEOUTCHECK_SSL_CERTSgetattrsslcreate_default_contextcheck_hostname CERT_NONE verify_moder r coderNotFoundurlmsghdrsfpr argsrENOENTstrreason) r(r,kwargsZ request_urlrheadervaluectxexr50/usr/libexec/kcare/python/kcarectl/http_utils.py urlopen_bases>      .r7Tcsfdd}|S)Ncsbt|tro|jdkSt|ttjttjfr2dSt |dr^t |j dkr^|j dt j kr^dSdS)NiTr,r) isinstancer r&r r HTTPExceptionrsocketrrlenr,rZ ECONNRESET)estate) retry_on_500r5r6check_functionDs  (z3check_urlopen_retry_factory..check_functionr5)r?r@r5)r?r6check_urlopen_retry_factoryCs rAcCst|dr|j}|jdS)Nrzfile:)rr startswith)r(r5r5r6 is_local_urlPs rCcOsV|jdd}|jdtj}t|r2t|f||Stjt|d|dt|f||S)Nr?T retry_count)r?)count)rr RETRY_COUNTrCr7rretryrA)r(r,r0r?rDr5r5r6urlopenVs  rHcCsHt||d}tj r*|r*|jddj|tj rD|rD|jtj||S)N)method Authorizationz Basic {0})r rUPDATE_FROM_LOCALrrrAUTH_TOKEN_HEADER)r(Z auth_stringZ auth_tokenrIrequestr5r5r6 http_request^s    rNcCs<|dkrtjdptjdS|dkr8tjdp6tjdSdS)NhttpZ http_proxyZ HTTP_PROXYhttpsZ https_proxyZ HTTPS_PROXY)osgetenv)schemer5r5r6get_proxy_from_envisrTcCsttdpttdS)NrOrP)boolrTr5r5r5r6 proxy_is_usedpsrV)T)NN)rrQr!rr;rrrrrpy23r r r r r r7rArCrHrNrTrVZcheck_urlopen_retryr5r5r5r6s"    1