
    7                     L   d 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	ej                  fd
Zd Zd	ej                  fdZd	ej                  fdZd Zd Zd Zd Zd	ej                  fdZd	ej                  fdZd	ej                  fdZd Zd Zd Zy)z7Client for interaction with Datascan API CRUD DATAPLEX.    )absolute_import)division)unicode_literals)util)messages)parser_extensions)iam_utilargsc                     t        j                         }| j                  d      r|j                  | j                        }|S |j                  | j
                        }|S )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      sk    ((*&	2311&& 2 D 
+ 11** 2 D 
+    c                    t        j                         }| j                  d      rVt        j                  | j                        }|3t        j                  t        j                  |      |j                        }|S |j                         }|S )(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   c                 v   t        j                         }| j                  d      rVt        j                  | j                        }|3t        j                  t        j                  |      |j                        }|S dgdz  \  }}}}| j                  d      r;|j                  t        d | j                  j                  d      D                    }| j                  d      r;|j                  t        d	 | j                  j                  d      D                    }| j                  d
      rt        | j                         }| j                  d      r| j"                  }|j                  ||||      }| j                  d      r1|j%                  |j'                  | j(                              |_        |S )z(Generate DataProfileSpec From Arguments.data_profile_spec_fileN   exclude_field_namesc              3   <   K   | ]  }|j                           y wNstrip.0vals     r   	<genexpr>z*GenerateDataProfileSpec.<locals>.<genexpr>I         )L##))+)L   ,)
fieldNamesinclude_field_namesc              3   <   K   | ]  }|j                           y wr)   r*   r,   s     r   r/   z*GenerateDataProfileSpec.<locals>.<genexpr>Q   r0   r1   sampling_percent
row_filter)excludeFieldsincludeFieldssamplingPercent	rowFilterexport_results_table)resultsTable)bigqueryExport)r   r   r   r   r%   r   r   r    $GoogleCloudDataplexV1DataProfileSpecr   2GoogleCloudDataplexV1DataProfileSpecSelectedFieldslistr'   splitr4   floatr6   r7   3GoogleCloudDataplexV1DataProfileSpecPostScanActionsAGoogleCloudDataplexV1DataProfileSpecPostScanActionsBigQueryExportr<   postScanActions)r
   r   dataprofilespecexclude_fieldsinclude_fieldsr6   r7   s          r   GenerateDataProfileSpecrJ   9   s   ((*&	./"--d.I.IJO"%AA

'
'
8

5
5oL 
C EI6A:@NN$4j 56

C
C )-)A)A)G)G)L  D    56

C
C )-)A)A)G)G)L  D    23t445-??jAA$$(	 B O  67(.(b(baa44 b  )c )o%
 
r   c                    t        j                         }|j                         }|j                         |_        | j                  d      r| j                  |j                  _        | j                  d      r4|j                  j                  | j                        |j                  _
        | j                  d      r| j                  |j                  _        | j                  d      r| j                  |j                  _        |j                         |_        | j                  d      r| j"                  |j                   _        | j                  d      r| j&                  |j                   _        |j+                         |j                   _        | j                  d      r%| j.                  |j                   j,                  _        | j                  d      r/	 t3        | j4                        |j                   j,                  _        | j                  d
      r%| j:                  |j                   j,                  _        | j                  d      r%| j>                  |j                   j,                  _         | j                  d      r%| jB                  |j                   j,                  _"        |jG                         |j                   _$        | j                  d      r%| jJ                  |j                   jH                  _         | j                  d      r%| jL                  |j                   jH                  _"        |S # t8        $ r t9        d	| j4                         w xY w)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   rL   
