
    	Z                     z    d Z ddlZddlZddlZddlZddlmZ ddlmZ  ej                  d      Z
 G d de      Zy)zService registry for apitools.    N)base_api)utilz(?i)[a-z0-9_*-]+/[a-z0-9_*-]+c                       e Zd ZdZd Zd Zed        Zd Zd Z	d Z
d Zd	 Zd
 Zd ZddZd Zd Zd Zd Zd Zd Zd Zd Zd Zy)ServiceRegistryzRegistry for service types.c                     || _         |j                  | _        || _        t	        j
                         | _        || _        || _        || _	        || _
        t        | j                   j                        | _        y N)_ServiceRegistry__client_infopackage_ServiceRegistry__package_ServiceRegistry__namescollectionsOrderedDict)_ServiceRegistry__service_method_info_map"_ServiceRegistry__message_registry_ServiceRegistry__root_package$_ServiceRegistry__base_files_package,_ServiceRegistry__unelidable_request_methodssetscopes_ServiceRegistry__all_scopes)selfclient_infomessage_registrynamesroot_packagebase_files_packageunelidable_request_methodss          0lib/third_party/apitools/gen/service_registry.py__init__zServiceRegistry.__init__%   sj     )$,,)4)@)@)B&"2*$6!,F) 2 2 9 9:    c                 8    | j                   j                          y r   )r   Validater   s    r   r"   zServiceRegistry.Validate2   s    ((*r    c                 >    t        t        | j                              S r   )sortedlistr   r#   s    r   r   zServiceRegistry.scopes5   s    d4,,-..r    c                 p    | j                   j                  d| j                   j                  |      z        S )Nz	%sService)r   	ClassName)r   service_names     r   __GetServiceClassNamez%ServiceRegistry.__GetServiceClassName9   s2    ||%%$,,00>>@ 	@r    c                 P   |j                   r]t        j                  |j                         }|j                   j                  d      \  }}}|j	                  d      sd|z  }|||}n|d|d}|j                         5   |d|z         ddd        |         |d        |d	|j                          |d
       |j                  r |d        |d       |j                  r |d        |d        |d        |d|j                          |d       y# 1 sw Y   xY w)z'Print a docstring for a service method.
.z%s.z method for the z	 service.zr"""%sNzArgs:z  request: (%s) input messagezJ  global_params: (StandardQueryParameters, default: None) global argumentsz4  upload: (Upload, default: None) If present, uploadz#      this stream with the request.z:  download: (Download, default: None) If present, downloadz,      data from the request via this stream.zReturns:z  (%s) The response message.z""")
descriptionr   CleanDescription	partitionendswithCommentContextrequest_type_nameupload_configsupports_downloadresponse_type_name)	r   printermethod_infomethod_namenamer.   
first_linenewline	remainings	            r   __PrintDocstringz ServiceRegistry.__PrintDocstring=   s   ""//0G0GHK-8-D-D-N-N.*J&&s+"Z/
&0'9EK=H$OK##%H{*+ &	/1N1NO # 	$$$JK9:((LNBC
.0N0NO! &%s   DD%c                     |        | j                  |      } |d|       |j                         5   |d|        |         |dt        |              |         |d       |j                         5   |d||        |d       |j                  d      5  |j                         D ]|  \  }}|j                  }| |d	|       |j                  d      5  t        d
 |j                         D              }	|	D ]  }
 |d|
t        ||
              	 d d d         |d       ~  |d       d d d        d d d        |j                         D ]  \  }} |        g d}|j                  r|j                  d       |j                  r|j                  d        |d|dj                  |             |j                         5  | j                  ||||        |d|       |j                  }|	 |d|       dg}|j                  r|j                  d       |j                  r|j                  d        |d       |j                  d      5  |d d D ]  } |d|         |d|d          d d d        d d d         |         |dj                  |             |j                  d      5  ||   }t        d |j                         D              }	|	D ]   }
|
dv rt        ||
      }| |d|
