
    e                        U d Z ddlZddlZddlZddlZddlZddlmZmZm	Z	m
Z
mZmZmZ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 eZej8                  dkD  rej:                  Zej<                  Zg dZg dZ 	 d@dejB                  fdZ"	 dAde
ejB                     ddfdZ#dee$e$f   de$fdZ%dejL                  jN                  de$fdZ(dee$e$f   de$fdZ)de$fdZ*de+de$fdZ,de$de$fdZ-e$Z.ee/d<   e$Z0ee/d<   eee$e$f   ee$e$f   ee$e$f   f   Z1ee/d <   ee0e1f   Z2ee/d!<   e	ee$eee$e$f   e$f   f      Z3ee/d"<   d#e3de$fd$Z4de$fd%Z5d&e$ddfd'Z6	 	 dBd(ejn                  d)eejL                  jp                     d&ejr                  fd*Z:d+eejL                  jp                     fd,Z;d- Z<d. Z=d/ Z>de$fd0Z?de$fd1Z@de$fd2ZAd3 ZBd4 ZCd5 ZDd6 ZEd7 ZFd8 ZGd9 ZHd: ZId;ee$ef   dee$ef   fd<ZJd= ZKd> ZLd? ZMy)Cz.BQ CLI frontend formatting library for Python.    N)AnyDictListOptionalTupleTypeUnioncast)	TypeAlias)utils)bq_api_utils)	bq_consts)bq_error)bq_id_utils)bq_processor_utils)      )
updateTimeschedulerunTimescheduleTimeparamsendTimedataSourceIddestinationDatasetIdstate	startTimename)r   r   r   
obj_formatc                     ddg}|dk(  r!t        t        j                  | d             y
|dk(  r"t        t        j                  | dd             y
t        d|d	|      )zPrints obj in a JSON format according to the format argument.

  Args:
    obj: The object to print.
    obj_format: The format to use: 'json' or 'prettyjson'.
  json
prettyjson),:)
separatorsT   )	sort_keysindentz#Invalid json format for printing: 'z', expected one of: N)printr!   dumps
ValueError)objr   json_formatss      (platform/bq/frontend/utils_formatting.py_print_formatted_json_objectr/   0   s]     ,',6	$**SZ
01\!	$**SD
34
|	%     flag_formatreturnc           
      "   | sy| j                  d      r| d   j                  d      r| d   d   j                  d      | d   d   j                  d      | d   d   j                  d      d}|dv rt        ||	       nTt        d
| d   d   j                  d      d| d   d   j                  d      d| d   d   j                  d      d       | j                  d      r| d   j                  d      r}| d   d   j                  d      | d   d   j                  d      d}|dv rt        ||	       n<t        d
| d   d   j                  d      d| d   d   j                  d      d       | j                  d      r| d   j                  d      rr| d   j                  d      | d   j                  d      d}|dv rt        ||	       yt        d| d   j                  d      d| d   j                  d      d       y| j                  d      rr| d   j                  d      | d   j                  d      d}|dv rt        ||	       yt        d| d   j                  d      d| d   j                  d      d       yy)zAPrints follow-up instructions for created or updated connections.NawscrossAccountRole	iamRoleId	iamUserId
externalId)r6   r7   r8   )r"   r!   )r   z8Please add the following identity to your AWS IAM Role 'z'
IAM user: 'z'
External Id: 'z'

accessRoleidentity)r6   r:   z'
Identity: 'azurefederatedApplicationClientId)r<   r:   z=Please add the following identity to your Azure application 'clientIdapplication)r=   r>   z@Please create a Service Principal in your directory for appId: 'z(',
and perform role assignment to app: 'z0' to allow BigQuery to access your Azure data. 
)getr/   r)   )
connectionr1   r,   s      r.   .maybe_print_manual_instructions_for_connectionrA   F   s   
 

^^Ez%0445GH&'9:>>{K&'9:>>{K '(:;??MC
 ,,"3;?  2377D 2377D 2377E	 ^^Ez%044\B&|488Eu%l377
CC ,,"3;? -11+>-11*=	 ^^GG!4!8!8$"
 w##$BCw'++J7	C ,,"3;? !%%&DE!%%j1	 ~~gw'++J7!'*..}=C ,,"3;? !%%j1!%%m4	 r0   labelsc                     g }| j                         D ]  \  }}|d|}|j                  |g         dj                  |      S )z(Format a resource's labels for printing.r$   
)itemsextendjoin)rB   result_lineskeyvalue	label_strs        r.   _format_labelsrL      sF    ,LLNjc5&I$ # 
<	  r0   tablec                 (    | d   d| d   d| d   S )N	projectIdr$   	datasetId.tableId )rM   s    r.   _format_table_referencerT      s&     KKI
 r0   tagsc                     | j                         D cg c]  \  }}dj                  ||       }}}dj                  |      S c c}}w )z&Format a resource's tags for printing.z{}:{}rD   )rE   formatrG   )rU   rI   rJ   rH   s       r.   _format_resource_tagsrX      s@    ?Czz|L|e'..e,|,L	<	   Ms   Ac                     g }| D ]\  }|d   d   dk(  r|d   d   d   }n|d   d   }d|d   d|j                         }|d   d   dk(  r|dz  }|j                  |g       ^ d	j                  |      S )
