
    &                     p   S r SSKJr  SSKJr  SSKJr  SSKrSSKrSSKr " S S\	5      r
SrS	rS
r\R                  S   (       a(  \R                  R!                  \R                  S   5      OSrS\-  rSrSrS rS rS rS rS r " S S\5      r " S S\5      r " S S\5      r " S S\5      rS rg)z<This package defines Tag a way of representing an image uri.    )absolute_import)division)print_functionNc                       \ rS rSrSrSrg)BadNameException   z.Exceptions when a bad docker name is supplied. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r	       8lib/third_party/containerregistry/client/docker_name_.pyr   r      s    6r   r   z(abcdefghijklmnopqrstuvwxyz0123456789_-./zAabcdefghijklmnopqrstuvwxyz0123456789_-.ABCDEFGHIJKLMNOPQRSTUVWXYZzsh:0123456789abcdefconsolez//containerregistry/client:%szindex.docker.iolatestc           	         [        U5      nU(       a  XS:  a  [        SU < SU< SU< S35      eU(       a  XT:  a  [        SU < SU< SU< S35      eUR                  U5      (       a  [        SU < SU< SU< 35      eg)a  Checks a given named element matches character and length restrictions.

Args:
  name: the name of the element being validated
  element: the actual element being checked
  characters: acceptable characters for this element, or None
  min_len: minimum element length, or None
  max_len: maximum element length, or None

Raises:
  BadNameException: one of the restrictions was not met.
zInvalid z: z, must be at least z charactersz, must be at most z!, acceptable characters include: N)lenr   strip)nameelement
charactersmin_lenmax_lenlengths         r   _check_elementr   ,   s     w<&!
 '74 5 5 !
 '74 5 5 ]]:
 ':7 8 8 r   c                 *    [        SU [        SS5        g )N