|       " 	 d d d         |d        	 d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ]xY w# 1 sw Y   y xY w) Nz"class %s(base_api.BaseApiService):z("""Service class for the %s resource."""z
_NAME = %szdef __init__(self, client):z#super(%s.%s, self).__init__(client)zself._upload_configs = {z    indentz'%s': base_api.ApiUploadInfo(c              3   4   K   | ]  }|j                     y wr   r:   .0xs     r   	<genexpr>z7ServiceRegistry.__WriteSingleService.<locals>.<genexpr>r   s      /P4NqAFF4N   z%s=%r,z),})r   requestzglobal_params=Nonezupload=Nonezdownload=Nonezdef %s(%s):z, z#config = self.GetMethodConfig('%s')z*upload_config = self.GetUploadConfig('%s')z,config, request, global_params=global_paramsz*upload=upload, upload_config=upload_configzdownload=downloadzreturn self._RunMethod(z%s,z%s)z3{0}.method_config = lambda: base_api.ApiMethodInfo(c              3   4   K   | ]  }|j                     y wr   rC   rD   s     r   rG   z7ServiceRegistry.__WriteSingleService.<locals>.<genexpr>   s      #B(@1(@rH   )r4   r.   ))%_ServiceRegistry__GetServiceClassNameIndentrepritemsr4   r%   
all_fieldsgetattrappendr5   join _ServiceRegistry__PrintDocstringformat)r   r7   r:   method_info_mapclient_class_name
class_namer9   r8   r4   attrsattrparams	arg_lineslinevalues                  r   __WriteSingleServicez$ServiceRegistry.__WriteSingleServiceZ   sS   	//5
4jA^^>EIL$t*- I12!=):723^^6^24C4I4I4K0[(3(A(A(4# ?N!(v!>(. /P4A4L4L4N/P )P,1D$+H,0'-2N%P -2 "? $DM 5L CL 3	 "( -<,A,A,C([	B,,MM-000MM/2{DIIf4EF^^%))k4AA;O$/$=$=M$0 L +- G!HI"00!((HJ"44!(()<=56 v6$-crND#E40 %3y}5 7! &( 	M,.^^6^2"1+">K" #B(3(>(>(@#B BE %#CC$ 'T : ,#HdE: !&	 3 S -D9 $ "?!> 32	 "!X 76! &%. 32w s   AM&4%L5%L(?L(<LL(1L59BM&BM M	2M:8M&2>M1M>M&L% L((L2-L55L?	:M&MMMM&M#M&&M/c                     |         |d| j                  |             |j                         5  |j                         D ]c  \  }}t        j                  |j
                  |j                         dz
        D ]  } |d|         |d||j                  |j                         e 	 ddd        |d       y# 1 sw Y   xY w)z3Write a single service declaration to a proto file.zservice %s {   z// %szrpc %s (%s) returns (%s);NrI   )	rN   rO   rQ   textwrapwrapr.   CalculateWidthr3   r6   )r   r7   r:   rX   r9   r8   r_   s          r   __WriteProtoServiceDeclarationz.ServiceRegistry.__WriteProtoServiceDeclaration   s    	 : :4 @A^^,;,A,A,C([$MM+*A*A*1*@*@*BQ*FHDGT*H 3##55#668	 -D  	 s   A7B99Cc                 Z   | j                          | j                  } |d|j                  |j                          |         |d        |d| j                          |d|j
                          |        | j                  j                         D ]  \  }}| j                  |||        y)z4Write the services in this registry to out as proto.z(// Generated services for %s version %s.zsyntax = "proto2";zpackage %s;zimport "%s";N)	r"   r	   r
   versionr   messages_proto_file_namer   rQ   ._ServiceRegistry__WriteProtoServiceDeclaration)r   r7   r   r:   rX   s        r   WriteProtoFilezServiceRegistry.WriteProtoFile   s    ((:##[%8%8	:	$%t~~. D DE	%)%C%C%I%I%K!D///O &Lr    c           
         | j                          | j                  } |d|j                  |j                          |d        |         |d        |         |d| j                         | j
                  rdj                  | j
                        }nd} |d||j                          |         |         |d|j                         |j                         5   |d	|j                  |j                          |         |d
        |dj                  |j                                |dj                  |j                                |         |dj                  |j                                |dj                  |j                  xs dg              |dj                  |j                                |dj                  |j                                |dj                  |j                                |dj                  |j                                |dj                  |j                                |dj                  |j                                 |dj                  |j"                                |         |d       |j                  d      5   |d        |d        |d        |d       ddd       |j                         5   |d|j                          |d         |d!|j                          |d"        |d#        |d$        |d%        |d&        |d'        |d(       | j$                  j'                         D ]  } |d)|| j)                  |              	 ddd       | j$                  j+                         D ]#  \  }}| j-                  ||||j                         % 	 ddd       y# 1 sw Y   xY w# 1 sw Y   `xY w# 1 sw Y   yxY w)*z+Write the services in this registry to out.z1"""Generated client library for %s version %s."""zD# NOTE: This file is autogenerated and should not be edited by hand.z&from __future__ import absolute_importzfrom %s import base_apiz	from {0}  z%simport %s as messagesz!class %s(base_api.BaseApiClient):z9"""Generated client library for service %s version %s."""zMESSAGES_MODULE = messageszBASE_URL = {0!r}zMTLS_BASE_URL = {0!r}z_PACKAGE = {0!r}z_SCOPES = {0!r}z.https://www.googleapis.com/auth/userinfo.emailz_VERSION = {0!r}z_CLIENT_ID = {0!r}z_CLIENT_SECRET = {0!r}z_USER_AGENT = {0!r}z_CLIENT_CLASS_NAME = {0!r}z_URL_VERSION = {0!r}z_API_KEY = {0!r}z,def __init__(self, url='', credentials=None,z             r@   z,get_credentials=True, http=None, model=None,z&log_request=False, log_response=False,z2credentials_args=None, default_global_params=None,z6additional_http_headers=None, response_encoding=None):Nz"""Create a new %s handle."""zurl = url or self.BASE_URLzsuper(%s, self).__init__(z!    url, credentials=credentials,z<    get_credentials=get_credentials, http=http, model=model,z7    log_request=log_request, log_response=log_response,z&    credentials_args=credentials_args,z0    default_global_params=default_global_params,z4    additional_http_headers=additional_http_headers,z(    response_encoding=response_encoding)zself.%s = self.%s(self))r"   r	   r
   ri   r   r   rW   messages_rule_namerY   rO   base_urlmtls_base_urlr   	client_idclient_secret