zReturns a string with standard_sql_fields.

  Currently only supports printing primitive field types and repeated fields.
  Args:
    standard_sql_fields: A list of standard sql fields.

  Returns:
    The formatted standard sql fields.
  typetypeKindARRAYarrayElementTypez|- r   : z (repeated)rD   )lowerrF   rG   )standard_sql_fieldslinesfield
field_typeentrys        r.   _format_standard_sql_fieldsre      s     %"eV}Z G+=!34Z@j=,j =**:*:*<=EV}Z G+}e	LL% # 
5	r0   secsc                 T    t        j                  dt        j                  |             S )Nz%d %b %H:%M:%S)timestrftime	localtime)rf   s    r.   format_timerk      s    	')=	>>r0   json_stringc                     t         j                   j                  | d      }|t        j                   ddd      z
  j                         }t        |      S )zAConverts google.protobuf.Timestamp formatted string to BQ format.z%Y-%m-%dT%H:%M:%S.%fZi     )datetimestrptimetotal_secondsrk   )rl   parsed_datetimesecondss      r.   ,format_time_from_proto_timestamp_json_stringrt      sM    %%..*/ x00q!<<KKM'	W	r0   StringReferenceResourceType
ConditionsResourceTypeAndConditionsDatasetAccessaclc           
      Z   t        j                  t              }| D ]  }|j                         }t	        t
        t        t        f   |j                  dd            }t	        t
        t        t
        t        t        f   f   |j                  dd            }t	        t
        t        t        f   |j                  dd            }t	        t        |j                  dd            }|rK|d   j                  |j                  d      d|j                  d	      d
|j                  d             |rt	        t
        t        t        f   |j                  d            }|j                  d      D ]A  }|d|z   dz   df   j                  |j                  d      d|j                  d	             C |r>t        t        j                  j                  di |      }	|d   j                  |	       t	        t
        t        t        f   |j                  dd            }
