
    v;                     L   d Z ddlmZ ddlmZ ddlmZ ddl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Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d  Z)d! Z*d" Z+d# Z,d$ Z-d% Z.d& Z/d' Z0d( Z1d) Z2d* Z3d+ Z4y),z;Client for interaction with DataTaxonomy API CRUD DATAPLEX.    )absolute_import)division)unicode_literalsN)encoding)util)
exceptions)iam_util)yaml)filesc                     t        j                         }|j                  | j                  | j                  | j
                        }|S )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                 f    t        j                         }|j                  | j                        }|S )z)Generate Data Access Spec From Arguments.)r   )r   r   #GoogleCloudDataplexV1DataAccessSpecdata_readers)r   r   data_access_specs      r   GenerateDataAccessSpecr    +   s6    ((*&?? @ !	r   c                     t        j                         }|j                  | j                  | j                  t        j
                  |j                  |             }|S )zCreate Data Taxonomy Requests.)descriptiondisplayNamelabels)r   r   !GoogleCloudDataplexV1DataTaxonomyr"   display_nameCreateLabelsr   r   requests      r   $GenerateDataTaxonomyForCreateRequestr*   3   sW    ((*&44""##&&v'O'O'+- 5 .'
 
.r   c           	          t        j                         }|j                  | j                  | j                  | j
                  t        j                  |j                  |             S )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                     g }| j                  d      r|j                  d       | j                  d      r|j                  d       | j                  d      r|j                  d       |S )$Create Update Mask for DataTaxonomy.r"   r&   r#   r$   IsSpecifiedappendr   update_masks     r   GenerateUpdateMaskr5   I   sa    +	m$}%	n%}%	hx 	r   c                 *   g }| j                  d      r|j                  d       | j                  d      r|j                  d       | j                  d      r|j                  d       | j                  d      r|j                  d       | j                  d      r|j                  d       | j                  d	      r|j                  d
       | j                  d      r|j                  d       | j                  d      r|j                  d       |S )r/   r"   r&   r#   r$   parentparentIdr   zresourceAccessSpec.readersr   zresourceAccessSpec.writersr   zresourceAccessSpec.ownersr   zdataAccessSpec.readersr0   r3   s     r   GenerateAttributeUpdateMaskr9   U   s    +	m$}%	n%}%	hx 	hz"	()34	()34	'(23	n%/0	r   c                    g }| j                  d      r|j                  d       | j                  d      r|j                  d       | j                  d      r|j                  d       | j                  d      r|j                  d       | j                  d      r|j                  d       | j                  d      r|j                  d       | j                  d	      r|j                  d	       |S )
z,Create Update Mask for DataAttributeBinding.r"   r&   r#   r$   resource_attributes
attributespathspath_file_namer,   r0   r3   s     r   "GenerateAttributeBindingUpdateMaskr?   k   s    +	m$}%	n%}%	hx 	+,|$	gw	&'w	fv	r   c                     t        j                         }|j                  |j                  |j                  t        | |      t        |      t        |      t        j                  |j                  |            }|S )zCreate Data Attribute Requests.)r"   r#   r8   resourceAccessSpecdataAccessSpecr$   )	r   r   "GoogleCloudDataplexV1DataAttributer"   r&   ResolveParentIdr   r    r'   data_attribute_refr   r   r)   s       r   %GenerateDataAttributeForCreateRequestrG      st    ((*&55""## 1483D9+D1&&