repository      )r   _REPOSITORY_CHARS)r   s    r   _check_repositoryr#   H   s    z+<aEr   c                 *    [        SU [        SS5        g )Ntag      )r   
_TAG_CHARS)r%   s    r   
_check_tagr)   L   s    ZC0r   c                 *    [        SU [        SS5        g )NdigestG   )r   _DIGEST_CHARS)r+   s    r   _check_digestr.   P   s    6=&&Ar   c                     [         R                  R                  R                  R	                  SU -   5      nXR
                  :w  a  [        SU -  5      eg )Nz//zInvalid registry: %s)sixmovesurllibparseurlparsenetlocr   )registryparsed_hostnames     r   _check_registryr8   T   sJ    II$$**33D8OD/ '''
1X>
?? (r   c                   V    \ rS rSrSrSS jr\S 5       rS rS r	S r
S rS	 rS
 rSrg)Registry^   z3Stores a docker registry name in a structured form.c                 X    U(       a  U(       d  [        S5      e[        U5        Xl        g )Nz+A Docker registry domain must be specified.)r   r8   	_registry)selfr   stricts      r   __init__Registry.__init__a   s!    LMMdNr   c                 4    U R                   =(       d    [        $ N)r=   DEFAULT_DOMAINr>   s    r   r6   Registry.registryi   s    >>+^+r   c                     U R                   $ rC   r=   rE   s    r   __str__Registry.__str__m   s    >>r   c                 "    U R                  5       $ rC   )rI   rE   s    r   __repr__Registry.__repr__p   s    <<>r   c                     [        U5      =(       a7    [        U 5      [        U5      :H  =(       a    U R                  UR                  :H  $ rC   )booltyper6   r>   others     r   __eq__Registry.__eq__s   s:    K ,J$u+%, MMU^^+-r   c                 .    U R                  U5      (       + $ rC   rS   rQ   s     r   __ne__Registry.__ne__y       {{5!!!r   c                 ,    [        U R                  5      $ rC   )hashr6   rE   s    r   __hash__Registry.__hash__|   s    r   c                     g)Nzregistry:catalog:*r	   )r>   unused_actions     r   scopeRegistry.scope   s    r   rH   NT)r
   r   r   r   r   r@   propertyr6   rI   rL   rS   rW   r\   r`   r   r	   r   r   r:   r:   ^   s<    ; , ,-" r   r:   c                   j   ^  \ rS rSrSrSU 4S jjrS r\S 5       rU 4S jr	S r
S rS	 rS
 rSrU =r$ )
Repository   z5Stores a docker repository name in a structured form.c                   > U(       d  [        S5      eSnUnUR                  SS5      n[        U5      S:X  a  SUS   ;   d	  SUS   ;   a
  US   nUS   n[        [        U ]  X2S	9  X@l        [        U R                  5        g )
Nz%A Docker image name must be specified /r&   r    .r   :r?   )r   splitr   superre   r@   _repositoryr#   )r>   r   r?   domainrepoparts	__class__s         r   r@   Repository.__init__   s    DEEFDJJsAE
5zQ 
aC58OqQx	*d$V$;d&&'r   c                     [        SU-  5      $ )NzBDocker image name must have the form: registry/repository, saw: %sr   r>   r   s     r   _validation_exception Repository._validation_exception   s     ;=AB C Cr   c                     U R                   $ rC   ro   rE   s    r   r   Repository.repository   s    r   c                    > [         [        U ]  5       nU(       a  SR                  XR                  S9$ U R                  $ )Nz{registry}/{repository})r6   r   )rn   re   rI   formatro   r>   basers   s     r   rI   Repository.__str__   sD    T*,D&--$4$4 . 6 6 r   c                     [        U5      =(       aW    [        U 5      [        U5      :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ rC   )rO   rP   r6   r   rQ   s     r   rS   Repository.__eq__   sS    K 0J$u+%0 MMU^^+0 OOu///	1r   c                 .    U R                  U5      (       + $ rC   rV   rQ   s     r   rW   Repository.__ne__   rY   r   c                 D    [        U R                  U R                  45      $ rC   )r[   r6   r   rE   s    r   r\   Repository.__hash__   s    011r   c                 6    SR                  U R                  US9$ )Nzrepository:{resource}:{action})resourceaction)r~   ro   )r>   r   s     r   r`   Repository.scope   s&    +22!! 3  r   r{   rb   )r
   r   r   r   r   r@   rx   rc   r   rI   rS   rW   r\   r`   r   __classcell__rs   s   @r   re   re      sC    =((C  1"2 r   re   c                   j   ^  \ rS rSrSrSU 4S jjr\S 5       rU 4S jrU 4S jr	S r
S rS	 rS
rU =r$ )Tag   z4Stores a docker repository tag in a structured form.c                    > UR                  SS5      n[        U5      S:w  a  UnSnO
US   nUS   nXPl        U R                  (       d  U(       a  [        U R                  5        [        [
        U ]  XBS9  g )Nrk   r&   r    rh   r   rl   )rsplitr   _tagr)   rn   r   r@   )r>   r   r?   rr   r   r%   rs   s         r   r@   Tag.__init__   sh    KKQE
5zQdc1Xd!HcI
 yyF	#td2r   c                 4    U R                   =(       d    [        $ rC   )r   DEFAULT_TAGrE   s    r   r%   Tag.tag   s    99##r   c                    > [         [        U ]  5       nU R                  (       a  SR	                  XR                  S9$ U$ )Nz{base}:{tag})r   r%   )rn   r   rI   r   r~   r   s     r   rI   Tag.__str__   s6    d#%Dyy""))"<<kr   c                 8   > [        [        [        U ]  5       SS9$ NFrl   )re   rn   r   rI   r>   rs   s    r   as_repositoryTag.as_repository   s     eC.0??r   c                    [        U5      =(       aw    [        U 5      [        U5      :H  =(       aY    U R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ rC   )rO   rP   r6   r   r%   rQ   s     r   rS   
Tag.__eq__   sj    K "J$u+%" MMU^^+" OOu///	"
 HH		!#r   c                 .    U R                  U5      (       + $ rC   rV   rQ   s     r   rW   
Tag.__ne__   rY   r   c                 Z    [        U R                  U R                  U R                  45      $ rC   )r[   r6   r   r%   rE   s    r   r\   Tag.__hash__   s     :;;r   )r   rb   )r
   r   r   r   r   r@   rc   r%   rI   r   rS   rW   r\   r   r   r   s   @r   r   r      s>    <3& $ $@#"< <r   r   c                   p   ^  \ rS rSrSrSU 4S jjrS r\S 5       rU 4S jr	U 4S jr
S rS	 rS
 rSrU =r$ )Digest   z7Stores a docker repository digest in a structured form.c                 h  > UR                  S5      n[        U5      S:w  a  U R                  U5      eUS   U l        [	        U R                  5         [        US   US9n[        [        U ]#  UR                  5       R                  5       US9  g ! [         a    [        [        U ]#  US   US9   g f = f)N@r    r&   r   rl   )rm   r   rx   _digestr.   r   rn   r   r@   r   rI   r   )r>   r   r?   rr   r%   rs   s        r   r@   Digest.__init__   s    JJsOE
5zQ&&t,,8DL$,,<a(cFD"3#4#4#6#>#>#@"P <FD"58F";<s   ;B B10B1c                     [        SU-  5      $ )NzRDocker image name must be fully qualified (e.g.registry/repository@digest) saw: %srv   rw   s     r   rx   Digest._validation_exception  s      BDHI J Jr   c                     U R                   $ rC   r   rE   s    r   r+   Digest.digest  s    <<r   c                 Z   > [         [        U ]  5       nSR                  XR                  S9$ )Nz{base}@{digest})r   r+   )rn   r   rI   r~   r+   r   s     r   rI   Digest.__str__  s*    &(D##kk#BBr   c                 8   > [        [        [        U ]  5       SS9$ r   )re   rn   r   rI   r   s    r   r   Digest.as_repository  s     eFD13EBBr   c                    [        U5      =(       aw    [        U 5      [        U5      :H  =(       aY    U R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ rC   )rO   rP   r6   r   r+   rQ   s     r   rS   Digest.__eq__  sj    K (J$u+%( MMU^^+( OOu///	(
 KK5<<')r   c                 .    U R                  U5      (       + $ rC   rV   rQ   s     r   rW   Digest.__ne__$  rY   r   c                 Z    [        U R                  U R                  U R                  45      $ rC   )r[   r6   r   r+   rE   s    r   r\   Digest.__hash__'  s     =>>r   r   rb   )r
   r   r   r   r   r@   rx   rc   r+   rI   r   rS   rW   r\   r   r   r   s   @r   r   r      sE    ?<J  CC)"? ?r   r   c                     [         [        [        [        4 H  n U" U SS9s  $    [	        SU -  5      e! [         a     M*  f = f)a  Parses the given name string.

Parsing is done strictly; registry is required and a Tag will only be returned
if specified explicitly in the given name string.
Args:
  name: The name to convert.
Returns:
  The parsed name.
Raises:
  BadNameException: The name could not be parsed.
Trl   z7'%s' is not a valid Tag, Digest, Repository or Registry)r   r   re   r:   r   )r   	name_types     r   from_stringr   +  sY     CX6itD)) 7 	 $'+- 	. .  
s   4
AA) r   
__future__r   r   r   ossyssix.moves.urllib.parser0   	Exceptionr   r"   r(   r-   argvpathbasename_APP
USER_AGENTrD   r   r   r#   r)   r.   r8   objectr:   re   r   r   r   r	   r   r   <module>r      s    C &  % 	 
 7y 7 ? P
% ),rww$,t3
"88F1B@# v # L7 7t5<* 5<p2?Z 2?j.r   