
                            S r SSKJr  SSKJr  SSKJr  SSKrSSKJr  SSKJ	r	  SSKJ
r  SS	KJr  SS
KJr  SSKJ
r  SSKJr  SSKJ
r  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKrSrSS jrSS jr SS jr!S r"S r#S r$S r%S r&g)z1Common helper methods for Life Sciences commands.    )absolute_import)division)unicode_literalsN)DecodeError)encoding)
exceptions)extra_types)transfer)apis)log)
properties)yaml)resource_printer)fileszgs://c                 N    [         R                  " U /U[        R                  S9  g)zPrints the given resource.)	resourcesprint_formatoutN)r   Printr   r   )resourcer   s     <lib/googlecloudsdk/api_lib/lifesciences/lifesciences_util.pyPrettyPrintr   +   s    

''    c                 0    [         R                  " SU 5      $ Nlifesciences)	core_apisGetClientInstanceversions    r   GetLifeSciencesClientr!   3       		$	$^W	==r   c                 0    [         R                  " SU 5      $ r   )r   GetMessagesModuler   s    r   GetLifeSciencesMessagesr%   7   r"   r   c                  d    [         R                  R                  R                  R	                  SS9$ )NT)required)r   VALUEScoreprojectGet r   r   GetProjectIdr-   ;   s(    						'	'	+	+T	+	::r   c                 ,    U R                  [        5      $ )N)
startswith
GCS_PREFIX)paths    r   	IsGcsPathr2   ?   s    		$$r   c           
         [        U 5      (       a  [        R                  " SS9nUR                  5         [	        U 5      u  pE[
        R                  " SS5      nUR                  XES9n [        R                  R                  UR                  SS9nUR                  R                  XxS9  AUR                  n [*        R,                  " U 5      n
U
(       d%  [         R"                  " SR%                  U 5      5      e [.        R0                  " U[2        R4                  " U
5      5      nU$ ! [        R                   a?  n	[         R"                  " S	R%                  U [&        R(                  " U	5      5      5      eS
n	A	ff = f! [6        [8        [2        R:                  4 am     [.        R<                  " X5      n U$ ! [6        [>        4 a?  n	[         R"                  " SR%                  U [&        R(                  " U	5      5      5      eS
n	A	ff = ff = f)ay  Reads a YAML or JSON object of type message from path (local or GCS).

Args:
  path: A local or GCS path to an object specification in YAML or JSON format.
  message: The message type to be parsed from the file.
  client: The storage_v1 client to use.

Returns:
  Object of type message, if successful.
Raises:
  files.Error, lifesciences_exceptions.LifeSciencesInputFileError
F)deletestoragev1)bucketobjectT)	overwrite)downloadz-Unable to read remote file [{0}] due to [{1}]NzEmpty file [{0}]zGPipeline file [{0}] is not properly formatted YAML or JSON due to [{1}]) r2   tempfileNamedTemporaryFileclose_SplitBucketAndObjectr   r$   StorageObjectsGetRequestr
   DownloadFromFilenameobjectsr+   apitools_exceptions	HttpErrorlifesciences_exceptionsLifeSciencesInputFileErrorformatsix	text_typer   ReadFileContentsr   PyValueToMessager   load
ValueErrorAttributeErrorYAMLParseErrorJsonToMessager   )r1   messageclienttfr7   objstorage_messagesget_requestr:   ein_textresults               r   GetFileAsMessager[   C   s    t__		$	$E	2BHHJ'-KF 229dC";; < #K'""++BGGt+Dhnn8

 77D ""4('	
!
<
<!!$') )
9&&w		'0BCF 
-1 (( '#>>
9
@
@CMM!$&' '' nd&9&9	: 99%%g7f 
- $ 9 $>>cmmA&679 999sC   )AD' :+E= 'E:;:E55E:=H	F66H:H  HH	c                     / nU c  U$ [        [        R                  " U 5      5       H  u  p4UR                  U" X4S95        M     U$ )N)keyvalue)sortedrI   	iteritemsappend)argdictrR   rZ   kvs        r   !ArgDictToAdditionalPropertiesListre   x   sC    &_M S]]7+,da
MM'a)* -	-r   c                     U [        [        5      S R                  S5      R                  SS5      n[        U5      S:w  a%  [        R
                  " SR                  U 5      5      eU$ )zHSplit a GCS path into bucket & object tokens, or raise BadFileException.N/      z.[{0}] is not a valid Google Cloud Storage path)lenr0   stripsplitcalliope_exceptionsBadFileExceptionrH   )gcs_pathtokenss     r   r>   r>      s_    C
O$%++C066sA>&[A

.
.8??IK K	-r   )json)v2beta)'__doc__
__future__r   r   r   r;   #apitools.base.protorpclite.messagesr   apitools.base.pyr   r   rD   r	   r
   #googlecloudsdk.api_lib.lifesciencesrF   googlecloudsdk.api_lib.utilr   r   googlecloudsdk.callioperm   googlecloudsdk.corer   r   r   googlecloudsdk.core.resourcer   googlecloudsdk.core.utilr   rI   r0   r   r!   r%   r-   r2   r[   re   r>   r,   r   r   <module>r}      sn     8 &  '  ; % > ( % U 9 E # * $ 9 * 

>>;%2jr   