o
    !d'                     @   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)Yz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-urlz3cloudformation.register-type.schema-handler-packagez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   4usr/lib/python3.10/site-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 )NZcli_follow_urlparamtrueTzload-cli-arg)
copydeepcopyLOCAL_PREFIX_MAPZget_scoped_configgetr   updateREMOTE_PREFIX_MAPURIArgumentHandlerregister)sessionkwargsZ
prefix_mapZ	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..   NZno_paramfile)joinsplitPARAMFILE_DISABLEDgetattr_check_for_uri_param)r   Z
event_nameparamvaluer   Zcli_argumentZ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   Zcli_namer   Z	text_type)r   r'   r(   er   r   r   r&      s   z'URIArgumentHandler._check_for_uri_paramr   )r	   r
   r   r   r)   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)r*   r   Zstring_typesitems
startswith)pathcasesdataprefixZfunction_specfunctionr   r   r   r   r-      s   
r-   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 )NzUnable 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)osr1   
expandvars
expanduserr,   r   readUnicodeDecodeErrorr   OSErrorIOError)r4   r1   mode	file_pathfr.   r   r   r   get_file   s"    (r@   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 )NZGET   z"received non 200 status code of %szUnable to retrieve %s: %s)r   sendr   ZprepareZstatus_codetextr   	Exception)r4   Zurir   rr.   r   r   r   get_uri   s   
rF   r=   rE   rb)zfile://zfileb://)zhttp://zhttps://)loggingr6   r   Zbotocore.awsrequestr   Zbotocore.httpsessionr   Zbotocore.exceptionsr   Zawscli.compatr   r   Zawscli.argprocessr   	getLoggerr	   loggersetr$   rD   r   r   objectr   r-   r@   rF   r   r   r   r   r   r   <module>   s.   
s 