3
3T; 6 	<' 
.r   c                     |j                  d      rQ|j                  j                  d      dk(  r3| j                         j	                  dd      d   dz   |j                  z   S |j                  S )Nr7   /   r   )r1   r7   findRelativeNamersplit)rF   r   s     r   rD   rD      sk    
x T[[%5%5c%:b%@** 

&a.!"$(KK0 0 ;;r   c                    t        j                         }|j                  |j                  |j                  t        | |      t        |      t        |      |j                  t        j                  |j                  |            }|S )z7Generate attributes for Update Data Attribute Requests.)r"   r#   r8   rA   rB   r,   r$   )
r   r   rC   r"   r&   rD   r   r    r,   r'   rE   s       r   %GenerateDataAttributeForUpdateRequestrP      sy    ((*&55""##1483D9+D199&&

3
3T; 6 <' 
.r   c                 z    | j                  d      r t        | j                  | j                        S t	        |       S )z%Generate Data Attribute Binding Path.r>   )r1   $GenerateAttributeBindingPathFromFiler>   path_file_format%GenerateAttributeBindingPathFromParam)r   s    r   GenerateAttributeBindingPathrU      s<    	&'/T224 4 166r   c           	          t        j                         }g }| j                  Q| j                  D ]B  }|j                  |j	                  |j                  d      |j                  d                   D |S )z*Create Path from specified path parameter.namer<   )rW   r<   )r   r   r=   r2   -GoogleCloudDataplexV1DataAttributeBindingPathget)r   r   attribute_binding_pathpaths       r   rT   rT      so    ((*&	ZZ

##

>
>88F#,/ ?   
 r   c                 .   t         j                  j                  |       s$t        j                  dj                  |             t         j                  j                  |       r$t        j                  dj                  |             	 t        j                  |       5 }t        ||      cddd       S # 1 sw Y   yxY w# t        $ rL}t        |dt        j                  |            }dj                  | |      }t        j                  |      d}~ww xY w)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}])osr[   existsr   BadFileExceptionformatisdirr   
FileReaderConvertPathFileToProto	Exceptiongetattrsix	text_type)r>   rS   import_fileexpexp_msgmsgs         r   rR   rR      s    		'

%
%&:&A&A'  WW]]>"

%
%&<&C&C'  +			.	)[#K1AB 
*	)	)	 +c9cmmC&89G!!'!@ 

