o
    ›¨ÊhÛ1  ã                   @   sž   d dl Z d dlmZ ddlmZ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eƒZdd„ ZG dd„ deƒZe ¡  dS )é    N)Údatetimeé   )ÚAnymailRequestsAPIErrorÚAnymailWarning)ÚAnymailRecipientStatusÚANYMAIL_STATUSES)ÚlastÚcombineÚget_anymail_settingé   )ÚAnymailRequestsBackendÚRequestsPayloadc                       s4   e Zd ZdZdZ‡ fdd„Zdd„ Zdd„ Z‡  ZS )	ÚEmailBackendz$
    Mandrill API Email Backend
    ÚMandrillc                    sV   | j }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Úapi_urlzhttps://mandrillapp.com/api/1.0)r   r   Údefaultú/N)r   r
   r   ÚendswithÚsuperr   Ú__init__)Úselfr   r   r   ©Ú	__class__© úK/var/www/html/env/lib/python3.10/site-packages/anymail/backends/mandrill.pyr      s   ÿ
zEmailBackend.__init__c                 C   s   t ||| ƒS ©N)ÚMandrillPayload)r   ÚmessageÚdefaultsr   r   r   Úbuild_message_payload   s   z"EmailBackend.build_message_payloadc           
   
   C   s€   |   |||¡}i }z$|D ]}|d }|d }|tvrd}| dd ¡}	t|	|d�||< qW |S  ttfy?   td|||| d�‚w )NÚemailÚstatusÚunknownÚ_id)Ú
message_idr%   z$Invalid Mandrill API response format)Úemail_messageÚpayloadÚresponseÚbackend)Údeserialize_json_responser   Úgetr   ÚKeyErrorÚ	TypeErrorr   )
r   r+   r*   r!   Úparsed_responseÚrecipient_statusÚitemr$   r%   r(   r   r   r   Úparse_recipient_status   s$   úüþÿz#EmailBackend.parse_recipient_status)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r#   r4   Ú__classcell__r   r   r   r   r      s    
r   c                   @   s   e Zd ZdZdS )ÚDjrillDeprecationWarningzGWarning for features carried over from Djrill that will be removed soonN)r5   r6   r7   r8   r   r   r   r   r:   2   s    r:   c                 C   sD   t | tƒr | jdd�} |  ¡ dur| |  ¡  jdd�} |  d¡S | S )znFormat a datetime for use as a Mandrill API date field

    Mandrill expects "YYYY-MM-DD HH:MM:SS" in UTC
    r   )ÚmicrosecondN)Útzinfoú )Ú
isinstancer   ÚreplaceÚ	utcoffsetÚ	isoformat)Údtr   r   r   Úencode_date_for_mandrill6   s   

