
    %                        d dl mZmZmZmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZ d dlmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZ d dlmZ d dlmZ d dlm Z m!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5c m6c m7c m8c m9Z: d dl;m<Z< d dlm=Z=m>Z> d dl?m@Z@ d dlAmBZBmCZCmDZDmEZEmFZFmGZG d dlHmIZI d dlJmKZK d dlLmMZM dZNd e>d!eOd"e	d#ee   d$eeeOeOf      d%e'fd&ZPd e>d!eOd"e	d#ee   d$eeeOeOf      d'ed(e d)ed%efd*ZQ	 	 	 	 	 	 	 d0d e>d!eOd+ed(ee    d,ee   d)ee   d-eee=      d#ee   d"ee	   d.eeeOeOf      d%e#fd/ZRy)1    )OptionalMappingSetAsyncIteratorCallable)uuid4)ClientOptions)Credentials)ReassignmentHandlerDefaultReassignmentHandler)to_cps_subscribe_message#add_id_to_cps_subscribe_transformer)ClientCache)FlowControlSettings)AckSetTrackerImpl)PartitionSubscriberFactoryAssigningSingleSubscriber)SinglePartitionSingleSubscriber)MessageTransformer)NackHandlerDefaultNackHandler)AsyncSingleSubscriber)regional_endpoint)Assigner)AssignerImpl)CommitterImplFixedSetAssigner)GapicConnectionFactory)merge_metadata)pubsub_contextN)SubscriberResetHandler)	PartitionSubscriptionPath)subscription_routing_metadata)SubscribeRequestInitialSubscribeRequestStreamingCommitCursorRequestPartitionAssignmentRequest!InitialPartitionAssignmentRequestInitialCommitCursorRequestSubscriberServiceAsyncClient)%PartitionAssignmentServiceAsyncClientCursorServiceAsyncClientg?subscription	transportclient_optionscredentialsbase_metadatareturnc                     i dt         t           ffd}t        t        t	        |       t               j                        t        |            S )Nrequestsc                 t    t              }|j                  | t        j                                     S )Nr4   r2   r3   metadata)r.   assign_partitionslistitems)r8   assignment_clientr5   r3   r4   r2   s     Olib/third_party/google/cloud/pubsublite/cloudpubsub/internal/make_subscriber.pyassignment_connection_factoryz=_make_dynamic_assigner.<locals>.assignment_connection_factoryb   sI     Bken  @N  O 22tM$7$7$9: 3 
 	
    )r1   	client_id)r   r)   r   r*   strr   bytesr   )r1   r2   r3   r4   r5   rB   s    ```` rA   _make_dynamic_assignerrG   X   sZ     
 :;
 
 )\*egmm	
 	<=	 rC   flow_control_settingsnack_handlermessage_transformerc                     	
 t        fd      
t        fd      	dt        dt        f	
 fd}|S )Nc                       t               S Nr:   r,   r3   r4   r2   s   rA   <lambda>z4_make_partition_subscriber_factory.<locals>.<lambda>}   s    ,#y
rC   c                       t               S rM   r/   rN   s   rA   rO   z4_make_partition_subscriber_factory.<locals>.<lambda>   s    (#y
rC   	partitionr6   c           
      Z    t        t                     dt        t           ffddt        t           ffd}dt
        f fd}t        t        t               j                        t        t        |            }t        |      }t        |	|t         
            S )Nr8   c                 t    j                         j                  | t        j                                     S Nr;   )get	subscriber>   r?   )r8   final_metadatasubscribe_client_caches    rA   subscribe_connection_factoryzY_make_partition_subscriber_factory.<locals>.factory.<locals>.subscribe_connection_factory   s7    )--/994(<(<(>#? :  rC   c                 t    j                         j                  | t        j                                     S rT   )rU   streaming_commit_cursorr>   r?   )r8   cursor_client_cacherW   s    rA   cursor_connection_factoryzV_make_partition_subscriber_factory.<locals>.factory.<locals>.cursor_connection_factory   s:     '**,DD4(<(<(>#? E  rC   reset_handlerc                     t        j                  t        t              j                        t
        t              |       S )Nr1   rQ   )wire_subscriberSubscriberImplr'   rE   value_DEFAULT_FLUSH_SECONDSr   )r^   rQ   rY   r1   s    rA   subscriber_factoryzO_make_partition_subscriber_factory.<locals>.factory.<locals>.subscriber_factory   s=    "11'!$\!2ioo '&'CD rC   r`   )r    r%   r   r&   r(   r"   r   r+   rE   rc   rd   r   r   r   r   )rQ   r]   re   	committerack_set_trackerrW   rY   r5   r\   rH   rJ   rI   rX   r1   s   `    @@rA   factoryz3_make_partition_subscriber_factory.<locals>.factory   s    '8yQ
	=AQ3R 	
	#$@A		.D 	 "& .)// #"#<=
	 ,I6.!/	;NO
 	
rC   )r   r#   r   )r1   r2   r3   r4   r5   rH   rI   rJ   rh   r\   rX   s   ```````` @@rA   "_make_partition_subscriber_factoryri   r   sI     )	

 &	
)
9 )
)> )
 )
