o
    2&ßaÁ'  ã                   @   sæ   d dl Z d dlZ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 e  e¡Zeg d¢ƒZG d	d
„ d
eƒZdd„ ZG dd„ deƒZdd„ Zdd„ Zdd„ ZeddifeddifdœZei fei fdœZdS )é    N)Ú
AWSRequest)ÚURLLib3Session)ÚProfileNotFound)Úsix)Úcompat_open)Ú
ParamError)Xzapi-gateway.put-integration.uriz.api-gateway.create-integration.integration-uriz.api-gateway.update-integration.integration-urizapi-gateway.create-api.targetzapi-gateway.update-api.targetz#appstream.create-stack.redirect-urlz#appstream.create-stack.feedback-urlz#appstream.update-stack.redirect-urlz#appstream.update-stack.feedback-urlz(cloudformation.create-stack.template-urlz(cloudformation.update-stack.template-urlz,cloudformation.create-stack-set.template-urlz,cloudformation.update-stack-set.template-urlz-cloudformation.create-change-set.template-urlz-cloudformation.validate-template.template-urlz2cloudformation.estimate-template-cost.template-urlz0cloudformation.get-template-summary.template-urlz,cloudformation.create-stack.stack-policy-urlz,cloudformation.update-stack.stack-policy-urlz0cloudformation.set-stack-policy.stack-policy-urlzcustom.package.template-filezcustom.deploy.template-filez:cloudformation.update-stack.stack-policy-during-update-urlzcustom.cp.website-redirectzcustom.mv.website-redirectzcustom.sync.website-redirectz guardduty.create-ip-set.locationz guardduty.update-ip-set.locationz*guardduty.create-threat-intel-set.locationz*guardduty.update-threat-intel-set.locationz(comprehend.detect-dominant-language.textz3comprehend.batch-detect-dominant-language.text-listzcomprehend.detect-entities.textz*comprehend.batch-detect-entities.text-listz"comprehend.detect-key-phrases.textz-comprehend.batch-detect-key-phrases.text-listz comprehend.detect-sentiment.textz+comprehend.batch-detect-sentiment.text-listzemr.create-studio.idp-auth-urlz'iam.create-open-id-connect-provider.urlz)machine-learning.predict.predict-endpointz=mediatailor.put-playback-configuration.ad-decision-server-urlz3mediatailor.put-playback-configuration.slate-ad-urlz?mediatailor.put-playback-configuration.video-content-source-urlz+rds.copy-db-cluster-snapshot.pre-signed-urlz$rds.create-db-cluster.pre-signed-urlz#rds.copy-db-snapshot.pre-signed-urlz2rds.create-db-instance-read-replica.pre-signed-urlz:sagemaker.create-notebook-instance.default-code-repositoryz?sagemaker.create-notebook-instance.additional-code-repositoriesz:sagemaker.update-notebook-instance.default-code-repositoryz?sagemaker.update-notebook-instance.additional-code-repositoriesz@serverlessapplicationrepository.create-application.home-page-urlz>serverlessapplicationrepository.create-application.license-urlz=serverlessapplicationrepository.create-application.readme-urlzBserverlessapplicationrepository.create-application.source-code-urlz?serverlessapplicationrepository.create-application.template-urlzJserverlessapplicationrepository.create-application-version.source-code-urlzGserverlessapplicationrepository.create-application-version.template-urlz@serverlessapplicationrepository.update-application.home-page-urlz=serverlessapplicationrepository.update-application.readme-urlz*service-catalog.create-product.support-urlz*service-catalog.update-product.support-urlz#ses.put-account-details.website-urlzsqs.add-permission.queue-urlz'sqs.change-message-visibility.queue-urlz-sqs.change-message-visibility-batch.queue-urlzsqs.delete-message.queue-urlz"sqs.delete-message-batch.queue-urlzsqs.delete-queue.queue-urlz"sqs.get-queue-attributes.queue-urlz,sqs.list-dead-letter-source-queues.queue-urlzsqs.receive-message.queue-urlzsqs.remove-permission.queue-urlzsqs.send-message.queue-urlz sqs.send-message-batch.queue-urlz"sqs.set-queue-attributes.queue-urlzsqs.purge-queue.queue-urlzsqs.list-queue-tags.queue-urlzsqs.tag-queue.queue-urlzsqs.untag-queue.queue-urlz(s3.copy-object.website-redirect-locationz4s3.create-multipart-upload.website-redirect-locationz's3.put-object.website-redirect-locationz#sns.subscribe.notification-endpointziot.create-job.document-sourceztranslate.translate-text.textz?workdocs.create-notification-subscription.notification-endpointc                   @   s   e Zd ZdS )ÚResourceLoadingErrorN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú2/usr/lib/python3/dist-packages/awscli/paramfile.pyr   ’   s    r   c                 K   s`   t  t¡}z|  ¡  dd¡dk}W n ty   d}Y nw |r$| t¡ t|ƒ}|  	d|¡ d S )NÚcli_follow_urlparamÚtrueTzload-cli-arg)
ÚcopyÚdeepcopyÚLOCAL_PREFIX_MAPÚget_scoped_configÚgetr   ÚupdateÚREMOTE_PREFIX_MAPÚURIArgumentHandlerÚregister)ÚsessionÚkwargsÚ
prefix_mapÚ	fetch_urlÚhandlerr   r   r   Úregister_uri_param_handler–   s   
ÿÿø

