
    v                        S 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QrSR#                  \SS/-   5      rSR#                  \S/-   5      r\R(                  R*                  \R(                  R,                  \R(                  R.                  \R(                  R0                  \R(                  R2                  4r\\R(                  R6                  4-   r\r\R(                  R,                  /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$S jr+S$S jr,S r-S  r.S! r/ S$S" jr0S%S# jr1g)&zeUtils for managng the many transfer job flags.

Tested through surface/transfer/jobs/create_test.py.
    N)errors)storage_url)
creds_util)jobs_flag_util)	name_util)log)
properties)
console_io)times)descriptionlogging_confignotification_configstatus,scheduletransfer_specreplication_specc                    U R                   [        R                  R                  L a  [        R
                  " 5       (       d/  [        R                  " SR                  U R                  5      5      e[        R                  " U Vs/ s H  o"R                  S-   PM     snSSR                  U 5      S9nX   n[        R                  " X5      $ U $ s  snf )z?Has user select a valid scheme from a list and returns new URL.zDid you mean "posix://{}"z://TzStorage Transfer does not support direct file URLs: {}
Did you mean to use "posix://"?
Run this command with "--help" for more info,
or select a valid scheme below.)cancel_optionmessage)schemer   ProviderPrefixFILEr
   	CanPromptr   InvalidUrlErrorformatresource_namePromptChoicevalueswitch_scheme)urlvalid_schemesr   scheme_index
new_schemes        =lib/googlecloudsdk/command_lib/transfer/jobs_apitools_util.py!_prompt_user_and_add_valid_schemer&   =   s     	ZZ;--222!!""
%
,
,S->->
?  **,9:M&	M:. &+	L ,J$$S55	* 	;s   Cc           
         UR                   [        R                  R                  L a  UR	                  UR
                  S9U l        gUR                   [        R                  R                  L a  UR                  UR
                  S9U l	        gUR                   [        R                  R                  L a*  UR                  UR                  UR
                  S9U l        gUR                   [        R                  R                  L a  UR                  (       aJ  UR!                  UR                  UR                  UR
                  UR"                  [%        X5      S9U l        gUR)                  UR                  UR
                  S9U l        g[-        U[        R.                  5      (       a5  UR1                  UR                  UR
                  UR2                  S9U l        gg)ax  Adds source url to transfer or replication spec.

Args:
  specs:
    a submessage, must be one of [job.transferSpec, job.replicationSpec].
  args: argparse.namespace, the parsed arguments from the command line.
  messages: storagetransfer_v1_message instance.
  source_url:
    An instance of the storage_url variable specifying the source
    location for the data transfer.
)pathrootDirectory
bucketNamer(   )r,   endpointr(   region
s3Metadata)	containerr(   storageAccountN)r   r   r   HDFSHdfsDatar   hdfsDataSourcePOSIXPosixFilesystemposixDataSourceGCSGcsDatabucket_namegcsDataSourceS3source_endpointAwsS3CompatibleDatasource_signing_region_get_s3_compatible_metadataawsS3CompatibleDataSource	AwsS3DataawsS3DataSource
isinstanceAzureUrlAzureBlobStorageDataaccountazureBlobStorageDataSource)specsargsmessages
source_urls       r%   add_source_urlrM   U   s    +44999#,,%% - 'EK66<<<$44 .. 5 0EK66:::"**))%% + E K66999

&
&#//++++//4TD ' F % '00++'' 1 e *k2233%% ,,))%-- 	& 	
 
$ 4    c                 2   UR                   [        R                  R                  L a*  UR	                  UR
                  UR                  S9U l        gUR                   [        R                  R                  L a  UR                  UR                  S9U l
        gg)a>  Adds destination url to transfer or replication spec.

Args:
  specs:
    a submessage, must be one of [job.transferSpec, job.replicationSpec]
  messages: storagetransfer_v1_message instance.
  destination_url:
    An instance of the storage_url variable specifying the destination
    location for the data transfer.
r+   r)   N)r   r   r   r8   r9   r:   r   gcsDataSinkr5   r6   posixDataSink)rI   rK   destination_urls      r%   add_destination_urlrS      s     {99=== (("..** ) E !;!;!A!AA"22%33 3 5E BrN   c                 2    [        X45      n[        XX#5        g)a  It validates the source url and adds it to transfer or replication spec.

If no URL scheme is provided, prompt the user to add a valid one
(e.g., 'gs://').

Args:
  specs:
    a submessage, must be one of [job.transferSpec, job.replicationSpec].
  args: argparse.namespace, the parsed arguments from the command line.
  messages: storagetransfer_v1_message instance.
  source_url:
    An instance of the storage_url variable specifying the source
    location for the data transfer.
  valid_schemes: the schemes supported by the specs.
N)r&   rM   )rI   rJ   rK   rL   r"   s        r%   validate_and_add_source_urlrU      s    & 1K*h3rN   c                 2    [        X#5      n[        XU5        g)a  Adds destination url to transfer or replication spec.

If no URL scheme is provided, prompt the user to add a valid one
(e.g., 'gs://').
Args:
  specs:
    a submessage, must be one of [job.transferSpec, job.replicationSpec]
  messages: storagetransfer_v1_message instance.
  destination_url:
    An instance of the storage_url variable specifying the destination
    location for the data transfer.
  valid_schemes: the schemes supported by the specs.
N)r&   rS   )rI   rK   rR   r"   s       r%    validate_and_add_destination_urlrW      s    " 6/ e7rN   c                 	   [        USS5      (       d7  [        USS5      (       d%  [        USS5      (       d  [        USS5      (       d  gU R                  (       d  UR                  5       U l        [        USS5      nU(       a=  [        UR                  R                  UR	                  5       5      U R                  l        [        USS5      (       a}  [        R                  " UR                  5      nU[        R                  R                  L a  SU R                  l
        O.U[        R                  R                  L a  SU R                  l        UR                  5       n[        USS5      (       Ga  UR                   GH  n[        R                  " U5      nU[        R                  R                   :X  a'  UR                  R"                  R$                  Ul        M_  U[        R                  R(                  :X  a'  UR                  R*                  R,                  Ul        M  U[        R                  R0                  :X  a'  UR                  R2                  R4                  Ul        M  U[        R                  R8                  :X  a(  UR                  R:                  R<                  Ul        GM/  U[        R                  R@                  :X  a(  UR                  RB                  RD                  Ul#        GMu  U[        R                  RH                  :X  a(  UR                  RJ                  RL                  Ul'        GM  U[        R                  RP                  :X  a(  UR                  RR                  RT                  Ul+        GM  U[        R                  RX                  :X  a(  UR                  RZ                  R\                  Ul/        GMG  U[        R                  R`                  :X  d  GMh  UR                  Rb                  Rd                  Ul3        GM     [        USS5      (       a@  [        UR                  RJ                  SURh                  R	                  5       -   5      Ul'        XRR                  5       :w  a  XPR                  l5        gg)z9Creates or modifies TransferOptions object based on args.overwrite_whenNdelete_frompreserve_metadatacustom_storage_classTSTORAGE_CLASS_)6getattrtransferOptionsTransferOptionsOverwriteWhenValueValuesEnumupperoverwriteWhenr   DeleteOptionrZ   SOURCE_AFTER_TRANSFER$deleteObjectsFromSourceAfterTransferDESTINATION_IF_UNIQUEdeleteObjectsUniqueInSinkMetadataOptionsr[   PreserveMetadataFieldACLAclValueValuesEnumACL_PRESERVEaclGIDGidValueValuesEnum
GID_NUMBERgidUIDUidValueValuesEnum
UID_NUMBERuidKMS_KEYKmsKeyValueValuesEnumKMS_KEY_PRESERVEkmsKeyMODEModeValueValuesEnumMODE_PRESERVEmodeSTORAGE_CLASSStorageClassValueValuesEnumSTORAGE_CLASS_PRESERVEstorageClassSYMLINKSymlinkValueValuesEnumSYMLINK_PRESERVEsymlinkTEMPORARY_HOLDTemporaryHoldValueValuesEnumTEMPORARY_HOLD_PRESERVEtemporaryHoldTIME_CREATEDTimeCreatedValueValuesEnum$TIME_CREATED_PRESERVE_AS_CUSTOM_TIMEtimeCreatedr\   metadataOptions)r   rJ   rK   overwrite_when_argumentdelete_optionmetadata_optionsfield_value	field_keys           r%   "_create_or_modify_transfer_optionsr      ss   
$($
/
/7
M44! 4!$+D2Et$L$L
$.
5
5
		&	&$,$<$<$>M!#D*:DA29  ==%%'3)M!!/ T=$''"//0@0@AM33IIIKOm##H	.55KK	K@Dm##=--/T&---- 66{Ci	n::>>	>$$77DD 	<<@@@$$77BB 	<<@@@$$77BB 	<<DDD$$::KK 	<<AAA$$88FF 	<<JJJ$$@@## 	% <<DDD$$;;LL 	 <<KKK$$AA$$ 	& <<III$$??dd 	$; .@ T)400$+  <<444::<<%>! 11334D!!1 4rN   c                 4   [        USS5      (       d[  [        USS5      (       dI  [        USS5      (       d7  [        USS5      (       d%  [        USS5      (       d  [        USS5      (       d  gU R                  (       d  UR                  5       U l        [        USS5      (       a  UR                  U R                  l        [        USS5      (       a  UR
                  U R                  l        [        USS5      (       aG  UR                  R                  [        R                  5      R                  5       nX0R                  l        [        USS5      (       aG  UR                  R                  [        R                  5      R                  5       nX@R                  l        [        USS5      (       a*  SR                  UR                   5      U R                  l        [        USS5      (       a+  SR                  UR$                  5      U R                  l        gg)	z3Creates or modifies ObjectConditions based on args.include_prefixesNexclude_prefixes include_modified_before_absoluteinclude_modified_after_absolute include_modified_before_relativeinclude_modified_after_relative{}s)r^   objectConditionsObjectConditionsr   includePrefixesr   excludePrefixesr   
astimezoner   UTC	isoformatlastModifiedBeforer   lastModifiedSincer   r   #minTimeElapsedSinceLastModificationr   #maxTimeElapsedSinceLastModification)r   rJ   rK   modified_before_datetime_stringmodified_after_datetime_strings        r%   #_create_or_modify_object_conditionsr     s   
$*D
1
1
$*D
1
1
$:D
A
A
$94
@
@
$:D
A
A
$94
@
@
		'	'%-%>%>%@M"T%t,,595J5JM""2T%t,,595J5JM""2T5t<<--88CMMO $8W""5T4d;;,,77		BLLN #7U""4T5t<<IN--J/M""FT4d;;IN,,J.M""F <rN   c                    U R                   (       a  [        USS5      (       a$  [        R                  " UR                  5      u  p4nO/[
        R                  " S5        [        R                  " 5       u  p4SnU(       a  U(       d  U(       d  [
        R                  " S5        UR                  X4S9U R                   l	        XPR                   l
        gU R                  (       ao  [        USS5      (       a&  [        R                  " UR                  S/5      S   nO[
        R                  " S5        SnUR                  US9U R                  l        gg)	z<Creates or modifies TransferSpec source creds based on args.source_creds_fileNzNNo --source-creds-file flag. Checking system config files for AWS credentials.zMissing AWS source creds.)accessKeyIdsecretAccessKeysasTokenzDNo Azure source creds set. Consider adding --source-creds-file flag.)r   )rC   r^   r   get_aws_creds_from_filer   r   warningget_default_aws_credsAwsAccessKeyawsAccessKeyroleArnrH   get_values_for_keys_from_fileAzureCredentialsazureCredentials)r   rJ   rK   access_key_idsecret_access_keyrole_arn	sas_tokens          r%   _create_or_modify_credsr   '  s   ""t($//

,
,T-C-C
D 1m 
kk * +)3)I)I)K&mh0X	kk-.191F1F! 2G 2FM!!.,4!!)//t($//::

 
 :,00:<i 
kk / 0i!!9!5 ,,= 0rN   c                    U R                   (       d4  U R                  (       d#  U R                  (       d  U R                  (       d  gUR	                  5       nU R                   (       a2  [        UR                  R                  SU R                   -   5      Ul        U R                  (       a/  [        UR                  R                  U R                  5      Ul	        U R                  (       a2  [        UR                  R                  SU R                  -   5      Ul        U R                  (       a2  [        UR                  R                  SU R                  -   5      Ul        U$ )z8Generates advanced settings for S3-compatible providers.NAUTH_METHOD_NETWORK_PROTOCOL_REQUEST_MODEL_)source_auth_methodsource_list_apisource_network_protocolsource_request_modelS3CompatibleMetadatar^   AuthMethodValueValuesEnum
authMethodListApiValueValuesEnumlistApiProtocolValueValuesEnumprotocolRequestModelValueValuesEnumrequestModel)rJ   rK   s3_compatible_metadatas      r%   r@   r@   F  s   

!
!T%9%9

&
&$*C*C#88:	(/%%??000)2% 
%,%%<<&" 
!!&-%%==d:::'<# 
*1%%AA4444+6' 
 rN   c                 ^    UR                   (       a  UR                   U R                  l        gg)z&Adds additional options for S3 source.N)s3_cloudfront_domainrC   cloudfrontDomain)r   rJ   s     r%   !_add_additional_s3_source_optionsr   `  s$    	595N5NM!!2 rN   c                    U R                   (       d  UR                  5       U l         [        USS5      (       a  SU R                   l        SU R                   l        SU R                   l        SU R                   l        SU R                   l        SU R                   l        SU R                   l	         [        R                  " UR                  5      n[        U R                   UUU[        5        U R                   R                  (       a  [-        U R                   U5        [        USS5      (       a^  SU R                   l        SU R                   l        [        R                  " UR2                  5      n[5        U R                   UU[6        5        [        USS5      (       a/  [8        R:                  " UR<                  5      U R                   l        [        USS5      (       a/  [8        R:                  " UR@                  5      U R                   l!        [        USS5      (       aS  [        R                  " URD                  5      nURG                  URH                  URJ                  S9U R                   l&        [        US	S5      (       a(  URO                  URP                  S
9U R                   l)        [U        U R                   X5        [W        U R                   X5        [Y        U R                   X5        g! [        R                    aq    UR                  R#                  [        R$                  R&                  R(                  5      (       a-  UR+                  UR                  S9U R                   l        Sn GNe f = f)z/Creates or modifies TransferSpec based on args.sourceN)listUrldestinationdestination_agent_poolsource_agent_poolintermediate_storage_pathr+   manifest_file)location)-transferSpecTransferSpecr^   httpDataSourcer7   r;   rA   rC   rH   r4   r   storage_url_from_stringr   rU   VALID_SOURCE_TRANSFER_SCHEMESr   r   
startswithr   HTTPr   HttpDatar   rQ   rP   r   rW   "VALID_DESTINATION_TRANSFER_SCHEMESr   add_agent_pool_prefixr   sinkAgentPoolNamer   sourceAgentPoolNamer   r9   r:   r   gcsIntermediateDataLocationTransferManifestr   transferManifestr   r   r   )jobrJ   rK   rL   rR   intermediate_storage_urls         r%   _create_or_modify_transfer_specr   f  s   			,,.CT8T""&*C#'+C$%)C"15C.'+C$26C/&*C#66t{{Cj "






' 	%%%c&6&6=T=$''%)C"#'C !99$:J:JKO$*	 T+T22)2)H)H##*%C&T&--+4+J+J, C(T.55*BB&& (3;3C3C+77%33 4D 45C0 T?D))(0(A(A## )B )%C% #**D;%c&6&6G$S%5%5tFe !! 			 : : ? ? E E	F	F*2*;*;DKK*;*P'
s   1 K3 3B M86M8c                 *   [        USS5      n[        USS5      n[        USS5      nU(       d  U(       d  U(       d  gU R                  (       d  UR                  5       U l        X0R                  l        X@R                  l        XPR                  l        g)zACreates or modifies event stream config. Returns if flag present.event_stream_nameNevent_stream_startsevent_stream_expiresFT)r^   eventStreamEventStreamnameeventStreamStartTimeeventStreamExpirationTime)r   rJ   rK   r   event_stream_startevent_stream_expires         r%   ,_create_or_modify_event_stream_configurationr     sv    d$7>t%:DA&<dC
15H	**,CO*//);//&.A//+	rN   c                 J   [        USS5      n[        USS5      n[        USS5      nU=(       d    U=(       d    UnU(       a#  U(       d  UR                  (       a  [        S5      eU(       a$  U(       d  [        USS5      (       a  [        S5      eU(       d  UR                  (       d  U(       d  U(       a  U(       d  gU R                  (       d  UR	                  5       U l        U(       a  UR                  [        R                  5      n	UR                  U	R                  U	R                  U	R                  S	9U R                  l        UR                  U	R                  U	R                  U	R                   S
9U R                  l        OcU(       d\  [$        R&                  R)                  5       n
UR                  U
R                  U
R                  U
R                  S	9U R                  l        U(       a   SR+                  U5      U R                  l        U(       a  U R                  R,                  (       d  [        S5      eUR                  [        R                  5      nUR                  UR                  UR                  UR                  S	9U R                  l        UR                  UR                  UR                  UR                   S
9U R                  l        gU(       dB  U R                  R,                  (       d&  U R                  R                  U R                  l        ggg)z;Creates or modifies transfer Schedule object based on args.schedule_startsNschedule_repeats_everyschedule_repeats_untilz(Cannot set schedule and do-not-run flag.
do_not_runFz-Cannot set schedule on event-driven transfer.)daymonthyear)hoursminutessecondsr   zScheduling a job end time requires setting a frequency with --schedule-repeats-every. If no job end time is set, the job will run one time.)r^   r   
ValueErrorr   Scheduler   r   r   Dater  r  r  scheduleStartDate	TimeOfDayhourminutesecondstartTimeOfDaydatetimedatetodayr   repeatIntervalscheduleEndDateendTimeOfDay)r   rJ   rK   	is_updateis_event_driven_transferr   r   r   has_schedule_flagstart
today_dateends               r%   _create_or_modify_scheduler    sX    D"3T:/"4)A4H"4)A4HI/I3I  ABB74u==
D
EE 	!
-
 	$$&CL&&uyy1E%-]]IIkkZZ &3 &CLL"
 #+"4"4jj #5 #CLL
 $$&J%-]]NN*"2"2 &3 &JCLL" "',,/E"FCLL <<&&  !
+
+EII
6C#+==GGiiXX $1 $CLL 
 !) 2 2hh



 !3 !CLL
 S\\88 $'<<#A#ACLL  99rN   c                     [        USS5      n[        USS5      n[        USS5      nU(       d  U(       d  U(       d  gU(       a6  U R                  (       d  UR                  US9U l        OX@R                  l        U(       d  U(       a  U R                  (       d  [	        S5      eU(       a@  UR                  5       n[        UR                  R                  U5      U R                  l        O6U(       d/  UR                  R                  R                  U R                  l        U(       a`  / nU HG  n	SU	R                  5       -   n
[        UR                  R                  U
5      nUR                  U5        MI     XR                  l        gU(       do  UR                  R                  R                  UR                  R                  R                  UR                  R                  R                  /U R                  l        gg)zECreates or modifies transfer NotificationConfig object based on args.notification_pubsub_topicNnotification_event_typesnotification_payload_format)pubsubTopiczCCannot set notification config without --notification-pubsub-topic.TRANSFER_OPERATION_)r^   notificationConfigNotificationConfigr!  r  rb   PayloadFormatValueValuesEnumpayloadFormatJSON"EventTypesValueListEntryValuesEnumappend
eventTypesTRANSFER_OPERATION_SUCCESSTRANSFER_OPERATION_FAILEDTRANSFER_OPERATION_ABORTED)r   rJ   rK   r  r  r  r   payload_format_keyevent_typesevent_type_argevent_type_key
event_types               r%   %_create_or_modify_notification_configr3    s   %d,GN$T+EtL '.K(,!.
#'?
%
!!'::/  ;  1c ,E(!3+A+A
 5 6 6 !4::<+2##@@,C(  	##@@EE ( K2,~/C/C/EEn

%
%
H
H
j $ 3 )4% 
	$	$	G	G
$
$		$	$	G	G
#
#		$	$	G	G
$
$)C% rN   c                 ,   [        USS5      nU R                  (       d6  U R                  R                  (       d-  U R                  R                  (       d  SU R
                  l        gUb  X0R
                  l        gU(       d  SU R
                  l        g g)z)Sets enableOnpremGcsTransferLogs boolean.enable_posix_transfer_logsNFT)r^   replicationSpecr   r7   rQ   loggingConfigenableOnpremGcsTransferLogs)r   rJ   r  r5  s       r%    _enable_onprem_gcs_transfer_logsr9  B  s    &t-I4P	&&#*:*:*H*H49C1 	 "-4N1 	 48C1 	 	rN   c                 F   U R                   (       d  UR                  5       U l         [        XU5        [        USS5      n[        USS5      nU(       d  U(       d  gU R                   =(       a    U R                   R                  nU R                   =(       a    U R                   R
                  nU(       a  U(       d'  U(       a  U(       a  U(       a  U(       d  [        S5      eU(       aX  / nU H@  n	UR                  [        U R                   R                  U	R                  5       5      5        MB     XR                   l        U(       aY  / n
U H@  nU
R                  [        U R                   R                  UR                  5       5      5        MB     XR                   l        gg)z@Creates or modifies transfer LoggingConfig object based on args.log_actionsNlog_action_stateszRBoth --log-actions and --log-action-states are required for a complete log config.)r7  LoggingConfigr9  r^   
logActionslogActionStatesr  r)  "LogActionsValueListEntryValuesEnumrb   'LogActionStatesValueListEntryValuesEnum)r   rJ   rK   r  r;  r<  existing_log_actionsexisting_log_action_statesactionsactionaction_statesaction_states               r%    _create_or_modify_logging_configrH  V  sS   			 ..0C #3i8mT2+d$7>
*
**Ks/@/@/K/K	=C--==  ,6"6
 3 4 4 Gnn
###FF,,."#  $+ M)
###KK$$&() * )6% rN   c           	          UR                   nSUl         UR                  U R                  5       :X  a  SUl        U R                  UR                  U R                  UUUS9S9$ )z3Generates Apitools patch message for transfer jobs.N)	projectIdtransferJobupdateTransferJobFieldMask)jobNameupdateTransferJobRequest)rJ  r   r  'StoragetransferTransferJobsPatchRequestr   UpdateTransferJobRequest)rK   r   
field_mask
project_ids       r%   #generate_patch_transfer_job_messagerS    sl    }}*#-\\X&&(( CL		9	9hh'@@%/  A   
: 
	 	rN   c                    U(       a  [        S5      eU R                  (       d  UR                  5       U l        [        USS5      (       ax  SU R                  l        [
        R                  " UR                  5      nUR                  [        ;  a  [        R                  " S5      e[        U R                  UUU[        5        [        USS5      (       av  SU R                  l        [
        R                  " UR                  5      nUR                  [        ;  a  [        R                  " S5      e[        U R                  X%[        5        [!        U R                  X5        [#        U R                  X5        g)z2Adds/Updates the replication spec to transfer job.z:Not allowed to set event stream flags on replication jobs.r   NzQReplication feature is currently available for Google Cloud Storage buckets only.r   )r  r6  ReplicationSpecr^   r;   r   r   r   r   VALID_REPLICATON_SCHEMESr   ErrorrU   rP   r   rW   r   r   )r   rJ   rK   has_event_stream_flagrL   rR   s         r%   "_create_or_modify_replication_specrY    s<    
D  
		"224CT8T""(,C%44T[[AJ 88LL     T=$''&*C#!99$:J:JKO%==LL  %X8P &c&9&94J$S%8%8$IrN   c                 <   U(       a  UnOUR                  5       nUR                  (       d7  [        R                  R                  R
                  R                  5       Ul        [        U SS5      (       a%  [        R                  " U R                  5      Ul
        [        U SS5      (       a  U R                  Ul        U(       aR  [        U SS5      (       a?  U R                  R                  5       n[        UR                   R                  U5      Ul        O%UR                   R                  R                  Ul        [!        X0U5      nU(       + =(       a    [        U SS5      (       + =(       d    UR"                  nU(       a  [%        X0U5        O
['        X0XS9  UR(                  =(       d    UR*                  n[-        UU U[/        U5      US9  [1        X0U[/        U5      S9  [3        X0U[/        U5      S9  U(       a   U(       a  [4        O[6        n[9        UUU5      $ U$ )	z?Generates Apitools transfer message based on command arguments.r   Nr   r   replication)rX  )r  r  )r  )TransferJobrJ  r	   VALUEScoreprojectGetr^   r   add_job_prefixr   r   r   rb   StatusValueValuesEnumENABLEDr   r   r   rY  r   r6  r  boolr3  rH  $UPDATE_FIELD_MASK_WITH_TRANSFER_SPEC'UPDATE_FIELD_MASK_WITH_REPLICATION_SPECrS  )	rJ   rK   existing_jobr   
status_keyrX  is_transfer_jobr  update_masks	            r%   generate_transfer_job_messagerk    s   
C



 C	%%**22668CMT64  ''		2CHT=$''&&COtXt$$;;$$&j



4
4jcj %%;;CCCJF	 

E74#EE 
			  #Cx8&8 !__C0C0C	
\"7 (	T,%7 #	T,%7   	-4 
 /  
*rN   )F)N)2__doc__r  "googlecloudsdk.command_lib.storager   r   #googlecloudsdk.command_lib.transferr   r   r   googlecloudsdk.corer   r	   googlecloudsdk.core.consoler
   googlecloudsdk.core.utilr   UPDATE_FIELD_MASKjoinre  rf  r   r5   r8   r<   r   HTTPSCOMMON_VALID_TRANSFER_SCHEMESr2   r   r   rV  r&   rM   rS   rU   rW   r   r   r   r@   r   r   r   r  r3  r9  rH  rS  rY  rk   rN   r%   <module>rw     s|    5 : : > 9 # * 2 *  (+xx_55( $ +.((+,,+ '
 $$""!!##$$!  !>##A !  &C "'66::; 0+\5*4.8.>EB.@7> 4OCGL$ >CKB\4n	(&6R	( 05,J^FrN   