connectionTableTypeValueValuesEnumrM   	tableTyperN   projectrO   location3GoogleCloudDataplexV1DataDiscoverySpecStorageConfigstorageConfigrP   includePatternsrQ   excludePatterns=GoogleCloudDataplexV1DataDiscoverySpecStorageConfigCsvOptions
csvOptionsrR   	delimiterintrS   
headerRows
ValueErrorrT   quoterU   encodingrV   typeInferenceDisabled>GoogleCloudDataplexV1DataDiscoverySpecStorageConfigJsonOptionsjsonOptionsrW   rX   )r
   r   datadiscoveryspecs      r   GenerateDataDiscoverySpecrq   i   s   ((*&CCE KKM , 
>?++ ..9 
>?;A  <A  <A  <Z  <Z++<..8 
CD00 ..6 
DE11 ..7
 @@B ! 
89%% ##3 
89%% ##3 JJL !!, 
o.;?;M;M##..8	45>A

#
#?%%00; 
347;7O7O##..4	n-:>:K:K##..7	:;'' ##..D KKM !!- 
o.;?;M;M##//8	;<(( ##//E 
3  ''(* s   .L4 4"Mc                 f    t        j                         }|j                  | j                        }|S )r   )cron)r   r   $GoogleCloudDataplexV1TriggerScheduleschedule)r
   r   ru   s      r   GenerateSchedulerv      s,    ((*&88dmm8L(	/r   c                     t        j                         }|j                         }| j                  d      rt	        |       |_        |S |j                         |_        |S )r   ru   )r   r   GoogleCloudDataplexV1Triggerr   rv   ru   $GoogleCloudDataplexV1TriggerOnDemandonDemand)r
   r   triggers      r   GenerateTriggerr|      sX    ((*&//1'	j!'-G 
. BBDG	.r   c                     t        j                         }t        | d      r| j                  }nt        | d      r| j                  nd}|j                  |t        |             }|S )&Generate ExecutionSpec From Arguments.fieldincremental_fieldN)r   r{   )r   r   hasattrr   r   *GoogleCloudDataplexV1DataScanExecutionSpecr|   )r
   r   r   executionspecs       r   %GenerateExecutionSpecForCreateRequestr      sj    ((*&T7JJE #*$0C"D$ 
 CCd# D - 
r   c                 d    t        j                         }|j                  t        |             }|S )r~   )r{   )r   r   r   r|   )r
   r   r   s      r   %GenerateExecutionSpecForUpdateRequestr      s6    ((*&CCd# D - 
r   c                 z   g }dddddd}i ddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+}|j                         D ](  \  }}| j                  |      s|j                  |       * |j                         D ](  \  }}| j                  |      s|j                  |       * |S ),z Create Update Mask for Datascan.descriptiondisplayNamelabelszexecutionSpec.trigger.onDemandzexecutionSpec.trigger.schedule)r   display_namer   	on_demandru   r%   dataProfileSpecr   dataQualitySpecr7   zdataProfileSpec.rowFilterr6   zdataProfileSpec.samplingPercentr4   zdataProfileSpec.includeFieldsr'   zdataProfileSpec.excludeFieldsrM   z4dataDiscoverySpec.bigqueryPublishingConfig.tableTyperL   z5dataDiscoverySpec.bigqueryPublishingConfig.connectionrO   z3dataDiscoverySpec.bigqueryPublishingConfig.locationrN   z2dataDiscoverySpec.bigqueryPublishingConfig.projectrP   z/dataDiscoverySpec.storageConfig.includePatternsrQ   z/dataDiscoverySpec.storageConfig.excludePatternsrR   z4dataDiscoverySpec.storageConfig.csvOptions.delimiterrS   z5dataDiscoverySpec.storageConfig.csvOptions.headerRowsrT   z0dataDiscoverySpec.storageConfig.csvOptions.quoterU   z3dataDiscoverySpec.storageConfig.csvOptions.encodingrV   z@dataDiscoverySpec.storageConfig.csvOptions.typeInferenceDisabledz4dataDiscoverySpec.storageConfig.jsonOptions.encodingzAdataDiscoverySpec.storageConfig.jsonOptions.typeInferenceDisabled)rW   rX   )itemsr   appendr   )r
   update_maskargs_to_maskargs_to_mask_attrargr.   s         r   GenerateUpdateMaskr      s   +"#32,& 1& 1& /& ;	&
 <& <& '
@& '
A& -
?&  ,
>#&& !
;)&, !
;/&2 M3&4 
A7&: O;&< K=&> #
LA&D N
MI&P $$&hc3 ' $))+hc3$ , 
r   c           	      L   t        j                         }|j                  | j                  | j                  t        j
                  |j                  |       t        |       t        |             }| j                  dk(  r.| j                  d      rt        d      t        |       |_        |S | j                  dk(  rJ| j                  d      rt        d      | j                  d      rt        |       |_        |S t        d      | j                  d	k(  rt!        |       |_        |S )
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)r   r   GoogleCloudDataplexV1DataScanr   r   CreateLabelsr   r   	scan_typer   rj   rJ   r   r   r#   r   rq   dataDiscoverySpecr
   r   requests      r    GenerateDatascanForCreateRequestr     s+   ((*&00""##&&

.
. 9$? 1 ' 
^^y  89
C  !8 =g 
. ~~" 89
C  
		2	3 7 =g 
.   ~~$ 9$ ?G	.r   c                 P   t        j                         }|j                  | j                  | j                  t        j
                  |j                  |       t        |             }| j                  dk(  r.| j                  d      rt        d      t        |       |_        |S | j                  dk(  rV| j                  d      rt        d      | j                  d      rt        |       |_        |S |j                         |_        |S | j                  dk(  rt!        |       |_        |S )	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   rj   rJ   r   r   r#   r   r!   rq   r   r   s      r    GenerateDatascanForUpdateRequestr   B  s)   ((*&00""##&&

.
. :$? 1 ' 
^^y  89
C  6d;G 
. ~~" 89
C  
		2	3 7 =g
 
. !' K K Mg 
. ~~$ 9$ ?G	.r   c                    t        j                         j                  | j                         t        j                         j	                  |            }t        j
                         j                  j                  |      S )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   a  su    #446ll((*%1%B%B%D%c%c &d & m  
	'	'	)	F	F	S	S
 r   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   SetIamPolicyFromFiler   n  s5    ##<002DD& 
lF	++r   c                 f    t        j                  | t        j                         j                        S )z=Waits for the given google.longrunning.Operation to complete.)r   WaitForOperationr   r   )	operations    r   r   r   v  s)    		&	&//1NN
 r   N)__doc__
__future__r   r   r   googlecloudsdk.api_lib.dataplexr   r   googlecloudsdk.api_lib.utilr   r   googlecloudsdk.callioper   googlecloudsdk.command_lib.iamr	   	Namespacer   r#   rJ   rq   rv   r|   r   r   r   r   r   r   r   r    r   r   <module>r      s    > &  ' @ A 5 3(22  -"3"="= -`K$5$?$? K\ 9.88 9x!+<+F+F !H+<+F+F >
,r   