
    ;                     (   S r SSK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rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"S r#S r$S r%S r&S r'S  r(S! r)S" r*S# r+S$ r,S% r-S& r.S' r/S( r0g))z;Client for interaction with DataTaxonomy API CRUD DATAPLEX.    N)encoding)util)
exceptions)iam_util)yaml)filesc                     [         R                  " 5       nUR                  U R                  U R                  U R
                  S9nU$ )z-Generate Resource Access Spec From Arguments.)ownersreaderswriters)dataplex_apiGetMessageModule'GoogleCloudDataplexV1ResourceAccessSpecresource_ownersresource_readersresource_writers)argsmoduleresource_access_specs      4lib/googlecloudsdk/api_lib/dataplex/data_taxonomy.pyGenerateResourceAccessSpecr      sJ    ((*&GG!!#### H % 
    c                 b    [         R                  " 5       nUR                  U R                  S9nU$ )z)Generate Data Access Spec From Arguments.)r   )r   r   #GoogleCloudDataplexV1DataAccessSpecdata_readers)r   r   data_access_specs      r   GenerateDataAccessSpecr   (   s6    ((*&?? @ !	r   c                     [         R                  " 5       nUR                  U R                  U R                  [         R
                  " UR                  U 5      S9nU$ )zCreate Data Taxonomy Requests.)descriptiondisplayNamelabels)r   r   !GoogleCloudDataplexV1DataTaxonomyr   display_nameCreateLabelsr   r   requests      r   $GenerateDataTaxonomyForCreateRequestr'   0   sW    ((*&44""##&&v'O'O'+- 5 .'
 
.r   c           	          [         R                  " 5       nUR                  U R                  U R                  U R
                  [         R                  " UR                  U 5      S9$ )zUpdate Data Taxonomy Requests.)r   r    etagr!   )r   r   r"   r   r#   r)   r$   )r   r   s     r   $GenerateDataTaxonomyForUpdateRequestr*   ;   sZ    ((*&		1	1""##99&&v'O'O'+-	 
2 
. .r   c                     / nU R                  S5      (       a  UR                  S5        U R                  S5      (       a  UR                  S5        U R                  S5      (       a  UR                  S5        U$ )$Create Update Mask for DataTaxonomy.r   r#   r    r!   IsSpecifiedappendr   update_masks     r   GenerateUpdateMaskr2   F   sj    +	m$$}%	n%%}%	hx 	r   c                 z   / nU R                  S5      (       a  UR                  S5        U R                  S5      (       a  UR                  S5        U R                  S5      (       a  UR                  S5        U R                  S5      (       a  UR                  S5        U R                  S5      (       a  UR                  S5        U R                  S	5      (       a  UR                  S
5        U R                  S5      (       a  UR                  S5        U R                  S5      (       a  UR                  S5        U$ )r,   r   r#   r    r!   parentparentIdr   zresourceAccessSpec.readersr   zresourceAccessSpec.writersr   zresourceAccessSpec.ownersr   zdataAccessSpec.readersr-   r0   s     r   GenerateAttributeUpdateMaskr6   R   s   +	m$$}%	n%%}%	hx 	hz"	())34	())34	'((23	n%%/0	r   c                 ,   / nU R                  S5      (       a  UR                  S5        U R                  S5      (       a  UR                  S5        U R                  S5      (       a  UR                  S5        U R                  S5      (       a  UR                  S5        U R                  S5      (       a  UR                  S5        U R                  S5      (       a  UR                  S5        U R                  S	5      (       a  UR                  S	5        U$ )
z,Create Update Mask for DataAttributeBinding.r   r#   r    r!   resource_attributes
attributespathspath_file_namer)   r-   r0   s     r   "GenerateAttributeBindingUpdateMaskr<   h   s    +	m$$}%	n%%}%	hx 	+,,|$	gw	&''w	fv	r   c                     [         R                  " 5       nUR                  UR                  UR                  [        X5      [        U5      [        U5      [         R                  " UR                  U5      S9nU$ )zCreate Data Attribute Requests.)r   r    r5   resourceAccessSpecdataAccessSpecr!   )	r   r   "GoogleCloudDataplexV1DataAttributer   r#   ResolveParentIdr   r   r$   data_attribute_refr   r   r&   s       r   %GenerateDataAttributeForCreateRequestrD   |   sr    ((*&55""## 183D9+D1&&

3
3T; 6 	<' 
.r   c                     UR                  S5      (       aR  UR                  R                  S5      S:X  a3  U R                  5       R	                  SS5      S   S-   UR                  -   $ UR                  $ )Nr4   /   r   )r.   r4   findRelativeNamersplit)rC   r   s     r   rA   rA      sn    
x  T[[%5%5c%:b%@** 

&a.!"$(KK0 0 ;;r   c                 
   [         R                  " 5       nUR                  UR                  UR                  [        X5      [        U5      [        U5      UR                  [         R                  " UR                  U5      S9nU$ )z7Generate attributes for Update Data Attribute Requests.)r   r    r5   r>   r?   r)   r!   )
r   r   r@   r   r#   rA   r   r   r)   r$   rB   s       r   %GenerateDataAttributeForUpdateRequestrM      sw    ((*&55""##183D9+D199&&

3
3T; 6 <' 
.r   c                     U R                  S5      (       a   [        U R                  U R                  5      $ [	        U 5      $ )z%Generate Data Attribute Binding Path.r;   )r.   $GenerateAttributeBindingPathFromFiler;   path_file_format%GenerateAttributeBindingPathFromParam)r   s    r   GenerateAttributeBindingPathrR      s?    	&''/T224 4 166r   c           	          [         R                  " 5       n/ nU R                  bP  U R                   H@  nUR                  UR	                  UR                  S5      UR                  S5      S95        MB     U$ )z*Create Path from specified path parameter.namer9   )rT   r9   )r   r   r:   r/   -GoogleCloudDataplexV1DataAttributeBindingPathget)r   r   attribute_binding_pathpaths       r   rQ   rQ      so    ((*&	ZZ

##

>
>88F#,/ ?   
 r   c                 T   [         R                  R                  U 5      (       d%  [        R                  " SR                  U 5      5      e[         R                  R                  U 5      (       a%  [        R                  " SR                  U 5      5      e [        R                  " U 5       n[        X!5      sSSS5        $ ! , (       d  f       g= f! [         aM  n[        US[        R                  " U5      5      nSR                  X5      n[        R                  " U5      eSnAff = f)z Create Path from specified file.zNo such file [{0}]z[{0}] is a directoryNmessagezBUnable to read Path config from specified file [{0}] because [{1}])osrX   existsr   BadFileExceptionformatisdirr   
FileReaderConvertPathFileToProto	Exceptiongetattrsix	text_type)r;   rP   import_fileexpexp_msgmsgs         r   rO   rO      s    		'	'

%
%&:&A&A'  WW]]>""

%
%&<&C&C'  +			.	)[#KB 
*	)	)	 +c9cmmC&89G!!'!@ 

%
%c
**	+s7   C *B?5	C ?
C	C C 
D'AD""D'c                    US:X  a  [         R                  " U 5      nO [        R                  " U 5      n[        R                  " 5       R                  n/ nUS    H(  nUR                  [        R                  " XF5      5        M*     U$ ! [         a>  n[        R
                  " SR                  [        R                  " U5      5      5      eSnAff = f)a  Construct a DataAttributeBindingPath from a JSON/YAML formatted file.

Args:
  path_file_path: Path to the JSON or YAML file.
  path_file_format: Format for the file provided.
  If file format will not be provided by default it will be json.

Returns:
  a protorpc.Message of type GoogleCloudDataplexV1DataAttributeBindingPath
  filled in from the JSON or YAML path file.

Raises:
  BadFileException if the JSON or YAML file is malformed.
r   zError parsing JSON: {0}Nr:   )r   loadjson
ValueErrorr   r]   r^   rd   re   r   r   rU   r/   r   PyValueToMessage)path_file_pathrP   parsed_pathepath_messagerW   rX   s          r   ra   ra      s     ))N+KIIn-k
 .. 55 '"d!!(";";L"OP #	  ''(A(H(H
--
)  s   B	 	
C9CCc                     [         R                  " 5       nUR                  U R                  U R                  U R
                  U R                  [        U 5      [         R                  " UR                  U 5      S9nU$ )z'Create Data Attribute Binding Requests.)r   r    resourcer9   r:   r!   )	r   r   )GoogleCloudDataplexV1DataAttributeBindingr   r#   rt   r8   rR   r$   r%   s      r   ,GenerateDataAttributeBindingForCreateRequestrv      sq    ((*&<<""##}}))(.&&

:
:DB = C' 
.r   c                     [         R                  " 5       nUR                  U R                  U R                  U R
                  U R                  [        U 5      [         R                  " UR                  U 5      S9nU$ )z'Update Data Attribute Binding Requests.)r   r    r)   r9   r:   r!   )	r   r   ru   r   r#   r)   r8   rR   r$   r%   s      r   ,GenerateDataAttributeBindingForUpdateRequestrx      sq    ((*&<<""##99))(.&&

:
:DB = C' 
.r   c                 j    [         R                  " U [         R                  " 5       R                  5      $ )z=Waits for the given google.longrunning.Operation to complete.)r   WaitForOperationGetClientInstance!projects_locations_dataTaxonomies)	operations    r   rz   rz   	  s,    		&	&$$&HH
J Jr   c                     [         R                  " 5       R                  U R                  5       [         R                  " 5       R	                  US9S9n[         R
                  " 5       R                  R                  U5      $ zSet Iam Policy request.)policy)rt   googleIamV1SetIamPolicyRequest)r   r   :DataplexProjectsLocationsDataTaxonomiesSetIamPolicyRequestrJ   GoogleIamV1SetIamPolicyRequestr{   r|   SetIamPolicy)taxonomy_refr   set_iam_policy_reqs      r   DataTaxonomySetIamPolicyr     sq    #44 >>((*%1%B%B%D%%V%4 ? 6 
 
	'	' 
%%ll3E&FGr   c                     [         R                  " 5       R                  U R                  5       S9n[         R                  " 5       R
                  R                  U5      $ zGet Iam Policy request.)rt   )r   r   :DataplexProjectsLocationsDataTaxonomiesGetIamPolicyRequestrJ   r{   r|   GetIamPolicy)r   get_iam_policy_reqs     r   DataTaxonomyGetIamPolicyr     sW    #44 >>((* ? ,  
	'	' 
%%ll3E&FGr   c                     [        U 5      n[        R                  " [        R                  " 5       R
                  X1U5        [        X5      $ zAdd IAM policy binding request.)r   r   AddBindingToIamPolicyr   r   GoogleIamV1Bindingr   r   memberroler   s       r   DataTaxonomyAddIamPolicyBindingr   $  s<    #L1&
  ##%88&$P	!,	77r   c                 \    [        U 5      n[        R                  " X1U5        [        X5      $ z"Remove IAM policy binding request.)r   r   RemoveBindingFromIamPolicyr   r   s       r   "DataTaxonomyRemoveIamPolicyBindingr   ,  s'    #L1&
%%fd;	!,	77r   c                     [         R                  " U[        R                  " 5       R                  5      n[        X5      $ z)Set IAM policy binding request from file.)r   ParsePolicyFiler   r   GoogleIamV1Policyr   )r   policy_filer   s      r    DataTaxonomySetIamPolicyFromFiler   3  s4    ####%779& 
",	77r   c                     [         R                  " 5       R                  U R                  5       [         R                  " 5       R	                  US9S9n[         R
                  " 5       R                  R                  U5      $ r   )r   r   DDataplexProjectsLocationsDataTaxonomiesAttributesSetIamPolicyRequestrJ   r   r{   ,projects_locations_dataTaxonomies_attributesr   )rC   r   r   s      r   DataAttributeSetIamPolicyr   ;  ss    #44 HH!..0%1%B%B%D%%V%4 I 6 
 
	'	' 
002r   c                     [         R                  " 5       R                  U R                  5       S9n[         R                  " 5       R
                  R                  U5      $ r   )r   r   DDataplexProjectsLocationsDataTaxonomiesAttributesGetIamPolicyRequestrJ   r{   r   r   )rC   r   s     r   DataAttributeGetIamPolicyr   G  sY    #44 HH!..0 I 2  
	'	' 
002r   c                     [        U 5      n[        R                  " [        R                  " 5       R
                  X1U5        [        X5      $ r   r   r   r   r   r   r   r   rC   r   r   r   s       r    DataAttributeAddIamPolicyBindingr   Q  s>    $%78&
  ##%88&$P	"#5	>>r   c                 \    [        U 5      n[        R                  " X1U5        [        X5      $ r   r   r   r   r   r   s       r   #DataAttributeRemoveIamPolicyBindingr   Y  s)    $%78&
%%fd;	"#5	>>r   c                     [         R                  " U[        R                  " 5       R                  5      n[        X5      $ r   r   r   r   r   r   r   )rC   r   r   s      r   !DataAttributeSetIamPolicyFromFiler   `  s5    ####%779& 
##5	>>r   c                     [         R                  " 5       R                  U R                  5       [         R                  " 5       R	                  US9S9n[         R
                  " 5       R                  R                  U5      $ r   )r   r   ADataplexProjectsLocationsDataAttributeBindingsSetIamPolicyRequestrJ   r   r{   (projects_locations_dataAttributeBindingsr   )attribute_binding_refr   r   s      r    DataAttributeBindingSetIamPolicyr   h  sr    #44 EE$113%1%B%B%D%%V%4 F 6 
 
	'	' 
,,\\:L-MNr   c                     [         R                  " 5       R                  U R                  5       S9n[         R                  " 5       R
                  R                  U5      $ r   )r   r   ADataplexProjectsLocationsDataAttributeBindingsGetIamPolicyRequestrJ   r{   r   r   )r   r   s     r    DataAttributeBindingGetIamPolicyr   s  sX    #44 EE$113 F 5  
	'	' 
,,\\:L-MNr   c                     [        U 5      n[        R                  " [        R                  " 5       R
                  X1U5        [        X5      $ r   r   r   r   r   r   s       r   'DataAttributeBindingAddIamPolicyBindingr   |  s@     %%:;&
  ##%88&$P	"#8	AAr   c                 \    [        U 5      n[        R                  " X1U5        [        X5      $ r   r   r   s       r   *DataAttributeBindingRemoveIamPolicyBindingr     s+     %%:;&
%%fd;	"#8	AAr   c                     [         R                  " U[        R                  " 5       R                  5      n[        X5      $ r   r   )r   r   r   s      r   (DataAttributeBindingSetIamPolicyFromFiler     s7     ####%779& 
##8	AAr   )1__doc__rl   r[   apitools.base.pyr   googlecloudsdk.api_lib.dataplexr   r   googlecloudsdk.callioper   googlecloudsdk.command_lib.iamr   googlecloudsdk.corer   googlecloudsdk.core.utilr   rd   r   r   r'   r*   r2   r6   r<   rD   rA   rM   rR   rQ   rO   ra   rv   rx   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r   <module>r      s    B  	 % @ . 3 $ * 
.	,( 7 +$ @JGG888	???NNBBBr   