o
    ›¨ÊhG,  ã                   @   sd   d dl mZ d dlmZmZ d dlmZmZmZ ddl	m
Z
mZ G dd„ de
ƒZG dd	„ d	eƒZd
S )é   )ÚAnymailRequestsAPIError)ÚAnymailRecipientStatusÚANYMAIL_STATUSES)Úget_anymail_settingÚEmailAddressÚparse_address_listé   )ÚAnymailRequestsBackendÚRequestsPayloadc                       s@   e Zd ZdZdZ‡ fdd„Zdd„ Z‡ fdd„Zd	d
„ Z‡  Z	S )ÚEmailBackendz#
    Mailjet API Email Backend
    ÚMailjetc                    sh   | j }td||dd�| _td||dd�| _td||dd�}| d¡s&|d7 }tt| ƒj|fi |¤Ž d	S )
z!Init options from Django settingsÚapi_keyT)Úesp_nameÚkwargsÚ
allow_bareÚ
secret_keyÚapi_urlzhttps://api.mailjet.com/v3)r   r   Údefaultú/N)r   r   r   r   ÚendswithÚsuperr   Ú__init__)Úselfr   r   r   ©Ú	__class__© úJ/var/www/html/env/lib/python3.10/site-packages/anymail/backends/mailjet.pyr      s   ÿ
zEmailBackend.__init__c                 C   s   t ||| ƒS ©N)ÚMailjetPayload)r   ÚmessageÚdefaultsr   r   r   Úbuild_message_payload   s   z"EmailBackend.build_message_payloadc                    s:   |j dkr|jstd|||| d�‚tt| ƒ |||¡ d S )Ni‘  z!Invalid Mailjet API key or secret©Úemail_messageÚpayloadÚresponseÚbackend)Ústatus_codeÚcontentr   r   r   Úraise_for_status)r   r%   r$   r   r   r   r   r)      s   þzEmailBackend.raise_for_statusc              
   C   sÞ   |   |||¡}d|v rt|||| d�‚i }z*|D ]%}| ¡ }|tvr$d}|| D ]}t|d ƒ}	|d }
t|	|d�||
< q(qW n ttfyQ   td|||| d�‚w |j 	¡ D ]}|D ]}
|
j
|vrktd dd�||
j
< q[qW|S )NÚ	ErrorCoder"   ÚunknownÚ	MessageIDÚEmail)Ú
message_idÚstatusz#Invalid Mailjet API response format)Údeserialize_json_responser   Úlowerr   Ústrr   ÚKeyErrorÚ	TypeErrorÚ
recipientsÚvaluesÚ	addr_spec)r   r%   r$   r   Úparsed_responseÚrecipient_statusÚkeyr/   Úitemr.   Úemailr5   r   r   r   Úparse_recipient_status%   s<   ÿýû	þÿ
€þz#EmailBackend.parse_recipient_status)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r!   r)   r=   Ú__classcell__r   r   r   r   r      s    r   c                       sÜ   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Z‡  ZS )3r   c                    sR   i | _ |j|jf}ddi}i | _d | _tt| ƒj|||g|¢R ||dœ|¤Ž d S )NzContent-Typezapplication/json)ÚauthÚheaders)Ú	esp_extrar   r   r5   Ú
merge_datar   r   r   )r   r   r    r&   Úargsr   rC   Úhttp_headersr   r   r   r   L   s   ÿÿÿ
ÿzMailjetPayload.__init__c                 C   s   dS )NÚsendr   ©r   r   r   r   Úget_api_endpointX   s   zMailjetPayload.get_api_endpointc                 C   s   |   ¡  |  ¡  |  | j¡S r   )Ú_finish_recipientsÚ_populate_sender_from_templateÚserialize_jsonÚdatarJ   r   r   r   Úserialize_data[   s   zMailjetPayload.serialize_datac                 C   s,   d| j v s
d| j v r|  ¡  d S |  ¡  d S )NÚccÚbcc)r5   Ú_finish_recipients_singleÚ_finish_recipients_with_varsrJ   r   r   r   rL   d   s   z!MailjetPayload._finish_recipientsc              	   C   s
  | j  d¡}|r�| j  d¡sƒ| jjjd| jj|f | j| jjd�}| j |d | j¡ | j 	|d | j¡}z5|d d d }d|v r^|d  
d	d
¡}t|gƒd }|jr]t|j 
d
d	¡|jƒ}n	t|d |d ƒ}W n tyy   td| j|| jd�‚w |  |¡ d S d S d S )NúMj-TemplateIDÚ	FromEmailz %sREST/template/%s/detailcontent)rC   ÚtimeoutÚDataé    ÚHeadersÚFromú,z	||COMMA||Ú
SenderNameÚSenderEmailz%Invalid Mailjet template API response)r#   r%   r&   )rO   Úgetr&   Úsessionr   rC   rW   r)   r   r0   Úreplacer   Údisplay_namer   r7   r3   r   Úset_from_email)r   Útemplate_idr%   Újson_responserD   Ú
from_emailÚparsedr   r   r   rM   m   s6   
þÿ€€
ÿÿéz-MailjetPayload._populate_sender_from_templatec                 C   sx   d| j vr
d| j vsJ ‚g }| jpi }| jd D ]}|j|j| |j¡dœ}dd„ | ¡ D ƒ}| |¡ q|| j d< dS )	z6Send bulk mail with different variables for each mail.ÚCcÚBccÚto)r-   ÚNameÚVarsc                 S   s   i | ]	\}}|r||“qS r   r   )Ú.0ÚkÚvr   r   r   Ú
<dictcomp>˜   s    z?MailjetPayload._finish_recipients_with_vars.<locals>.<dictcomp>Ú
RecipientsN)rO   rF   r5   r7   rb   r_   ÚitemsÚappend)r   r5   rF   r<   Ú	recipientr   r   r   rT   Œ   s   

