
                             d Z ddlmZ ddlmZ ddlmZ  G d dej                        Z G d dej                        Z	dd	Z
ddZ G d de      Zy
)z3Utilities for Cloud Pub/Sub Message Transforms API.    )utils)apis)
exceptionsc                       e Zd ZdZy)EmptyMessageExceptionz9Error when no message was specified for a Test operation.N__name__
__module____qualname____doc__     7lib/googlecloudsdk/api_lib/pubsub/message_transforms.pyr   r      s    Ar   r   c                       e Zd ZdZy)EmptyFilePathExceptionzMError when no message transforms file was specified for a Validate operation.Nr   r   r   r   r   r      s    Ur   r   c                 2    t        j                  dd|       S )Npubsubv1no_http)r   GetClientInstancer   s    r   r   r      s    			$	@@r   Nc                 6    | xs
 t               } | j                  S N)r   MESSAGES_MODULE)clients    r   GetMessagesModuler   "   s    (&(&			r   c                   2    e Zd ZdZddZddZ	 	 	 	 	 ddZy)	MessageTransformsClientz?Client for message transforms service in the Cloud Pub/Sub API.Nc                     |xs
 t               | _        |xs t        |      | _        | j                  j                  | _        y r   )r   r   r   messagesprojects_service)selfr   r    s      r   __init__z MessageTransformsClient.__init__*   s5    /-/DK9 1& 9DMKK((DMr   c                    |st        d      	 t        j                  | j                  j                  |      }| j                  j                  |j                         | j                  j                  |            }| j                  j                  |      S # t        j
                  t        j                  t        j                  f$ r!}t        j                  |      f|_	         d}~ww xY w)a  Validates a message transform.

    Args:
      project_ref (Resource): Resource reference for the project.
      message_transform_file (str): The file path to the JSON or YAML file
        containing the message transform.

    Returns:
      ValidateMessageTransformResponse (success) if the message transform is
      valid, otherwise an error.

    Raises:
      EmptyFilePathException: If no message transform file was specified.
    z]You need to specify a path to JSON or YAML file containing the message transform to validate.N)messageTransform)projectvalidateMessageTransformRequest)r   r   (GetMessageTransformFromFileForValidationr    MessageTransform#MessageTransformsInvalidFormatErrorMessageTransformsEmptyFileError!MessageTransformsMissingFileErrorGetErrorMessageargs-PubsubProjectsValidateMessageTransformRequestRelativeNameValidateMessageTransformRequestr"   ValidateMessageTransform)r#   project_refmessage_transform_filemessage_transformevalidate_requests         r   Validatez MessageTransformsClient.Validate/   s     "", 

HH
--
(
(*@ }}RR((*(,(U(U. )V )
 S  ==112BCC 	11--// 
 %%a(*afs   *B 2C,C''C,c           
         |s|st        d      | j                  j                  || j                  j                  j                  |            }d}|r-	 t	        j
                  | j                  j                  |d      }|r| j                  j                  |      nd}
| j                  j                  |j                         | j                  j                  ||
|r|j                         nd|r|j                         nd      	      }| j                   j#                  |      S # t        j                  t        j                  t        j                  f$ r!}	t	        j                  |	      f|	_         d}	~	ww xY w)
a  Tests applying message transforms to a message.

    Args:
      project_ref (Resource): Resource reference for the project.
      message_body (bytes): The message to test.
      attributes (list[AdditionalProperty]): List of attributes to attach to the
        message.
      message_transforms_file (str): The file path to the JSON or YAML file
        containing the message transforms.
      topic_ref (Resource): The topic containing the message transforms to test
        against.
      subscription_ref (Resource): The subscription containing the message
        transforms to test against.

    Returns:
      TestMessageTransformsResponse which contains a list of TransformedMessage.

    Raises:
      EmptyMessageException: If no message body or attributes were specified.
      EmptyMessageTransformsException: If no message
      transforms file/topic/subscription were specified.
    zdYou cannot send an empty message. You must specify either a MESSAGE, one or more ATTRIBUTE, or both.)additionalProperties)data
attributesNF)enable_vertex_ai_smt)messageTransforms)messager?   topicsubscription)r'   testMessageTransformsRequest)r   r    PubsubMessageAttributesValuer   GetMessageTransformsFromFiler*   r+   r,   r-   r.   r/   MessageTransforms*PubsubProjectsTestMessageTransformsRequestr1   TestMessageTransformsRequestr"   TestMessageTransforms)r#   r4   message_bodyr=   message_transforms_file	topic_refsubscription_refr@   message_transformsr7   message_transforms_msgtest_requests               r   TestzMessageTransformsClient.TestW   s|   > 
!5 
 mm))==..>>!+ ? 
 * G "??MM**#!&
  	'':L'M  ==KK((*%)]]%O%O4.7)((*T *668 &P &
 L 
L ==..|<<1 
3
3

/
/

1
1 
 ''*,s   ,D) )2E<E77E<)NNr   )NNNNN)r	   r
   r   r   r$   r9   rR   r   r   r   r   r   '   s(    G)
&DV "L=r   r   )Fr   )r   googlecloudsdk.api_lib.pubsubr   googlecloudsdk.api_lib.utilr   googlecloudsdk.corer   Errorr   r   r   r   objectr   r   r   r   <module>rX      sT    : / , *BJ,, BVZ-- VA 
|=f |=r   