
    xh                     V    d Z ddlZddlZddlZddlmZ ddlmZ  G d de          Z	dS )z;Parse data received from the SendGrid Inbound Parse webhook    N)	iteritems)secure_filenamec                       e Zd Zd Zd Zd Zd Zd Zd Ze	d             Z
e	d             Ze	d	             Ze	d
             ZdS )Parsec                     |j         | _        || _        |                    d           |j        | _        |j        | _        d S )NT)as_text)keys_keys_requestget_dataform_payloaddata_raw_payload)selfconfigrequests      Q/var/www/html/what/lib/python3.11/site-packages/sendgrid/helpers/inbound/parse.py__init__zParse.__init__   sB    [
&&&#L    c                 P    i }| j         D ]}|| j        v r| j        |         ||<   |S )zd
        Return a dictionary of key/values in the payload received from
        the webhook
        )r	   payload)r   
key_valueskeys      r   r   zParse.key_values   s>    
 
9 	4 	4Cdl"""&,s"3
3r   c                 Z    d| j         v r!t          j        | j         d                   }|S dS )z
        This only applies to raw payloads:
        https://sendgrid.com/docs/Classroom/Basics/Inbound_Parse_Webhook/setting_up_the_inbound_parse_webhook.html#-Raw-Parameters
        emailN)r   r   message_from_string)r   	raw_emails     r   get_raw_emailzParse.get_raw_email   s3    
 dl""1$,w2GHHI4r   c                     d}d| j         v r|                     | j                  }|                                 }||                     |          }|S )zReturns an object with:
        type = file content type
        file_name = the name of the file
        contents = base64 encoded file contentsNzattachment-info)r   _get_attachmentsr   r   _get_attachments_raw)r   attachmentsr   s      r   r#   zParse.attachments(   s[    
 ,,//==K&&((	 33I>>Kr   c                    g }t          |j                  D ]q\  }}i }|j        dvrat          |j                  }|j        |d<   ||d<   t          j        |                                          |d<   |                    |           r|S )N)Nfdopenz<fdopen>type	file_namecontents)	r   filesfilenamer   content_typebase64	b64encodereadappend)r   r   r#   _filestorage
attachmentr*   s          r   r!   zParse._get_attachments6   s    '66 	/ 	/NA{J#+GGG*;+?@@%0%=
6"*2
;')/)9+:J:J:L:L)M)M
:&"":...r   c                    g }d}|                                 D ]}i }|                                dk    r|                                }|s1t          j        |                                          }|sd}d||fz  }|dz  }|                                |d<   ||d<   |                    d          |d	<   |                    |           |S )
N   	multipartz.binzpart-%03d%sr&   r'   F)decoder(   )walkget_content_maintypeget_filename	mimetypesguess_extensionget_content_typeget_payloadr/   )r   r   r#   counterpartr2   r*   exts           r   r"   zParse._get_attachments_rawB   s    NN$$ 	+ 	+DJ((**k99((**H :/0E0E0G0GHH ! C(GS>9qLG!%!6!6!8!8Jv&.J{#%)%5%5U%5%C%CJz"z****r   c                     | j         S N)r
   r   s    r   r	   z
Parse.keysV   s
    zr   c                     | j         S rB   )r   rC   s    r   r   zParse.requestZ   
    }r   c                     | j         S rB   )r   rC   s    r   r   zParse.payload^   rE   r   c                     | j         S rB   )r   rC   s    r   raw_payloadzParse.raw_payloadb   s      r   N)__name__
__module____qualname__r   r   r   r#   r!   r"   propertyr	   r   r   rH    r   r   r   r   	   s        ) ) )	 	 		 	 	  
 
 
  (   X   X   X ! ! X! ! !r   r   )
__doc__r,   r   r:   sixr   werkzeug.utilsr   objectr   rM   r   r   <module>rR      s    A A             * * * * * *[! [! [! [! [!F [! [! [! [! [!r   