Ë
    qûàg<  ã                   ó  — d dl 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
mZ d dlmZmZ d dlZd dlmZ d dlmZmZ d d	lmZ d d
lmZ d dlmZ  eej6                  «       ed«      k\  rd dlmZ 	 	 d dlmZ d dl"m#Z# 	 d dl$m%Z% 	 d dl*Z*dZ+ G d„ de«      Z,y# e $ r	 d dl!mZ Y Œ-w xY w# e $ r d dl&m'Z' 	 	 	 	 	 dd„Z%Y Œ:w xY w# e $ r( 	 d dlm%Z% d dl(mZ d dl)m#Z# n# e $ r	  ed«      ‚w xY wY Œjw xY w# e $ r dZ+Y Œpw xY w)é    N)ÚLooseVersion)Úurlparse)Ú	HTTPError)ÚRequestÚurlopen)ÚServerProxyÚFault)Úsleep)ÚBaseCommandÚCommandError)Úcolor_style)Úsignalcommand)ÚInstallRequirementz19.0)Úinstall_req_from_line)Ú
PipSession)Úparse_requirements)Úget_installed_distributions)ÚcastTFc                 óÐ   — ddl m} |j                  j                  |«      j	                  | |||¬«      }|D �cg c]"  }t        |j                  |«      j                  ‘Œ$ c}S c c}w )z”Return a list of installed Distribution objects.
            Left for compatibility until direct pkg_resources uses are refactored out.
            r   )Úpkg_resources)Ú