|r%t        t        |j                                     dk7  rt        j                   d| z  i g       |
r=||t#        |
j%                               f   j'                  |j                                ||df   j'                  |j                                 ddddd}g }|j%                         D ]`  \  }}|j                  |dfd      }|s|j                  d|z         |j                  dj)                  d t+        |      D                     b t+        |j%                               D ]  \  \  }}
}||v r|j                  d||   z         n|j                  d|z         |j                  dj)                  d t+        |      D                     |
sl|j                  d       |j                  dj)                  d t-        |
      j%                         D                      dj)                  |      S ) z*Format a server-returned ACL for printing.viewNdatasetroutinerole)VIEWrS   rO   r$   rP   rQ   rR   targetTypeszAll z in DATASETrS   )ROUTINErS   	conditionrn   z"Invalid ACL returned by server: %sOwnersWritersReaderszAuthorized Views)OWNERWRITERREADERr   z%s:z,
c              3   &   K   | ]	  }d |z    ywz  %sNrS   .0ms     r.   	<genexpr>zformat_acl.<locals>.<genexpr>!  s     $IAVaZ   c              3   &   K   | ]	  }d |z    ywr   rS   r   s     r.   r   zformat_acl.<locals>.<genexpr>(  s     "G!6A:r   z    condition:rD   c              3   2   K   | ]  \  }}d |d|  yw)z      r^   NrS   )r   rI   rJ   s      r.   r   zformat_acl.<locals>.<genexpr>,  s!       7*#u !$U+ 7s   )collectionsdefaultdictlistcopyr
   r   strpopappendr?   r   ApiClientHelperRoutineReferencelenvaluesr   BigqueryInterfaceErrortuplerE   rF   rG   sorteddict)rz   acl_entriesrd   r|   r}   r~   r   dataset_referencetargetroutine_referencer   original_rolesrH   r   memberss                  r.   
format_aclr      s    d#  eJJLES#X		&$ 78D4T#s(^+,eii	4.HIG4S>599Y#=>GUYYvt,-D*$$XXk"DHH[$9488I;NP 
tCH~w{{9/EFKK.&FVOm3R78?? "%%k2!%%k2	
 / 


%
%
6
6
A
A - ''(9:tCH~uyyd'CDiSelln-.!3--036B
 	
 
T5!2345<<U\\^LD"H$$U\\^4G L  	. ,"((*jdDootRj$/G%$,'%**$I$IIJ	 + %+;+<+<+>$? tY~%."667%$,'

"Gvg"GGH*+
))  $Y 5 5 7  %@ 
<	  r0   c                 z    ddt         t           ffddj                   | j                  dg                   S )zFormat a schema for printing.r2   c           	         g }| D ]  }d|z  }|j                  dd      dk7  rdnd}|d|d   d	|j                  dd      j                         }d
|v r|d|d
   z  z  }n5d|v r1d|v r|d|d   d|d   dz  }n|d|d   z  z  }d|v r|d|d   z  z  }|j                  dd      dk7  r|d|d   j                         dz  }|j                  ||z          d|v s|j                   |d   |dz                 |S )z5Print all fields in a schema, recurring as necessary.z|  rZ   STRINGRECORD|+z- r   r^   	maxLengthz(%s)	precisionscale(, )roundingModez options(rounding_mode="%s")modeNULLABLE (fieldsrn   )r?   r_   r   rF   )r   r(   ra   rb   prefixjunctionrd   print_fieldss          r.   r   z#format_schema.<locals>.print_fields7  s:   Ev~f		&(3x?Sh

-
))FH
%
+
+
-e 
	5-..%e
{!3U7^D
D%
6U;/0
0%U"
1U>5JK
K%	6:	&*	4E&M//133ll6E>"	U	\%/6A:>?/ 0 Lr0   rD   r   )r   )r   r   rG   r?   )schemar   s    @r.   format_schemar   4  s4    S	 : 
<

8R 89	::r0   print_formatc                 (    | dvrt        d|       y )N)showr   r|   materialized_viewmaketable_replicazUnknown format: )r+   )r   s    r.   validate_print_formatr   W  s$       \;
<<r0   	formatterreference_typec                    t        |       |t        j                  j                  k(  r|dk(  r| j	                  d       | j	                  d       |dk(  rV| j	                  d       | j	                  d       | j	                  d       | j	                  d       | j	                  d	       y5y5|t        j                  j
                  k(  r(|dk(  r| j	                  d
       | j	                  d       y5|t        j                  j                  k(  r|dk(  r| j	                  d       |dk(  r| j	                  d       | j	                  d	       d|v }|xs d|v }|r| j	                  d       d|v r| j	                  d       d|v r| j	                  d       d|v r| j	                  d       d|v r| j	                  d       y5y5y5|t        j                  j                  k(  r}|dk(  rD| j	                  d       | j	                  d       | j	                  d       | j	                  d       |dk(  r.|j                         D ]  }|dk7  s	| j	                  |f        y5y5|t        j                  j                  k(  ry|dk(  r$t        D ]  }|dk7  s	| j	                  |f        y5|dk(  rt        D ]  }| j	                  |f        y5|dk(  r't        D ]  }|t        vs| j	                  |f        y5y5|t        j                  j                  k(  r4| j	                  d       | j	                  d        | j	                  d!       y5|t        j                  j                  k(  r| j	                  d"       y5|t        j                  j                  k(  rD|dk(  r| j	                  d#       |dk(  r(| j	                  d$       d%|v r| j	                  d       y5y5y5|t        j                  j                  k(  r|dk(  r"| j	                  d&       | j	                  d'       |dk(  rg| j	                  d(       d)|v r| j	                  d*       d+|v r| j	                  d,       d-|v r| j	                  d.       d/|v r| j	                  d0       y5y5y5|t        j                  j                   k(  r|dk(  s|dk(  r| j	                  d1       y5y5|t        j                  j"                  k(  r%|dk(  r"| j	                  d2       | j	                  d3       |dk(  rd4}|c|d   d6k(  r| j	                  d7       d8}nG|d   d9k(  r| j	                  d:       d8}n+d;|v r| j	                  d<       nd=|v r| j	                  d>       |r| j	                  d?       | j	                  d	       d%|v r| j	                  d       d@|v r| j	                  d       |dAk(  r| j	                  dB       |dCk(  r| j	                  dD       |dEk(  r| j	                  dF       y5y5|t        j                  j$                  k(  r)| j	                  t'        |j                                      y5|t        j                  j(                  k(  rOdG}t*        j,                  j.                  t*        j0                  j2                  v rg |dH}| j	                  |       y5|t        j                  j4                  k(  r| j	                  dI       y5|t        j                  j6                  k(  r| j	                  dJ       y5|t        j                  j8                  k(  r| j	                  d       y5|t        j                  j:                  k(  r| j	                  dK       y5t=        dL|j>                        )Ma  Configure a formatter for a given reference type.

  If print_format is 'show', configures the formatter with several
  additional fields (useful for printing a single record).

  Arguments:
    formatter: TableFormatter object to configure.
    reference_type: Type of object this formatter will be used with.
    print_format: Either 'show' or 'list' to control what fields are included.
    object_info: Resource dict to format.

  Raises:
    ValueError: If reference_type or format is unknown.
  r   )jobId)Job TypeState
Start TimeDurationr   )
User Email)Bytes Processed)Bytes Billed)Billing Tier)Labels)rO   )friendlyName)rP   )Last modifiedACLsrU   resource_tags)TagsdefaultEncryptionConfiguration)
kmsKeyNamerZ   )r   linkedDatasetSource)Source datasetmaxTimeTravelHours)Max time travel (Hours))r   )displayName)r   )r   r   r   )messageText)messageTime)severity)nextPageToken)Id
Model Typer   Creation Time)r   r   Feature ColumnsLabel Columnsr   r   Expiration TimeencryptionConfiguration)r   Routine TypeLanguager   Last Modified Time)	Is Remote)r   r   r   	Signature
Definitionr   r   remoteFunctionOptions)Remote Function Endpoint
ConnectionUser Defined ContextsparkOptions)
r   Runtime VersionContainer Image
PropertiesMain File URI
Main ClassPyFile URIsJar URIs	File URIsArchive URIspythonOptions)Entry PointPackagesexternalRuntimeOptions)r   r   Container MemoryContainer CPU)r   Filter PredicateGranteesr   r   )rR   r   )r   Time PartitioningClustered FieldsTNr   )r   Schemar   
ExpirationFEXTERNAL)r   r  r   
Total URIsr	  snapshotDefinition)
Base TableSnapshot TimeStampcloneDefinition)r  Clone TimeStamp)	r   r  
Total RowsTotal Bytesr	  r  r  Total Logical BytesTotal Physical BytesresourceTagsr|   )Queryr   )r  Enable RefreshRefresh Interval MsLast Refresh Timer   )r   r   r  Source TableSource Last Refresh TimeReplication Interval SecondsReplication StatusReplication Error)r   slotCapacitytargetJobConcurrencyignoreIdleSlotscreationTimer   multiRegionAuxiliaryeditionautoscaleMaxSlotsautoscaleCurrentSlotsmaxSlotsscalingModereservationGroup)
r   	slotCountplanrenewalPlanr   commitmentStartTimecommitmentEndTimer#  r$  
isFlatRate)r   jobTypeassignee)r   r   descriptionr   rZ   hasCredential
propertieszUnknown reference type: ) r   r   r   JobReference
AddColumnsProjectReferenceDatasetReferenceTransferConfigReferencekeysTransferRunReference$_COLUMNS_TO_INCLUDE_FOR_TRANSFER_RUN'_COLUMNS_EXCLUDED_FOR_MAKE_TRANSFER_RUNTransferLogReferenceNextPageTokenReferenceModelReferencer   RowAccessPolicyReferenceTableReferenceEncryptionServiceAccountr   ReservationReferencebq_flagsAlphaFeaturesRESERVATION_GROUPSALPHArJ   CapacityCommitmentReferenceReservationAssignmentReferenceReservationGroupReferenceConnectionReferencer+   __name__)	r   r   r   object_infoadd_tagsrI   columnuse_defaultshared_columnss	            r.   configure_formatterrS  c  s   ( %{22???v:&   v?+/0,-,-;'  44EEEv>**+44EEEv>*v  	 ;';&h;_;h	Y'	)[	8_-	;	Y'	+	-01		,9: 
-! $ 44LLLv9%+,,-:&v!!##&=


v
& $  44IIIv8&V


y
) 9 
	8&fY' 9		8&AB


y
) 9 
  44III)*)*'44KKK+,44CCCvJKv  	 
#k	1_- 
2  44EEEv  	 >*v  	 
!K	/ 
 	
 
;	& 
 	 
K	' 
 	 
"[	0 
 	 
1E R 44MMMv!7  	 "8 44CCCv  	 NOvk		 v&(


? + J.


M +![0


C
D+-


@
A	 	 

 
	 ;'	"k	1_-	;	&Y'v:&**  	 & 	 		 ' 44MMMk..01244IIIN 00HNN4H4HH
n (33OOO   		$	$	C	CD 8944NNN#44HHH   ^5L5LN
OOr0   object_typec                 F   |t         j                  j                  k(  rt        |       S |t         j                  j                  k(  rt        |       S |t         j                  j                  k(  rt        |       S |t         j                  j                  k(  rt        |       S |t         j                  j                  k(  rt        |       S |t         j                  j                  k(  rt        |       S |t         j                  j                  k(  rt        |       S |t         j                  j                   k(  rt#        |       S |t         j                  j$                  k(  rt'        |       S |t         j                  j(                  k(  rt+        |       S |t         j                  j,                  k(  r| S t/        |t         j                  j0                        rt3        |       S t/        |t         j                  j4                        rt7        |       S t/        |t         j                  j8                        rt;        |       S t/        |t         j                  j<                        rt?        |       S |t         j                  j@                  k(  rtC        |       S tE        d|      )z<Format a single object_info (based on its 'kind' attribute).)reservationzUnknown object type: )#r   r   r5  format_job_infor7  format_project_infor8  format_dataset_inforB  format_table_infor@  format_model_infor   format_routine_inforA  format_row_access_policy_infor9  format_transfer_config_infor;  format_transfer_run_infor>  format_transfer_log_inforC  
issubclassrD  format_reservation_inforI  format_capacity_commitment_inforJ  "format_reservation_assignment_inforK  format_reservation_group_inforL  format_connection_infor+   )rN  rT  s     r.   format_info_by_typerg    s    K//<<<;''k11BBB{++k11BBB{++k11@@@[))k11@@@[))k11BBB{++k11JJJ(55k11III&{33k11FFF#K00k11FFF#K00k11JJJ;..CC #{;;;..JJ +;77;..MM .k::;..HH )55k11EEE!+..
+?
@@r0   c                 X   | j                         }t        j                  |      }|j                  t	        |             |j                  di       }t        j                  |      |d<   |d   d   |d<   d|v r|d   |d<   |d   dk(  r	 t        j                  |       d	|d<   d|v rYt        |d         dz  }d|v r6t        |d         dz  |z
  }t        t        j                  |            |d<   t        |      |d<   t        j                   |       }|r||d<   |j                  di       }d|v r|d   |d<   d|v r|d   |d<   d|v r|d   |d<   |j                  di       }d|v rt#        |d         |d<   d|v r|d   |d<   d|v r|d   |d<   d |v rt	        |d          |d!<   d"|v rt	        |d"         |d#<   d$|v rt	        |d$         |d%<   d&|v r|d&   |d'<   d(|v r|d(   |d)<   |d(   d*k(  rd+|d,<   d-|v rt	        |d-         |d.<   |S # t        j                  $ r	 d
|d<   Y w xY w)/zuPrepare a job_info for printing.

  Arguments:
    job_info: Job dict to format.

  Returns:
    The new job_info.
  
statisticsr   statusr   r   
user_emailr   DONESUCCESSFAILUREr     r   )rs   r   r   z
Session IdquerytotalBytesProcessedr   totalBytesBilledr   billingTierr   configurationrB   r   numDmlAffectedRowszAffected RowsddlOperationPerformedzDDL Operation PerformedddlTargetTablezDDL Target TableddlTargetRoutinezDDL Target RoutineddlTargetRowAccessPolicyzDDL Target Row Access PolicyddlAffectedRowAccessPolicyCountz$DDL Affected Row Access Policy CountstatementTypezStatement TypeASSERTT	AssertiondefaultConnectionStatszDefault Connection Stats)r   r   ConstructObjectReferenceupdater   r?   GetJobTypeNamebq_client_utilsRaiseIfJobErrorr   BigqueryErrorintr   ro   	timedeltark   GetSessionIdrL   )	job_inforesult	referencestatsstartduration_seconds
session_idquery_statsconfigs	            r.   rW  rW    s    ==?& 99&A)--Y 
**\2
&%)88@&8$W-&/V!,/F<G_"%%f-!fWo Ek"#d*EEU9-.5=x11:JKLfZ&u-F< "..x8*%F<		'2&+k) +,A BF;&();<F>k!(7F>::or*&%fX&67F8[()*>?F?+(34K(LF$%$!%k2B&C!DF;&#'4F(G#HF ;.-1./.F)* '+55@)6F12 #*?;F?#x/ f[,)-,-*F%& 
-c !! "!fWo"s   
H H)(H)c                     | j                         }t        j                  |      }|j                  t	        |             |S )zPrepare a project_info for printing.

  Arguments:
    project_info: Project dict to format.

  Returns:
    The new project_info.
  )r   r   r  r  r   )project_infor  r  s      r.   rX  rX    s7     & 99&A)--Y 	-r0   c                 b   i }| d   d   |d<   d|d<   d| v r| d   |d<   d| v rt        | d         |d<   d	| v rt        t        | d	         d
z        |d<   d| v rt        t        | d         d
z        |d<   d| v rt        | d         |d<   d| v rt        | d         |d<   d| v r| d   d   |d<   |S )zPrepare a model for printing.

  Arguments:
    model_info: Model dict to format.

  Returns:
    A dictionary of model properties.
  modelReferencemodelIdr    r   	modelTyperB   r   r"  ro  r   expirationTimer   featureColumnsr   labelColumnsr   r   r   )rL   rk   r  re   )
model_infor  s     r.   r[  r[    s    &,-i8&,&J%k2F<%j&:;F8z!)J~&'$.F? # +J'()D0!F # ;#$!F z!9>"F? *,%&?@NF<	-r0   c           
         | d   }|dk(  rdj                  |t        | d               S |dk(  rU| d   d   D cg c]#  }dj                  |d	   t        |d
               % }}dj                  |dj                  |            S |S c c}w )zConverts a routine data type to a pretty string representation.

  Arguments:
    data_type: Routine data type dict to format.

  Returns:
    A formatted string.
  r[   r\   z{}<{}>r]   STRUCT
structTyper   {} {}r   rZ   r   rW   format_routine_data_typerG   )	data_type	type_kindrb   struct_fieldss       r.   r  r  2  s     
#)'??+I6H,IJ  H |,X66E 	uV}&>uV}&MN6   ??9dii&>??s   (Bc           
          | d   D cg c]#  }dj                  |d   t        |d               % }}dj                  dj                  |            S c c}w )zConverts a routine table type to a pretty string representation.

  Arguments:
    table_type: Routine table type dict to format.

  Returns:
    A formatted string.
  columnsr  r   rZ   z	TABLE<{}>r   r  )
table_typerP  r  s      r.   format_routine_table_typer  J  sc     y))& nnVF^%=fVn%MN) 
  
		DIIg.	//	s   (Ac                 Z   d|v rt        |d         }nJ|j                  d      dk(  rd}n3| dk(  rd|v rt        |d         }n| dk(  r|j                  d      dk(  rd}d	|v rId
}d|v r|d   dz   }| dk(  r d|v r|d   sdj                  ||d	   d      S dj                  ||d	         S S )aT  Converts a routine argument to a pretty string representation.

  Arguments:
    routine_type: The routine type of the corresponding routine. It's of string
      type corresponding to the string value of enum
      cloud.bigquery.v2.Routine.RoutineType.
    argument: Routine argument dict to format.

  Returns:
    A formatted string.
  dataTypeargumentKindANY_TYPEzANY TYPETABLE_VALUED_FUNCTION	tableType	ANY_TABLEz	ANY TABLEr   r  r    AGGREGATE_FUNCTIONisAggregatez
{}{} {} {}zNOT AGGREGATEz{}{} {})r  r?   r  rW   )routine_typeargumentdisplay_typeargument_modes       r.   format_routine_argument_infor  Z  s     8+HZ,@AL||N#z1L..;(3J,Xk-BCL--
,,~
&+
5LxMv&,m,,X%'  
&)<  mXf-=|LLr0   c                 T    i } d   d   |d<    d   |d<    j                  dd      |d<   d	} j                  d
      } j                  d      }d v r. d   }dj                  dj                   fd|D                    }|rdj                  |t        |            }|rdj                  |t	        |            }|s|sd v r||d<   d v r d   |d<   d v rt        t         d         dz        |d<   d v rt        t         d         dz        |d<   d|d<   d v r3d|d<    d   d   |d<    d   d   |d <    d   j                  d!d      |d"<   d# v r6 d#   d$   |d%<    d#   j                  d&      |d'<    j                  d(      |d)<   d* v rs d*   j                  d+      |d,<    d*   j                  d-      |d.<    d*   j                  d/      |d0<    d*   j                  d1      |d <    d*   j                  d2      |d3<   d4 v r  d4   }g d5}|D ]  \  }}	||v s||   ||	<    |S )6zPrepare a routine for printing.

  Arguments:
    routine_info: Routine dict to format.

  Returns:
    A dictionary of routine properties.
  routineReference	routineIdr   routineTyper   languager  r   z()
returnTypereturnTableType	argumentsz({})r   c              3   <   K   | ]  }t        d    |        yw)r  N)r  )r   r  routine_infos     r.   r   z&format_routine_info.<locals>.<genexpr>  s%      
) )m)DhO)s   z{} -> {}r   definitionBodyr   r"  ro  r   lastModifiedTimer   Nor   r   Yesendpointr   r@   r   userDefinedContextr   r   
entryPointr   packagesr   importedLibraries	Librariesr  runtimeVersionr   containerMemoryr  containerCpur  runtimeConnectionmaxBatchingRowszMax Batching Rowsr   )
)r@   r   )r  r   )containerImager   )r4  r   )mainFileUrir   )	mainClassr   )
pyFileUrisr   )jarUrisr   )fileUrisr   )archiveUrisr   )r?   rW   rG   r  r  rk   r  )
r  r  	signaturereturn_typereturn_table_typeargument_listspark_optionsoptions	spark_key
result_keys
   `         r.   r\  r\    s    &01+>&,'6&#''
