
    =e8{                       U d Z ddlmZ dgZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZ ddlmZmZmZmZ ddlmZ ddlmZ dd	lmZ e	j        rddlZ e	j        d
          Z e	j        dd          ZeZded<   e	j        eef         Zded<    ej         d          Z!d)dZ" G d de	j#                  Z$ G d d          Z% G d de%          Z& G d de%          Z' G d d          Z( G d  d!          Z)d*d%Z*d+d(Z+dS ),a  

    anaconda upload CONDA_PACKAGE_1.tar.bz2
    anaconda upload notebook.ipynb
    anaconda upload environment.yml

##### See Also

  * [Uploading a Conda Package](
  https://docs.anaconda.com/anaconda-repository/user-guide/tasks/pkgs/use-pkg-managers/#uploading-a-conda-package)
  * [Uploading a Standard Python Package](
  https://docs.anaconda.com/anaconda-repository/user-guide/tasks/pkgs/use-pkg-managers/#uploading-pypi-packages)

    )annotations
add_parserN)errors)
bool_inputDEFAULT_CONFIG
get_configget_server_api)PackageType)detect)projectsKeyTCacheRecordTCacheRecord)boundztyping_extensions.TypeAlias
PackageKey
ReleaseKeyzbinstar.upload	argumentsargparse.NamespacereturnNonec                   t          |           }|j                                         |j        }	 t	          t          t          j                            | j	                                      D ]}|
                    |           	 |                                 |                                 dS # |                                 |                                 w xY w)z)Entrypoint of the :code:`upload` command.)r   N)Uploaderapicheck_serverusernamesortedset	itertoolschainfrom_iterablefilesuploadprint_uploadscleanup)r   uploader_filenames       >lib/python3.11/site-packages/binstar_client/commands/upload.pymainr)   4   s    !I666HLAs9?#@#@#Q#QRRSS 	& 	&HOOH%%%%	& 	    	   s   AB3 3*Cc                  P    e Zd ZU dZded<   ded<   ded<   ded<   ded<   ded	<   d
S )UploadedPackagez?General details on a package successfully uploaded to a server.r
   package_typestrr   nameversionbasenameurlN)__name__