user_agenturl_versionapi_keyr   keysrN   rQ   $_ServiceRegistry__WriteSingleService)r   r7   r   import_prefixr:   r8   s         r   	WriteFilezServiceRegistry.WriteFile   s   ((C##[%8%8	:  		89	)4+D+DE'..t/B/BCMM)=..	0		3--	/^^K##[%8%8: I01&--k.B.BCD+22;3L3LMNI&--k.A.ABC%,,"" CABD E &--k.A.ABC(//0E0EFG,33K4M4MNO)001G1GHI077--/ 0*11+2I2IJK&--k.A.ABCIBC7FG@ALM 3 4	 8 !79L9LM45/1N1NP;< ' ( 5 6@AJKNOBC ::??AD5 $"<"<T"BD B "" &*%C%C%I%I%K!k))T;0M0MO &L] . 87 "!; s?   GO%!!OO%BO:AO%O	O%O"	O%%O.c                 Z    || j                   v rt        d|z        || j                   |<   y )Nz$Attempt to re-register descriptor %s)r   
ValueError)r   r)   rX   s      r   __RegisterServicez!ServiceRegistry.__RegisterService  s7    49996EG G7F&&|4r    Nc                    i }| j                   j                  | j                   j                  |d   d      d      |d<   d|d<   t        j                         |d<   d|vrt	        |j                  d	g             }n(|d   d
d
 }|d	   D ]  }||vs|j                  |        |D ]-  }t        |d	   |         }d|vrt        d|z        ||d   |<   / |H| j                  ||      }||d   v rt        d      d|vrd| j                  |      d|d<   ||d   |<   | j                  j                  |d   |       |d   S )z&Create a request type for this method.idr-   	separatorRequestobjecttype