r   c                   @   s&   e Zd Zddd„Zdd„ Zdd„ ZdS )	r   Nc                 C   s&   |d u rt  t¡}| t¡ || _d S ©N)r   r   r   r   r   Ú	_prefixes)ÚselfÚprefixesr   r   r   Ú__init__­   s   


zURIArgumentHandler.__init__c                 K   s@   |}d  | d¡dd… ¡}|tv st|ddƒrdS |  ||¡S )z-Handler that supports param values from URIs.Ú.é   NÚno_paramfile)ÚjoinÚsplitÚPARAMFILE_DISABLEDÚgetattrÚ_check_for_uri_param)r!   Ú
event_nameÚparamÚvaluer   Úcli_argumentÚqualified_param_namer   r   r   Ú__call__³   s   
ÿzURIArgumentHandler.__call__c              
   C   sX   t |tƒrt|ƒdkr|d }zt|| jƒW S  ty+ } z	t|jt 	|¡ƒ‚d }~ww )Nr%   r   )
Ú
isinstanceÚlistÚlenÚget_paramfiler    r   r   Úcli_namer   Ú	text_type)r!   r-   r.   Úer   r   r   r+   ½   s   €ÿz'URIArgumentHandler._check_for_uri_paramr   )r	   r
   r   r#   r1   r+   r   r   r   r   r   ¬   s    

r   c                 C   sJ   d}t | tjƒr#| ¡ D ]\}}|  |¡r"|\}}||| fi |¤Ž}q|S )aL  Load parameter based on a resource URI.

    It is possible to pass parameters to operations by referring
    to files or URI's.  If such a reference is detected, this
    function attempts to retrieve the data from the file or URI
    and returns it.  If there are any errors or if the ``path``
    does not appear to refer to a file or URI, a ``None`` is
    returned.

    :type path: str
    :param path: The resource URI, e.g. file://foo.txt.  This value
        may also be a non resource URI, in which case ``None`` is returned.

    :type cases: dict
    :param cases: A dictionary of URI prefixes to function mappings
        that a parameter is checked against.

    :return: The loaded value associated with the resource URI.
        If the provided ``path`` is not a resource URI, then a
        value of ``None`` is returned.

    N)r2   r   Ústring_typesÚitemsÚ
startswith)ÚpathÚcasesÚdataÚprefixÚfunction_specÚfunctionr   r   r   r   r5   Æ   s   
€r5   c              
   C   s    t j t j |t| ƒd … ¡¡}zt||ƒ�}| ¡ W  d   ƒ W S 1 s&w   Y  W d S  ty:   td| ƒ‚ t	t
fyO } ztd||f ƒ‚d }~ww )Nz›Unable to load paramfile (%s), text contents could not be decoded.  If this is a binary file, please use the fileb:// prefix instead of the file:// prefix.zUnable to load paramfile %s: %s)Úosr<   Ú
expandvarsÚ
expanduserr4   r   ÚreadÚUnicodeDecodeErrorr   ÚOSErrorÚIOError)r?   r<   ÚmodeÚ	file_pathÚfr8   r   r   r   Úget_fileæ   s"    (ÿþÿÿ€ÿrL   c              
   C   sd   zt ƒ }| td|ƒ ¡ ¡}|jdkr|jW S td|j ƒ‚ ty1 } ztd||f ƒ‚d }~ww )NÚGETéÈ   z"received non 200 status code of %szUnable to retrieve %s: %s)r   Úsendr   ÚprepareÚstatus_codeÚtextr   Ú	Exception)r?   Úurir   Úrr8   r   r   r   Úget_uriõ   s   
ÿÿ€ÿrV   rI   rU   Úrb)zfile://zfileb://)zhttp://zhttps://)ÚloggingrB   r   Úbotocore.awsrequestr   Úbotocore.httpsessionr   Úbotocore.exceptionsr   Úawscli.compatr   r   Úawscli.argprocessr   Ú	getLoggerr	   ÚloggerÚsetr)   rS   r   r   Úobjectr   r5   rL   rV   r   r   r   r   r   r   Ú<module>   s.   
r 

þ
þ