__module____qualname____doc____annotations__     r(   r+   r+   C   sO         IIMMMIIILLLMMMHHHHHr8   r+   c                  <    e Zd ZdZdZdddZe	 ddd            Zd	S )r   z+Common interface for cached server records.emptyTr;   boolr   r   c                    || _         dS )z.Initialize new :class:`~CacheRecord` instance.Nr:   )selfr;   s     r(   __init__zCacheRecord.__init__S   s     


r8   Nstoragetyping.Dict[KeyT, CacheRecordT]actionBtyping.Optional[typing.Callable[[KeyT, CacheRecordT], typing.Any]]intc                    g }|                                  D ]/\  }}|j        r#|                    |           | |||           0|D ]}|                     |           t	          |          S )z
        Remove all empty records from :code:`storage`.

        Optional :code:`action` function might be called for each instance being removed.
        )itemsr;   appendpoplen)r@   rB   	to_removekeyrecords        r(   r$   zCacheRecord.cleanupW   s     (*	 #==?? 	( 	(KC| (  %%%%F3''' 	 	CKK9~~r8   T)r;   r<   r   r   N)r@   rA   rB   rC   r   rD   )r2   r3   r4   r5   	__slots__r?   staticmethodr$   r7   r8   r(   r   r   N   sd        55I! ! ! ! !  Z^    \  r8   c                  2     e Zd ZdZdZdd fdZddZ xZS )PackageCacheRecordz/Cached details on a package stored on a server.)r.   package_typesTr7   r.   r-   r;   r<   rS   typing.Iterable[PackageType]r   r   c                    t                                          |           || _        t          |          | _        dS )z5Initialize new :class:`~PackageCacheRecord` instance.r:   N)superr?   r.   listrS   )r>   r.   r;   rS   	__class__s       r(   r?   zPackageCacheRecord.__init__v   s;    u%%%'+	7;M7J7Jr8   r,   r
   c                ^    d| _         || j        vr| j                            |           dS dS )z7Update record after a file is uploaded to this package.FN)r;   rS   rG   )r>   r,   s     r(   updatezPackageCacheRecord.update|   s<    
t111%%l33333 21r8   )Tr7   )r.   r-   r;   r<   rS   rT   r   r   )r,   r
   r   r   r2   r3   r4   r5   rO   r?   rZ   __classcell__rX   s   @r(   rR   rR   q   sh        99)IK K K K K K K4 4 4 4 4 4 4 4r8   rR   c                  2     e Zd ZdZdZdd fdZddZ xZS )ReleaseCacheRecordz/Cached details on a release stored on a server.r.   r/   Tr.   r-   r/   r;   r<   r   r   c                h    t                                          |           || _        || _        dS )z5Initialize new :class:`~ReleaseCacheRecord` instance.r:   N)rV   r?   r.   r/   )r>   r.   r/   r;   rX   s       r(   r?   zReleaseCacheRecord.__init__   s0    u%%%'+	*1r8   c                    d| _         dS )z7Update record after a file is uploaded to this release.FNr:   r>   s    r(   rZ   zReleaseCacheRecord.update   s    


r8   rM   )r.   r-   r/   r-   r;   r<   r   r   r   r   r[   r]   s   @r(   r_   r_      sa        99#I2 2 2 2 2 2 2       r8   r_   c                  ^   e Zd ZdZdZd%d	Zed&d
            Zed'd            Zed&d            Z	e	j
        d(d            Z	ed)d            Zed*d            Zed+d            Zed,d            Zed-d            Zed&d            Zej
        d(d            Zd&dZd.d Zd/d0d#Zd/d0d$Zd!S )1PackageMetaz=Collected details on a package file being currently uploaded.)r'   meta__file_attrs__name__package_attrs__release_attrs	__versionr'   r-   rg   detect.Metar   r   c                h    || _         || _        d| _        d| _        d| _        d| _        d| _        dS )z.Initialize new :class:`~PackageMeta` instance.N)r'   rg   _PackageMeta__file_attrs_PackageMeta__name_PackageMeta__package_attrs_PackageMeta__release_attrs_PackageMeta__version)r>   r'   rg   s      r(   r?   zPackageMeta.__init__   s:    +3/3	DH,0JNJN/3r8   c                    | j         j        S )z#File extension of the package file.)rg   	extensionrc   s    r(   ru   zPackageMeta.extension   s     y""r8   detect.FileAttributesc                    | j         |                                  t          j        t          j        | j                   S )z$Attributes of a file being uploaded.)ro   _update_attrstypingcastr   FileAttributesrc   s    r(   
file_attrszPackageMeta.file_attrs   s7     $   {60$2CDDDr8   c                v    | j         |                                  t          j        t          | j                   S )z3Name of a package for which file is being uploaded.)rp   _update_namery   rz   r-   rc   s    r(   r.   zPackageMeta.name   s2     ;{3,,,r8   valuec                0    |                      |           dS ),Update value of a :attr:`~PackageMeta.name`.N)r~   r>   r   s     r(   r.   zPackageMeta.name   s     	%     r8   detect.PackageAttributesc                    | j         |                                  t          j        t          j        | j                   S )z9Attributes of a package for which file is being uploaded.)rq   rx   ry   rz   r   PackageAttributesrc   s    r(   package_attrszPackageMeta.package_attrs   7     '   {63T5IJJJr8   r   c                    | j         S )z0Key for accessing related cached package record.)r.   rc   s    r(   package_keyzPackageMeta.package_key   s     yr8   r
   c                    | j         j        S )z!Type of a package being uploaded.)rg   r,   rc   s    r(   r,   zPackageMeta.package_type   s     y%%r8   detect.ReleaseAttributesc                    | j         |                                  t          j        t          j        | j                   S )z9Attributes of a release for which file is being uploaded.)rr   rx   ry   rz   r   ReleaseAttributesrc   s    r(   release_attrszPackageMeta.release_attrs   r   r8   r   c                    | j         | j        fS )z0Key for accessing related cached release record.r`   rc   s    r(   release_keyzPackageMeta.release_key   s     y$,&&r8   c                v    | j         |                                  t          j        t          | j                   S )z$Version of a package being uploaded.)rs   _update_versionry   rz   r-   rc   s    r(   r/   zPackageMeta.version   s2     >!  """{3///r8   c                0    |                      |           dS )/Update value of a :attr:`~PackageMeta.version`.N)r   r   s     r(   r/   zPackageMeta.version   s     	U#####r8   c                   | j                             di                               dd          }|sV	 | j                             dd                              dd          \  }}n# t          $ r d}Y nw xY w|| j         d         d<   | j         d                             d	d
          }| d| j         d| j         d| | j         | j         d<   | j         d         S )aB  
        Rebuild package basename from its attributes.

        Usually basename contains actual filename being uploaded, which may not include expected metadata in the
        expected format. This function allows to enforce the standard without requiring user to rename the file.

        :return: New basename.
        attrssubdirNr0    /   noarchbuild0-)r|   
setdefaultgetsplit
ValueErrorr.   r/   ru   )r>   r   r&   r   s       r(   rebuild_basenamezPackageMeta.rebuild_basename   s     (,'A'A'2'N'N'R'RS[]a'b'b 	8" O//
B??EEc1MM	 " " "!"17DOG$X._W-88#FF)/&d&d$)&d&ddl&d&dU&dTXTb&d&d
#z**s   2A& &A54A5args
typing.Anykwargsc                   t                               d| j        j                                                   	 t          j        | j        | j        g|R i |\  | _        | _	        | _
        dS # t          $ r^}d| j         d| j        j                                         d}t                               |           t          j        |          |d}~ww xY w)z'Update content of all attribute fields.z#Extracting %s attributes for uploadzTrouble reading metadata from "z". Is this a valid z	 package?N)loggerinfor,   labellowerr   	get_attrsr'   rq   rr   ro   	Exceptionerrorr   BinstarError)r>   r   r   r   messages        r(   rx   zPackageMeta._update_attrs   s
   94;L;R;X;X;Z;Z[[[
	:LRL\!4=M37M M M;AM MID $"68I8I8I  	: 	: 	:N$- N N#'#4#:#@#@#B#BN N N  LL!!!%g..E9	:s   3A. .
C8ACCNtyping.Optional[str]c                   | j                             dd          }|r|r|                                x}g}| j        t          j        u r)|                    |                    dd                     |                                |vrfd|                                 d| j         d                                          d}t          	                    |           t          j        |          |}nR|sPd| j        j                                         d	}t          	                    |           t          j        |          || _        d
S )r   r.   r   r   r&   z"Package name on the command line "z/" does not match the package name in the file ""z/Could not detect package name for package type z!, please use the --package optionN)r   r   r   r,   r
   STANDARD_PYTHONrG   replacer   r   r   r   r   rp   )r>   r   r.   
good_namesr   s        r(   r~   zPackageMeta._update_name  sa   &**6266 	/ 
78<

0D/E
$(CCC%%dll3&<&<===;;==
22nU[[]] n nHLHZ[aHbHhHhHjHjn n n  LL))) -g666DD 	/3$BSBYB_B_BaBa 3 3 3  LL!!!%g...r8   c                    |sm| j                             dd          }|sPd| j        j                                         d}t
                              |           t          j        |          || _	        dS )r   r/   Nz3Could not detect package version for package type "z"", please use the --version option)
r   r   r,   r   r   r   r   r   r   rs   )r>   r   r   s      r(   r   zPackageMeta._update_version(  s     	3&**9d;;E 37$J[JaJgJgJiJi 7 7 7  W%%%)'222r8   )r'   r-   rg   rm   r   r   r   r-   )r   rv   )r   r-   r   r   )r   r   )r   r   )r   r
   )r   r   )r   r   )r   r   r   r   r   r   rN   )r   r   r   r   )r2   r3   r4   r5   rO   r?   propertyru   r|   r.   setterr   r   r,   r   r   r/   r   rx   r~   r   r7   r8   r(   rf   rf      s       GGI
	4 	4 	4 	4 # # # X# E E E XE - - - X- 
[! ! ! [! K K K XK    X & & & X& K K K XK ' ' ' X' 0 0 0 X0 ^$ $ $ ^$+ + + +,: : : :    8      r8   rf   c                     e Zd ZdZdZd*dZed+d	            Zed,d            Zed-d            Z	d.dZ
ddd/dZddd0dZd.dZd1dZd2dZd1dZd3d Zd3d!Zed4d5d%            Zed1d&            Zed6d)            Zd"S )7r   z(Manager for package and project uploads.)r   uploaded_packagesuploaded_projects__api__config
__username__package_cache__release_cacher   r   r   r   c                v    || _         g | _        g | _        d| _        d| _        d| _        i | _        i | _        dS )z+Initialize new :class:`~Uploader` instance.N)r   r   r   _Uploader__api_Uploader__config_Uploader__username_Uploader__package_cache_Uploader__release_cache)r>   r   s     r(   r?   zUploader.__init__@  sD    ;DMOVX>B
JN04Z\Z\r8   binstar_client.Binstarc                ~    | j         0t          | j        j        | j        j        | j                  | _         | j         S )z'Client used to access anaconda.org API.N)tokensiteconfig)r   r	   r   r   r   r   rc   s    r(   r   zUploader.apiM  s8     :'dn.BI\eiepqqqDJzr8   typing.Mapping[str, typing.Any]c                \    | j         t          | j        j                  | _         | j         S )z-Configuration of the :code:`anaconda-client`.N)r   )r   r   r   r   rc   s    r(   r   zUploader.configT  s+     = &DN,?@@@DM}r8   r-   c                   | j         d}| j        j        pd}|s| j                            dd          x}rd}|rj	 | j                            |           nm# t          j        $ r<}d| d| }t          	                    |           t          j
        |          |d}~ww xY w| j                                        d         }t                              d||           || _         | j         S )	zDName of the user or organization to upload packages and projects to.Nr   upload_userz  (from "upload_user" preference)zUser "" does not existloginzUsing "%s" as upload username%s)r   r   userr   r   r   r   NotFoundr   r   r   r   )r>   detailsr   r   r   s        r(   r   zUploader.username[  s	    ?"G N/52H =t{}b/Q/Q#Q8 =< 4BHMM(++++ B B B#OH#O#Og#O#OGLL))) -g66EAB
  8==??73KK98WMMM&DOs   A B"&7BB"c                     d fd}d fd
}t                                j        |           t                                j        |           dS )z
        Remove empty releases and packages.

        Package or release considered to be empty if it was created to upload files to, but all file uploads failed.
        _keyr   rL   r_   r   r   c                t   	 j                             j        |j        |j                                      dg           sSt                              d|j        |j                   j                             j        |j        |j                   d S d S # t          t          t          j        f$ r Y d S w xY w)Ndistributionsz2Removing empty "%s/%s" release after failed upload)r   releaser   r.   r/   r   r   r   remove_releaseAttributeError	TypeErrorr   r   r   rL   r>   s     r(   remove_empty_releasez.Uploader.cleanup.<locals>.remove_empty_releasev  s    x''v{FNSSWWXgikll XKK TV\VacicqrrrH++DM6;WWWWWX X #Iv?   s   BB B76B7r   rR   c                P   	 j                             j        |j                                      dg           sGt
                              d|j                   j                             j        |j                   d S d S # t          t          t          j        f$ r Y d S w xY w)Nr!   z/Removing empty "%s" package after failed upload)r   packager   r.   r   r   r   remove_packager   r   r   r   r   s     r(   remove_empty_packagez.Uploader.cleanup.<locals>.remove_empty_package~  s    x''v{CCGGQSTT HKK QSYS^___H++DM6;GGGGGH H #Iv?   s   A>B B%$B%N)r   r   rL   r_   r   r   )r   r   rL   rR   r   r   )r   r$   r   r   )r>   r   r   s   `  r(   r$   zUploader.cleanupp  s{    	 	 	 	 	 		 	 	 	 	 	 	D02FGGGD02FGGGGGr8   F)forcerg   rf   r   r<   rR   c               `   |j         }|s| j                            |d          x}r|S 	 | j                            | j        |j                  }t          |j        dt          t          t          |                    dd                                        }n# t          j        $ ru}| j        j        sBd| j         d|j         d}t                              |           t          j        |          || j        j        }|n|j                            d	d          x}Qd
|j        j                                         d}t                              |           t          j        |          || j                            | j        |j        ||j                            d          | j        j         |j        |j                            d          |j                            d          |j        	  	         t          |j        dg           }Y d}~nd}~ww xY w|| j        |<   |S )zs
        Retrieve details on a package from the server.

        If not forced - may return cached record.
        NFrS   r7   )r.   r;   rS   zAnaconda repository package r   zf does not exist. Please run "anaconda package --create" to create this package namespace in the cloud.summaryz2Could not detect package summary for package type z!, please use the --summary optionlicenselicense_urllicense_family)publicr   r   r   r,   T)r   r   r   r   r   r   r.   rR   rW   mapr
   r   r   r   auto_registerr   r   	UserErrorr   r   r,   r   r   r   add_packageprivate)	r>   rg   r   rK   cache_recordinstancer   r   r   s	            r(   get_packagezUploader.get_package  sc    )-(8 	 D,@,D,DS$,O,OOL 	 $	\8<8H8HX\Xa8b8bH-Y"3{HLLRT4U4U#V#VWW  LL
  	\ 	\ 	\>/ ;m4= m m49 m m m  W%%%&w//U:,0N,BG$2D2H2HTX2Y2Y'Yw&b7IZI`IfIfIhIh 7 7 7  W%%%)'22=H  	"&&y11>11( .22=AA#1556FGG!. ! 
 
 
 .49DXZ[[[LLLLLL;	\> %1S!s   A0B H!,E+HH!r_   c          	        |j         }|s| j                            |d          x}r|S 	 | j                            | j        |j        |j                   | j        j	        r1| j        
                    | j        |j        |j        |j                   t          |j        |j        d          }n# t          j        $ r d}| j        j        dk    rt                               d| j        |j        |j                   t%          d          s*t                               d           t'          d          dt                               d	           t%          d
