a [dgJR@sddlZddlZddlZddlZddlZddlZzddlmZWney^ddl mZYn0ddl m Z ddl m Z mZmZmZmZmZddlmZmZmZeeZdZdZGd d d eZdS) N)Thread)DistlibException)HTTPBasicAuthHandlerRequestHTTPPasswordMgrurlparse build_opener string_types)cached_propertyzip_dir ServerProxyzhttps://pypi.org/pypipypic@seZdZdZd)ddZddZddZd d Zd d Zd dZ ddZ d*ddZ d+ddZ d,ddZ d-ddZddZd.ddZd/dd Zd0d!d"Zd#d$Zd%d&Zd1d'd(ZdS)2 PackageIndexs.----------ThIs_Is_tHe_distlib_index_bouNdaRY_$Nc Cs|pt|_|t|j\}}}}}}|s<|s<|s<|dvrJtd|jd|_d|_d|_d|_t t j dZ}dD]D} z,t j | dg||d} | dkr| |_WqWqttyYqt0qtWdn1s0YdS)N)httphttpszinvalid repository: %sw)gpgZgpg2z --versionstdoutstderrr) DEFAULT_INDEXurlread_configurationrrpassword_handler ssl_verifierrgpg_homeopenosdevnull subprocess check_callOSError) selfrschemenetlocpathparamsqueryfragZsinksrcr,C/usr/local/lib/python3.9/site-packages/pip/_vendor/distlib/index.py__init__$s(    zPackageIndex.__init__cCs&ddlm}ddlm}|}||S)Nr) Distribution) PyPIRCCommand)Zdistutils.corer/Zdistutils.configr0)r#r/r0dr,r,r-_get_pypirc_commandAs  z PackageIndex._get_pypirc_commandcCsR|}|j|_|}|d|_|d|_|dd|_|d|j|_dS)Nusernamepasswordrealmr repository)r2rr6Z _read_pypircgetr3r4r5)r#cZcfgr,r,r-rKs  zPackageIndex.read_configurationcCs$||}||j|jdSN)check_credentialsr2Z _store_pypircr3r4)r#r8r,r,r-save_configurationZszPackageIndex.save_configurationcCs\|jdus|jdurtdt}t|j\}}}}}}||j||j|jt||_ dS)Nz!username and password must be set) r3r4rrrrZ add_passwordr5rr)r#Zpm_r%r,r,r-r:fs zPackageIndex.check_credentialscCs\|||}d|d<||g}||}d|d<||g}||S)NZverify:actionsubmit)r:validatetodictencode_requestitems send_request)r#metadatar1requestresponser,r,r-registerrs  zPackageIndex.registercCsF|}|sq:|d}||td||fq|dS)Nutf-8z%s: %s)readlinedecoderstripappendloggerdebugclose)r#namestreamZoutbufr*r,r,r-_readers  zPackageIndex._readerc Cs|jdddg}|dur|j}|r.|d|g|durD|gdt}tj|tj|d}|ddd |d ||gt d d |||fS) N --status-fd2--no-tty --homedir)z--batchz--passphrase-fd0z.ascz --detach-signz--armorz --local-userz--output invoking: %s ) rrextendtempfilemkdtemprr&joinbasenamerMrN)r#filenamesigner sign_passwordkeystorecmdZtdZsfr,r,r-get_sign_commands zPackageIndex.get_sign_commandc Cstjtjd}|dur tj|d<g}g}tj|fi|}t|jd|j|fd}|t|jd|j|fd}||dur|j ||j | | | |j ||fS)Nrstdinr)targetargsr)r PIPEPopenrrRrstartrrewriterOwaitr] returncode) r#rcZ input_datakwargsrrpt1t2r,r,r- run_commands&    zPackageIndex.run_commandc CsD|||||\}}|||d\}}} |dkr@td||S)NrHrz&sign command failed with error code %s)rdrrencoder) r#r_r`rarbrcsig_filer+rrr,r,r- sign_files  zPackageIndex.sign_filesdistsourcec CsR|tj|s td|||}d} |rZ|jsJt dn| ||||} t |d} | } Wdn1s0Yt | } t | } |dd||| | ddtj|| fg}| r8t | d} | }Wdn1s0Y|dtj| |fttj| |||}||S) Nz not found: %sz)no signing program available - not signedrbZ file_upload1)r=Zprotocol_versionfiletype pyversion md5_digest sha256_digestcontentZ gpg_signature)r:rr&existsrr?r@rrMwarningrurreadhashlibmd5 hexdigestZsha256updater^rLshutilrmtreedirnamerArBrC)r#rDr_r`rarzr{rbr1rtfZ file_datar|r}filesZsig_datarEr,r,r- upload_filesD     & (zPackageIndex.upload_filec Cs|tj|s td|tj|d}tj|sFtd|||j|j }}t | }dd|fd|fg}d||fg}| ||} | | S)Nznot a directory: %rz index.htmlz not found: %r)r=Z doc_uploadrPversionr~)r:rr&isdirrr]rr?rPrr getvaluerArC) r#rDZdoc_dirfnrPrZzip_datafieldsrrEr,r,r-upload_documentation(s         z!PackageIndex.upload_documentationcCsT|jdddg}|dur|j}|r.|d|g|d||gtdd||S)NrSrTrUrVz--verifyrXrY)rrrZrMrNr])r#signature_filename data_filenamerbrcr,r,r-get_verify_commandDszPackageIndex.get_verify_commandcCsH|jstd||||}||\}}}|dvr@td||dkS)Nz0verification unavailable because gpg unavailable)rrz(verify command failed with error code %sr)rrrrr)r#rrrbrcr+rrr,r,r-verify_signature\szPackageIndex.verify_signaturec Cs|durd}tdn6t|ttfr0|\}}nd}tt|}td|t|d}|t |}z| } d} d} d} d} d| vrt | d } |r|| | | | | }|sq| t |7} |||r||| d 7} |r|| | | qW|n |0Wdn1s 0Y| dkrN| | krNtd | | f|r|}||krztd ||||ftd |dS)NzNo digest specifiedrzDigest specified: %swbi rzcontent-lengthzContent-Lengthrz1retrieval incomplete: got only %d out of %d bytesz.%s digest mismatch for %s: expected %s, got %szDigest verified: %s)rMrN isinstancelisttuplegetattrrrrCrinfointrlenrkrrOrr)r#rZdestfiledigestZ reporthookZdigesterZhasherZdfpZsfpheaders blocksizesizerZblocknumblockactualr,r,r- download_fileus\          4 zPackageIndex.download_filecCs:g}|jr||j|jr(||jt|}||Sr9)rrLrr r)r#Zreqhandlersopenerr,r,r-rCs  zPackageIndex.send_requestc Csg}|j}|D]L\}}t|ttfs*|g}|D]*}|d|d|dd|dfq.q|D].\}} } |d|d|| fdd| fq`|d|ddfd|} d|} | tt| d} t |j | | S) Ns--z)Content-Disposition: form-data; name="%s"rHz8Content-Disposition: form-data; name="%s"; filename="%s"s smultipart/form-data; boundary=)z Content-typezContent-length) boundaryrrrrZrsr]strrrr)r#rrpartsrkvaluesvkeyr_valuebodyctrr,r,r-rAsD     zPackageIndex.encode_requestcCsNt|trd|i}t|jdd}z|||p.dW|dS|d0dS)NrPg@)timeoutandrO)rr r rsearch)r#ZtermsoperatorZ rpc_proxyr,r,r-rs  zPackageIndex.search)N)N)N)N)NNrvrwN)N)N)NN)N)__name__ __module__ __qualname__rr.r2rr;r:rGrRrdrrrurrrrrrCrArr,r,r,r-rs0      #  9   M+r)rloggingrrr r[ threadingr ImportErrorZdummy_threadingrcompatrrrrr r utilr r r getLoggerrrMrZ DEFAULT_REALMobjectrr,r,r,r-s