B7&)  .+"&&'89L  -M		 
)
 	
I !!+K8I !!,->?I %+*E#F;%'(89F<|#)L()D0F? <'#.L+,-4$F  &,F;)56M)N*F%& ((?@NF<%12I%J%N%Nb&F!" $(9,GF=%o6:::FF: '**+>?F;- ,-E F J J!F "..F!G!K!K"F ++CDHHF? ((@AEEF< #//G"H"L"L#F |# 0MG ")	:	m	#*95z ") 
-r0   c                     i }| d   d   |d<   | d   |d<   dj                  | d         |d<   d	| v rt        | d	         |d
<   d| v rt        | d         |d<   |S )zPrepare a row access policy for printing.

  Arguments:
    row_access_policy_info: Row access policy dict to format.

  Returns:
    A dictionary of row access policy properties.
  rowAccessPolicyReferencepolicyIdr   filterPredicater  r   granteesr  r"  r   r  r   )rG   rt   )row_access_policy_infor  s     r.   r]  r]    s     &'(BCJO&,56GH&	yy!7
!CD&--J~.F? 11#O12$F  
-r0   c                 v   | j                         }t        j                  |      }|j                  t	        |             d|v rt        t        |d         dz        |d<   d|v rt        |d         |d<   d|v rt        |d         |d<   d|v rt        |d         |d	<   d
|v r|d
   d   |d<   d|v rz|d   |d<   |d   dk(  rAd|v r=|d   d   }t        t        j                  j                  j                  di |      |d<   |d   dk(  r!d|v r|d   }d|v r|d   |d<   d|v r|d   |d<   d|v r|d   |d<   |S )zPrepare a dataset_info for printing.

  Arguments:
    dataset_info: Dataset dict to format.

  Returns:
    The new dataset_info.
  r  ro  r   accessr   rB   r   r  r   r   r   rZ   r   LINKEDr   sourceDatasetr   r
  externalDatasetReferenceexternal_sourcezExternal sourcer@   r   r   r   rS   )r   r   r  r  r   rk   r  r   rL   rX   r   r   r   r8  Create)dataset_infor  r  source_datasetexternal_dataset_references        r.   rY  rY    s    & 99&A)--Y 6!)F%&'$.F? x 01F6N%fX&67F8v*6.+ABF6N%/!"BCF< vF^F6Nf~!&;v&E34_En!$