d          rt)          d          }| j                            | j        |j        |j        g ||j                   t          |j        |j        d          }Y nw xY w|| j        |<   |S )zs
        Retrieve details on a release from the server.

        If not forced - may return cached record.
        NF)r.   r/   r;   interactivez%The release "%s/%s/%s" does not existz Would you like to create it now?zgood-byez4Announcements are emailed to your package followers.z@Would you like to make an announcement to the package followers?zMarkdown Announcement:
T)r   r   r   r   r   r   r.   r/   r   force_metadata_updateupdate_releaser   r_   r   r   moder   r   r   
SystemExitinputadd_release)r>   rg   r   rK   r   announces         r(   get_releasezUploader.get_release  s    )-(8 	 D,@,D,DS$,O,OOL 	 	`HT]DIt|DDD~3 d''ty$,PTPbccc-49dlZ_```LL 	` 	` 	`-1H~"m33CT]TXT]_c_klll!"DEE 3KK
+++$R..d2RSSS`bghh A$%?@@HH  	4<XW[Wijjj-49dlZ^___LLL	` %1S!s   BB0 0DGGc                    | j         D ]A}t                              d|d         j                                        |d                    B| j        D ]*}t                              d|d         |d                    +dS )z<Print details on all successful package and project uploads.z%s located at:
  %s
r,   r1   zProject %s uploaded to:
  %s
r.   N)r   r   r   r   r   r   )r>   package_infoproject_infos      r(   r#   zUploader.print_uploads  s     !2 	s 	sLKK0,~2N2T2Z2Z2\2\^jkp^qrrrr !2 	f 	fLKK9<;OQ]^cQdeeee	f 	fr8   r'   c                   t           j                            |          s4d| d}t                              |           t          j        |          t                              d|           |                     || j	        j
        ot          | j	        j
                            }|j
        t          j        u r|                     |          S |                     ||          S )zUpload a file to the server.zFile "r   zProcessing "%s")r,   )ospathexistsr   r   r   r   r   detect_package_metar   r,   r
   PROJECTupload_projectupload_package)r>   r'   r   package_metas       r(   r"   zUploader.upload  s    w~~h'' 	/>H>>>GLL!!!%g...%x000$($<$<4aT^E`9a9a %= %
 %

 $(;;;&&x000""8\:::r8   r
  rm   c                n   |j         t          j        u r'| j        j        dk    r|                     |          sdS t          ||          }|                    | j                   |                    | j        j	                   |
                    | j        j                   | j        j        (| j        j        |j                            di           d<   | j        j        | j        j        |j        d<   | j        j        | j        j        |j        d	<   |j         t          j        u r | j        j        s|                                 |                     |          sdS t,                              d
|j                   |                     |          }|                     ||j                   sdS t,                              d|j                   |                     |           t,                              d| j        |j        |j        |j        d                    |                     |          S )zUpload a package to the server.r   F)r'   rg   )parser_argsNr   binstar_buildr   descriptionzCreating package "%s"zCreating release "%s"zUploading file "%s/%s/%s/%s"r0   )r,   r
   NOTEBOOKr   r   validate_notebookrf   rx   r~   r   r   r/   build_idr|   r   r   r   r  CONDAkeep_basenamer   _check_filer   r   r.   r   validate_package_typer   r   _upload_file)r>   r'   r
  rg   r   s        r(   r	  zUploader.upload_package  s    )[-AAA#w..**844 / 5'MMMt~666$.0111T^3444>".GK~G^DO&&w33OD>!-,0N,BDy)>%1040JD}-!222T^=Y2!!###%% 	5+TY777&*&6&6t&<&<))'43DEE 	5+T\:::2DM49dl\`\klv\wxxx  &&&r8   c                z    t          j        || j        | j                  }| j                            |           dS )zUpload a project to the server.T)r   r  r   r   r   rG   )r>   r'   uploaded_projects      r(   r  zUploader.upload_project  s<    5=5LXW[Wegkgt5u5u%%&6777tr8   c                4   |j         d         }	 | j                            | j        |j        |j        |           n# t          j        $ r Y dS w xY w| j        j	        dk    rt                              d           dS | j        j	        dk    rIt                              d|           | j                            | j        |j        |j        |           dS | j        j	        dk    r^t          d	| d
          r.| j                            | j        |j        |j        |           dS t                              d|           dS t                              d| j        |j        |j        |           t          j        d| d|j         d|j         d          )r   r0   Tskipz.Distribution already exists. Skipping upload.
