B \@sRddlZddlZddlmZddlmZedZddZd dd Z d d d Z dS)N) xform_name)ResourceLoadExceptionz \[(.*)\]$cCsB|jjdkr2t|dr |ntd|jjt ||jjS)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``. Nloadz{0} has no load method!) metadatahasattrrrformat __class____name__jmespathsearch)parentpathr7/tmp/pip-build-uw_ogi45/boto3/boto3/resources/params.pyget_data_members    rcCs|dkr i}x|jD]x}|j}|j}|dkr>t|t|j}n@|dkrTt||j}n*|dkrd|j}n|dkrpqnt d |t ||||qW|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. N identifierr)stringintegerbooleaninputzUnsupported source type: {0}) paramssourcetargetgetattrrnamerrvalueNotImplementedErrorr build_param_structure)rZ request_modelrindexparamrrrrrrcreate_request_parameters3s"  r"c CsV|}|d}x@t|D]2\}}t|}|r|dr|ddkrZ|dd}qt|d}|dtt|d }nd}|dd}||kst||t sg||<|dkrt||}x"t|||kr|| iqW|t|dkr ||||<n |||}q||kr*i||<|t|dkrF|||<q||}qWdS)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'}]}} .*Nz[]) split enumerateINDEX_REr groupintlenstr isinstancelistappend) rrrr pospartsipartresultrrrres4       r)NN)N) rer Zbotocorer exceptionsrcompiler*rr"rrrrrs    2