ýz+MailjetPayload._finish_recipients_with_varsc                 C   sV   d| j vsJ ‚| jrtdƒ‚| j ¡ D ]\}}dd„ |D ƒ}d |¡| j | ¡ < qdS )z4Send a single mail with some To, Cc and Bcc headers.rq   z!Cannot set merge data with bcc/ccc                 S   s6   g | ]}d |j vr|jnt|j  d¡|jƒ d¡‘qS )r\   zutf-8)rb   Úaddressr   Úencoder7   Ú
formataddr©rm   r<   r   r   r   Ú
<listcomp>¥   s
    ýýz<MailjetPayload._finish_recipients_single.<locals>.<listcomp>ú, N)rO   rF   ÚNotImplementedErrorr5   rr   ÚjoinÚ
capitalize)r   Úrecipient_typeÚemailsÚformatted_emailsr   r   r   rS   œ   s   ü÷z(MailjetPayload._finish_recipients_singlec                 C   s
   i | _ d S r   ©rO   rJ   r   r   r   Úinit_payload­   s   
zMailjetPayload.init_payloadc                 C   s&   |j | jd< |jr|j| jd< d S d S )NrV   ÚFromName)r7   rO   rb   ©r   r<   r   r   r   rc   ±   s   ÿzMailjetPayload.set_from_emailc                 C   s"   |dv sJ ‚|r|| j |< d S d S )N)rj   rQ   rR   )r5   )r   r~   r   r   r   r   Úset_recipients¶   s   ÿzMailjetPayload.set_recipientsc                 C   ó   || j d< d S )NÚSubjectr�   )r   Úsubjectr   r   r   Úset_subject¼   ó   zMailjetPayload.set_subjectc                 C   sD   | j  di ¡}|rd dd„ |D ƒ¡|d< d S d|v r |d= d S d S )NrZ   rz   c                 S   s   g | ]}t |ƒ‘qS r   )r2   rx   r   r   r   ry   Â   s    z/MailjetPayload.set_reply_to.<locals>.<listcomp>zReply-To)rO   Ú
setdefaultr|   )r   r   rD   r   r   r   Úset_reply_to¿   s   
ÿzMailjetPayload.set_reply_toc                 C   s   | j  di ¡ |¡ d S )NrZ   )rO   r‹   Úupdate)r   rD   r   r   r   Úset_extra_headersÆ   s   z MailjetPayload.set_extra_headersc                 C   r†   )Nz	Text-partr�   ©r   Úbodyr   r   r   Úset_text_bodyÉ   rŠ   zMailjetPayload.set_text_bodyc                 C   s"   d| j v r
|  d¡ || j d< d S )Nz	Html-partzmultiple html parts)rO   Úunsupported_featurer�   r   r   r   Úset_html_bodyÌ   s   

zMailjetPayload.set_html_bodyc                 C   sD   |j r	d}|j}nd}|jpd}| j |g ¡ |j||jdœ¡ d S )NÚInline_attachmentsÚAttachmentsÚ )zContent-typeÚFilenamer(   )ÚinlineÚcidÚnamerO   r‹   rs   ÚmimetypeÚ
b64content)r   Ú
attachmentÚfieldrš   r   r   r   Úadd_attachmentÓ   s   
ýzMailjetPayload.add_attachmentc                 C   s   |j | jd< d S )NÚSender)r7   rO   r„   r   r   r   Úset_envelope_senderà   ó   z"MailjetPayload.set_envelope_senderc                 C   s   |   |¡| jd< d S )NzMj-EventPayLoad)rN   rO   )r   Úmetadatar   r   r   Úset_metadataã   s   zMailjetPayload.set_metadatac                 C   sN   t |ƒdkr#|d | jd< |d | jd< t |ƒdkr%|  d| ¡ d S d S d S )NrY   ÚTagzMj-campaignr   zmultiple tags (%r))ÚlenrO   r’   )r   Útagsr   r   r   Úset_tagsç   s   üzMailjetPayload.set_tagsc                 C   ó   |rdnd| j d< d S )Nr   r   zMj-trackclickr�   )r   Útrack_clicksr   r   r   Úset_track_clicksñ   ó   zMailjetPayload.set_track_clicksc                 C   r©   )Nr   r   zMj-trackopenr�   )r   Útrack_opensr   r   r   Úset_track_opensõ   r¬   zMailjetPayload.set_track_opensc                 C   s   || j d< d| j d< d S )NrU   TzMj-TemplateLanguager�   )r   rd   r   r   r   Úset_template_idù   s   
zMailjetPayload.set_template_idc                 C   s
   || _ d S r   )rF   )r   rF   r   r   r   Úset_merge_dataý   s   
zMailjetPayload.set_merge_datac                 C   r†   )Nrl   r�   )r   Úmerge_global_datar   r   r   Úset_merge_global_data  rŠ   z$MailjetPayload.set_merge_global_datac                 C   s   | j  |¡ d S r   )rO   r�   )r   Úextrar   r   r   Úset_esp_extra  r¢   zMailjetPayload.set_esp_extra)r>   r?   r@   r   rK   rP   rL   rM   rT   rS   r‚   rc   r…   r‰   rŒ   rŽ   r‘   r“   rŸ   r¡   r¤   r¨   r«   r®   r¯   r°   r²   r´   rB   r   r   r   r   r   J   s4    		
r   N)Ú
exceptionsr   r   r   r   Úutilsr   r   r   Úbase_requestsr	   r
   r   r   r   r   r   r   Ú<module>   s    B