
    =                        S 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\R                  4S jrS	 rS\R                  S
\R                   4S jrS\R                  4S jrS rS rS\R                  S
\R*                  4S jrS rS rS\R                  4S jrS\R                  4S jrS\R                  4S jrS rS rS rg)z7Client for interaction with Datascan API CRUD DATAPLEX.    )util)messages)parser_extensions)iam_util)dataplex_v1_messagesargsc                     [         R                  " 5       nU R                  S5      (       a  UR                  U R                  S9nU$ UR                  U R
                  S9nU$ )zGenerate Data From Arguments.data_source_entity)entity)resource)dataplex_apiGetMessageModuleIsKnownAndSpecifiedGoogleCloudDataplexV1DataSourcer
   data_source_resource)r   moduledatas      /lib/googlecloudsdk/api_lib/dataplex/datascan.pyGenerateDatar      sn    ((*&	23311&& 2 D 
+ 11** 2 D 
+    c                 0   [         R                  " 5       nU R                  S5      (       aZ  [         R                  " U R                  5      nUb5  [
        R                  " [         R                  " U5      UR                  5      nU$ UR                  5       nU$ )(Generate DataQualitySpec From Arguments.data_quality_spec_file)	r   r   IsSpecified
ReadObjectr   messages_utilDictToMessageWithErrorCheckSnakeToCamelDict$GoogleCloudDataplexV1DataQualitySpec)r   r   dataqualityspecs      r   GenerateDataQualitySpecr!   '   s    ((*&	.//"--d.I.IJO"%AA

'
'
8

5
5o 
 AACO	r   returnc                    [         R                  " 5       nU R                  S5      (       aZ  [         R                  " U R                  5      nUb5  [
        R                  " [         R                  " U5      UR                  5      nU$ S/S-  u  nnnnU R                  S5      (       a8  UR                  [        S U R                  R                  S5       5       5      S9nU R                  S5      (       a8  UR                  [        S	 U R                  R                  S5       5       5      S9nU R                  S
5      (       a  [        U R                   5      nU R                  S5      (       a  U R"                  nU R                  S5      (       a  U R$                  OSnUR                  UUUUUS9nU R                  S5      (       a+  UR'                  UR)                  U R*                  S9S9Ul        U$ )z(Generate DataProfileSpec From Arguments.data_profile_spec_fileN   exclude_field_namesc              3   @   #    U  H  oR                  5       v   M     g 7fNstrip.0vals     r   	<genexpr>*GenerateDataProfileSpec.<locals>.<genexpr>N         )L#))++)L   ,)
fieldNamesinclude_field_namesc              3   @   #    U  H  oR                  5       v   M     g 7fr(   r)   r+   s     r   r.   r/   V   r0   r1   sampling_percent
row_filterenable_catalog_publishing)excludeFieldsincludeFieldssamplingPercent	rowFiltercatalogPublishingEnabledexport_results_table)resultsTable)bigqueryExport)r   r   r   r   r$   r   r   r   $GoogleCloudDataplexV1DataProfileSpecr   2GoogleCloudDataplexV1DataProfileSpecSelectedFieldslistr&   splitr4   floatr6   r7   r8   3GoogleCloudDataplexV1DataProfileSpecPostScanActionsAGoogleCloudDataplexV1DataProfileSpecPostScanActionsBigQueryExportr>   postScanActions)r   r   dataprofilespecexclude_fieldsinclude_fieldsr6   r7   catalog_publishing_enableds           r   GenerateDataProfileSpecrM   7   s    ((*&	.//"--d.I.IJO"%AA

'
'
8

5
5ob 
O 

 566

C
C )-)A)A)G)G)L  D    566

C
C )-)A)A)G)G)L  D    233t445--??j ##$?@@ 	&& 
 AA$$(!; B O  677(.(b(baa44 b  )c )o%
 
r   c                 8   [         R                  " 5       nUR                  5       nUR                  5       Ul        U R                  S5      (       a  U R                  UR                  l        U R                  S5      (       a4  UR                  R                  U R                  5      UR                  l
        U R                  S5      (       a  U R                  UR                  l        U R                  S5      (       a  U R                  UR                  l        UR                  5       Ul        U R                  S5      (       a  U R"                  UR                   l        U R                  S5      (       a  U R&                  UR                   l        UR+                  5       UR                   l        U R                  S5      (       a%  U R.                  UR                   R,                  l        U R                  S5      (       a/   [3        U R4                  5      UR                   R,                  l        U R                  S
5      (       a%  U R:                  UR                   R,                  l        U R                  S5      (       a%  U R>                  UR                   R,                  l         U R                  S5      (       a%  U RB                  UR                   R,                  l"        URG                  5       UR                   l$        U R                  S5      (       a%  U RJ                  UR                   RH                  l         U R                  S5      (       a%  U RL                  UR                   RH                  l"        U$ ! [8         a    [9        S	U R4                   35      ef = f)z*Generate DataDiscoverySpec From Arguments.bigquery_publishing_connectionbigquery_publishing_table_type#bigquery_publishing_dataset_project$bigquery_publishing_dataset_locationstorage_include_patternsstorage_exclude_patternscsv_delimitercsv_header_row_countz1csv_header_row_count must be an integer, but got csv_quote_charactercsv_encodingcsv_disable_type_inferencejson_encodingjson_disable_type_inference)'r   r   &GoogleCloudDataplexV1DataDiscoverySpec>GoogleCloudDataplexV1DataDiscoverySpecBigQueryPublishingConfigbigqueryPublishingConfigr   rO   
connectionTableTypeValueValuesEnumrP   	tableTyperQ   projectrR   location3GoogleCloudDataplexV1DataDiscoverySpecStorageConfigstorageConfigrS   includePatternsrT   excludePatterns=GoogleCloudDataplexV1DataDiscoverySpecStorageConfigCsvOptions
csvOptionsrU   	delimiterintrV   
headerRows
ValueErrorrW   quoterX   encodingrY   typeInferenceDisabled>GoogleCloudDataplexV1DataDiscoverySpecStorageConfigJsonOptionsjsonOptionsrZ   r[   )r   r   datadiscoveryspecs      r   GenerateDataDiscoverySpecrt   t   s.   ((*&CCE KKM , 
>??++ ..9 
>??;A  <A  <A  <Z  <Z++<..8 
CDD00 ..6 
DEE11 ..7
 @@B ! 
899%% ##3 
899%% ##3 JJL !!, 
o..;?;M;M##..8	455>A

#
#?%%00; 
3447;7O7O##..4	n--:>:K:K##..7	:;;'' ##..D KKM !!- 
o..;?;M;M##//8	;<<(( ##//E 
3  ''(* s    .M6 6#Nc                  L    [         R                  " 5       n U R                  5       $ )z.Generate DataDocumentationSpec From Arguments.)r   r   *GoogleCloudDataplexV1DataDocumentationSpec)r   s    r   GenerateDataDocumentationSpecrw      s    ((*&		:	:	<<r   c                 b    [         R                  " 5       nUR                  U R                  S9nU$ )r   )cron)r   r   $GoogleCloudDataplexV1TriggerScheduleschedule)r   r   r{   s      r   GenerateScheduler|      s,    ((*&88dmm8L(	/r   c                    [         R                  " 5       nUR                  5       nU R                  S5      =(       a    U R                  nU R                  S5      nU(       a  U(       d  [        S5      eU R                  S5      (       a  [        U 5      Ul        U$ U(       a9  UR                  5       Ul	        U(       a  U R                  UR                  l        U$ UR                  5       Ul        U$ )zGenerates Trigger for data scan From Arguments.

Args:
  args: The arguments of the command.

Returns:
  The trigger for the data scan.
one_timettl_after_scan_completionzkttl_after_scan_completion is only supported for one-time scans. Provide --one-time to enable one-time scan.r{   )r   r   GoogleCloudDataplexV1Triggerr   r~   rm   r|   r{   #GoogleCloudDataplexV1TriggerOneTimeoneTimer   ttlAfterScanCompletion$GoogleCloudDataplexV1TriggerOnDemandonDemand)r   r   triggeris_one_time_scanis_ttl_after_scan_completions        r   GenerateTriggerr      s     ((*&//1'--j9Kdmm!%!9!9!" "*:
	7  
j))'-G 
. @@BGO#/3/M/Mgoo, 
. BBDG	.r   c                     [         R                  " 5       n[        U S5      (       a  U R                  nO[        U S5      (       a  U R                  OSnUR                  U[        U 5      S9nU$ )&Generate ExecutionSpec From Arguments.fieldincremental_fieldN)r   r   )r   r   hasattrr   r   *GoogleCloudDataplexV1DataScanExecutionSpecr   )r   r   r   executionspecs       r   %GenerateExecutionSpecForCreateRequestr      sp    ((*&T7JJE #*$0C"D"D$ 
 CCd# D - 
r   c                 `    [         R                  " 5       nUR                  [        U 5      S9nU$ )r   )r   )r   r   r   r   )r   r   r   s      r   %GenerateExecutionSpecForUpdateRequestr      s6    ((*&CCd# D - 
r   c                    / nSSSSSS.n0 SS_S	S
_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS _S!S"_S#S$_S%S&_S'S(_S)S*S+S,.EnUR                  5        H.  u  pEU R                  U5      (       d  M  UR                  U5        M0     UR                  5        H.  u  pEU R                  U5      (       d  M  UR                  U5        M0     U$ )-z Create Update Mask for Datascan.descriptiondisplayNamelabelszexecutionSpec.trigger.onDemandzexecutionSpec.trigger.schedule)r   display_namer   	on_demandr{   r$   dataProfileSpecr   dataQualitySpecr7   zdataProfileSpec.rowFilterr6   zdataProfileSpec.samplingPercentr4   zdataProfileSpec.includeFieldsr&   zdataProfileSpec.excludeFieldsr8   z(dataProfileSpec.catalogPublishingEnabledrP   z4dataDiscoverySpec.bigqueryPublishingConfig.tableTyperO   z5dataDiscoverySpec.bigqueryPublishingConfig.connectionrR   z3dataDiscoverySpec.bigqueryPublishingConfig.locationrQ   z2dataDiscoverySpec.bigqueryPublishingConfig.projectrS   z/dataDiscoverySpec.storageConfig.includePatternsrT   z/dataDiscoverySpec.storageConfig.excludePatternsrU   z4dataDiscoverySpec.storageConfig.csvOptions.delimiterrV   z5dataDiscoverySpec.storageConfig.csvOptions.headerRowsrW   z0dataDiscoverySpec.storageConfig.csvOptions.quoterX   z3dataDiscoverySpec.storageConfig.csvOptions.encodingz@dataDiscoverySpec.storageConfig.csvOptions.typeInferenceDisabledz4dataDiscoverySpec.storageConfig.jsonOptions.encodingzAdataDiscoverySpec.storageConfig.jsonOptions.typeInferenceDisabled)rY   rZ   r[   )itemsr   appendr   )r   update_maskargs_to_maskargs_to_mask_attrargr-   s         r   GenerateUpdateMaskr   	  s   +"#32,' 1' 1' /' ;	'
 <' <' "#M' '
@' '
A' -
?'" ,
>%'( !
;+'. !
;1'4 M5'6 
A9'< O='> K?'B MM
MK'R $$&hc ' $))+hc$$ , 
r   c           	         [         R                  " 5       nUR                  U R                  U R                  [         R
                  " UR                  U 5      [        U 5      [        U 5      S9nU R                  S:X  a4  U R                  S5      (       a  [        S5      e[        U 5      Ul         U$ U R                  S:X  aT  U R                  S5      (       a  [        S5      eU R                  S5      (       a  [        U 5      Ul        U$ [        S5      eU R                  S	:X  a  [!        U 5      Ul        U$ U R                  S
:X  a  [%        5       Ul        U$ )z,Create Datascan for Message Create Requests.)r   r   r   r   executionSpecPROFILEr   7Data quality spec file specified for data profile scan.QUALITYr$   7Data profile spec file specified for data quality scan.zGIf scan-type="QUALITY" , data-quality-spec-file is a required argument.	DISCOVERYDOCUMENTATION)r   r   GoogleCloudDataplexV1DataScanr   r   CreateLabelsr   r   	scan_typer   rm   rM   r   r   r!   r   rt   dataDiscoverySpecrw   dataDocumentationSpecr   r   requests      r    GenerateDatascanForCreateRequestr   F  sT   ((*&00""##&&

.
. 9$? 1 ' 
^^y  899
C  !8 =g" 
.! ~~" 899
C  
		2	3	3 7 =g 
.   ~~$ 9$ ?G 
. ~~($A$CG!	.r   c                    [         R                  " 5       nUR                  U R                  U R                  [         R
                  " UR                  U 5      [        U 5      S9nU R                  S:X  a3  U R                  S5      (       a  [        S5      e[        U 5      Ul        U$ U R                  S:X  aa  U R                  S5      (       a  [        S5      eU R                  S5      (       a  [        U 5      Ul        U$ UR                  5       Ul         U$ U R                  S:X  a  [!        U 5      Ul        U$ U R                  S	:X  a  [%        5       Ul        U$ )
z,Create Datascan for Message Update Requests.)r   r   r   r   r   r   r   r   r$   r   r   r   )r   r   r   r   r   r   r   r   r   rm   rM   r   r   r!   r   r   rt   r   rw   r   r   s      r    GenerateDatascanForUpdateRequestr   l  sR   ((*&00""##&&

.
. :$? 1 ' 
^^y  899
C  6d;G 
. ~~" 899
C  
		2	3	3 7 =g 
. !' K K Mg
 
.	 ~~$ 9$ ?G 
. ~~($A$CG!	.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)r   googleIamV1SetIamPolicyRequest)r   r   5DataplexProjectsLocationsDataScansSetIamPolicyRequestRelativeNameGoogleIamV1SetIamPolicyRequestGetClientInstanceprojects_locations_dataScansSetIamPolicy)datascan_refr   set_iam_policy_reqs      r   r   r     su    #446ll((*%1%B%B%D%c%c &d & m  
	'	'	)	F	F	S	S
 r   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   SetIamPolicyFromFiler     s3    ##<002DD& 
l	++r   c                 j    [         R                  " U [         R                  " 5       R                  5      $ )z=Waits for the given google.longrunning.Operation to complete.)r   WaitForOperationr   r   )	operations    r   r   r     s)    		&	&//1NN
 r   N)__doc__googlecloudsdk.api_lib.dataplexr   r   googlecloudsdk.api_lib.utilr   r   googlecloudsdk.callioper   googlecloudsdk.command_lib.iamr   1googlecloudsdk.generated_clients.apis.dataplex.v1r   	Namespacer   r!   rA   rM   rt   rw   r|   r   r   r   r   r   r   r   r   r   r    r   r   <module>r      s    > A A 5 3 R(22  :

%
%:>>:zK$5$?$? K\=

%
%66B :.88 :z#+<+F+F #L+<+F+F B
,r   