V NrC   #per_partition_flow_control_settingsreassignment_handlerfixed_partitionsr<   c
           
      V   	 t        t        d      	      	)t        t         j                  j
                              rfd}
n		 fd}
|
t               }|
t               }|t        j                  t              }t         	|||      }t        |
||      S )a  
    Make a Pub/Sub Lite AsyncSubscriber.

    Args:
      subscription: The subscription to subscribe to.
      transport: The transport type to use.
      per_partition_flow_control_settings: The flow control settings for each partition subscribed to. Note that these
        settings apply to each partition individually, not in aggregate.
      nack_handler: An optional handler for when nack() is called on a Message. The default will fail the client.
      message_transformer: An optional transformer from Pub/Sub Lite messages to Cloud Pub/Sub messages.
      fixed_partitions: A fixed set of partitions to subscribe to. If not present, will instead use auto-assignment.
      credentials: The credentials to use to connect. GOOGLE_DEFAULT_CREDENTIALS is used if None.
      client_options: Other options to pass to the client. Note that if you pass any you must set api_endpoint.
      metadata: Additional metadata to send with the RPC.

    Returns:
      A new AsyncSubscriber.
    CLOUD_PUBSUB_SHIM)	framework)api_endpointc                      t               S Nr   )rl   s   rA   rO   z'make_async_subscriber.<locals>.<lambda>   s    #34D#ErC   c                  "    t               S rr   )rG   )r3   r4   r<   r1   r2   s   rA   rO   z'make_async_subscriber.<locals>.<lambda>   s    #9$
rC   )r    r!   r	   r   locationregionr   r   r   of_callabler   ri   r   )r1   r2   rj   rI   rk   rJ   rl   r4   r3   r<   assigner_factorypartition_subscriber_factorys   ``    ````  rA   make_async_subscriberry      s    < n7JKXVH&*<+@+@+G+GH
 E
 )+#9;"0<<=UV#E+	$  %68L rC   )NNNNNNN)Stypingr   r   r   r   r   uuidr   google.api_core.client_optionsr	   google.auth.credentialsr
   8google.cloud.pubsublite.cloudpubsub.reassignment_handlerr   r   6google.cloud.pubsublite.cloudpubsub.message_transformsr   r   2google.cloud.pubsublite.internal.wire.client_cacher   google.cloud.pubsublite.typesr   Agoogle.cloud.pubsublite.cloudpubsub.internal.ack_set_tracker_implr   Agoogle.cloud.pubsublite.cloudpubsub.internal.assigning_subscriberr   r   Hgoogle.cloud.pubsublite.cloudpubsub.internal.single_partition_subscriberr   7google.cloud.pubsublite.cloudpubsub.message_transformerr   0google.cloud.pubsublite.cloudpubsub.nack_handlerr   r   >google.cloud.pubsublite.cloudpubsub.internal.single_subscriberr   *google.cloud.pubsublite.internal.endpointsr   .google.cloud.pubsublite.internal.wire.assignerr   3google.cloud.pubsublite.internal.wire.assigner_implr   4google.cloud.pubsublite.internal.wire.committer_implr   8google.cloud.pubsublite.internal.wire.fixed_set_assignerr   6google.cloud.pubsublite.internal.wire.gapic_connectionr   4google.cloud.pubsublite.internal.wire.merge_metadatar    4google.cloud.pubsublite.internal.wire.pubsub_contextr!   5google.cloud.pubsublite.internal.wire.subscriber_implcloud
pubsubliteinternalwiresubscriber_implra   >google.cloud.pubsublite.internal.wire.subscriber_reset_handlerr"   r#   r$   1google.cloud.pubsublite.internal.routing_metadatar%   google.cloud.pubsublite_v1r&   r'   r(   r)   r*   r+   Cgoogle.cloud.pubsublite_v1.services.subscriber_service.async_clientr-   Mgoogle.cloud.pubsublite_v1.services.partition_assignment_service.async_clientr.   ?google.cloud.pubsublite_v1.services.cursor_service.async_clientr0   rd   rE   rG   ri   ry    rC   rA   <module>r      s0   C B  8 / K = W I C L N U P O O O O F   " " +&	
 GCH-. 4@"@@ "@ +&	@
 GCH-.@ /@ @ ,@  @N +/:>8<15)-.2,0A"AA *=A ;'	A
 ##67A ""45A s9~.A +&A ]+A wsCx()A ArC   