%
%
6
6
=
=
O
O"f f~#(Bf(L#)*D#E 	8	8$>%
 ! 
3	39,G|V#(./C(DF$%	-r0   c                    | j                         }t        j                  |      }|j                  t	        |             d|v rt        t        |d         dz        |d<   d|v rt        |d         |d<   d|v r|d   |d<   d|v r|d   |d	<   d
|v r|d
   |d<   d|v r|d   |d<   d|v r|d   |d<   d|v r|d   |d<   d|v r|d   |d<   d|v r|d   |d<   d|v r|d   |d<   d|v r|d   |d<   d|v rt        t        |d         dz        |d<   d|v rt        |d         |d<   d|v rt        |d         |d<   d |v rd!|d    v r|d    d!   |d"<   nd#|d"<   g }d$|d    v r|d    d$   }|j                  d%|z         d&|d    v r&t        |d    d&         }|j                  d'|fz         |r |d"xx   d(d)j                  |      d*z  cc<   d+|v r!d,|d+   v rd)j                  |d+   d,         |d-<   d!|v r)|d!   |d.<   d/|v rd0|d/   v r|d/   d0   |d1<   d2|v rhd0|d2   v ra|d2   d0   |d1<   d3|d2   v r|d2   d3   |d4<   d5|d2   v r|d2   d5   |d6<   d7|d2   v r+|d2   d7   d8k7  r t        t        |d2   d7         dz        |d9<   d:|v r{t        |d:   d;         |d<<   t        t        |d:   d=         dz        |d><   |d:   d?   |d@<   dA|d:   v r t        t        |d:   dA         dz        |dB<   dC|d:   v r|d:   dC   dD   |dE<   |d!   dFk(  rdG|v rt        |dG   dH         |dI<   dJ|v rdK|dJ   v r|dJ   dK   |dK<   dL|v r|dL   dM   |dN<   t        |dL   dO         |dP<   dQ|v r|dQ   dM   |dN<   t        |dQ   dR         |dS<   |S )Tz}Prepare a table_info for printing.

  Arguments:
    table_info: Table dict to format.

  Returns:
    The new table_info.
  r  ro  r   r   r  numBytesr  numTotalLogicalBytesr  numLongTermLogicalByteszLong-Term Logical BytesnumActiveLogicalByteszActive Logical BytesnumPartitionszTotal PartitionsnumTotalPhysicalBytesr  numActivePhysicalByteszActive Physical BytesnumLongTermPhysicalByteszLong-Term Physical BytesnumTimeTravelByteszTime Travel BytesnumRowsr  r  r	  rB   r   r  r   timePartitioningrZ   r  DAYrb   z	field: %sexpirationMszexpirationMs: %dr   r   r   