rC   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_d0d1„Zd`d3d4„Zd5ed/fd6ed/fd7ed/fd8ed/fd9ed/fd:ed/fd;ed/fd<ed/fd=ed/fd>ed/fd?ed/fd@ed/fdAed/fdBed/fdCed/fdDed/fdEed/fdFed/fdGed/fdHed/fdIed/fdJed/ffZdKdL„ ZdMdN„ Z dOdP„ Z!dQdR„ Z"dSdT„ Z#dUdV„ Z$dWdX„ Z%dYdZ„ Z&e'd[d\„ ƒZ(e)d]d^„ ƒZ*‡  Z+S )ar    c                    s    i | _ tt| ƒj|i |¤Ž d S r   )Ú	esp_extrar   r    r   )r   Úargsr   r   r   r   r   F   s   zMandrillPayload.__init__c                 C   s   d| j v rdS dS )NÚtemplate_namezmessages/send-template.jsonzmessages/send.json©Údata©r   r   r   r   Úget_api_endpointJ   s   
z MandrillPayload.get_api_endpointc                 C   s   |   ¡  |  | j¡S r   )Úprocess_esp_extraÚserialize_jsonrH   rI   r   r   r   Úserialize_dataP   s   zMandrillPayload.serialize_datac                 C   s   | j ji dœ| _d S )N)Úkeyr!   )r,   r   rH   rI   r   r   r   Úinit_payloadX   s   þzMandrillPayload.init_payloadc                 C   sL   t | jddƒr|  dd¡ d S |j| jd d< |jr$|j| jd d< d S d S )NÚuse_template_fromFzmessage.use_template_fromzmessage.from_email = Noner!   Ú
from_emailÚ	from_name)Úgetattrr!   Údeprecation_warningÚ	addr_specrH   Údisplay_name©r   r$   r   r   r   Úset_from_email^   s   ÿzMandrillPayload.set_from_emailc                 C   s8   |dv sJ ‚| j d  dg ¡}| |j|j|dœ¡ d S )N)ÚtoÚccÚbccr!   rY   )r$   ÚnameÚtype)rH   Ú
setdefaultÚappendrU   rV   )r   Úrecipient_typer$   Úto_listr   r   r   Úadd_recipientf   s   zMandrillPayload.add_recipientc                 C   s0   t | jddƒr|  dd¡ d S || jd d< d S )NÚuse_template_subjectFzmessage.use_template_subjectzmessage.subject = Noner!   Úsubject)rS   r!   rT   rH   )r   rd   r   r   r   Úset_subjectk   s   zMandrillPayload.set_subjectc                 C   s.   d  dd„ |D ƒ¡}|| jd  di ¡d< d S )Nz, c                 S   s   g | ]}t |ƒ‘qS r   )Ústr)Ú.0r$   r   r   r   Ú
<listcomp>r   s    z0MandrillPayload.set_reply_to.<locals>.<listcomp>r!   ÚheaderszReply-To)ÚjoinrH   r^   )r   ÚemailsÚreply_tor   r   r   Úset_reply_toq   s   zMandrillPayload.set_reply_toc                 C   s   | j d  di ¡ |¡ d S )Nr!   ri   )rH   r^   Úupdate)r   ri   r   r   r   Úset_extra_headersu   s   z!MandrillPayload.set_extra_headersc                 C   ó   || j d d< d S )Nr!   ÚtextrG   ©r   Úbodyr   r   r   Úset_text_bodyx   ó   zMandrillPayload.set_text_bodyc                 C   s*   d| j d v r|  d¡ || j d d< d S )NÚhtmlr!   zmultiple html parts)rH   Úunsupported_featurerr   r   r   r   Úset_html_body{   s   
zMandrillPayload.set_html_bodyc                 C   sH   |j r	d}|j}nd}|jpd}| jd  |g ¡ |j||jdœ¡ d S )NÚimagesÚattachmentsÚ r!   )r]   r\   Úcontent)ÚinlineÚcidr\   rH   r^   r_   ÚmimetypeÚ
b64content)r   Ú
attachmentÚfieldr\   r   r   r   Úadd_attachment�   s   
ýzMandrillPayload.add_attachmentc                 C   s   |j | jd d< d S )Nr!   Úreturn_path_domain)ÚdomainrH   rW   r   r   r   Úset_envelope_senderŽ   s   z#MandrillPayload.set_envelope_senderc                 C   rp   )Nr!   ÚmetadatarG   )r   r‡   r   r   r   Úset_metadata’   ru   zMandrillPayload.set_metadatac                 C   s   t |ƒ| jd< d S )NÚsend_at)rC   rH   )r   r‰   r   r   r   Úset_send_at•   ru   zMandrillPayload.set_send_atc                 C   rp   )Nr!   ÚtagsrG   )r   r‹   r   r   r   Úset_tags˜   ru   zMandrillPayload.set_tagsc                 C   rp   )Nr!   Útrack_clicksrG   )r   r�   r   r   r   Úset_track_clicks›   ru   z MandrillPayload.set_track_clicksc                 C   rp   )Nr!   Útrack_opensrG   )r   r�   r   r   r   Úset_track_opensž   ru   zMandrillPayload.set_track_opensc                 C   s   || j d< | j  dg ¡ d S )NrF   Útemplate_content)rH   r^   )r   Útemplate_idr   r   r   Úset_template_id¡   s   
zMandrillPayload.set_template_idc                 C   s.   d| j d d< dd„ | ¡ D ƒ| j d d< d S )NFr!   Úpreserve_recipientsc                    s0   g | ]\}‰ |‡ fd d„t ˆ  ¡ ƒD ƒdœ‘qS )c                    ó   g | ]	}|ˆ | d œ‘qS ©)r\   r|   r   )rg   rN   ©Ú	rcpt_datar   r   rh   ¨   s    ÿz=MandrillPayload.set_merge_data.<locals>.<listcomp>.<listcomp>)ÚrcptÚvars)ÚsortedÚkeys©rg   r™   r   r—   r   rh   §   s    þ
ÿÿz2MandrillPayload.set_merge_data.<locals>.<listcomp>Ú
merge_vars)rH   Úitems)r   Ú
merge_datar   r   r   Úset_merge_data¥   s   ýzMandrillPayload.set_merge_datac                 C   s    dd„ |  ¡ D ƒ| jd d< d S )Nc                 S   ó   g | ]	\}}||d œ‘qS r–   r   ©rg   ÚvarÚvaluer   r   r   rh   ®   ó    ÿÿz9MandrillPayload.set_merge_global_data.<locals>.<listcomp>r!   Úglobal_merge_vars)rŸ   rH   )r   Úmerge_global_datar   r   r   Úset_merge_global_data­   s   þz%MandrillPayload.set_merge_global_datac                 C   s
   || _ d S r   )rD   )r   Úextrar   r   r   Úset_esp_extra³   s   
zMandrillPayload.set_esp_extrac                    s8  | j d ur˜t| j ƒdkrš| j }z|d }W n	 ty   Y nw t|dƒr9|| j u r.| j  ¡ }dd„ | ¡ D ƒ|d< z|d d ‰ W n	 tyJ   Y n)w tˆ dƒrs|d | j d u rb| j d  ¡ |d< ‡ fd	d„tˆ  ¡ ƒD ƒ|d d< | j 	d
d„ | ¡ D ƒ¡ z| jd  	|d ¡ W d S  ty—   Y d S w d S d S )Nr   r‘   rŸ   c                 S   r¢   r–   r   r£   r   r   r   rh   Ã   r¦   z5MandrillPayload.process_esp_extra.<locals>.<listcomp>r!   Úrecipient_metadatarœ   c                    r•   ))r™   Úvaluesr   r�   ©r¬   r   r   rh   Ð   s    ÿÿc                 S   s   i | ]\}}|d kr||“qS )r!   r   )rg   ÚkÚvr   r   r   Ú
<dictcomp>Ô   s    z5MandrillPayload.process_esp_extra.<locals>.<dictcomp>)
rD   Úlenr/   ÚhasattrÚcopyrŸ   r›   rœ   rH   rn   )r   rD   r‘   r   r®   r   rK   ·   s>   ÿ



þÿ


þÿáz!MandrillPayload.process_esp_extraNc                 C   s(   d| }|r|d| 7 }t  |t¡ d S )Nz=Djrill's `%s` will be removed in an upcoming Anymail release.z Use `%s` instead.)ÚwarningsÚwarnr:   )r   ÚfeatureÚreplacementÚmsgr   r   r   rT   Ü   s   z#MandrillPayload.deprecation_warningFc                 C   s.   d| }|rd| }nd| }|   ||¡ d S )Nz
message.%sz0message.esp_extra = {'message': {'%s': <value>}}z#message.esp_extra = {'%s': <value>})rT   )r   ÚattrÚin_message_dictr·   r¸   r   r   r   Údeprecated_to_esp_extraâ   s
   
z'MandrillPayload.deprecated_to_esp_extraÚasyncÚip_poolrR   Ú	importantÚ	auto_textÚ	auto_htmlÚ
inline_cssÚurl_strip_qsÚtracking_domainÚsigning_domainr„   Úmerge_languager”   Úview_content_linkÚ
subaccountÚgoogle_analytics_domainsÚgoogle_analytics_campaignr§   rž   r¬   rF   r‘   c                 C   ó   |   d¡ || jd< d S )Nr½   ©r¼   rD   )r   Úis_asyncr   r   r   Ú	set_async  ó   
zMandrillPayload.set_asyncc                 C   rË   )Nr¾   rÌ   )r   r¾   r   r   r   Úset_ip_pool  rÏ   zMandrillPayload.set_ip_poolc                 C   ó   |   dd¡ |  |¡ d S )Nzmessage.global_merge_varszmessage.merge_global_data)rT   r©   )r   r§   r   r   r   Úset_global_merge_vars  ó   z%MandrillPayload.set_global_merge_varsc                 C   rÑ   )Nzmessage.merge_varszmessage.merge_data)rT   r¡   )r   rž   r   r   r   Úset_merge_vars  rÓ   zMandrillPayload.set_merge_varsc                 C   s"   |   dd¡ || j di ¡d< d S )Nzmessage.return_path_domainzmessage.envelope_senderr!   r„   )rT   rD   r^   )r   r…   r   r   r   Úset_return_path_domain  s   z&MandrillPayload.set_return_path_domainc                 C   rÑ   )Nzmessage.template_namezmessage.template_id)rT   r“   )r   rF   r   r   r   Úset_template_name  rÓ   z!MandrillPayload.set_template_namec                 C   rË   )Nr‘   rÌ   )r   r‘   r   r   r   Úset_template_content  rÏ   z$MandrillPayload.set_template_contentc                 C   s$   | j ddd� || j di ¡d< d S )Nr¬   T©r»   r!   ©r¼   rD   r^   )r   r¬   r   r   r   Úset_recipient_metadata  ó   z&MandrillPayload.set_recipient_metadatac              	   C   sV   | j D ]%\}}}d| }zt| |ƒ W q ty(   |  ||¡}t| ||ƒ Y qw d S )Nzset_%s)Úesp_message_attrsrS   ÚAttributeErrorÚmake_setterÚsetattr)Úclsrº   Ú_Úsetter_nameÚsetterr   r   r   Údefine_message_attr_setters&  s   þüz+MandrillPayload.define_message_attr_settersc                    s   ‡ fdd„}||_ |S )Nc                    s$   | j ˆ dd� || j di ¡ˆ < d S )NTrØ   r!   rÙ   )r   r¥   ©rº   r   r   rã   3  rÛ   z+MandrillPayload.make_setter.<locals>.setter)r5   )rº   râ   rã   r   rå   r   rÞ   0  s   zMandrillPayload.make_setterr   )F),r5   r6   r7   r   rJ   rM   rO   rX   rb   re   rm   ro   rt   rx   rƒ   r†   rˆ   rŠ   rŒ   rŽ   r�   r“   r¡   r©   r«   rK   rT   r¼   r   r	   rÜ   rÎ   rÐ   rÒ   rÔ   rÕ   rÖ   r×   rÚ   Úclassmethodrä   ÚstaticmethodrÞ   r9   r   r   r   r   r    D   sz    
%
	ê
	r    )rµ   r   Ú
exceptionsr   r   r!   r   r   Úutilsr   r	   r
   Úbase_requestsr   r   r   ÚDeprecationWarningr:   rC   r    rä   r   r   r   r   Ú<module>   s    ' w