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

��e���f�ddlZddlZddlmZddlmZejd�Zd�Zd	d�Z	d
d�Z
y)�N)�
xform_name�)�ResourceLoadExceptionz	\[(.*)\]$c��|jj�?t|d�r|j�n"t	|j
j�d���tj||jj�S)aE
    Get a data member from a parent using a JMESPath search query,
    loading the parent if required. If the parent cannot be loaded
    and no data is present then an exception is raised.

    :type parent: ServiceResource
    :param parent: The resource instance to which contains data we
                   are interested in.
    :type path: string
    :param path: The JMESPath expression to query
    :raises ResourceLoadException: When no data is present and the
                                   resource cannot be loaded.
    :returns: The queried data or ``None``.
    �loadz has no load method!)	�meta�data�hasattrrr�	__class__�__name__�jmespath�search)�parent�paths  �8/usr/lib/python3/dist-packages/boto3/resources/params.py�get_data_memberrsi�� �{�{�����6�6�"��K�K�M�'��#�#�,�,�-�-A�B��
��?�?�4����!1�!1�2�2�c�H�|�i}|jD]�}|j}|j}|dk(r t|t	|j
��}nA|dk(rt
||j�}n%|dvr
|j}n|dk(r�std|����t||||���|S)aX
    Handle request parameters that can be filled in from identifiers,
    resource data members or constants.

    By passing ``params``, you can invoke this method multiple times and
    build up a parameter dict over time, which is particularly useful
    for reverse JMESPath expressions that append to lists.

    :type parent: ServiceResource
    :param parent: The resource instance to which this action is attached.
    :type request_model: :py:class:`~boto3.resources.model.Request`
    :param request_model: The action request model.
    :type params: dict
    :param params: If set, then add to this existing dict. It is both
                   edited in-place and returned.
    :type index: int
    :param index: The position of an item within a list
    :rtype: dict
    :return: Pre-filled parameters to be sent to the request operation.
    �
identifierr	)�string�integer�boolean�inputzUnsupported source type: )�params�source�target�getattrr�namerr�value�NotImplementedError�build_param_structure)r�
request_modelr�index�paramrrrs        r�create_request_parametersr%3s���*�~����%�%�<�����������\�!��F�J�u�z�z�$:�;�E�
�v�
�$�F�E�J�J�7�E�
�7�
7��K�K�E�
�w�
��%�(A�&��&J�K�K��f�f�e�U�;�)<�,�Mrc��|}|jd�}t|�D�]3\}}tj|�}|r�|j	d�rP|j	d�dk(r|dd}n=t|j	d��}|dt
t|�dz�}nd}|dd}||vst||t�sg||<|�t
||�}t
||�|kr&||ji�t
||�|kr�&|t
|�dz
k(r
||||<��|||}��||vri||<|t
|�dz
k(r|||<��/||}��6y)a
    This method provides a basic reverse JMESPath implementation that
    lets you go from a JMESPath-like string to a possibly deeply nested
    object. The ``params`` are mutated in-place, so subsequent calls
    can modify the same element by its index.

        >>> build_param_structure(params, 'test[0]', 1)
        >>> print(params)
        {'test': [1]}

        >>> build_param_structure(params, 'foo.bar[0].baz', 'hello world')
        >>> print(params)
        {'test': [1], 'foo': {'bar': [{'baz': 'hello, world'}]}}

    �.��*N���z[]���)�split�	enumerate�INDEX_REr�group�int�len�str�
isinstance�list�append)	rrrr#�pos�parts�i�part�results	         rr!r!dsv�� �C��L�L���E��U�#�* ���4�����&����|�|�A���<�<��?�c�)����9�D� ����Q��0�E�� 9�3�s�5�z�D�'8�#9�"9�:�D����C�R�y���3��j��T��D�&A���D�	��}��C��I����c�$�i�.�E�)��D�	� � ��$��c�$�i�.�E�)�
�C��J��N�"�#(��D�	�%� ��$�i��&���3����D�	��C��J��N�"�!��D�	��$�i��U* r)NN)N)�rer
�botocorer�
exceptionsr�compiler.rr%r!�rr�<module>r@s4��
���.��2�:�:�l�#��3�6.�bC r