local_onlyÚinclude_editablesÚeditables_onlyÚ	user_only)Úpip._internal.metadatar   ÚEnvironmentÚ
from_pathsÚiter_installed_distributionsr   ÚDistributionÚ_dist)r   r   r   r   Úpathsr   ÚdistsÚdists           ún/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/django_extensions/management/commands/pipchecker.pyr   r       se   € õ =à!×-Ñ-×8Ñ8¸Ó?×\Ñ\Ø%Ø"3Ø-Ø#ð	 ]ó ˆEð NSÖSÀT”D˜×3Ñ3°TÓ:×@Ó@ÒSÐSùÒSs   ¹'A#z#Pip version 6 or higher is requiredc                   óX   ‡ — e Zd ZdZˆ fd„Zed„ «       Zd
d„Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zˆ xZS )ÚCommandz4Scan pip requirement files for out-of-date packages.c           	      ó®   •— t         ‰| �  |«       |j                  ddddd¬«       |j                  ddd	d
g dd¬«      f |j                  ddddd¬«       y )Nz-tz--github-api-tokenÚstoreÚgithub_api_tokenz"A github api authentication token.)ÚactionÚdestÚhelpz-rz--requirementÚappendÚrequirementsÚFILENAMEzeCheck all the packages listed in the given requirements file. This option can be used multiple times.)r*   r+   ÚdefaultÚmetavarr,   z-nz--newerÚ
store_trueÚ
show_newerz9Also show when newer version then available is installed.)ÚsuperÚadd_argumentsÚadd_argument)ÚselfÚparserÚ	__class__s     €r$   r5   zCommand.add_argumentsG   s€   ø€ Ü‰Ñ˜fÔ%Ø×ÑØÐ&¨wØ#Ð*Nð 	ô 	
ð 	×ÑØ�/¨(¸Ø 
ðAð 	ó 	
ñ 	ð 	×ÑØ�) L°|ØLð 	õ 	
ó    c           	      ó  — t        «       | _        || _        |d   r|d   }�n!t        j                  j                  d«      rdg}nþt        j                  j                  d«      rŽt        j                  d«      D �cg c]o  }t        j                  j                  t        j                  j                  d|«      «      r0|j                  «       j                  d«      rdj                  |«      ‘Œq }}nQt        j                  j                  d«      rdg}n.t        j                  j                  d«      rdg}nt        d«      ‚i | _        t        «       5 }|D ]Å  }t        ||¬«      D ]³  }t!        |t"        «      st%        |j&                  «      }|j(                  r|j(                  n|j*                  j,                  }t/        t0        j2                  «      t/        d	«      kD  r||j*                  d
œ| j                  |<   Œ˜||j4                  d
œ| j                  |<   Œµ ŒÇ 	 d d d «       |d   r|d   | _        nKt        j8                  j;                  d«      r%t        j8                  j;                  d«      | _        nd | _        | j=                  «        t>        r| jA                  «        n4| jB                  jE                  | j                  jG                  d«      «       | jI                  «        y c c}w # 1 sw Y   ŒÕxY w)Nr.   zrequirements.txtz.txtzrequirements/{0}zrequirements-dev.txtzrequirements-prod.txtzRequirements file(s) not found)Úsessionz6.0.8)Úpip_reqÚurlr)   ÚGITHUB_API_TOKENzYCannot check github urls. The requests library is not installed. ( pip install requests ))%r   ÚstyleÚoptionsÚosÚpathÚexistsÚlistdirÚisfileÚjoinÚlowerÚendswithÚformatr   Úreqsr   r   Ú
isinstancer   r   ÚrequirementÚnameÚlinkÚfilenamer   ÚpipÚ__version__r>   r)   ÚenvironÚgetÚ
check_pypiÚHAS_REQUESTSÚcheck_githubÚstdoutÚwriteÚERRORÚcheck_other)	r7   ÚargsrA   Ú	req_filesÚfr<   rP   ÚreqrN   s	            r$   ÚhandlezCommand.handleX   sW  € ä “]ˆŒ
àˆŒØ�>Ò"Ø Ñ/ŠIÜ�W‰W�^‰^Ð.Ô/Ø+Ð,‰IÜ�W‰W�^‰^˜NÔ+ä68·j±jÀÓ6PöØ12Ü—7‘7—>‘>¤"§'¡'§,¡,¨~¸qÓ"AÔBÀqÇwÁwÃy×GYÑGYÐZ`ÔGað #×)Ñ)¨!Õ,ðˆIñ ô �W‰W�^‰^Ð2Ô3Ø/Ð0‰IÜ�W‰W�^‰^Ð3Ô4Ø0Ð1‰IäÐ?Ó@Ð@àˆŒ	Ü‹\ð 	˜WØ%ò �Ü-¨hÀÔHò �CÜ% cÔ+=Ô>Ü3°C·O±OÓD˜Ø'*§x¢x˜3Ÿ8š8°S·X±X×5FÑ5F�Dô $¤C§O¡OÓ4´|ÀGÓ7LÒLà'*Ø#&§8¡8ñ+˜Ÿ	™	 $šð (+Ø#&§7¡7ñ+˜Ÿ	™	 $šññ÷	ð& Ð%Ò&Ø$+Ð,>Ñ$?ˆDÕ!Ü�Z‰Z�^‰^Ð.Ô/Ü$&§J¡J§N¡NÐ3EÓ$FˆDÕ!à$(ˆDÔ!à�‰ÔÝØ×ÑÕà�K‰K×Ñ˜dŸj™j×.Ñ.ð  0Kó  Lô  MØ×ÑÕùòW÷	ð 	ús   Á<A4K0ÅCK5Ë5K>c                 ót   — t        ||¬«      }t        j                  t        |«      j	                  «       «      S )z#Shorcut for return contents as json©Úheaders)r   ÚjsonÚloadsr   Úread)r7   r>   rc   r_   s       r$   Ú_urlopen_as_jsonzCommand._urlopen_as_json�   s*   € ä�c 7Ô+ˆÜ�z‰zœ' #›,×+Ñ+Ó-Ó.Ð.r:   c                 óB   — t        j                  dt        |«      «       S )Nz([ab]|rc|dev)\d+$)ÚreÚsearchÚstr)r7   Úversions     r$   Ú
_is_stablezCommand._is_stable”   s   € Ü—9‘9Ð1´3°w³<Ó@Ð@Ð@r:   c                 óÆ   — | j                  |«      r:|D �cg c]  }| j                  t        |«      «      sŒ|‘Œ! }}|rt        |d   «      S |rt        |d   «      S d S c c}w )Nr   )rm   r   )r7   Údist_versionÚ	availableÚvÚstables        r$   Ú_available_versionzCommand._available_version—   s^   € Ø�?‰?˜<Ô(Ø!*ÖO˜A¨d¯o©o¼lÈ1»oÕ.N’aÐOˆFÐOÙÜ# F¨1¡IÓ.Ð.á-6Œ|˜I a™LÓ)Ð@¸DÐ@ùò	 Ps
   –A¶Ac                 ó  — t        «       D ]=  }|j                  }|| j                  j                  «       v sŒ,|| j                  |   d<   Œ? t	        d«      }t        | j                  j                  «       «      D �]«  \  }}|d   rŒd|v �r]|d   }t        |j                  «      }d}d}|ra	 |j                  |d   j                  d«      xs/ |j                  |d   j                  j                  dd«      d«      }d	}t        d