clusteringr   r  r   r|   rp  r  materializedViewenableRefreshr  refreshIntervalMsr  lastRefreshTime0r  tableReplicationInfosourceTabler  replicationIntervalMsr  replicationStatusr  replicatedSourceLastRefreshTimer  replicationErrormessager  r
  externalDataConfiguration
sourceUrisr  r   r   r  baseTableReferencer  snapshotTimer  r  	cloneTimer  )r   r   r  r  r   rk   r  r   rL   rX   r   rG   rT   r   rt   )
table_infor  r  
extra_infopartitioning_fieldexpiration_mss         r.   rZ  rZ  *  s    ??& 99&A)--Y 6!)F%&'$.F? $VH%56F86":.F=v%$*+A$BF !&((./H(IF$%&%+,C%DF!"!'!8F&%+,C%DF!"'&,-E&FF"#6))/0J)KF%&V#"()=">F&!),F<&s62B+C'Dt'KLF<%fX&67F8v*6.+ABF6N6!*++$*+=$>v$Ff !$)f !J&+,,!"45g>&889 233&!34^DEm*m-==> !		*0E%GG!V6,''#'99VL-A(-K#Lf vF^F6NGvf~5vw/fWoV#6:L3M(M127;fWo	F#56	6#)*<#=o#N 	'9 :	:(./A(B)
$% v&89
9'():;sB&1)*+<=>E'
"# '6
'
(
7 f^ 03
f+,-DE
F
M0f+, &,,B%C
&f!" 
+f5K.L	L-8-.5
 .
)* 
v&<=	=&,-C&D'