propertiesparameterOrder
parametersNzNo type found in parameter %sz)Failed to normalize request resource namer.   zA z+ resource to be passed as the request body.)r   r(   r   r   r&   getrT   dictr|   !_ServiceRegistry__GetRequestField _ServiceRegistry__GetRequestTyper   AddDescriptorFromSchema)	r   method_description	body_typeschemaordered_parameterskparameter_namefieldbody_field_names	            r   __CreateRequestTypez#ServiceRegistry.__CreateRequestType  s   ||--LL""#5d#;s"K/N Ot!v*668|#55!%&8&<&<\2&N!O!34D!Ea!H'5..&--a0 6 1N+L9.IJEU" !@5!HII38F< 0	 1
  "44"I/O&"66 !LMMI- --i8; -( 5>F< 177tfMd|r    c                     i }| j                   j                  |d   d      }| j                   j                  d|z        |d<   d|d<   d|z  |d<   | j                  j                  |d   |       |d   S )	zCreate an empty response type.r   r-   r   z
%sResponser   r   zAn empty %s response.r.   )r   r(   r   r   )r   r   r   r9   s       r   __CreateVoidResponseTypez(ServiceRegistry.__CreateVoidResponseType1  s    ll,,t$ - 5||--l[.HIt!v 7+ E}77tfMd|r    c                    |sy|j                  dd      }|| j                  v ry| j                  j                  |      }|y|j                  D cg c]  }|j
                   }}|j                  di       }|j                         D ]8  \  }}	|	j                  d      dk7  s| j                  j                  |      |vs8 y yc c}w )z:Determine if this method needs a new request type created.Tr   rn   r   locationpathF)	r   r   r   LookupDescriptorOrDiefieldsr:   rQ   r   	CleanName)
r   r   request_type	method_idmessagerF   field_namesr   
param_name
param_infos
             r   __NeedRequestTypez!ServiceRegistry.__NeedRequestType<  s    &**44	999))??M?'.~~6~!qvv~6'++L"=
&0&6&6&8"J
z*f4LL**:6kI  '9
  7s   Cc                    t        j                  d|      }|t        d      |j                  dd      \  }}d}|6dddd	d
}|j	                  |j                               }|t        d|z        t        |      d|z  z  S )zConvert max_size to an int.z(?P<size>\d+)(?P<unit>.B)?$zCould not parse maxSizesizeunitr   
         (   )KBMBGBTBzUnknown unit %s   )rematchr|   groupr   upperint)r   max_sizesize_groupsr   r   shift	unit_dicts          r   __MaxSizeToIntzServiceRegistry.__MaxSizeToIntP  s    hh=xH677 &&vv6
d!2R@IMM$**,/E} !2T!9::4yAJ''r    c                 <   t        j                         }d|v r| j                  |d         |_        d|vrt	        j
                  d|       |j                  j                  |j                  dd      D cg c]  }t        |       c}       |j                  D ].  }t        j                  |      rt	        j
                  d|       0 |j                  di       }dD ]5  }|j                  |i       }dD ]  }	|	|v st        ||d	|	||	           7 |S c c}w )
z+Fill out the upload config for this method.maxSizeacceptzFNo accept types found for upload configuration in method %s, using */*z*/*zUnexpected MIME type: %s	protocols)simple	resumable)	multipartr   _)r   ApiUploadInfo_ServiceRegistry__MaxSizeToIntr   loggingwarningr   extendr   str_MIME_PATTERN_REr   setattr)
r   media_upload_configr   configaaccept_patternr   protocolmediar\   s
             r   __ComputeUploadConfigz%ServiceRegistry.__ComputeUploadConfig^  s   '')++"11#I.0FO..OO'(13 	/33HeDFDqCFDF 	G %mmN#)).9 :NK , (++K<	/HMM(B/E-5=Fx$>dL . 0
 Fs   5Dc                    | j                   j                  dj                  | j                  j                  |d   f            }|d   }g }|j                  dg       D ].  }|d   |   }	|	j                  dd      s|j                  |       0 t        j                  |||d   t        j                  |j                  d	d            g g || j                   j                  |      | j                   j                  |      |

      }