%
%c
**	+s7   B? B3)	B? 3B<8B? <B? ?	DADDc                    |dk(  rt        j                  |       }n	 t        j                  |       }t        j                         j                  }g }|d   D ]'  }|j                  t        j                  ||             ) |S # t        $ r<}t	        j
                  dj                  t        j                  |                  d}~ww xY w)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`   ra   rg   rh   r   r   rX   r2   r   PyValueToMessage)path_file_pathrS   parsed_pathepath_messagerZ   r[   s          r   rd   rd      s     ))N+KIIn-k
 .. 55 '"d!!(";";L$"OP #	  ''(A(H(H
--
)  s   B 	C7CCc                     t        j                         }|j                  | j                  | j                  | j
                  | j                  t        |       t        j                  |j                  |             }|S )z'Create Data Attribute Binding Requests.)r"   r#   resourcer<   r=   r$   )	r   r   )GoogleCloudDataplexV1DataAttributeBindingr"   r&   rw   r;   rU   r'   r(   s      r   ,GenerateDataAttributeBindingForCreateRequestry      sq    ((*&<<""##}}))(.&&

:
:DB = C' 
.r   c                     t        j                         }|j                  | j                  | j                  | j
                  | j                  t        |       t        j                  |j                  |             }|S )z'Update Data Attribute Binding Requests.)r"   r#   r,   r<   r=   r$   )	r   r   rx   r"   r&   r,   r;   rU   r'   r(   s      r   ,GenerateDataAttributeBindingForUpdateRequestr{      sq    ((*&<<""##99))(.&&

:
:DB = C' 
.r   c                 f    t        j                  | t        j                         j                        S )z=Waits for the given google.longrunning.Operation to complete.)r   WaitForOperationGetClientInstance!projects_locations_dataTaxonomies)	operations    r   r}   r}     s,    		&	&$$&HH
J Jr   c                    t        j                         j                  | j                         t        j                         j	                  |            }t        j
                         j                  j                  |      S zSet Iam Policy request.)policy)rw   googleIamV1SetIamPolicyRequest)r   r   :DataplexProjectsLocationsDataTaxonomiesSetIamPolicyRequestrM   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                     t        j                         j                  | j                               }t        j                         j
                  j                  |      S zGet Iam Policy request.)rw   )r   r   :DataplexProjectsLocationsDataTaxonomiesGetIamPolicyRequestrM   r~   r   GetIamPolicy)r   get_iam_policy_reqs     r   DataTaxonomyGetIamPolicyr     sW    #44 >>((* ? ,  
	'	' 
%%ll3E&FGr   c                     t        |       }t        j                  t        j                         j
                  |||       t        | |      S 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                 ^    t        |       }t        j                  |||       t        | |      S z"Remove IAM policy binding request.)r   r	   RemoveBindingFromIamPolicyr   r   s       r   "DataTaxonomyRemoveIamPolicyBindingr   /  s+    #L1&
%%ffd;	!,	77r   c                 ~    t        j                  |t        j                         j                        }t        | |      S z)Set IAM policy binding request from file.)r	   ParsePolicyFiler   r   GoogleIamV1Policyr   )r   policy_filer   s      r    DataTaxonomySetIamPolicyFromFiler   6  s6    ####%779& 
",	77r   c                    t        j                         j                  | j                         t        j                         j	                  |            }t        j
                         j                  j                  |      S r   )r   r   DDataplexProjectsLocationsDataTaxonomiesAttributesSetIamPolicyRequestrM   r   r~   ,projects_locations_dataTaxonomies_attributesr   )rF   r   r   s      r   DataAttributeSetIamPolicyr   >  ss    #44 HH!..0%1%B%B%D%%V%4 I 6 
 
	'	' 
002r   c                     t        j                         j                  | j                               }t        j                         j
                  j                  |      S r   )r   r   DDataplexProjectsLocationsDataTaxonomiesAttributesGetIamPolicyRequestrM   r~   r   r   )rF   r   s     r   DataAttributeGetIamPolicyr   J  sY    #44 HH!..0 I 2  
	'	' 
002r   c                     t        |       }t        j                  t        j                         j
                  |||       t        | |      S r   r   r	   r   r   r   r   r   rF   r   r   r   s       r    DataAttributeAddIamPolicyBindingr   T  sB    $%78&
  ##%88&&$P	"#5v	>>r   c                 ^    t        |       }t        j                  |||       t        | |      S r   r   r	   r   r   r   s       r   #DataAttributeRemoveIamPolicyBindingr   \  s-    $%78&
%%ffd;	"#5v	>>r   c                 ~    t        j                  |t        j                         j                        }t        | |      S r   r	   r   r   r   r   r   )rF   r   r   s      r   !DataAttributeSetIamPolicyFromFiler   c  s7    ####%779& 
##5v	>>r   c                    t        j                         j                  | j                         t        j                         j	                  |            }t        j
                         j                  j                  |      S r   )r   r   ADataplexProjectsLocationsDataAttributeBindingsSetIamPolicyRequestrM   r   r~   (projects_locations_dataAttributeBindingsr   )attribute_binding_refr   r   s      r    DataAttributeBindingSetIamPolicyr   k  sr    #44 EE$113%1%B%B%D%%V%4 F 6 
 
	'	' 
,,\\:L-MNr   c                     t        j                         j                  | j                               }t        j                         j
                  j                  |      S r   )r   r   ADataplexProjectsLocationsDataAttributeBindingsGetIamPolicyRequestrM   r~   r   r   )r   r   s     r    DataAttributeBindingGetIamPolicyr   v  sX    #44 EE$113 F 5  
	'	' 
,,\\:L-MNr   c                     t        |       }t        j                  t        j                         j
                  |||       t        | |      S r   r   r   r   r   r   s       r   'DataAttributeBindingAddIamPolicyBindingr     sD     %%:;&
  ##%88&&$P	"#8&	AAr   c                 ^    t        |       }t        j                  |||       t        | |      S r   r   r   s       r   *DataAttributeBindingRemoveIamPolicyBindingr     s/     %%:;&
%%ffd;	"#8&	AAr   c                 ~    t        j                  |t        j                         j                        }t        | |      S r   r   )r   r   r   s      r   (DataAttributeBindingSetIamPolicyFromFiler     s9     ####%779& 
##8&	AAr   )5__doc__
__future__r   r   r   ro   r^   apitools.base.pyr   googlecloudsdk.api_lib.dataplexr   r   googlecloudsdk.callioper   googlecloudsdk.command_lib.iamr	   googlecloudsdk.corer
   googlecloudsdk.core.utilr   rg   r   r    r*   r-   r5   r9   r?   rG   rD   rP   rU   rT   rR   rd   ry   r{   r}   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   