«       |rŒa| j#                  ||«      }	|	s| j$                  j'                  d«      }
n€| j(                  d   r0||	kD  r+| j$                  j+                  dj-                  |	«      «      }
nA|	|kD  r+| j$                  j+                  dj-                  |	«      «      }
nd}
| j                  |= �ŒC| j$                  j/                  dj-                  |¬«      «      }nd}
|}| j                  j                  dj-                  ||
¬«      «       | j                  |= �Œ® y# t        $ rV}| j                  j                  |j                   «       | j                  j                  d«       t        d«       Y d}~�Œzd}~ww xY w)z>If the requirement is frozen to pypi, check for a new version.r#   zhttps://pypi.python.org/pypir>   TNr=   ú-Ú_Fé   zRetrying in 60 seconds!é<   zFrelease is not on pypi (check capitalization and/or --extra-index-url)r3   z{0} available (newer installed)z{0} availableú
up to dateú"{dist.project_name} {dist.version}©r#   znot installedú{pkg_info:40} {msg}©Úpkg_infoÚmsg)r   Úproject_namerK   Úkeysr   ÚlistÚitemsr   rl   Úpackage_releasesrN   Úreplacer
   r	   rX   rY   ÚfaultStringrs   r@   ÚWARNrA   ÚINFOrJ   ÚBOLD)r7   r#   rN   Úpypir_   ro   Úretryrp   ÚerrÚavailable_versionr   r~   s               r$   rU   zCommand.check_pypiŸ   si  € ä/Ó1ò 	/ˆDØ×$Ñ$ˆDØ�t—y‘y—~‘~Ó'Ò'Ø*.�—	‘	˜$‘ Ò'ð	/ô
 Ð9Ó:ˆÜ˜dŸi™iŸo™oÓ/Ó0ó #	 ‰IˆD�#Ø�5ŠzØØ˜3’Ø˜6‘{�Ü+¨D¯L©LÓ9�Ø�Ø �	Ùð"Ø$(×$9Ñ$9¸#¸i¹.×:MÑ:MÈtÓ$Tò  %[ÐX\×XmÑXmÐnqÐr{Ñn|÷  oBñ  oB÷  oJñ  oJð  KNð  PSó  oTð  VZó  Y[˜	Ø %˜Ü˜aœò	 ð %)×$;Ñ$;¸LÈ)Ó$TÐ!á(ØŸ*™*Ÿ/™/Ð*rÓs‘CØ—\‘\ ,Ò/°LÐCTÒ4TØŸ*™*Ÿ/™/Ð*K×*RÑ*RÐSdÓ*eÓf‘CØ&¨Ò5ØŸ*™*Ÿ/™/¨/×*@Ñ*@ÐARÓ*SÓT‘Cà&�CØŸ	™	 $˜ÙØŸ:™:Ÿ?™?Ð+O×+VÑ+VÐ\`Ð+VÓ+aÓb‘à%�Ø�Ø�K‰K×ÑÐ3×:Ñ:ÀHÐRUÐ:ÓVÔWØ—	‘	˜$’ñG#	 øô !ò "ØŸ™×)Ñ)¨#¯/©/Ô:ØŸ™×)Ñ)Ð*CÔDÜ˜bŸ	š	ûð"ús   Â,AH)È)	JÈ2AJÊJc                 ó&	  — t        | j                  j                  «       «      D �]Ï  \  }}|d   }|sŒt        |«      }|j	                  d«      rd|vrŒ0|j                  d«      rŒBddi}| j                  rdj                  | j                  «      |d<   	 t        |«      j                  j                  d	d