|j                  dd      }|>| j                   j                  | j                  j                  |z         }||k7  r||
_        |j                  dd      r&| j                  |j                  d      |      |
_        |j                  dd      |
_        |j                  d      r|j                  d      |
_        | j"                  j%                  |j                  dd             |j                  di       j'                         D ]w  \  }}| j                   j)                  |      }|d   }|dk(  r|
j*                  j                  |       G|dk(  r|
j,                  j                  |       ht/        d|d|       |
j,                  j1                          |
j*                  j1                          |
S )z3Compute the base_api.ApiMethodInfo for this method.rn   r   r   r   r   requiredF
httpMethodr.   )
relative_pathr   http_methodr.   query_paramspath_paramsordered_paramsr3   r6   request_fieldflatPathNsupportsMediaUploadmediaUploadsupportsMediaDownload
apiVersionr    r   queryzUnknown parameter location z for parameter )r   NormalizeRelativePathrU   r	   	base_pathr   rT   r   ApiMethodInfor   r/   r(   	flat_path%_ServiceRegistry__ComputeUploadConfigr4   r5   api_version_paramr   updaterQ   r   r   r   r|   sort)r   r   rJ   responser   r   r   r   r   r   r8   r   paramdescr   s                  r   __ComputeMethodInfoz#ServiceRegistry.__ComputeMethodInfov  s    ::GGT''11'/1 23 't,	,001A2FJ+L9*EJ~~j%0%%j1 G ,,'*<8--"&&}b9;)"ll44W=#||55h?'
 '**:t<	 ::"",,y8:IM)(1%!!"7?(,(B(B"&&}5y)BK%(:(>(>#U),%!!,/,>,B,B<,PK)  !3!7!7"!EF-11,CIIKKE4LL**51EJ'H7"((//6V#''..u5  %)* * L 	$$&  %%'r    c                 D    |y| j                   j                  |d         S )Nrn   $ref)r   	FieldNamer   r   s     r   __BodyFieldNamezServiceRegistry.__BodyFieldName  s%    ||%%i&788r    c                 V    | j                   j                  |j                  d            S )Nr   )r   r(   r   r   s     r   __GetRequestTypez ServiceRegistry.__GetRequestType  s     ||%%immF&;<<r    c                    | j                  |      }||j                  di       v r| j                  j                  d|z        }||j                  di       v r3| j                  j                  d|z        }||j                  di       v r3|S )z,Determine the request field for this method.r   z%s_resourcez%s_body)_ServiceRegistry__BodyFieldNamer   r   r   )r   r   r   r   s       r   __GetRequestFieldz!ServiceRegistry.__GetRequestField  s    ..y9044\2FF"ll44/1O !3!7!7b!II"ll44O+-O !3!7!7b!II r    c                    | j                   j                  |      }|j                  di       }t        j                         }t        |j                               }|D ]  \  }}| j                   j                  |      }|j                  d      }|d}	n| j                  |      }	| j                  ||	      r&| j                  ||      }
| j                  ||      }n|	}
t        j                  }d|v r	|d   d   }n| j                  |      }| j                  ||
||      ||<    |j                  di       }t        |j                               }|D ]  \  }}|d|}| j!                  ||         | j#                  ||       y)	z<Add a new service named service_name with the given methods.methodsrJ   N)r   r   r   	resourcesr   )r   r   r   r   r   r%   rQ   
MethodNamer   !_ServiceRegistry__NeedRequestType#_ServiceRegistry__CreateRequestTyper   r   REQUEST_IS_BODY(_ServiceRegistry__CreateVoidResponseType#_ServiceRegistry__ComputeMethodInfoAddServiceFromResource!_ServiceRegistry__RegisterService)r   r)   r   method_descriptionsrX   rQ   r9   r   r   r   rJ   r   r   nested_servicesservicessubservice_name
submethodsnew_service_names                     r   r  z&ServiceRegistry.AddServiceFromResource  s   ||--l;%kk)R8%113*0023/4+K+,,11+>K +..y9I ##44Y?%%&8,G22&) 3 = $ 6 6&	!3 ' ( 8 8//-j9&A889KL+/+C+C"GX},FOK(1 056 "++k26///12+3'OZ*6H''(8*E ,4 	|_=r    r   )__name__
__module____qualname____doc__r   r"   propertyr   rN   rV   rx   rk   rl   rz   r  r   r   r   r   r   r   r   r   r   r  r   r    r   r   r   !   s    %;+ / /@:JXPFOPG@	((04l9
='>r    r   )r  r   r   r   rd   apitools.base.pyr   apitools.genr   compiler   r   r   r   r    r   <module>r     s>   " %   	  % 
 2::>? G>f G>r    