
    T                        d Z ddlmZ ddlmZ ddlm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 dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ej2                   ej4                  ej6                  j8                  ej6                  j:                  ej6                  j<                         G d dej>                                      Z y)zCImplements the command to upload Generic artifacts to a repository.    )absolute_import)division)unicode_literalsN)transfer)
exceptions)apis)waiter)base)flags)util)log)
properties)	resources)scaled_integerc                   :    e Zd ZdZdZdddZed        Zd Zd Z	y	)
Uploadz,Uploads an artifact to a generic repository.v1z{description}aR      To upload version v0.1.0 of a generic artifact located in /path/to/file/ to a repository in "us-central1":

        $ {command} --location=us-central1 --project=myproject --repository=myrepo           --package=mypackage --version=v0.1.0 --source=/path/to/file/

    To upload version v0.1.0 of a generic artifact located in /path/to/file/ to a repository in "us-central1" within a folder structure:

        $ {command} --location=us-central1 --project=myproject --repository=myrepo           --package=mypackage --version=v0.1.0 --source=/path/to/file/ --destination-path=folder/file
    )DESCRIPTIONEXAMPLESc                    t        j                         j                  |        t        j                         j                  |        t        j
                  j                  |        | j                  dd      }| j                  dddd       | j                  dddd	       | j                  d
ddd       |j                  ddd       |j                  ddd       y)z[Set up arguments for this command.

    Args:
      parser: An argparse.ArgumentPaser.
    T)mutexrequiredz	--packagePACKAGEzThe package to upload.)metavarr   helpz	--versionVERSIONzWThe version of the package. You cannot overwrite an existing version in the repository.z--destination-pathDESTINATION_PATHFzRUse to specify the path to upload a generic artifact to within a folder structure.z--sourceSOURCEz'The path to the file you are uploading.)r   r   z--source-directorySOURCE_DIRECTORYz The directory you are uploading.N)r   GetRequiredRepoFlagAddToParserGetSkipExistingFlagr
   
ASYNC_FLAG	add_groupadd_argument)parsergroups     'lib/surface/artifacts/generic/upload.pyArgszUpload.Args<   s     
++F3	++F3OO'4$7E
%	  '
 J   "5   
6  8 
"/  1    c           	         t        j                  d| j                        }|j                  }|j                  }|j
                  }|r!|j                  rt        j                  d      |r!|j                  rt        j                  d      |r| j                  ||||      S |rt        j                  j                  t        j                  j                  |            |_        t        j                  j                  |j                        st        j                  d      t         j"                  j%                  dj'                  |             t        j(                  |j                        D ]@  \  }}}|D ]5  }		 | j                  |t        j                  j+                  ||	      ||       7 B yy# t,        j.                  $ r9}
|j                  r'dt1        |
      v rt!        j2                  d       Y d}
~
 d}
~
ww xY w)	z(Run the generic artifact upload command.artifactregistryz3Asynchronous uploads not supported for directories.z7Skip existing is not supported for single file uploads.z,Specified path is not an existing directory.zUploading directory: {}zalready existsz6File with the same package and version already exists.N)r   GetClientInstanceapi_versionMESSAGES_MODULEsource_directorysourceasync_ar_exceptionsInvalidInputValueErrorskip_existinguploadArtifactospathnormpath
expanduserisdirr   statusPrintformatwalkjoinr	   OperationErrorstrwarning)selfargsclientmessages
source_dirsource_filer8   _filesfilees              r(   Runz
Upload.Runh   s    ##$68H8HIF%%H&&J++Kdkk00
?  t))00
C    {FHEE	 !gg..rww/A/A*/MNdWW]]400122: 	 
jj077
CDGGD$9$9:.$5D
rww||D$/&(  ; 
  && !!&6#a&&@kkJ s   =2F55H.G<;G<<Hc                 z   t        j                  t        j                  j                  j
                  j                               }|j                  j                  j                         }|j                  rt        j                  j                  |      }|j                  rt        j                  j                  |j                        }t        j                  j!                  |t        j                  j                  |            }np|t#        |j$                        dz   d  }|j                  rIt        j                  j                  |j                        }t        j                  j!                  ||      }|j'                  t        j(                  d      }|j+                  |j-                  |j.                  |j0                  |      |j3                               }	t5        j6                  |      }
t8        j:                  j=                  ||
|      }|j>                  j;                  |	|      }|j@                  }tB        jD                  jG                  |jH                  d      }|jJ                  r|S tM        jN                  tM        jP                  |jR                        |d	jU                  |            }|S )
N   /)	packageId	versionIdfilename)uploadGenericArtifactRequestparent)	mime_type	chunksize)uploadz.artifactregistry.projects.locations.operations)
collectionzUploading file: {})+r   ParseIntegerr   VALUESstorageupload_chunk_sizeGetCONCEPTS
repositoryParser1   r7   r8   basenamedestination_pathr9   r@   lenr0   replacesepJArtifactregistryProjectsLocationsRepositoriesGenericArtifactsUploadRequestUploadGenericArtifactRequestpackageversionRelativeNamer   GetMimetyper   r   FromFile0projects_locations_repositories_genericArtifacts	operationr   REGISTRYParseRelativeNamenamer2   r	   WaitForCloudOperationPollerNoResourcesprojects_locations_operationsr>   )rD   rE   	file_pathrF   rG   rX   repo_ref	file_namer8   requestrW   rY   op_objopop_refresults                   r(   r6   zUpload.uploadArtifact   s3   ++!!33779I }}''--/H {{''""9-i			ww 5 56GGLLrww'7'7	'BC	 C 5 56q89:i			ww 5 56GGLLy1	 !!"&&#.Iaa%-%J%Jllll &K &  $$& b (G   +I__%%Y) & =FDDKK L  F			B11
L 2 NF {{m~~

0
02245;

%
%i
02f mr*   N)
__name__
__module____qualname____doc__r.   detailed_helpstaticmethodr)   rN   r6    r*   r(   r   r   $   s=    
 5+ %
- )1 )1V,\3r*   r   )!r   
__future__r   r   r   r7   apitools.base.pyr    googlecloudsdk.api_lib.artifactsr   r3   googlecloudsdk.api_lib.utilr   r	   googlecloudsdk.callioper
   $googlecloudsdk.command_lib.artifactsr   r   googlecloudsdk.corer   r   r   googlecloudsdk.core.utilr   DefaultUniverseOnlyReleaseTracksReleaseTrackALPHABETAGACommandr   r   r*   r(   <module>r      s    J &  ' 	 % H , . ( 6 5 # * ) 3 T..33T5F5F5I5IaT\\ a ar*   