
    /Jf%                         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mZ  e j        e          Z G d	 d
          Z G d de          Z G d d          Z G d d          ZdS )    N)
xform_name)ActionDocstring)inject_attribute   )Action)create_request_parameters)
RawHandlerResourceHandlerc                        e Zd ZdZddZd ZdS )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        }|r*t          |j        ||||j        j                  | _        d S t          |j                  | _        d S )N)search_pathfactoryresource_modelservice_contextoperation_name)_action_modelresourcer
   pathrequest	operation_response_handlerr	   )selfaction_modelr   r   resource_response_models        Y/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/boto3/resources/action.py__init__zServiceAction.__init__.   sn    ) #/"7" 		C%4386 /+3=& & &D""" &00A%B%BD"""    c                    t          | j        j        j                  }t	          || j        j                  }|                    |           t                              d|j        j	        ||            t          |j        j        |          |i |}t                              d|           |                     |||          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)r   r   r   r   r   updateloggerdebugmetaservice_namegetattrclientr   )r   parentargskwargsr   paramsresponses          r   __call__zServiceAction.__call__?   s     $D$6$>$HII
 +643E3MNNf#K$		
 	
 	
 ?76;-~>>OOO^X...%%ffh???r   )NN__name__
__module____qualname____doc__r   r.    r   r   r   r      sJ         "C C C C"@ @ @ @ @r   r   c                       e Zd ZdZd ZdS )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                 >   d}d}g }t          | j        j        j                  }|                                D ]}i }	t          |          D ]>\  }
}||j        j        }||j        j        }t          || j        j        |	|
           ?|	s n|	
                    |           t                              d|||	            t          ||          |i |	}t                              d|           |                    |                     ||	|                     |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!   )r   r   r   r   pages	enumerater%   r&   r(   r   r"   r#   r$   r'   appendr   )r   r)   r*   r+   r&   r(   	responsesr   pager,   r8   r   r-   s                r   r.   zBatchAction.__call__r   sT    	#D$6$>$HII
 LLNN  	O  	ODF#,T??  x  '#+=#=L>%]1F)&.!	      MM&!!!LL'~v   7wv~66GGGHLL222T33FFHMMNNNNr   N)r0   r1   r2   r3   r.   r4   r   r   r6   r6   _   s-         $6 6 6 6 6r   r6   c                       e Zd ZdZd Zd ZdS )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                 "    || _         || _        d S )N)_waiter_model_waiter_resource_name)r   waiter_modelwaiter_resource_names      r   r   zWaiterAction.__init__   s    )%9"""r   c                 v   t          | j        j                  }t          || j                  }|                    |           t
                              d|j        j        | j	        |           |j        j
        }|                    |          } |j        di |}t
                              d|           dS )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   )r   rA   waiter_namer   r"   r#   r$   r%   r&   rB   r(   
get_waiterwait)	r   r)   r*   r+   client_waiter_namer,   r(   waiterr-   s	            r   r.   zWaiterAction.__call__   s     ((:(FGG
 +643EFFf#K$&		
 	
 	
 #""#5666;((((^X.....r   Nr/   r4   r   r   r?   r?      s<         : : :/ / / / /r   r?   c                       e Zd ZdZd Zd ZdS )CustomModeledActionz3A custom, modeled action to inject into a resource.c                 >    || _         || _        || _        || _        dS )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_namer   rP   event_emitters        r   r   zCustomModeledAction.__init__   s$    $  	!
 $r   c                    |                     d          d         }t          | j        | j        i           }| j        | j        _        t          || j        ||j        d          | j        _	        t          || j        | j                   d S )N.F)resource_namerS   r   service_modelinclude_signature)rsplitr   rN   rO   rP   r0   r   rQ   rX   r3   r   )r   class_attributesr   
event_namer+   rW   actions          r   injectzCustomModeledAction.inject   s    "))#..r2	4:r22!% /',)7#!
 !
 !
 	)49dmDDDDDr   N)r0   r1   r2   r3   r   r^   r4   r   r   rL   rL      s=        ==% % %.E E E E Er   rL   )loggingbotocorer   boto3.docs.docstringr   boto3.utilsr   rO   r   r,   r   r-   r	   r
   	getLoggerr0   r#   r   r6   r?   rL   r4   r   r   <module>rd      se          0 0 0 0 0 0 ( ( ( ( ( (       - - - - - - 1 1 1 1 1 1 1 1		8	$	$@@ @@ @@ @@ @@ @@ @@ @@FI I I I I- I I IX./ ./ ./ ./ ./ ./ ./ ./b%E %E %E %E %E %E %E %E %E %Er   