
    /Jf-                     n    d dl Z d dlmZ ddlmZ d ZddZd Z G d d	          Z G d
 d          Z	dS )    N)
xform_name   )get_data_memberc                     | D ]}| dS dS )z
    Return True if all elements of the iterable are not None (or if the
    iterable is empty). This is like the built-in ``all``, except checks
    against None, so 0 and False are allowable values.
    NFT )iterableelements     [/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/boto3/resources/response.pyall_not_noner      s)       ?55 4    c                    g }| D ]}|j         }|j        }|dk    rt          j        |j        |          }n|dk    rt          j        |j        |          }n^|dk    r#t          |t          |j                            }n5|dk    rt          ||j                  }n|dk    rt          d|           |
                    t          |          |f           |S )a  
    Builds a mapping of identifier names to values based on the
    identifier source location, type, and target. Identifier
    values may be scalars or lists depending on the source type
    and location.

    :type identifiers: list
    :param identifiers: List of :py:class:`~boto3.resources.model.Parameter`
                        definitions
    :type parent: ServiceResource
    :param parent: The resource instance to which this action is attached.
    :type params: dict
    :param params: Request parameters sent to the service.
    :type raw_response: dict
    :param raw_response: Low-level operation response.
    :rtype: list
    :return: An ordered list of ``(name, value)`` identifier tuples.
    responserequestParameter
identifierdatainputzUnsupported source type: )sourcetargetjmespathsearchpathgetattrr   namer   NotImplementedErrorappend)	identifiersparentparamsraw_responseresultsr   r   r   values	            r
   build_identifiersr"       s    & G! 4 4
""ZOJO\BBEE)))OJOV<<EE|##FJz$?$?@@EEv $FJO<<EEw%&J&&J&JKKK
6**E23333Nr   c                    d}|                     |          }|j        }| r|                     d          D ]j}|                    d          }|j        dk    r|j        |         }0|j        dk    r|j        }Ct          d                    |j        |                    |j        dk    ri }n|j        dk    rg }n|j        dk    ri }|S )a  
    Creates an appropriate empty response for the type that is expected,
    based on the service model's shape type. For example, a value that
    is normally a list would then return an empty list. A structure would
    return an empty dict, and a number would return None.

    :type search_path: string
    :param search_path: JMESPath expression to search in the response
    :type operation_name: string
    :param operation_name: Name of the underlying service operation.
    :type service_model: :ref:`botocore.model.ServiceModel`
    :param service_model: The Botocore service model
    :rtype: dict, list, or None
    :return: An appropriate empty value
    N.z[0123456789]$	structurelistz&Search path hits shape type {} from {}map)	operation_modeloutput_shapesplitstrip	type_namemembersmemberr   format)search_pathoperation_nameservice_modelr   r(   shapeitems          r
   build_empty_responser5   N   s      H#33NCCO(E 
  %%c** 	 	D::o..D+--d+F**)<CC    +%%	F	"	"	E	!	!Or   c                       e Zd ZdZd Zd ZdS )
RawHandleraG  
    A raw action response handler. This passed through the response
    dictionary, optionally after performing a JMESPath search if one
    has been defined for the action.

    :type search_path: string
    :param search_path: JMESPath expression to search in the response
    :rtype: dict
    :return: Service response
    c                     || _         d S N)r0   )selfr0   s     r
   __init__zRawHandler.__init__   s    &r   c                 ^    | j         r%| j         dk    rt          j        | j         |          }|S ),  
        :type parent: ServiceResource
        :param parent: The resource instance to which this action is attached.
        :type params: dict
        :param params: Request parameters sent to the service.
        :type response: dict
        :param response: Low-level operation response.
        $)r0   r   r   )r:   r   r   r   s       r
   __call__zRawHandler.__call__   s6      	C 0C 7 7t'7BBHr   N)__name__
__module____qualname____doc__r;   r?   r   r   r
   r7   r7      s<        	 	' ' '    r   r7   c                   (    e Zd ZdZ	 ddZd Zd ZdS )ResourceHandleraf  
    Creates a new resource or list of new resources from the low-level
    response based on the given response resource definition.

    :type search_path: string
    :param search_path: JMESPath expression to search in the response

    :type factory: ResourceFactory
    :param factory: The factory that created the resource class to which
                    this action is attached.

    :type resource_model: :py:class:`~boto3.resources.model.ResponseResource`
    :param resource_model: Response resource model.

    :type service_context: :py:class:`~boto3.utils.ServiceContext`
    :param service_context: Context about the AWS service

    :type operation_name: string
    :param operation_name: Name of the underlying service operation, if it
                           exists.

    :rtype: ServiceResource or list
    :return: New resource instance(s).
    Nc                 L    || _         || _        || _        || _        || _        d S r9   )r0   factoryresource_modelr1   service_context)r:   r0   rG   rH   rI   r1   s         r
   r;   zResourceHandler.__init__   s1     ',,.r   c           	      
   | j         j        }| j        j                            |          }| j                            ||| j                  }|}d}| j        rt          j	        | j        |          }t          t          | j         j        |||                    }	d |	                                D             }
|
r_g }t          t          |
d                             D ]9}d}|r||         }|                    |                     |||	|                     :nht%          |	                                          r|                     |||	|          }n.d}| j        %t)          | j        | j        | j        j                  }|S )r=   )resource_namesingle_resource_json_definitionrI   Nc                 <    g | ]}t          |t                    |S r   )
isinstancer&   ).0vs     r
   
<listcomp>z,ResourceHandler.__call__.<locals>.<listcomp>   s'    IIIZ45H5HI!IIIr   r   )rH   typerI   resource_json_definitionsgetrG   load_from_definitionr0   r   r   dictr"   r   valuesrangelenr   handle_response_itemr   r1   r5   r2   )r:   r   r   r   rK   json_definitionresource_clsr   search_responser   pluraliresponse_items                r
   r?   zResourceHandler.__call__   s    +0.HLL
 

 |88',; 0 9 
 

    	N&od.>MMO #/ 
 
 JI[//11III $	H 3vay>>**   !%" 7$3A$6M--$fk=     +,,..// 	 00fk? HH H". 0$'(6  r   c                     d|j         j        i}|                                D ]4\  }}t          |t                    r|                    d          }|||<   5 |di |}|||j         _        |S )a  
        Handles the creation of a single response item by setting
        parameters and creating the appropriate resource instance.

        :type resource_cls: ServiceResource subclass
        :param resource_cls: The resource class to instantiate.
        :type parent: ServiceResource
        :param parent: The resource instance to which this action is attached.
        :type identifiers: dict
        :param identifiers: Map of identifier names to value or values.
        :type resource_data: dict or None
        :param resource_data: Data for resource attributes.
        :rtype: ServiceResource
        :return: New resource instance.
        clientr   Nr   )metarb   itemsrN   r&   popr   )	r:   r\   r   r   resource_datakwargsr   r!   resources	            r
   rZ   z$ResourceHandler.handle_response_item  s    & fk(
 ',,.. 	! 	!KD%%&& %		! F4LL<))&))$!.HMr   r9   )r@   rA   rB   rC   r;   r?   rZ   r   r   r
   rE   rE      sY         > / / / /R R Rh" " " " "r   rE   )NN)
r   botocorer   r   r   r   r"   r5   r7   rE   r   r   r
   <module>rj      s           # # # # # #	 	 	+ + + +\0 0 0f       >^ ^ ^ ^ ^ ^ ^ ^ ^ ^r   