Warning: session_start(): Session cannot be started after headers have already been sent in /home/tvrreohg/public_html/manga.php on line 13
3 ÝPfiÑã@s>ddlZddlmZddlZddlZddlmZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZy ddlZWnek r”dZYnXddlZddlZddlZddlZddlZy ddlZWnek ræddlZYnXddlZddlmZddlmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/e j0e1ƒZ2dZ3e j4e3ƒZ5dZ6d e6d Z7e6d Z8d Z9d e9de8de3d e9de8dZ:dZ;de:de;de:dZde6de>de<dZ?e j4e?ƒZ@de9de8d ZAe j4eAƒZBdd „ZCd!d"„ZDd#d$„ZEd%d&„ZFd¡d'd(„ZGd)d*„ZHd+d,„ZId-d.„ZJejKd/d0„ƒZLejKd1d2„ƒZMejKd¢d4d5„ƒZNGd6d7„d7eOƒZPd8d9„ZQGd:d;„d;eOƒZRdd?„d?eOƒZTe j4d@e jUƒZVdAdB„ZWd£dCdD„ZXdEdF„ZYdGdH„ZZdIdJ„Z[dKdL„Z\dMdN„Z]e j4dOe j^ƒZ_e j4dPƒZ`d¤dQdR„Zae j4dSƒZbdTdU„ZcdVdW„ZddXdY„ZedZZfd[d\„Zgd]d^„ZhGd_d`„d`eOƒZiGdadb„dbeOƒZjGdcdd„ddeOƒZkd¥Zld¦dmdn„Zmdodp„Znd§ZoGdwdx„dxeOƒZpe j4dyƒZqe j4dzƒZre j4d{ƒZsd|d}„Zd~d„Zte�r\dd€lmuZvmwZwmxZxGd�d‚„d‚e$jyƒZyGdƒd„„d„evƒZuGd…d†„d†eue'ƒZzej{dd‡…Z|e|d¨k�ržGd‰dŠ„dŠe$j}ƒZ}e�ržGd‹dŒ„dŒe$j~ƒZ~Gd�dŽ„dŽe%jƒZe�rÈGd�d�„d�e%j€ƒZ€Gd‘d’„d’e%j�ƒZ�d“d”„Z‚Gd•d–„d–eOƒZƒGd—d˜„d˜eƒƒZ„Gd™dš„dšeƒƒZ…Gd›dœ„dœe(ƒZ†Gd�dž„džeOƒZ‡dŸd „ZˆdS)©éN)Údeque)Úiglobé)ÚDistlibException)Ú string_typesÚ text_typeÚshutilÚ raw_inputÚStringIOÚcache_from_sourceÚurlopenÚurljoinÚhttplibÚ xmlrpclibÚ splittypeÚ HTTPHandlerÚBaseConfiguratorÚ valid_identÚ ContainerÚ configparserÚURLErrorÚZipFileÚfsdecodeÚunquotez\s*,\s*z (\w|[.-])+z(\*|:(\*|\w+):|ú)z\*?z([<>=!~]=)|[<>]ú(z)?\s*(z)(z)\s*(z))*z(from\s+(?P.*))z \(\s*(?Pú|z)\s*\)|(?Pz\s*)z)*z \[\s*(?Pz)?\s*\]z(?Pz \s*)?(\s*z)?$z(?Pz )\s*(?Pc sîdd„‰d}tj|ƒ}|rê|jƒ}|d}|dp8|d}|dsHd}nd}|djƒ}|snd}d}|d}nL|dd kr‚d |}tj|ƒ} ‡fd d „| Dƒ}d |djdd „|Dƒƒf}|dsÈd} ntj|dƒ} t ||| |||d�}|S)NcSs|jƒ}|d|dfS)NÚopZvn)Ú groupdict)ÚmÚd©r!ú/usr/lib/python3.6/util.pyÚget_constraintYsz)parse_requirement..get_constraintZdnZc1Zc2ZdirefÚrz<>!=z~=csg|] }ˆ|ƒ‘qSr!r!)Ú.0r)r#r!r"ú qsz%parse_requirement..z%s (%s)z, cSsg|] }d|‘qS)z%s %sr!)r%Zconr!r!r"r&rsZex)ÚnameZ constraintsÚextrasZ requirementÚsourceÚurl) ÚREQUIREMENT_REÚmatchrÚstripÚRELOP_IDENT_REÚfinditerÚjoinÚCOMMA_REÚsplitr) ÚsÚresultrr r'Zconsr*ZconstrZrsÚiteratorr(r!)r#r"Úparse_requirementWs4      r6cCs´dd„}i}x¢|D]š\}}}tjj||ƒ}x€t|ƒD]t}tjj||ƒ} x`t| ƒD]T} ||| ƒ} |dkrt|j| dƒqP||| ƒ} |jtjjdƒjdƒ} | d| || <qPWq4WqW|S)z%Find destinations for resources filescSsD|jtjjdƒ}|jtjjdƒ}|j|ƒs.t‚|t|ƒd…jdƒS)Nú/)ÚreplaceÚosÚpathÚsepÚ startswithÚAssertionErrorÚlenÚlstrip)Úbaser:r!r!r"Ú get_rel_pathsz)get_resources_dests..get_rel_pathNr7)r9r:r0rÚpopr8r;Úrstrip)Zresources_rootZrulesrAZ destinationsr@ÚsuffixÚdestÚprefixZabs_baseZabs_globZabs_pathZ resource_fileZrel_pathZrel_destr!r!r"Úget_resources_dests|s  rGcCs(ttdƒrd}ntjttdtjƒk}|S)NZ real_prefixTÚ base_prefix)ÚhasattrÚsysrFÚgetattr)r4r!r!r"Úin_venv—s rLcCs$tjjtjƒ}t|tƒs t|ƒ}|S)N)r9r:ÚnormcaserJÚ executableÚ isinstancerr)r4r!r!r"Úget_executable¡s  rPcCsT|}xJt|ƒ}|}| r |r |}|r|djƒ}||kr:P|rd|||f}qW|S)Nrz %c: %s %s)r Úlower)ÚpromptZ allowed_charsZ error_promptÚdefaultÚpr3Úcr!r!r"Úproceed±s  rVcCs<t|tƒr|jƒ}i}x |D]}||kr||||<qW|S)N)rOrr2)r Úkeysr4Úkeyr!r!r"Úextract_by_keyÁs  rYcCsˆtjddkrtjdƒ|ƒ}|jƒ}t|ƒ}yrtj|ƒ}|ddd}xR|jƒD]F\}}x<|jƒD]0\}}d||f}t |ƒ} | dk sŒt ‚| ||<qdWqRW|St k r¾|j ddƒYnXdd „} t jƒ} y| | |ƒWn<t jk �r|jƒtj|ƒ}t|ƒ}| | |ƒYnXi}xb| jƒD]V} i|| <}xB| j| ƒD]4\} }d| |f}t |ƒ} | dk �spt ‚| || <�qFW�q*W|S) Nrézutf-8Ú extensionszpython.exportsÚexportsz%s = %scSs$t|dƒr|j|ƒn |j|ƒdS)NÚ read_file)rIr]Zreadfp)ÚcpÚstreamr!r!r"Ú read_streamÞs  z!read_exports..read_stream)rJÚ version_infoÚcodecsÚ getreaderÚreadr ÚjsonÚloadÚitemsÚget_export_entryr=Ú ExceptionÚseekrÚ ConfigParserZMissingSectionHeaderErrorÚcloseÚtextwrapÚdedentZsections)r_ÚdataZjdatar4ÚgroupZentriesÚkÚvr3Úentryr`r^rXr'Úvaluer!r!r"Ú read_exportsÊsD      rucCs°tjddkrtjdƒ|ƒ}tjƒ}x||jƒD]p\}}|j|ƒx\|jƒD]P}|j dkr`|j }nd|j |j f}|j rŠd|dj |j ƒf}|j ||j|ƒqJWq.W|j|ƒdS)NrrZzutf-8z%s:%sz%s [%s]z, )rJrarbÚ getwriterrrkrgZ add_sectionÚvaluesrDrFÚflagsr0Úsetr'Úwrite)r\r_r^rqrrrsr3r!r!r"Ú write_exportsùs  r{c cs$tjƒ}z |VWdtj|ƒXdS)N)ÚtempfileÚmkdtemprÚrmtree)Ztdr!r!r"Útempdir s rc cs.tjƒ}ztj|ƒdVWdtj|ƒXdS)N)r9ÚgetcwdÚchdir)r Úcwdr!r!r"r�s   r�éc cs.tjƒ}ztj|ƒdVWdtj|ƒXdS)N)ÚsocketZgetdefaulttimeoutZsetdefaulttimeout)ZsecondsZctor!r!r"Úsocket_timeouts   r…c@seZdZdd„Zddd„ZdS)Úcached_propertycCs ||_dS)N)Úfunc)Úselfr‡r!r!r"Ú__init__)szcached_property.__init__NcCs,|dkr |S|j|ƒ}tj||jj|ƒ|S)N)r‡ÚobjectÚ __setattr__Ú__name__)rˆÚobjÚclsrtr!r!r"Ú__get__.s  zcached_property.__get__)N)rŒÚ __module__Ú __qualname__r‰r�r!r!r!r"r†(sr†cCs‚tjdkr|S|s|S|ddkr.td|ƒ‚|ddkrFtd|ƒ‚|jdƒ}xtj|krj|jtjƒqRW|svtjStjj|ŽS)aÐReturn 'pathname' as a name that will work on the native filesystem. The path is split on '/' and put back together again using the current directory separator. Needed because filenames in the setup script are always supplied in Unix style, and have to be converted to the local convention before we can actually use them in the filesystem. Raises ValueError on non-Unix-ish systems if 'pathname' either starts or ends with a slash. r7rzpath '%s' cannot be absoluterzpath '%s' cannot end with '/'éÿÿÿÿ)r9r;Ú ValueErrorr2ÚcurdirÚremover:r0)ÚpathnameÚpathsr!r!r"Ú convert_path6s       r˜c@s”eZdZd$dd„Zdd„Zdd„Zdd „Zd%d d „Zd&dd„Zdd„Z dd„Z dd„Z dd„Z dd„Z d'dd„Zdd„Zdd„Zd d!„Zd"d#„Zd S)(Ú FileOperatorFcCs||_tƒ|_|jƒdS)N)Údry_runryÚensuredÚ _init_record)rˆršr!r!r"r‰RszFileOperator.__init__cCsd|_tƒ|_tƒ|_dS)NF)ÚrecordryÚ files_writtenÚ dirs_created)rˆr!r!r"rœWszFileOperator._init_recordcCs|jr|jj|ƒdS)N)r�ržÚadd)rˆr:r!r!r"Úrecord_as_written\szFileOperator.record_as_writtencCsHtjj|ƒs tdtjj|ƒƒ‚tjj|ƒs0dStj|ƒjtj|ƒjkS)aÎTell if the target is newer than the source. Returns true if 'source' exists and is more recently modified than 'target', or if 'source' exists and 'target' doesn't. Returns false if both exist and 'target' is the same age or younger than 'source'. Raise PackagingFileError if 'source' does not exist. Note that this test is not very accurate: files created in the same second will have the same "age". zfile '%r' does not existT)r9r:ÚexistsrÚabspathÚstatÚst_mtime)rˆr)Útargetr!r!r"Únewer`s  zFileOperator.newerTcCs�|jtjj|ƒƒtjd||ƒ|js‚d}|rftjj|ƒrDd|}n"tjj|ƒrftjj |ƒ rfd|}|rvt |dƒ‚t j ||ƒ|j |ƒdS)z8Copy a file respecting dry-run and force flags. zCopying %s to %sNz%s is a symlinkz%s is a non-regular filez which would be overwritten)Ú ensure_dirr9r:ÚdirnameÚloggerÚinforšÚislinkr¢Úisfiler“rZcopyfiler¡)rˆZinfileÚoutfileÚcheckÚmsgr!r!r"Ú copy_filets    zFileOperator.copy_fileNc Cs†tjj|ƒ st‚|jtjj|ƒƒtjd||ƒ|jsx|dkrLt |dƒ}nt j |d|d�}zt j ||ƒWd|j ƒX|j|ƒdS)NzCopying stream %s to %sÚwbÚw)Úencoding)r9r:Úisdirr=r¨r©rªr«ršÚopenrbrZ copyfileobjrlr¡)rˆZinstreamr®r´Z outstreamr!r!r"Ú copy_stream…s  zFileOperator.copy_streamc CsF|jtjj|ƒƒ|js8t|dƒ�}|j|ƒWdQRX|j|ƒdS)Nr²)r¨r9r:r©ršr¶rzr¡)rˆr:roÚfr!r!r"Úwrite_binary_file”s  zFileOperator.write_binary_filec CsL|jtjj|ƒƒ|js>t|dƒ�}|j|j|ƒƒWdQRX|j|ƒdS)Nr²) r¨r9r:r©ršr¶rzÚencoder¡)rˆr:ror´r¸r!r!r"Úwrite_text_file›s  zFileOperator.write_text_filecCsrtjdkstjdkrntjdkrnxN|D]F}|jr®szFileOperator.cCs~tjj|ƒ}||jkrztjj|ƒ rz|jj|ƒtjj|ƒ\}}|j|ƒtj d|ƒ|j shtj |ƒ|j rz|j j|ƒdS)Nz Creating %s)r9r:r£r›r¢r r2r¨rªr«ršÚmkdirr�rŸ)rˆr:r r¸r!r!r"r¨°s    zFileOperator.ensure_dircCsvt|| ƒ}tjd||ƒ|jsh|s0|j||ƒrX|s:d}n|j|ƒsHt‚|t|ƒd…}tj |||dƒ|j |ƒ|S)NzByte-compiling %s to %sT) r rªr«ršr§r<r=r>Ú py_compileÚcompiler¡)rˆr:ÚoptimizeÚforcerFZdpathZdiagpathr!r!r"Ú byte_compile¼s  zFileOperator.byte_compilecCs´tjj|ƒr°tjj|ƒr`tjj|ƒ r`tjd|ƒ|jsBtj |ƒ|j r°||j kr°|j j |ƒnPtjj|ƒrrd}nd}tjd||ƒ|js”tj |ƒ|j r°||j kr°|j j |ƒdS)NzRemoving directory tree at %sÚlinkÚfilezRemoving %s %s)r9r:r¢rµr¬rªÚdebugršrr~r�rŸr•rž)rˆr:r3r!r!r"Úensure_removedÊs"       zFileOperator.ensure_removedcCsHd}x>|sBtjj|ƒr&tj|tjƒ}Ptjj|ƒ}||kr)r'rFrDrx)rˆr!r!r"Ú__repr__!s zExportEntry.__repr__cCsDt|tƒsd}n0|j|jko>|j|jko>|j|jko>|j|jk}|S)NF)rOrår'rFrDrx)rˆÚotherr4r!r!r"Ú__eq__%s     zExportEntry.__eq__N) rŒr�r‘r‰r†rtrærèrŠÚ__hash__r!r!r!r"rås   råzµ(?P(\w|[-.+])+) \s*=\s*(?P(\w+)([:\.]\w+)*) \s*(\[\s*(?P\w+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])? c Csàtj|ƒ}|s0d}d|ks"d|krÜtd|ƒ‚n¬|jƒ}|d}|d}|jdƒ}|dkrf|d}}n"|dkrztd|ƒ‚|jdƒ\}}|d } | dkrºd|ks¨d|kr´td|ƒ‚g} nd d „| jd ƒDƒ} t|||| ƒ}|S) Nú[ú]zInvalid specification '%s'r'Úcallableú:rrrxcSsg|] }|jƒ‘qSr!)r-)r%r¸r!r!r"r&Qsz$get_export_entry..ú,)ÚENTRY_REÚsearchrrÚcountr2rå) Z specificationrr4r r'r:ZcolonsrFrDrxr!r!r"rh7s2    rhc CsÈ|dkr d}tjdkr.dtjkr.tjjdƒ}n tjjdƒ}tjj|ƒrftj|tjƒ}|s¢t j d|ƒn|jddƒ\}}d|kr.|}n|jddƒ\}}|||fS)Nú@rrí)r2)ZnetlocZusernameZpasswordrFr!r!r"Úparse_credentials–srcCstjdƒ}tj|ƒ|S)Né)r9Úumask)r4r!r!r"Úget_process_umask¡s  rcCs>d}d}x$t|ƒD]\}}t|tƒsd}PqW|dk s:t‚|S)NTF)Ú enumeraterOrr=)Úseqr4Úir3r!r!r"Úis_string_sequence¦s  rz3([a-z0-9_]+([.-][a-z_][a-z0-9_]*)*)-([a-z0-9_.+-]+)z -py(\d\.?\d?)cCsÈd}d}t|ƒjddƒ}tj|ƒ}|r@|jdƒ}|d|jƒ…}|r˜t|ƒt|ƒdkr˜tjtj |ƒd|ƒ}|r˜|j ƒ}|d|…||dd…|f}|dkrÄt j|ƒ}|rÄ|jdƒ|jdƒ|f}|S)zw Extract name, version, python version from a filename (no extension) Return name, version, pyver or None Nú ú-rz\brZ) rr8ÚPYTHON_VERSIONrðrpÚstartr>Úrer,ÚescapeÚendÚPROJECT_NAME_AND_VERSION)ÚfilenameZ project_namer4ZpyverrÚnr!r!r"Úsplit_filenameµs"   rz-(?P[\w .-]+)\s*\(\s*(?P[^\s)]+)\)$cCs:tj|ƒ}|std|ƒ‚|jƒ}|djƒjƒ|dfS)zÇ A utility method used to get name and version from a string. From e.g. a Provides-Dist value. :param p: A value in a form 'foo (1.0)' :return: The name and version as a tuple. z$Ill-formed name/version string: '%s'r'Zver)ÚNAME_VERSION_REr,rrr-rQ)rTrr r!r!r"Úparse_name_and_versionÑs  rcCs¾tƒ}t|pgƒ}t|pgƒ}d|kr8|jdƒ||O}x€|D]x}|dkrV|j|ƒq>|jdƒr–|dd…}||kr‚tjd|ƒ||kr¶|j|ƒq>||kr¬tjd|ƒ|j|ƒq>W|S)NÚ*r rzundeclared extra: %s)ryr•r r<rªrø)Z requestedZ availabler4ÚrZunwantedr!r!r"Ú get_extrasàs&        rcCsˆi}yNt|ƒ}|jƒ}|jdƒ}|jdƒs8tjd|ƒntjdƒ|ƒ}tj |ƒ}Wn0t k r‚}ztj d||ƒWYdd}~XnX|S)Nz Content-Typezapplication/jsonz(Unexpected response for JSON request: %szutf-8z&Failed to get external data for %s: %s) r r«Úgetr<rªrÏrbrcrerfriÚ exception)r*r4ZrespZheadersZctÚreaderÚer!r!r"Ú_get_external_dataùs   rz'https://www.red-dove.com/pypi/projects/cCs*d|djƒ|f}tt|ƒ}t|ƒ}|S)Nz%s/%s/project.jsonr)Úupperr Ú_external_data_base_urlr)r'r*r4r!r!r"Úget_project_datas r cCs(d|djƒ||f}tt|ƒ}t|ƒS)Nz%s/%s/package-%s.jsonr)rr rr)r'Úversionr*r!r!r"Úget_package_datas r"c@s(eZdZdZdd„Zdd„Zdd„ZdS) ÚCachezæ A class implementing a cache for resources that need to live in the file system e.g. shared libraries. This class was moved from resources to here because it could be used by other modules, e.g. the wheel module. cCsPtjj|ƒstj|ƒtj|ƒjd@dkr6tjd|ƒtjjtjj |ƒƒ|_ dS)zu Initialise an instance. :param base: The base directory where the cache should be located. é?rzDirectory '%s' is not privateN) r9r:rµrùr¤r¿rªrør£Únormpathr@)rˆr@r!r!r"r‰"s    zCache.__init__cCst|ƒS)zN Converts a resource prefix to a directory name in the cache. )rý)rˆrFr!r!r"Ú prefix_to_dir0szCache.prefix_to_dirc CsŒg}x‚tj|jƒD]r}tjj|j|ƒ}y>tjj|ƒs@tjj|ƒrLtj|ƒntjj|ƒrbt j |ƒWqt k r‚|j |ƒYqXqW|S)z" Clear the cache. ) r9rÚr@r:r0r¬r­r•rµrr~riÚappend)rˆZ not_removedÚfnr!r!r"Úclear6s  z Cache.clearN)rŒr�r‘Ú__doc__r‰r&r)r!r!r!r"r#sr#c@s:eZdZdZdd„Zddd„Zdd„Zd d „Zd d „Zd S)Ú EventMixinz1 A very simple publish/subscribe system. cCs i|_dS)N)Ú _subscribers)rˆr!r!r"r‰KszEventMixin.__init__TcCsD|j}||krt|gƒ||<n"||}|r6|j|ƒn |j|ƒdS)a` Add a subscriber for an event. :param event: The name of an event. :param subscriber: The subscriber to be added (and called when the event is published). :param append: Whether to append or prepend the subscriber to an existing subscriber list for the event. N)r,rr'Ú appendleft)rˆÚeventÚ subscriberr'ÚsubsZsqr!r!r"r Ns  zEventMixin.addcCs,|j}||krtd|ƒ‚||j|ƒdS)z™ Remove a subscriber for an event. :param event: The name of an event. :param subscriber: The subscriber to be removed. zNo subscribers: %rN)r,r“r•)rˆr.r/r0r!r!r"r•bs zEventMixin.removecCst|jj|fƒƒS)z� Return an iterator for the subscribers for an event. :param event: The event to return subscribers for. )Úiterr,r)rˆr.r!r!r"Úget_subscribersnszEventMixin.get_subscribersc Ospg}xT|j|ƒD]F}y||f|ž|Ž}Wn"tk rJtjdƒd}YnX|j|ƒqWtjd||||ƒ|S)a^ Publish a event and return a list of values returned by its subscribers. :param event: The event to publish. :param args: The positional arguments to pass to the event's subscribers. :param kwargs: The keyword arguments to pass to the event's subscribers. z"Exception during event publicationNz/publish %s: args = %s, kwargs = %s, result = %s)r2rirªrr'rÏ)rˆr.ÚargsÚkwargsr4r/rtr!r!r"Úpublishus    zEventMixin.publishN)T) rŒr�r‘r*r‰r r•r2r5r!r!r!r"r+Gs   r+c@s^eZdZdd„Zdd„Zddd„Zdd „Zd d „Zd d „Zdd„Z e dd„ƒZ e dd„ƒZ dS)Ú SequencercCsi|_i|_tƒ|_dS)N)Ú_predsÚ_succsryÚ_nodes)rˆr!r!r"r‰�szSequencer.__init__cCs|jj|ƒdS)N)r9r )rˆÚnoder!r!r"Úadd_node•szSequencer.add_nodeFcCs¾||jkr|jj|ƒ|rºx&t|jj|fƒƒD]}|j||ƒq.Wx&t|jj|fƒƒD]}|j||ƒqVWx&t|jjƒƒD]\}}|sz|j|=qzWx&t|jjƒƒD]\}}|s¢|j|=q¢WdS)N)r9r•ryr7rr8rØrg)rˆr:ZedgesrTr3rqrrr!r!r"Ú remove_node˜s   zSequencer.remove_nodecCs<||ks t‚|jj|tƒƒj|ƒ|jj|tƒƒj|ƒdS)N)r=r7Ú setdefaultryr r8)rˆÚpredÚsuccr!r!r"r ¨s z Sequencer.addcCsˆ||ks t‚y|j|}|j|}Wn tk rDtd|ƒ‚YnXy|j|ƒ|j|ƒWn$tk r‚td||fƒ‚YnXdS)Nz%r not a successor of anythingz%r not a successor of %r)r=r7r8ÚKeyErrorr“r•)rˆr>r?ÚpredsZsuccsr!r!r"r•­s   zSequencer.removecCs||jkp||jkp||jkS)N)r7r8r9)rˆÚstepr!r!r"Úis_stepºszSequencer.is_stepcCsœ|j|ƒstd|ƒ‚g}g}tƒ}|j|ƒxd|r’|jdƒ}||krd||kr�|j|ƒ|j|ƒq0|j|ƒ|j|ƒ|jj|fƒ}|j |ƒq0Wt |ƒS)Nz Unknown: %rr) rCr“ryr'rBr•r r7rÚextendÚreversed)rˆÚfinalr4ZtodoÚseenrBrAr!r!r"Ú get_steps¾s"        zSequencer.get_stepscsVdg‰g‰i‰i‰g‰|j‰‡‡‡‡‡‡‡fdd„‰xˆD]}|ˆkr:ˆ|ƒq:WˆS)Nrc søˆdˆ|<ˆdˆ|<ˆdd7<ˆj|ƒy ˆ|}Wntk rVg}YnXxR|D]J}|ˆkrŠˆ|ƒtˆ|ˆ|ƒˆ|<q^|ˆkr^tˆ|ˆ|ƒˆ|<q^Wˆ|ˆ|krôg}x ˆjƒ}|j|ƒ||krÂPqÂWt|ƒ}ˆj|ƒdS)Nrr)r'riÚminrBÚtuple)r:Z successorsZ successorZconnected_componentZ component)ÚgraphÚindexÚ index_counterÚlowlinksr4ÚstackÚ strongconnectr!r"rPâs.       z3Sequencer.strong_connections..strongconnect)r8)rˆr:r!)rKrLrMrNr4rOrPr"Ústrong_connections×s"  zSequencer.strong_connectionscCsrdg}x8|jD].}|j|}x|D]}|jd||fƒq"WqWx|jD]}|jd|ƒqHW|jdƒdj|ƒS)Nz digraph G {z %s -> %s;z %s;ú}Ú )r7r'r9r0)rˆr4r?rAr>r:r!r!r"Údot s     z Sequencer.dotN)F) rŒr�r‘r‰r;r<r r•rCrHÚpropertyrQrTr!r!r!r"r6�s   3r6ú.tar.gzú.tar.bz2ú.tarú.zipú.tgzú.tbzú.whlTc sf‡‡fdd„}tjjˆƒ‰tˆƒ‰d}|dkr†|jdƒr>d}nH|jdƒrRd}d }n4|jdƒrfd }d }n |jdƒrzd}d}n td|ƒ‚zÊ|dkr¾t|dƒ}|rì|jƒ}xD|D] }||ƒq¬Wn.tj ||ƒ}|rì|j ƒ}x|D] }||ƒqÜW|dk�r6t j ddk�r6x.|j ƒD]"} t| jtƒ�s| jjdƒ| _�qWdd„} | |_|jˆƒWd|�r`|jƒXdS)NcsTt|tƒs|jdƒ}tjjtjjˆ|ƒƒ}|jˆƒ sD|ˆtjkrPt d|ƒ‚dS)Nzutf-8zpath outside destination: %r) rOrÚdecoder9r:r£r0r<r;r“)r:rT)Údest_dirÚplenr!r"Ú check_paths   zunarchive..check_pathú.zipú.whlÚzipú.tar.gzú.tgzZtgzzr:gzú.tar.bz2ú.tbzZtbzzr:bz2z.tarZtarrzUnknown format for %rrrZzutf-8cSsBy tj||ƒStjk r<}ztt|ƒƒ‚WYdd}~XnXdS)z:Run tarfile.tar_fillter, but raise the expected ValueErrorN)ÚtarfileZ tar_filterZ FilterErrorr“Ústr)Úmemberr:Úexcr!r!r"Úextraction_filterPs z$unarchive..extraction_filter)rarb)rdre)rfrg)r9r:r£r>rþr“rZnamelistrhr¶ZgetnamesrJraZ getmembersrOr'rr]rlZ extractallrl) Zarchive_filenamer^Úformatr¯r`ÚarchiverÄÚnamesr'Ztarinforlr!)r^r_r"Ú unarchivesL           rpc Cs†tjƒ}t|ƒ}t|dƒ�b}xZtj|ƒD]L\}}}x@|D]8}tjj||ƒ}||d…} tjj| |ƒ} |j|| ƒq8Wq(WWdQRX|S)z*zip a directory tree into a BytesIO objectr³N) ÚioÚBytesIOr>rr9Úwalkr:r0rz) Z directoryr4ZdlenZzfÚrootrÜrÃr'ZfullZrelrEr!r!r"Úzip_dir`s   rur$ÚKÚMÚGÚTÚPc@sreZdZdZddd„Zdd„Zdd „Zd d „Zd d „Ze dd„ƒZ e dd„ƒZ dd„Z e dd„ƒZ e dd„ƒZdS)ÚProgressZUNKNOWNrédcCs<|dks||kst‚||_|_||_d|_d|_d|_dS)NrF)r=rIÚcurÚmaxÚstartedÚelapsedÚdone)rˆZminvalZmaxvalr!r!r"r‰ws  zProgress.__init__cCsV|j|kst‚|jdks&||jks&t‚||_tjƒ}|jdkrF||_n ||j|_dS)N)rIr=r~r}Útimerr€)rˆZcurvalZnowr!r!r"Úupdates zProgress.updatecCs |dks t‚|j|j|ƒdS)Nr)r=rƒr})rˆZincrr!r!r"Ú increment‰s zProgress.incrementcCs|j|jƒ|S)N)rƒrI)rˆr!r!r"r �s zProgress.startcCs |jdk r|j|jƒd|_dS)NT)r~rƒr�)rˆr!r!r"Ústop‘s  z Progress.stopcCs|jdkr|jS|jS)N)r~Úunknown)rˆr!r!r"Úmaximum–szProgress.maximumcCsD|jr d}n4|jdkrd}n$d|j|j|j|j}d|}|S)Nz100 %z ?? %gY@z%3d %%)r�r~r}rI)rˆr4rrr!r!r"Ú percentagešs zProgress.percentagecCs:|dkr|jdks|j|jkr$d}ntjdtj|ƒƒ}|S)Nrz??:??:??z%H:%M:%S)r~r}rIr‚ZstrftimeZgmtime)rˆZdurationr4r!r!r"Úformat_duration¥szProgress.format_durationcCs‚|jrd}|j}n^d}|jdkr&d}nJ|jdks<|j|jkrBd}n.t|j|jƒ}||j|j}|d|j}d||j|ƒfS)NZDonezETA rrz%s: %sr’)r�r€r~r}rIÚfloatr‰)rˆrFÚtr!r!r"ÚETA®s z Progress.ETAcCsN|jdkrd}n|j|j|j}xtD]}|dkr6P|d}q(Wd||fS)Nrgièg@�@z%d %sB/s)r€r}rIÚUNITS)rˆr4Zunitr!r!r"ÚspeedÁs   zProgress.speedN)rr|)rŒr�r‘r†r‰rƒr„r r…rUr‡rˆr‰rŒrŽr!r!r!r"r{ts     r{z \{([^}]*)\}z[^/\\,{]\*\*|\*\*[^/\\,}]z^[^{]*\}|\{[^}]*$cCs<tj|ƒrd}t||ƒ‚tj|ƒr4d}t||ƒ‚t|ƒS)zAExtended globbing function that supports ** and {opt1,opt2,opt3}.z7invalid glob %r: recursive glob "**" must be used alonez2invalid glob %r: mismatching set marker '{' or '}')Ú_CHECK_RECURSIVE_GLOBrðr“Ú_CHECK_MISMATCH_SETÚ_iglob)Ú path_globr°r!r!r"rÖs    rc cstj|dƒ}t|ƒdkrpt|ƒdks,t|ƒ‚|\}}}xâ|jdƒD](}x"tdj|||fƒƒD] }|Vq\WqBWnªd|kr’x t|ƒD] }|Vq‚Wnˆ|jddƒ\}}|dkr®d}|dkr¼d}n|jdƒ}|jd ƒ}xHtj |ƒD]:\}}} tj j |ƒ}x"ttj j||ƒƒD] } | V�qWqÜWdS) NrrZrîr$z**rßrr7ú\) Ú RICH_GLOBr2r>r=r‘r0Ú std_iglobr?r9rsr:r%) r’Zrich_path_globrFryrDÚitemr:ZradicalÚdirrÃr(r!r!r"r‘ás*       r‘)Ú HTTPSHandlerÚmatch_hostnameÚCertificateErrorc@seZdZdZdZdd„ZdS)ÚHTTPSConnectionNTc CsPtj|j|jf|jƒ}t|ddƒr0||_|jƒtt dƒsp|j rHt j }nt j }t j ||j|j|t j|j d�|_nxt jt jƒ}|jt jO_|jr¢|j|j|jƒi}|j rØt j |_|j|j d�tt ddƒrØ|j|d<|j |f|Ž|_|j oò|j�rLy$t|jjƒ|jƒtjd|jƒWn0tk �rJ|jjtjƒ|jjƒ‚YnXdS) NZ _tunnel_hostFÚ SSLContext)Ú cert_reqsZ ssl_versionÚca_certs)ZcafileZHAS_SNIZserver_hostnamezHost verified: %s) r„Zcreate_connectionÚhostÚportÚtimeoutrKÚsockZ_tunnelrIÚsslržZ CERT_REQUIREDZ CERT_NONEZ wrap_socketZkey_fileZ cert_fileZPROTOCOL_SSLv23rœZoptionsZ OP_NO_SSLv2Zload_cert_chainZ verify_modeZload_verify_locationsÚ check_domainr™Z getpeercertrªrÏršZshutdownZ SHUT_RDWRrl)rˆr¢r�Úcontextr4r!r!r"Úconnect s>      zHTTPSConnection.connect)rŒr�r‘ržr¤r¦r!r!r!r"r›sr›c@s&eZdZd dd„Zdd„Zdd„ZdS) r˜TcCstj|ƒ||_||_dS)N)ÚBaseHTTPSHandlerr‰ržr¤)rˆržr¤r!r!r"r‰0s zHTTPSHandler.__init__cOs$t||Ž}|jr |j|_|j|_|S)a This is called to create a connection instance. Normally you'd pass a connection class to do_open, but it doesn't actually check for a class, and just expects a callable. As long as we behave just as a constructor would have, we should be OK. If it ever changes so that we *must* pass a class, we'll create an UnsafeHTTPSConnection class which just sets check_domain to False in the class definition, and choose which one to pass to do_open. )r›ržr¤)rˆr3r4r4r!r!r"Ú _conn_maker5s zHTTPSHandler._conn_makercCsVy|j|j|ƒStk rP}z&dt|jƒkr>td|jƒ‚n‚WYdd}~XnXdS)Nzcertificate verify failedz*Unable to verify server certificate for %s)Zdo_openr¨rriÚreasonršrŸ)rˆÚreqrr!r!r"Ú https_openEs zHTTPSHandler.https_openN)T)rŒr�r‘r‰r¨r«r!r!r!r"r˜/s r˜c@seZdZdd„ZdS)ÚHTTPSOnlyHandlercCstd|ƒ‚dS)NzAUnexpected HTTP request on what should be a secure connection: %s)r)rˆrªr!r!r"Ú http_openYszHTTPSOnlyHandler.http_openN)rŒr�r‘r­r!r!r!r"r¬Xsr¬ééc@seZdZddd„ZdS)ÚHTTPr$NcKs&|dkr d}|j|j||f|ŽƒdS)Nr)Ú_setupÚ_connection_class)rˆrŸr r4r!r!r"r‰esz HTTP.__init__)r$N)rŒr�r‘r‰r!r!r!r"r°dsr°c@seZdZddd„ZdS)ÚHTTPSr$NcKs&|dkr d}|j|j||f|ŽƒdS)Nr)r±r²)rˆrŸr r4r!r!r"r‰mszHTTPS.__init__)r$N)rŒr�r‘r‰r!r!r!r"r³lsr³c@seZdZddd„Zdd„ZdS)Ú TransportrcCs||_tjj||ƒdS)N)r¡rr´r‰)rˆr¡Ú use_datetimer!r!r"r‰tszTransport.__init__cCsb|j|ƒ\}}}tdkr(t||jd�}n6|j s>||jdkrT||_|tj|ƒf|_|jd}|S)Nr®r¯)r¡rr)r®r¯)Ú get_host_infoÚ _ver_infor°r¡Ú _connectionÚ_extra_headersrZHTTPConnection)rˆrŸÚhÚehZx509r4r!r!r"Úmake_connectionxs zTransport.make_connectionN)r)rŒr�r‘r‰r¼r!r!r!r"r´ss r´c@seZdZddd„Zdd„ZdS)Ú SafeTransportrcCs||_tjj||ƒdS)N)r¡rr½r‰)rˆr¡rµr!r!r"r‰…szSafeTransport.__init__cCsz|j|ƒ\}}}|si}|j|d<tdkr:t|df|Ž}n<|j sP||jdkrl||_|tj|df|Žf|_|jd}|S)Nr¡r®r¯rr)r®r¯)r¶r¡r·r³r¸r¹rr›)rˆrŸrºr»r4r4r!r!r"r¼‰s    zSafeTransport.make_connectionN)r)rŒr�r‘r‰r¼r!r!r!r"r½„s r½c@seZdZdd„ZdS)Ú ServerProxyc Kst|jddƒ|_}|dk r^t|ƒ\}}|jddƒ}|dkr@t}nt}|||d�|d<}||_tjj ||f|ŽdS)Nr¡rµrZhttps)rµÚ transport) rBr¡rrr½r´r¿rr¾r‰) rˆZurir4r¡ÚschemeÚ_rµZtclsr‹r!r!r"r‰šs  zServerProxy.__init__N)rŒr�r‘r‰r!r!r!r"r¾™sr¾cKs.tjddkr|d7}nd|d<t||f|ŽS)NrrZÚbr$Únewline)rJrar¶)r(rÄr4r!r!r"Ú _csv_open®s rÄc@s4eZdZedƒedƒedƒdœZdd„Zdd„Zd S) ÚCSVBaserîú"rS)Z delimiterZ quotecharZlineterminatorcCs|S)Nr!)rˆr!r!r"Ú __enter__½szCSVBase.__enter__cGs|jjƒdS)N)r_rl)rˆrôr!r!r"Ú__exit__ÀszCSVBase.__exit__N)rŒr�r‘riÚdefaultsrÇrÈr!r!r!r"rŶs  rÅc@s(eZdZdd„Zdd„Zdd„ZeZdS)Ú CSVReadercKs\d|kr4|d}tjddkr,tjdƒ|ƒ}||_nt|ddƒ|_tj|jf|jŽ|_dS)Nr_rrZzutf-8r:r) rJrarbrcr_rÄÚcsvrrÉ)rˆr4r_r!r!r"r‰ÅszCSVReader.__init__cCs|S)Nr!)rˆr!r!r"Ú__iter__ÐszCSVReader.__iter__cCsJt|jƒ}tjddkrFx,t|ƒD] \}}t|tƒs"|jdƒ||<q"W|S)NrrZzutf-8)ÚnextrrJrarrOrr])rˆr4rr–r!r!r"rÍÓs   zCSVReader.nextN)rŒr�r‘r‰rÌrÍÚ__next__r!r!r!r"rÊÄs rÊc@seZdZdd„Zdd„ZdS)Ú CSVWritercKs$t|dƒ|_tj|jf|jŽ|_dS)Nr³)rÄr_rËÚwriterrÉ)rˆr(r4r!r!r"r‰Þs zCSVWriter.__init__cCsRtjddkrBg}x*|D]"}t|tƒr0|jdƒ}|j|ƒqW|}|jj|ƒdS)NrrZzutf-8)rJrarOrrºr'rÐÚwriterow)rˆÚrowrr–r!r!r"rÑâs   zCSVWriter.writerowN)rŒr�r‘r‰rÑr!r!r!r"rÏÝsrÏcsHeZdZeejƒZded<d ‡fdd„ Zdd„Zdd „Zd d „Z ‡Z S) Ú ConfiguratorÚ inc_convertZincNcs"tt|ƒj|ƒ|ptjƒ|_dS)N)ÚsuperrÓr‰r9r€r@)rˆÚconfigr@)Ú __class__r!r"r‰õszConfigurator.__init__c s°‡‡fdd„‰ˆjdƒ}t|ƒs*ˆj|ƒ}ˆjddƒ}ˆjdfƒ}|r\t‡fdd„|Dƒƒ}‡‡fdd„ˆDƒ}t|ƒ}|||Ž}|r¬x$|jƒD]\}} t||ˆ| ƒƒq�W|S) Ncszt|ttfƒr*t|ƒ‡fdd„|Dƒƒ}nLt|tƒrld|krHˆj|ƒ}qvi}x(|D]}ˆ||ƒ||<qRWn ˆj|ƒ}|S)Ncsg|] }ˆ|ƒ‘qSr!r!)r%r)Úconvertr!r"r&üszBConfigurator.configure_custom..convert..z())rOrØrJÚtypeÚdictÚconfigure_customrØ)Úor4rq)rØrˆr!r"rØús    z.Configurator.configure_custom..convertz()rßz[]csg|] }ˆ|ƒ‘qSr!r!)r%rÜ)rØr!r"r&sz1Configurator.configure_custom..cs$g|]}t|ƒr|ˆˆ|ƒf‘qSr!)r)r%rq)rÖrØr!r"r&s)rBrìrärJrÚrgÚsetattr) rˆrÖrUZpropsr3rgr4r4rrrr!)rÖrØrˆr"rÛùs     zConfigurator.configure_customcCs4|j|}t|tƒr0d|kr0|j|ƒ|j|<}|S)Nz())rÖrOrÚrÛ)rˆrXr4r!r!r"Ú __getitem__s zConfigurator.__getitem__c CsFtjj|ƒstjj|j|ƒ}tj|ddd��}tj|ƒ}WdQRX|S)z*Default converter for the inc:// protocol.rzutf-8)r´N) r9r:Úisabsr0r@rbr¶rerf)rˆrtr¸r4r!r!r"rÔs  zConfigurator.inc_convert)N) rŒr�r‘rÚrZvalue_convertersr‰rÛrÞrÔÚ __classcell__r!r!)r×r"rÓðs  rÓc@s&eZdZd dd„Zdd„Zdd„ZdS) ÚSubprocessMixinFNcCs||_||_dS)N)ÚverboseÚprogress)rˆrârãr!r!r"r‰+szSubprocessMixin.__init__cCsn|j}|j}xT|jƒ}|sP|dk r0|||ƒq|sBtjjdƒntjj|jdƒƒtjjƒqW|jƒdS)z¨ Read lines from a subprocess' output stream and either pass to a progress callable (if specified) or write progress information to sys.stderr. Nrßzutf-8) rãrâÚreadlinerJÚstderrrzr]Úflushrl)rˆr_r¥rãrâr3r!r!r"r/s zSubprocessMixin.readercKsžtj|ftjtjdœ|—Ž}tj|j|jdfd�}|jƒtj|j|jdfd�}|jƒ|j ƒ|j ƒ|j ƒ|j dk rˆ|j ddƒn|j ršt jjdƒ|S)N)Ústdoutrårç)r¦r3råzdone.Úmainzdone. )Ú subprocessÚPopenÚPIPEÚ threadingZThreadrrçr råÚwaitr0rãrârJrz)rˆÚcmdr4rTZt1Zt2r!r!r"Ú run_commandDs   zSubprocessMixin.run_command)FN)rŒr�r‘r‰rrïr!r!r!r"rá*s rácCstjdd|ƒjƒS)z,Normalize a python package name a la PEP 503z[-_.]+r )r ÚsubrQ)r'r!r!r"Únormalize_nameUsrñ)NN)rƒ)N)N)rVrWrXrYrZr[r\)NT)r$rvrwrxryrz)r®r¯)‰rbÚ collectionsrÚ contextlibrËZglobrr•rqreZloggingr9rÈr rr„r£Ú ImportErrorrérJrhr|rmrìZdummy_threadingr‚r$rÚcompatrrr r r r r rrrrrrrrrrrrZ getLoggerrŒrªÚCOMMArÉr1ZIDENTZ EXTRA_IDENTZVERSPECZRELOPZBARE_CONSTRAINTSZ DIRECT_REFZ CONSTRAINTSZ EXTRA_LISTZEXTRASZ REQUIREMENTr+Z RELOP_IDENTr.r6rGrLrPrVrYrur{Úcontextmanagerrr�r…rŠr†r˜r™räråÚVERBOSErïrhrûrýrÿrrrÚIrr rrrrrrr r"r#r+r6ZARCHIVE_EXTENSIONSrprur�r{r”r�r�r‘r˜r§r™ršr›r¬rar·r°r³r´r½r¾rÄrÅrÊrÏrÓrárñr!r!r!r"Úsì      X   ,   %   /  7  )     ,H  C]    *)  :+