«      d   j                  d«      j                  d«      j                  d«      }t        |«      dk(  r|\  }}nYd|v r4|dd \  }}|d|d   j                  dd«      j                  dd«      z   z  }n!| j                  j!                  d|›d�«       �Œ3	 t+        j,                  d|¬«      j/                  «       }	d|	v r>|	d   dk(  r6| j&                  j)                  | j                  j!                  d«      «        yd|	v rJ|	d   j	                  d«      r6| j&                  j)                  | j                  j!                  d«      «        yd}
d |v r+|j                  d «      \  }}|j	                  d«      r|d
d }
nd|v r|j                  d«      \  }}
|
€| j                  j!                  d!«      }|
�rd"j                  |«      }t+        j,                  ||¬«      j/                  «       }d#j                  |||
«      }t+        j,                  ||¬«      j/                  «       }d|v r7|d   d$k(  r/| j                  j!                  d%j                  |
dd& |«      «      }ng|d'   |D �cg c]
  }|d(   d'   ‘Œ c}v r| j                  j3                  d)«      }n0| j                  j5                  d*j                  |d'   dd& «      «      }d+|v rd,j                  |d+   ¬-«      }n|
€|}nd.j                  ||
dd& «      }| j&                  j)                  d/j                  |¬0«      «       | j                  |= �ŒÒ y# t"        t$        f$ rF}| j&                  j)                  | j                  j!                  d|›d|›d�«      «       Y d}~�Œ$d}~ww xY w# t0        $ r2}| j&                  j)                  dt        |«      z  «       Y d}~ yd}~ww xY wc c}w )1aÏ  
        If the requirement is frozen to a github url, check for new commits.

        API Tokens
        ----------
        For more than 50 github api calls per hour, pipchecker requires
        authentication with the github api by settings the environemnt
        variable ``GITHUB_API_TOKEN`` or setting the command flag
        --github-api-token='mytoken'``.

        To create a github api token for use at the command line::
             curl -u 'rizumu' -d '{"scopes":["repo"], "note":"pipchecker"}' https://api.github.com/authorizations

        For more info on github api tokens:
            https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token
            https://docs.github.com/en/developers/apps/building-oauth-apps/authorizing-oauth-apps

        Requirement Format
        ------------------
        Pipchecker gets the sha of frozen repo and checks if it is
        found at the head of any branches. If it is not found then
        the requirement is considered to be out of date.

        Therefore, freezing at the commit hash will provide the expected
        results, but if freezing at a branch or tag name, pipchecker will
        not be able to determine with certainty if the repo is out of date.

        Freeze at the commit hash (sha)::
            git+git://github.com/django/django.git@393c268e725f5b229ecb554f3fac02cfc250d2df#egg=Django
            https://github.com/django/django/archive/393c268e725f5b229ecb554f3fac02cfc250d2df.tar.gz#egg=Django
            https://github.com/django/django/archive/393c268e725f5b229ecb554f3fac02cfc250d2df.zip#egg=Django

        Freeze with a branch name::
            git+git://github.com/django/django.git@master#egg=Django
            https://github.com/django/django/archive/master.tar.gz#egg=Django
            https://github.com/django/django/archive/master.zip#egg=Django

        Freeze with a tag::
            git+git://github.com/django/django.git@1.5b2#egg=Django
            https://github.com/django/django/archive/1.5b2.tar.gz#egg=Django
            https://github.com/django/django/archive/1.5b2.zip#egg=Django

        Do not freeze::
            git+git://github.com/django/django.git#egg=Django

        r>   Úgitzgithub.com/)ú.tar.gzz.tar.bz2ú.zipzcontent-typezapplication/jsonz	token {0}ÚAuthorizationú#rw   r   ú/é   ÚarchiveNú@éÿÿÿÿr�   Ú r‘   z
