Current File : //usr/lib/python3/dist-packages/boto3/resources/__pycache__/action.cpython-312.pyc
�

��e�%����ddlZddlmZddlmZddlmZddlmZddl	m
Z
ddlmZm
Z
eje�ZGd	�d
�ZGd�de�ZGd
�d�ZGd�d�Zy)�N)�
xform_name)�ActionDocstring)�inject_attribute�)�Action)�create_request_parameters)�
RawHandler�ResourceHandlerc��eZdZdZdd�Zd�Zy)�
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
    Nc���||_|j}|r4t|j||||jj
��|_yt|j�|_y)N)�search_path�factory�resource_model�service_context�operation_name)�
_action_model�resourcer
�path�request�	operation�_response_handlerr	)�self�action_modelrr�resource_response_models     �8/usr/lib/python3/dist-packages/boto3/resources/action.py�__init__zServiceAction.__init__.s^��)���#/�"7�"7��"�%4�3�8�8��6� /�+�3�3�=�=�&�D�"�&0��0A�0A�%B�D�"�c��t|jjj�}t	||jj�}|j|�tjd|jj||�t|jj|�|i|��}tjd|�|j|||�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).
        �Calling %s:%s with %r�Response: %r)
rrrrr�update�logger�debug�meta�service_name�getattr�clientr)r�parent�args�kwargsr�params�responses       r�__call__zServiceAction.__call__?s���$�D�$6�$6�$>�$>�$H�$H�I��
+�6�4�3E�3E�3M�3M�N���
�
�f�����#��K�K�$�$���		
�?�7�6�;�;�-�-�~�>��O��O�����^�X�.��%�%�f�f�h�?�?r)NN��__name__�
__module__�__qualname__�__doc__rr.�rrrrs���"C�"@rrc��eZdZdZd�Zy)�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�N�d}d}g}t|jjj�}|j	�D]�}i}	t|�D]X\}
}|�|jj}|�|jj}t||jj|	|
���Z|	s|S|	j|�tjd|||	�t||�|i|	��}tjd|�|j|j||	|����|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,�indexr r!)rrrr�pages�	enumerater%r&r(rr"r#r$r'�appendr)
rr)r*r+r&r(�	responsesr�pager,r8rr-s
             rr.zBatchAction.__call__rs1�������	�#�D�$6�$6�$>�$>�$H�$H�I��
�L�L�N� 	O�D��F�#,�T�?�
���x� �'�#+�=�=�#=�#=�L��>�%�]�]�1�1�F�)���&�&�.�.�!��	�
� ����
�M�M�&�!��L�L�'��~�v�
�7�w�v�~�6��G��G�H��L�L���2����T�3�3�F�F�H�M�N�A 	O�D�rN)r0r1r2r3r.r4rrr6r6_s���$6rr6c��eZdZdZd�Zd�Zy)�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_``
    c� �||_||_y)N)�
_waiter_model�_waiter_resource_name)r�waiter_model�waiter_resource_names   rrzWaiterAction.__init__�s��)���%9��"rc��t|jj�}t||j�}|j	|�t
j
d|jj|j|�|jj}|j|�}|jdi|��}t
j
d|�y)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.
        r r!Nr4)
rrA�waiter_namerr"r#r$r%r&rBr(�
get_waiter�wait)	rr)r*r+�client_waiter_namer,r(�waiterr-s	         rr.zWaiterAction.__call__�s���(��(:�(:�(F�(F�G��
+�6�4�3E�3E�F���
�
�f�����#��K�K�$�$��&�&��		
����#�#���"�"�#5�6���6�;�;�(��(�����^�X�.rNr/r4rrr?r?�s���:�/rr?c��eZdZdZd�Zd�Zy)�CustomModeledActionz3A custom, modeled action to inject into a resource.c�<�||_||_||_||_y)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)�name�model�function�emitter)r�action_namerrP�
event_emitters     rrzCustomModeledAction.__init__�s ��$ ��	�!��
� ��
�$��rc�L�|jd�d}t|j|ji�}|j|j_t
||j||jd��|j_	t||j|j�y)N�.���F)�
resource_namerSr�
service_model�include_signature)�rsplitrrNrOrPr0rrQrXr3r)r�class_attributesr�
event_namer+rW�actions       r�injectzCustomModeledAction.inject�s~��"�)�)�#�.�r�2�
���	�	�4�:�:�r�2��!%����
�
�� /�'��,�,��)�7�7�#�!
��
�
��	�)�4�9�9�d�m�m�DrN)r0r1r2r3rr^r4rrrLrL�s��=�%�.ErrL)�logging�botocorer�boto3.docs.docstringr�boto3.utilsrrOrr,rr-r	r
�	getLoggerr0r#rr6r?rLr4rr�<module>rdsc����0�(��-�1�	��	�	�8�	$��@@�@@�FI�-�I�X./�./�b%E�%Er