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 filescSs6|jtjjdƒ}|jtjjdƒ}|t|ƒd…jdƒS)Nú/)ÚreplaceÚosÚpathÚsepÚlenÚlstrip)Úbaser:r!r!r"Ú get_rel_pathsz)get_resources_dests..get_rel_pathNr7)r9r:r0rÚpopr8r;Úrstrip)Zresources_rootZrulesr?Z destinationsr>ÚsuffixÚdestÚprefixZabs_baseZabs_globZabs_pathZ resource_fileZrel_pathZrel_destr!r!r"Úget_resources_dests|s  rEcCs(ttdƒrd}ntjttdtjƒk}|S)NZ real_prefixTÚ base_prefix)ÚhasattrÚsysrDÚgetattr)r4r!r!r"Úin_venv—s rJcCs$tjjtjƒ}t|tƒs t|ƒ}|S)N)r9r:ÚnormcaserHÚ executableÚ isinstancerr)r4r!r!r"Úget_executable¡s  rNcCsT|}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  rTcCs<t|tƒr|jƒ}i}x |D]}||kr||||<qW|S)N)rMrr2)r Úkeysr4Úkeyr!r!r"Úextract_by_keyÁs  rWcCsntjddkrtjdƒ|ƒ}|jƒ}t|ƒ}yftj|ƒ}|ddd}xF|jƒD]:\}}x0|jƒD]$\}}d||f}t |ƒ} | ||<qdWqRW|St k r²|j ddƒYnXdd „} t j ƒ} y| | |ƒWn<t jk �r|jƒtj|ƒ}t|ƒ}| | |ƒYnXi}xT| jƒD]H} i|| <}x4| j| ƒD]&\} }d| |f}t |ƒ} | || <�q:W�qW|S) Nrézutf-8Ú extensionszpython.exportsÚexportsz%s = %scSs$t|dƒr|j|ƒn |j|ƒdS)NÚ read_file)rGr[Zreadfp)ÚcpÚstreamr!r!r"Ú read_streamÞs  z!read_exports..read_stream)rHÚ version_infoÚcodecsÚ getreaderÚreadr ÚjsonÚloadÚitemsÚget_export_entryÚ ExceptionÚseekrÚ ConfigParserZMissingSectionHeaderErrorÚcloseÚtextwrapÚdedentZsections)r]ÚdataZjdatar4ÚgroupZentriesÚkÚvr3Úentryr^r\rVr'Úvaluer!r!r"Ú read_exportsÊs@     rscCs°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)NrrXzutf-8z%s:%sz%s [%s]z, )rHr_r`Ú getwriterrrireZ add_sectionÚvaluesrBrDÚflagsr0Úsetr'Úwrite)rZr]r\rorprqr3r!r!r"Ú write_exportsùs  ryc cs$tjƒ}z |VWdtj|ƒXdS)N)ÚtempfileÚmkdtemprÚrmtree)Ztdr!r!r"Útempdir s r}c cs.tjƒ}ztj|ƒdVWdtj|ƒXdS)N)r9ÚgetcwdÚchdir)r Úcwdr!r!r"rs   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Úclsrrr!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_runrwÚensuredÚ _init_record)r†r˜r!r!r"r‡RszFileOperator.__init__cCsd|_tƒ|_tƒ|_dS)NF)ÚrecordrwÚ 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 Cst|jtjj|ƒƒtjd||ƒ|jsf|dkr:t|dƒ}ntj|d|d�}zt j ||ƒWd|j ƒX|j |ƒdS)NzCopying stream %s to %sÚwbÚw)Úencoding) r¦r9r:r§r¨r©r˜Úopenr`rZ copyfileobjrjrŸ)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³rxrŸ)r†r:rmÚ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³rxÚencoderŸ)r†r:rmr²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_dircCsht|| ƒ}tjd||ƒ|jsZ|s0|j||ƒrJ|s:d}n|t|ƒd…}tj|||dƒ|j|ƒ|S)NzByte-compiling %s to %sT) r r¨r©r˜r¥r<Ú py_compileÚcompilerŸ)r†r:ÚoptimizeÚforcerDZdpathZdiagpathr!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 Úisdirrª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'rDrBrv)r†r!r!r"Ú__repr__!s zExportEntry.__repr__cCsDt|tƒsd}n0|j|jko>|j|jko>|j|jko>|j|jk}|S)NF)rMrâr'rDrBrv)r†Úotherr4r!r!r"Ú__eq__%s     zExportEntry.__eq__N) rŠrŽr�r‡r„rrrã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ú:rrrvcSsg|] }|jƒ‘qSr!)r-)r%rµr!r!r"r&Qsz$get_export_entry..ú,)ÚENTRY_REÚsearchrrÚcountr2râ) Z specificationrr4r r'r:ZcolonsrDrBrvr!r!r"rf7s2    rfc 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)ZnetlocZusernameZpasswordrDr!r!r"Úparse_credentials–srþcCstjdƒ}tj|ƒ|S)Né)r9Úumask)r4r!r!r"Úget_process_umask¡s  rcCs2d}d}x$t|ƒD]\}}t|tƒsd}PqW|S)NTF)Ú enumeraterMr)Ú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\brX) rr8ÚPYTHON_VERSIONrírnÚ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-rO)rRrr 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Ú*rrzundeclared extra: %s)rwr“ržÚ startswithr¨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©Úgetrr¨rÍr`rarcrdrgÚ 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 rcCs(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†rDr!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|rgÚ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-r.r!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)r0rgr¨rr%rÍ)r†r,ÚargsÚkwargsr4r-rrr!r!r"Úpublishus    zEventMixin.publishN)T) rŠrŽr�r(r‡ržr“r0r3r!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Ú_succsrwÚ_nodes)r†r!r!r"r‡�szSequencer.__init__cCs|jj|ƒdS)N)r7rž)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)r7r“rwr5rr6rÕre)r†r8ZedgesrRr3rorpr!r!r"Ú remove_node˜s   zSequencer.remove_nodecCs0|jj|tƒƒj|ƒ|jj|tƒƒj|ƒdS)N)r5Ú setdefaultrwržr6)r†ÚpredÚsuccr!r!r"rž¨sz Sequencer.addcCs|y|j|}|j|}Wn tk r8td|ƒ‚YnXy|j|ƒ|j|ƒWn$tk rvtd||fƒ‚YnXdS)Nz%r not a successor of anythingz%r not a successor of %r)r5r6ÚKeyErrorr‘r“)r†r<r=ÚpredsZsuccsr!r!r"r“­s  zSequencer.removecCs||jkp||jkp||jkS)N)r5r6r7)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) rAr‘rwr%r@r“ržr5rÚextendÚreversed)r†Úfinalr4ZtodoÚseenr@r?r!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%rgÚminr@Útuple)r8Z successorsZ successorZconnected_componentZ component)ÚgraphÚindexÚ index_counterÚlowlinksr4ÚstackÚ strongconnectr!r"rNâs.       z3Sequencer.strong_connections..strongconnect)r6)r†r8r!)rIrJrKrLr4rMrNr"Ú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;ú}Ú )r5r%r7r0)r†r4r=r?r<r8r!r!r"Údot s     z Sequencer.dotN)F) rŠrŽr�r‡r9r:ržr“rArFÚpropertyrOrRr!r!r!r"r4�s   3r4ú.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) rMrÚdecoder9r:r¡r0rr;r‘)r:rR)Údest_dirÚplenr!r"Ú check_paths   zunarchive..check_pathú.zipú.whlÚzipú.tar.gzú.tgzZtgzzr:gzú.tar.bz2ú.tbzZtbzzr:bz2z.tarZtarrzUnknown format for %rrrXzutf-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)r_r`)rbrc)rdre)r9r:r¡r<rûr‘rZnamelistrfr³ZgetnamesrHr_Z getmembersrMr'rr[rjZ extractallrj) Zarchive_filenamer\Úformatr­r^ÚarchiverÁÚnamesr'Ztarinforjr!)r\r]r"Ú unarchivesL           rnc 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:r0rx) Z directoryr4ZdlenZzfÚrootrÙrÀr'ZfullZrelrCr!r!r"Úzip_dir`s   rsr$Ú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(||_|_||_d|_d|_d|_dS)NrF)rGÚcurÚmaxÚstartedÚelapsedÚdone)r†ZminvalZmaxvalr!r!r"r‡ws  zProgress.__init__cCs0||_tjƒ}|jdkr ||_n ||j|_dS)N)r{Útimer}r~)r†ZcurvalZnowr!r!r"Úupdates  zProgress.updatecCs|j|j|ƒdS)N)r�r{)r†Zincrr!r!r"Ú increment‰szProgress.incrementcCs|j|jƒ|S)N)r�rG)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 %%)rr|r{rG)r†r4rpr!r!r"Ú percentagešs zProgress.percentagecCs:|dkr|jdks|j|jkr$d}ntjdtj|ƒƒ}|S)Nrz??:??:??z%H:%M:%S)r|r{rGr€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�)rr~r|r{rGÚfloatr‡)r†rDÚ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{rGÚUNITS)r†r4Zunitr!r!r"ÚspeedÁs   zProgress.speedN)rrz)rŠrŽr�r„r‡r�r‚r rƒrSr…r†r‡rŠrŒr!r!r!r"ryts     ryz \{([^}]*)\}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|ƒdkr\|\}}}xà|jdƒD](}x"tdj|||fƒƒD] }|VqHWq.Wn¨d|kr~xžt|ƒD] }|VqnWn†|jddƒ\}}|dkršd}|dkr¨d}n|jdƒ}|jdƒ}xFtj|ƒD]8\}}} tj j |ƒ}x ttj j||ƒƒD] } | VqòWqÈWdS) Nrrër$z**rÜrr7ú\) Ú RICH_GLOBr2r<r�r0Ú std_iglobr=r9rqr:r#) r�Zrich_path_globrDrwrBÚ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ÚtimeoutrIÚsockZ_tunnelrGÚ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_RDWRrj)r†r r›Úcontextr2r!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†r1r2r4r!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¦rrgÚ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žr2r!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žr2r!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¹r2r4r!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) r@rŸrrr»r²r½rr¼r‡) r†Zurir2rŸÚ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)NrrXÚbr$Únewline)rHr_r³)r&rÁr2r!r!r"Ú _csv_open®s rÂc@s4eZdZedƒedƒedƒdœZdd„Zdd„Zd S) ÚCSVBaserëú"rQ)Z delimiterZ quotecharZlineterminatorcCs|S)Nr!)r†r!r!r"Ú __enter__½szCSVBase.__enter__cGs|jjƒdS)N)r]rj)r†rñr!r!r"Ú__exit__ÀszCSVBase.__exit__N)rŠrŽr�rgÚ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]rrXzutf-8r:r) rHr_r`rar]rÂÚcsvrrÇ)r†r2r]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)NrrXzutf-8)ÚnextrrHr_rrMrr[)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&r2r!r!r"r‡Þs zCSVWriter.__init__cCsRtjddkrBg}x*|D]"}t|tƒr0|jdƒ}|j|ƒqW|}|jj|ƒdS)NrrXzutf-8)rHr_rMrr·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())rMrÕrHÚtypeÚdictÚconfigure_customrÖ)Úor4ro)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%ro)rÔrÖr!r"r&s)r@rérárHrØreÚsetattr) r†rÔrSZpropsr1rer2r4rrpr!)rÔrÖr†r"rÙùs     zConfigurator.configure_customcCs4|j|}t|tƒr0d|kr0|j|ƒ|j|<}|S)Nz())rÔrMrØrÙ)r†rVr4r!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>r`r³rcrd)r†rrrµ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àÚreadlinerHÚstderrrxr[Úflushrj)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¤r1rãzdone.Úmainzdone. )Ú subprocessÚPopenÚPIPEÚ threadingZThreadrrår rãÚwaitr0ráràrHrx)r†Úcmdr2rRZt1Zt2r!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 ÚsubrO)r'r!r!r"Únormalize_nameUsrï)NN)r�)N)N)rTrUrVrWrXrYrZ)NT)r$rtrurvrwrx)r¬r­)‰r`Ú collectionsrÚ contextlibrÉZglobrr“rorcZloggingr9rÅr rr‚r¡Ú ImportErrorrçrHrfrzrkrê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.r6rErJrNrTrWrsryÚcontextmanagerr}rrƒrˆr„r–r—rárâÚVERBOSErìrfrørúrürþrrÚIr rrrrrrrrr r!r)r4ZARCHIVE_EXTENSIONSrnrsr‹ryr’r�rŽr�r–r¥r—r˜r™rªr_rµr®r±r²r»r¼rÂrÃrÈrÍrÑrßrïr!r!r!r"Úsì      X   ,   %   /  7  )     ,H  C]    *)  :+