Failed to parse ú
z: zhttps://api.github.com/django/rb   z
%s
ÚmessagezBad credentialsz(
Github API: Bad credentials. Aborting!
zAPI Rate Limit Exceededz,
Github API: Rate Limit Exceeded. Aborting!
z.gitzrepo is not frozenz-https://api.github.com/repos/{0}/{1}/branchesz0https://api.github.com/repos/{0}/{1}/commits/{2}z	Not Foundz*{0} not found in {1}. Repo may be private.é
   ÚshaÚcommitry   z!{0} is not the head of any branchr#   rz   r{   z{0} {1}r|   r}   )r‚   rK   rƒ   rk   Ú
startswithrI   r)   rJ   r   rC   ÚsplitÚstripÚrstripÚlenr…   r@   rZ   Ú
ValueErrorÚ
IndexErrorrX   rY   ÚrequestsrT   rd   r   r‰   rˆ   )r7   rN   r_   Úreq_urlrc   Ú
path_partsÚuserÚrepoÚeÚ	test_authÚfrozen_commit_shaÚ	repo_nameÚfrozen_commit_fullr   Ú
branch_urlÚbranch_dataÚfrozen_commit_urlÚfrozen_commit_dataÚbranchr~   s                       r$   rW   zCommand.check_githubÌ   sg  € ô^ ˜dŸi™iŸo™oÓ/Ó0ó R	 ‰IˆD�#Ø˜%‘jˆGÙØÜ˜'“lˆGØ×!Ñ! %Ô(¨]À'Ñ-IØØ×ÑÐ ?Ô@Øð Ð 2ðˆGð ×$Ò$Ø+6×+=Ñ+=¸d×>SÑ>SÓ+T�˜Ñ(ðÜ% gÓ.×3Ñ3×9Ñ9¸#¸qÓAÀ!ÑD×JÑJÈ3ÓO×VÑVÐWZÓ[×aÑaÐbeÓf�
ä�z“? aÒ'Ø!+‘J�D™$à *Ñ,ð ",¨B¨Q ‘J�D˜$Ø˜C *¨R¡.×"8Ñ"8¸ÀBÓ"G×"OÑ"OÐPVÐXZÓ"[Ñ[Ñ[‘Dð —J‘J×$Ò$ÂÐ%KÔLÙð
Ü$ŸL™LÐ)IÐSZÔ[×`Ñ`Ób�	ð
 ˜IÑ%¨)°IÑ*>ÐBSÒ*SØ—‘×!Ñ! $§*¡*×"2Ñ"2Ð3_Ó"`ÔaÙØ˜iÑ'¨I°iÑ,@×,KÑ,KÐLeÔ,fØ—‘×!Ñ! $§*¡*×"2Ñ"2Ð3cÓ"dÔeÙà $ÐØ˜‰~Ø04·
