B -<`1-ã@s^ddlZddlmZddlmZdd„Zddd„Zd d „ZGd d „d eƒZ Gd d„deƒZ dS)éN)Ú xform_nameé)Úget_data_membercCsx|D]}|dkrdSqWdS)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Úelementrrú?/tmp/pip-target-7cdyy134/lib/python/boto3/resources/response.pyÚ all_not_nones r c Cs®g}x¤|D]œ}|j}|j}|dkr2t |j|¡}nb|dkrJt |j|¡}nJ|dkrdt|t|jƒƒ}n0|dkrzt||jƒ}n|dkr†q nt d  |¡ƒ‚|  t|ƒ|f¡q W|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. ÚresponseZrequestParameterÚ identifierÚdataÚinputzUnsupported source type: {0}) ÚsourceÚtargetÚjmespathÚsearchÚpathÚgetattrrÚnamerÚNotImplementedErrorÚformatÚappend) Ú identifiersÚparentÚparamsÚ raw_responseÚresultsr rrÚvaluerrrÚbuild_identifiers s$  rcCs¢d}| |¡}|j}|rpxV| d¡D]H}| d¡}|jdkrH|j|}q$|jdkrZ|j}q$td |j|¡ƒ‚q$W|jdkr€i}n|jdkr�g}n|jdkrž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]$Z structureÚlistz(Search path hits shape type {0} from {1}Úmap) Úoperation_modelZ output_shapeÚsplitÚstripÚ type_nameÚmembersÚmemberrr)Ú search_pathÚoperation_nameÚ service_modelr r"ÚshapeÚitemrrrÚbuild_empty_responseOs(        r-c@s eZdZdZdd„Zdd„ZdS)Ú 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 cCs ||_dS)N)r()Úselfr(rrrÚ__init__‹szRawHandler.__init__cCs"|jr|jdkrt |j|¡}|S)a, :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. ú$)r(rr)r/rrr rrrÚ__call__Žs zRawHandler.__call__N)Ú__name__Ú __module__Ú __qualname__Ú__doc__r0r2rrrrr.€s r.c@s*eZdZdZd dd„Zdd„Zdd„ZdS) Ú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). NcCs"||_||_||_||_||_dS)N)r(ÚfactoryÚresource_modelr)Úservice_context)r/r(r8r9r:r)rrrr0·s zResourceHandler.__init__c Csü|jj}|jj |¡}|jj|||jd�}|}d}|jrFt  |j|¡}t t |jj |||ƒƒ} dd„|   ¡Dƒ} | r¸g}x€tt| dƒƒD]*} d} |rœ|| } | | ||| | ¡¡qˆWn@t|   ¡ƒrÖ| ||| |¡}n"d}|jdk røt|j|j|jjƒ}|S)a, :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. )Ú resource_nameZsingle_resource_json_definitionr:NcSsg|]}t|tƒr|‘qSr)Ú isinstancer )Ú.0Úvrrrú æsz,ResourceHandler.__call__..r)r9Útyper:Zresource_json_definitionsÚgetr8Zload_from_definitionr(rrÚdictrrÚvaluesÚrangeÚlenrÚhandle_response_itemr r)r-r*) r/rrr r;Zjson_definitionÚ resource_clsrZsearch_responserÚpluralÚiZ response_itemrrrr2¿sB      zResourceHandler.__call__c Cs\d|jji}x0| ¡D]$\}}t|tƒr2| d¡}|||<qW|f|Ž}|dk rX||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. ÚclientrN)ÚmetarJÚitemsr<r Úpopr ) r/rGrrZ resource_dataÚkwargsrrÚresourcerrrrF s     z$ResourceHandler.handle_response_item)N)r3r4r5r6r0r2rFrrrrr7žs Lr7)NN) rZbotocorerrrr rr-Úobjectr.r7rrrrÚs   /1