B 劇c%@sddlZddlmZddlmZddlmZddlmZddl m Z ddl m Z m Z eeZGd d d ZGd d d eZGd ddZGdddZdS)N) xform_name)ActionDocstring)inject_attribute)Action)create_request_parameters) RawHandlerResourceHandlerc@s"eZdZdZdddZddZdS) ServiceActiona A class representing a callable action on a resource, for example ``sqs.get_queue_by_name(...)`` or ``s3.Bucket('foo').delete()``. The action may construct parameters from existing resource identifiers and may return either a raw response or a new resource instance. :type action_model: :py:class`~boto3.resources.model.Action` :param action_model: The action model. :type factory: ResourceFactory :param factory: The factory that created the resource class to which this action is attached. :type service_context: :py:class:`~boto3.utils.ServiceContext` :param service_context: Context about the AWS service NcCs<||_|j}|r,t|j||||jjd|_n t|j|_dS)N) search_pathfactoryZresource_modelservice_contextoperation_name) _action_modelresourcer pathrequest operation_response_handlerr)self action_modelr r Zresource_response_modelrq/private/var/folders/8c/hx9_v10d5x38qmnzt13b7b8j1k3n5b/T/pip-target-x6xd5gna/lib/python/boto3/resources/action.py__init__.szServiceAction.__init__cOsht|jjj}t||jj}||td|jj ||t |jj |||}td|| |||S)a Perform the action's request operation after building operation parameters and build any defined resources from the response. :type parent: :py:class:`~boto3.resources.base.ServiceResource` :param parent: The resource instance to which this action is attached. :rtype: dict or ServiceResource or list(ServiceResource) :return: The response, either as a raw dict or resource instance(s). zCalling %s:%s with %rz Response: %r) rrrrrupdateloggerdebugmeta service_namegetattrclientr)rparentargskwargsrparamsresponserrr__call__?s   zServiceAction.__call__)NN)__name__ __module__ __qualname____doc__rr&rrrrr s r c@seZdZdZddZdS) BatchActiona An action which operates on a batch of items in a collection, typically a single page of results from the collection's underlying service operation call. For example, this allows you to delete up to 999 S3 objects in a single operation rather than calling ``.delete()`` on each one individually. :type action_model: :py:class`~boto3.resources.model.Action` :param action_model: The action model. :type factory: ResourceFactory :param factory: The factory that created the resource class to which this action is attached. :type service_context: :py:class:`~boto3.utils.ServiceContext` :param service_context: Context about the AWS service c Osd}d}g}t|jjj}x|D]}i} xHt|D]<\} } |dkrN| jj}|dkr^| jj}t | |jj| | dq6W| s|P| |t d||| t |||| } t d| |||| | q$W|S)a Perform the batch action's operation on every page of results from the collection. :type parent: :py:class:`~boto3.resources.collection.ResourceCollection` :param parent: The collection iterator to which this action is attached. :rtype: list(dict) :return: A list of low-level response dicts from each call. N)r$indexzCalling %s:%s with %rz Response: %r)rrrrZpages enumeraterrr rrrrrappendr) rr!r"r#rr responsesrpager$r,rr%rrrr&rs2     zBatchAction.__call__N)r'r(r)r*r&rrrrr+_sr+c@s eZdZdZddZddZdS) WaiterActiona/ A class representing a callable waiter action on a resource, for example ``s3.Bucket('foo').wait_until_bucket_exists()``. The waiter action may construct parameters from existing resource identifiers. :type waiter_model: :py:class`~boto3.resources.model.Waiter` :param waiter_model: The action waiter. :type waiter_resource_name: string :param waiter_resource_name: The name of the waiter action for the resource. It usually begins with a ``wait_until_`` cCs||_||_dS)N) _waiter_model_waiter_resource_name)rZ waiter_modelZwaiter_resource_namerrrrszWaiterAction.__init__c Osft|jj}t||j}||td|jj|j ||jj }| |}|j f|}td|dS)z Perform the wait operation after building operation parameters. :type parent: :py:class:`~boto3.resources.base.ServiceResource` :param parent: The resource instance to which this action is attached. zCalling %s:%s with %rz Response: %rN) rr2Z waiter_namerrrrrrr3r Z get_waiterwait) rr!r"r#Zclient_waiter_namer$r waiterr%rrrr&s     zWaiterAction.__call__N)r'r(r)r*rr&rrrrr1s r1c@s eZdZdZddZddZdS)CustomModeledActionz3A custom, modeled action to inject into a resource.cCs||_||_||_||_dS)a :type action_name: str :param action_name: The name of the action to inject, e.g. 'delete_tags' :type action_model: dict :param action_model: A JSON definition of the action, as if it were part of the resource model. :type function: function :param function: The function to perform when the action is called. The first argument should be 'self', which will be the resource the function is to be called on. :type event_emitter: :py:class:`botocore.hooks.BaseEventHooks` :param event_emitter: The session event emitter. N)namemodelfunctionemitter)rZ action_namerr9 event_emitterrrrrszCustomModeledAction.__init__cKsV|dd}t|j|ji}|j|j_t||j||jdd|j_ t ||j|jdS)N.F) resource_namer;r service_modelZinclude_signature) rsplitrr7r8r9r'rr:r?r*r)rZclass_attributesr Z event_namer#r>actionrrrinjects  zCustomModeledAction.injectN)r'r(r)r*rrBrrrrr6sr6)loggingZbotocorerZboto3.docs.docstringrZ boto3.utilsrr8rr$rr%rr getLoggerr'rr r+r1r6rrrrs      CL1