±
¸6Ó0BÑ-�	Ð-Ø%×0Ñ0°Ô5Ø(:¸1¸2Ð(>Ñ%Ø˜‘Ø/3¯z©z¸#«Ñ,�	Ð,à Ð(Ø—j‘j×&Ñ&Ð';Ó<�â ØL×SÑSÐTXÐZcÓd�
Ü&Ÿl™l¨:¸wÔG×LÑLÓN�à$V×$]Ñ$]Ø˜)Ð%6ó%Ð!ô &.§\¡\Ð2CÈWÔ%U×%ZÑ%ZÓ%\Ð"àÐ 2Ñ2Ð7IÈ)Ñ7TÐXcÒ7cØŸ*™*×*Ñ*Ð+W×+^Ñ+^Ð_pÐqtÐrtÐ_uÐw{Ó+|Ó}‘CØ'¨Ñ.ÐYdÖ2eÈv°6¸(Ñ3CÀEÓ3JÒ2eÑeØŸ*™*Ÿ/™/¨,Ó7‘CàŸ*™*Ÿ/™/Ð*M×*TÑ*TÐUgÐhmÑUnÐorÐprÐUsÓ*tÓu�Cà˜‰}Ø?×FÑFÈCÐPVÉKÐFÓX‘Ø"Ð*Ø‘à$×+Ñ+¨DÐ2CÀCÀRÐ2HÓI�Ø�K‰K×ÑÐ3×:Ñ:ÀHÐRUÐ:ÓVÔWØ—	‘	˜$’ñeR	 øô> ¤
Ð+ò Ø—‘×!Ñ! $§*¡*×"2Ò"2ÒSZÒ\]Ð3^Ó"_Ô`Ýûðûô ò Ø—‘×!Ñ! (¬S°«VÑ"3Ô4ÝûðüòB 3fs7   ÂC O8Å%QÌ(RÏ8QÐ;QÑQÑ	RÑ'RÒRc                 ó¾  — | j                   rÑ| j                  j                  | j                  j	                  d«      «       | j                   j                  «       D ]  \  }}d|v rdj                  |d   ¬«      }nd|v rdj                  |d   ¬«      }nd}| j                  j                  | j                  j                  d	j                  |¬
«      «      «       Œ� yy)zÃ
        If the requirement is frozen somewhere other than pypi or github, skip.

        If you have a private pypi or use --extra-index-url, consider contributing
        support here.
        z7
Only pypi and github based requirements are supported:r#   rz   r{   r>   z{url})r>   zunknown packagez1{pkg_info:40} is not a pypi or github requirement)r~   N)rK   rX   rY   r@   rZ   rƒ   rJ   r‰   )r7   rN   r_   r~   s       r$   r[   zCommand.check_otherO  sÈ   € ð �9Š9Ø�K‰K×Ñ˜dŸj™j×.Ñ.Ð/iÓjÔkØ!ŸY™YŸ_™_Ó.ò B‘	��cØ˜S‘=ØC×JÑJÐPSÐTZÑP[ÐJÓ\‘HØ˜c‘\Ø&Ÿ~™~°#°e±*˜~Ó=‘Hà0�HØ—‘×!Ñ! $§*¡*§/¡/Ð2e×2lÑ2lÐv~Ð2lÓ2ó  #Aõ  BñBð r:   )N)Ú__name__Ú
__module__Ú__qualname__r,   r5   r   r`   rg   rm   rs   rU   rW   r[   Ú__classcell__)r9   s   @r$   r&   r&   D   sF   ø„ ØA€Dô
ð" ñ4ó ð4ól/ò
AòAò+ òZA öFBr:   r&   )TTFFN)-rd   rB   ri   Údistutils.versionr   Úurllib.parser   Úurllib.errorr   Úurllib.requestr   r   Úxmlrpc.clientr   r	   rQ   Útimer
   Údjango.core.management.baser   r   Ú"django_extensions.management.colorr   Ú"django_extensions.management.utilsr   Úpip._internal.reqr   rR   Úpip._internal.req.constructorsr   Úpip._internal.network.sessionr   ÚImportErrorÚpip._internal.downloadÚpip._internal.req.req_filer   Úpip._internal.utils.miscr   Útypingr   Úpip.downloadÚpip.reqr¦   rV   r&   © r:   r$   ú<module>rÎ      s  ðã Û 	Û 	Ý *Ý !Ý "ß +ß ,ã 
Ý ß AÝ :Ý <Ý 0á�—‘Ó ¡L°Ó$8Ò8ÝDð&Bð6Ý<õ >ðTÝHðBÛØ€Lô
[Bˆkõ [BøðY ò 6ß5ð6ûð
 ò TÝð Ø"Ø ØØõ	TðTûð. ò BðBÝ3Ý+Þ.øØò BÙÐ@ÓAÐAðBúñ 	/ðBûð ò Ø‚Lðúsx   Á6B Á<C ÂB- Â
C7 ÂB*Â'C Â)B*Â*C Â-CÃC ÃCÃC ÃC4ÃC ÃC4Ã C.Ã.C4Ã3C4Ã7DÄ D