Fr   z+Distribution "%s" already exists. Removing.r   zDistribution "z/" already exists. Would you like to replace it?zNot replacing distribution "%s"zzDistribution already exists. Please use the -i/--interactive or --force or --skip options or `anaconda remove %s/%s/%s/%s`zfile z already exists for package z	 version i  )r|   r   distributionr   r.   r/   r   r   r   r   r   r   warningremove_distr   Conflict)r>   rg   r0   s      r(   r  zUploader._check_file$  s   
3	H!!$-DL(SSSS 	 	 	44	 >&((KKIJJJ5>'))NNH(SSSH  	4<RRR4>-//d8dddee $$T]DIt|XVVVtKK98DDD5p M49dlH	
 	
 	
 onhnnDInn`d`lnnpsttts   ,< AAc                   |j         d         }|j                             d|j                  }t          |j        d          5 }| j                            | j        |j        |j	        |||| j
        j        |j                             d          |j         d         | j
        j        
  
        }ddd           n# 1 swxY w Y   | j                            |j        | j        |j        |j	        ||                    dd	| j         d
|j                   d           | j        |j                                     |j                   | j        |j                                                  t*                              d           dS )zYPerform upload of a file after its metadata and related package and release are prepared.r0   binstar_package_typerbdependenciesr   )r"  r   channelsNr1   zhttps://anaconda.org/r   )r,   r   r.   r/   r0   r1   zUpload complete
T)r|   rH   r,   openr'   r   r"   r   r.   r/   r   r  r   labelsr   rG   r   r   rZ   r   r   r   r   )r>   rg   r0   r,   streamresults         r(   r  zUploader._upload_fileE  s   
37;7J7JKacgct7u7u $-&& 	&6:hoo	*!_00@@og.. 7F 7 7F	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	%% -I| ::e%XT]%X%XTY%X%XYY'
 '
 	 	 	 	T-.55d6GHHHT-.55777'(((ts   A+B::B>B>Nr,   typing.Optional[PackageType]c                   |t                               d           t          j        |           }|4d| d}t                               |           t          j        |          t                               d|j        j                   nPt          j	        | |          }|9t          j
        |t          j                            |           d                   }|S )z1Detect primary details on package being uploaded.NzDetecting file type...z&Could not detect package type of file z7 please specify package type with option --package-typezFile type is "%s"r   )r,   ru   )r   r   r   r  r   r   r   r,   r   complete_package_metaMetar  r  splitext)r'   r,   r'  r   s       r(   r  zUploader.detect_package_metaf  s     KK0111%+%?%I%IF~NX N N N  W%%%)'222KK+V-@-FGGGG1(LIIF~,"'JZJZ[cJdJdefJghhhr8   c                8   	 t          | dd          5 }t          j        |t          j                   ddd           n# 1 swxY w Y   nN# t          $ rA}t
                              d| |           t
                              d           Y d}~dS d}~ww xY wdS )	z"Check if file is a valid notebook.rtutf8)encodingNzInvalid notebook file "%s": %sz&Use --force to upload the file anywaysFT)r$  nbformatread