'"# f~#	$	."./= 
|  6)
&!:;
;!";<\JF<V#!"678LMF<#O#$^4$F  & !"345IJF< L !+.!F 
-r0   c                 D    i }| j                         D ]
  \  }}|||<    |S )zPrepare transfer config info for printing.

  Arguments:
    transfer_config_info: transfer config info to format.

  Returns:
    The new transfer config info.
  rE   )transfer_config_infor  rI   rJ   s       r.   r^  r^    s0     &(..0jc5F3K 1 
-r0   c                 D    i }| j                         D ]
  \  }}|||<    |S )zPrepare transfer log info for printing.

  Arguments:
    transfer_log_info: transfer log info to format.

  Returns:
    The new transfer config log.
  r  )transfer_log_infor  rI   rJ   s       r.   r`  r`    s0     &%++-jc5F3K . 
-r0   c                 V    i }| j                         D ]  \  }}|t        v s|||<    |S )zPrepare transfer run info for printing.

  Arguments:
    transfer_run_info: transfer run info to format.

  Returns:
    The new transfer run info.
  )rE   r<  )transfer_run_infor  rI   rJ   s       r.   r_  r_    s9     &%++-jc5
22fSk . 
-r0   c                    i }| j                         D ]h  \  }}|dk(  rYt        j                  |      \  }}}t        j                  j
                  j                  |||      }|j                         ||<   d|||<   j dt        |j                               vrd|d<   dt        |j                               vrd|d<   dt        |j                               vrd|d<   dt        |j                               v r|d   |d	<   |j                  dd
       nd|d	<   dt        |j                               v r;d|d   v r"|d   d   |d<   d|d<   d|d   v r|d   d   |d<   |j                  dd
       |S )zPrepare a reservation for printing.

  Arguments:
    reservation: reservation to format.

  Returns:
    A dictionary of reservation properties.
  r   )rO   locationreservationIdr  r  r!  Falser#  concurrencyr   Nz0 (auto)	autoscaler'  r%  r&  currentSlots)rE   r  ParseReservationPathr   r   rD  r  __str__r   r:  r   )rV  r  rI   rJ   