NO_CONVERTr   r   r   r   )r'   r&  r   s      r(   r  zUploader.validate_notebookz  s    	hv666 ;&fh&9:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; 	 	 	LL98UKKKKK@AAA55555	 ts9   A  A A  AA AA 
B6BBr   r
   c                   | j         sdS || j         v rdS t          j        t          j        hfD ]#}|                    | j                   s||v r dS $d| j         d         j                                         d| j         d|j                                         d}t          	                    |           t          j        |          )zKCheck if file of :code:`package_type` might be uploaded to :code:`package`.TzYou already have a r   z named "z!". Use a different name for this .)rS   r
   r  r   
isdisjointr   r   r.   r   r   r   r   )r   r,   groupr   s       r(   r  zUploader.validate_package_type  s     $ 	470004 #(+*EFG 	 	E$$W%:;; ,RWBWBWttK'"7":"@"F"F"H"H K KRYR^ K K-9-?-E-E-G-GK K K 	 	W!'***r8   r   r   r   r   )r   r   )r   r   r   rd   )rg   rf   r   r<   r   rR   )rg   rf   r   r<   r   r_   )r'   r-   r   r<   )r'   r-   r
  rm   r   r<   )rg   rf   r   r<   rN   )r'   r-   r,   r(  r   rm   )r   rR   r,   r
   r   r<   )r2   r3   r4   r5   rO   r?   r   r   r   r   r$   r   r   r#   r"   r	  r  r  r  rP   r  r  r  r7   r8   r(   r   r   7  s       22I] ] ] ]    X    X    X(H H H H2 ?D 2 2 2 2 2 2h ?D            Df f f f; ; ; ;""' "' "' "'H   u u u uB   B     \& 
 
 
 \
 + + + \+ + +r8   r   itemr-   typing.List[str]c                    t           j        dk    r-t          d | D                       rt          j        |           S | gS )z3Expand file patterns to lists of actual file names.ntc              3     K   | ]}|d v V  	dS )z*?Nr7   ).0	characters     r(   	<genexpr>z pathname_list.<locals>.<genexpr>  s'       I Iyd!2 I I I I I Ir8   )r  r.   anyglob)r9  s    r(   pathname_listrC    s=    
4S I ID I I IIIy6Mr8   
subparsersr   c                   d}|                      dt          j        ||t                    }|                    dddg t
                     d}|                    d	d
dg d|                    dd          d           |                    dddd|                    dd                     |                    ddd           |                    ddd           |                    dd d!d"           |                    d#          }|                    d$d%d&           |                    d'd(d)           |                    d*d+d,           |                    d-d.d/           |                    d0d1d2           |                    d3d4           |                    d5d6d           |                                }|                    d7d8d9d:;           |                    d<d8dd=;           |	                    t          j        d8d>          ?           |                    d@dA           |                                }|                    dBdCdDdEdFdGH           |                    dIdJdKdDdFdLM           |                    dNdOdDdFdPM           |                    dQdRdDdFdSM           |                    dTdUddVW           |	                    t          X           dYS )Zz6Register an :code:`upload` command in the application.z+Upload packages to your Anaconda repositoryr"   )formatter_classhelpr  epilogr!   +zDistributions to upload)nargsrG  defaulttypez{deprecation}Add this file to a specific {label}. Warning: if the file {label}s do not include "main", the file will not show up in your user {label}z-cz	--channelrG   r%  z[DEPRECATED]
channel)deprecationr   CHANNELS)rB   rK  destrG  metavarz-lz--labelr   r   )rB   rP  rG  z--no-progresszDon't show upload progress
store_true)rG  rB   z-uz--userz:User account or Organization, defaults to the current user)rG  z--keep-basenamer  z;Do not normalize a basename when uploading a conda package.)rP  rG  rB   zmetadata optionsz-pz	--packagez1Defaults to the package name in the uploaded filez-vz	--versionz4Defaults to the package version in the uploaded filez-sz	--summaryzSet the summary of the packagez-tz--package-typez,Set the package type. Defaults to autodetectz-dz--descriptionzdescription of the file(s)z--thumbnailzNotebook's thumbnail imagez	--privatez&Create the package with private accessz--no-registerr   store_falsez9Don't create a new package namespace if it does not exist)rP  rB   rG  z
--registerz3Create a new package namespace if it does not existT)r   z
--build-idz,Anaconda repository Build ID (internal only)z-iz--interactivestore_constz5Run an interactive prompt if any packages are missingr   r   )rB   rG  rP  constz-fz--failz5Fail if a package or release does not exist (default)fail)rG  rB   rP  rU  z--forcez+Force a package upload regardless of errorsr   z--skip-existingz8Skip errors on package batch upload if it already existsr  z-mz--force-metadata-updatezGOverwrite existing release metadata with the metadata from the package.)rB   rG  )r)   N)r   argparseRawDescriptionHelpFormatterr5   add_argumentrC  formatadd_argument_groupadd_mutually_exclusive_groupset_defaultsr   r   r)   )rD  r  parser
label_helpmgroupregister_groupr7  s          r(   r   r     sM   DK&0&;&; <k	 '< ' 'F s1JTV]jkkk	9  k+;9MM     i2W==	     )    
 hI     J	     &&'9::F
k@     kC     k-     ;     o)     )     5     88::NH	      B	      n&8$&O&OPPP
;    
 //11E	oD     
hD     
:     
G     
'V     T"""""r8   r8  )r9  r-   r   r:  )rD  r   r   r   ),r5   
__future__r   __all__rW  rB  r   loggingr  ry   r1  binstar_clientr   binstar_client.utilsr   r   r   r	   binstar_client.utils.configr
   r   r   TYPE_CHECKINGtyping_extensionsTypeVarr   r   r-   r   r6   Tupler   	getLoggerr   r)   	TypedDictr+   r   rR   r_   rf   r   rC  r   r7   r8   r(   <module>rn     s     # " " " " ".        				       ! ! ! ! ! ! W W W W W W W W W W W W 3 3 3 3 3 3 ' ' ' ' ' ' ) ) ) ) ) )	  v~fv~nMBBB*-
 - - - -*0,sCx*@
 @ @ @ @ 
	+	,	,       f&                  F4 4 4 4 4 4 4 4$        a a a a a a a aHc+ c+ c+ c+ c+ c+ c+ c+L   F# F# F# F# F# F#r8   