project_idr  reservation_idr  s           r.   rb  rb    s    &%%'jc5
f}

.
.u
5 +j(N --BBII J i %%'fSkfSk ( 4.. F>d6;;=11 'F4#66%,F!"d6;;=))%+M%:F!"
JJ}d#%/F!"D''VK(($*;$7
$Cf !(+f$%	6+.	.*0*=n*M&'
JJ{D!	-r0   reservation_groupc                     i }| j                         D ]h  \  }}|dk(  rYt        j                  |      \  }}}t        j                  j
                  j                  |||      }|j                         ||<   d|||<   j |S )zPrepare a reservation group for printing.

  Arguments:
    reservation_group: reservation group to format.

  Returns:
    A dictionary of reservation group properties.
  r   )rO   r  reservationGroupId)rE   r  ParseReservationGroupPathr   r   rK  r  r#  )r&  r  rI   rJ   r$  r  reservation_group_idr  s           r.   re  re    s     &%++-jc5
f}

3
3E
: 1j(0 --GGNN1 O i
 %%'fSkfSk . 
-r0   c                    i }| j                         D ]h  \  }}|dk(  rYt        j                  |      \  }}}t        j                  j
                  j                  |||      }|j                         ||<   d|||<   j dt        |j                               vrd|d<   dt        |j                               vrd|d<   |S )zPrepare a capacity commitment for printing.

  Arguments:
    capacity_commitment: capacity commitment to format.

  Returns:
    A dictionary of capacity commitment properties.
  r   )rO   r  capacityCommitmentIdr*  r  r#  r  )
rE   r  ParseCapacityCommitmentPathr   r   rI  r  r#  r   r:  )capacity_commitmentr  rI   rJ   r$  r  capacity_commitment_idr  s           r.   rc  rc  $  s     &'--/jc5
f}

5
5e
< 3j(2 
%
%
A
A
H
H"#9 I   %%'fSkfSk 0  V[[]++F;4#66%,F!"	-r0   c                    i }| j                         D ]j  \  }}|dk(  r[t        j                  |      \  }}}}t        j                  j
                  j                  ||||      }|j                         ||<   f|||<   l |S )zPrepare a reservation_assignment for printing.

  Arguments:
    reservation_assignment: reservation_assignment to format.

  Returns:
    A dictionary of reservation_assignment properties.
  r   )rO   r  r  reservationAssignmentId)rE   r  ParseReservationAssignmentPathr   r   rJ  r  r#  )	reservation_assignmentr  rI   rJ   r$  r  r%  reservation_assignment_idr  s	            r.   rd  rd  E  s     &*002jc5
f}

8
8
? Fj(N,E 
%
%
D
D
K
K"*&?	 L   %%'fSkfSk 3  
-r0   c                    i }| j                         D ]  \  }}|dk(  rYt        j                  |      \  }}}t        j                  j
                  j                  |||      }|j                         ||<   d|dk(  rt        t        |      dz        |d<   |t        j                  v r;t        j                  j                  |      |d<   t        j                  |      |d<   |||<    | j                  dd	      |d<   |S )
zPrepare a connection object for printing.

  Arguments:
    connection: connection to format.

  Returns:
    A dictionary of connection properties.
  r   )rO   r  connectionIdr  ro  r   rZ   r4  r3  F)rE   r  ParseConnectionPathr   r   rL  r  r#  rk   r  r   CONNECTION_PROPERTY_TO_TYPE_MAPr?   r!   r*   )r@   r  rI   rJ   r$  r  connection_idr  s           r.   rf  rf  b  s    &$$&jc5
f},;,O,O
-)j(M --AAHH I i %%'fSk	"	" +CJ,= >f_	"BB	B)IIMM
fVn "ZZ.f\fSk# '$ 'NN?EB&	-r0   )r!   )N)r   N)N__doc__r   ro   r!   sysrh   typingr   r   r   r   r   r   r	   r
   typing_extensionsr   table_formatterrE  clientsr   r  r   r   r   r   r   collections_abcversion_infoabcServicer<  r=  
FormatTyper/   rA   r   rL   r   rB  rT   rX   re   floatrk   rt   ru   __annotations__rv   rw   rx   ry   r   r   r   TableFormatter	ReferenceCustomPrintFormatrS  rg  rW  rX  r[  r  r  r  r\  r]  rY  rZ  r^  r`  r_  rb  re  rc  rd  rf  rS   r0   r.   <module>rJ     s   4    
  F F F '   ,     $fOO/


( $" +O ' -3)). ?CZ%i&:&:;Z	Zz!4S> !c !&&55!S#X !3 ! .?e ? ?c c  !  i 
 eCHouS#Xc3hOP
I P',\:-E'F 9 FS%S#X0C*D%D EFy FF!M F!c F!R ;S  ;F	= 	= 	= 17	]P--]P44>>?]P --]P@	-A";#>#>#H#HI-A`HV"J3 00S 0 'C 'T]@0+\{|"  ,^CH~	#s(^8B:r0   