o
    ›¨Êhâ  ã                   @   st   d dl mZ ddlmZmZ ddlmZ ddlmZ ddl	m
Z
 G dd	„ d	eƒZG d
d„ deƒZG dd„ deƒZdS )é    )Úmailé   )ÚAnymailBaseBackendÚBasePayloadé   )ÚAnymailAPIError)ÚAnymailRecipientStatus)Úget_anymail_settingc                       sD   e Zd ZdZdZ‡ fdd„Zdd„ Zdd„ Zd	d
„ Zdd„ Z	‡  Z
S )ÚEmailBackendaQ  
    Anymail backend that simulates sending messages, useful for testing.

    Sent messages are collected in django.core.mail.outbox (as with Django's locmem backend).

    In addition:
    * Anymail send params parsed from the message will be attached to the outbox message
      as a dict in the attr `anymail_test_params`
    * If the caller supplies an `anymail_test_response` attr on the message, that will be
      used instead of the default "sent" response. It can be either an AnymailRecipientStatus
      or an instance of AnymailAPIError (or a subclass) to raise an exception.
    ÚTestc                    s.   t t| ƒj|i |¤Ž ttdƒsg t_d S d S )NÚoutbox)Úsuperr
   Ú__init__Úhasattrr   r   )ÚselfÚargsÚkwargs©Ú	__class__© úG/var/www/html/env/lib/python3.10/site-packages/anymail/backends/test.pyr      s   

ÿzEmailBackend.__init__c                 C   s   t j |¡S ©N)r   r   Úindex)r   Úmessager   r   r   Úget_esp_message_id   s   zEmailBackend.get_esp_message_idc                 C   s   t | ||d�S )N)Úbackendr   Údefaults)ÚTestPayload)r   r   r   r   r   r   Úbuild_message_payload#   ó   z"EmailBackend.build_message_payloadc                    sn   |j |_tj |¡ z|j}t|tƒr|‚W |S  ty6   t	|  
|¡dd�‰ d‡ fdd„|jD ƒi}Y |S w )NÚsent)Ú
message_idÚstatusÚrecipient_statusc                    s   i | ]}|ˆ “qS r   r   ©Ú.0Úemail©r"   r   r   Ú
<dictcomp>6   ó    z,EmailBackend.post_to_esp.<locals>.<dictcomp>)ÚparamsÚanymail_test_paramsr   r   ÚappendÚanymail_test_responseÚ
isinstancer   ÚAttributeErrorr   r   Úrecipient_emails)r   Úpayloadr   Úresponser   r'   r   Úpost_to_esp&   s"   
ÿ÷þÿ÷zEmailBackend.post_to_espc                 C   s"   z|d W S  t y   tdƒ‚w )Nr#   zUnparsable test response)ÚKeyErrorr   )r   r2   r1   r   r   r   r   Úparse_recipient_status:   s
   
ÿz#EmailBackend.parse_recipient_status)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úesp_namer   r   r   r3   r5   Ú__classcell__r   r   r   r   r
   	   s    r
   c                   @   s¼   e Z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-S ).r   c                 C   s   i | _ g | _d S r   ©r*   r0   )r   r   r   r   Úinit_payloadF   s   
zTestPayload.init_payloadc                 C   ó   || j d< d S )NÚfrom©r*   ©r   r&   r   r   r   Úset_from_emailJ   r   zTestPayload.set_from_emailc                 C   s   |j | jd< d S )NÚenvelope_sender)Ú	addr_specr*   rA   r   r   r   Úset_envelope_senderM   s   zTestPayload.set_envelope_senderc                 C   ó&   || j d< |  jdd„ |D ƒ7  _d S )NÚtoc                 S   ó   g | ]}|j ‘qS r   ©rD   r$   r   r   r   Ú
<listcomp>R   r)   z&TestPayload.set_to.<locals>.<listcomp>r<   ©r   Úemailsr   r   r   Úset_toP   ó   
zTestPayload.set_toc                 C   rF   )NÚccc                 S   rH   r   rI   r$   r   r   r   rJ   V   r)   z&TestPayload.set_cc.<locals>.<listcomp>r<   rK   r   r   r   Úset_ccT   rN   zTestPayload.set_ccc                 C   rF   )NÚbccc                 S   rH   r   rI   r$   r   r   r   rJ   Z   r)   z'TestPayload.set_bcc.<locals>.<listcomp>r<   rK   r   r   r   Úset_bccX   rN   zTestPayload.set_bccc                 C   r>   )NÚsubjectr@   )r   rS   r   r   r   Úset_subject\   r   zTestPayload.set_subjectc                 C   r>   )NÚreply_tor@   rK   r   r   r   Úset_reply_to_   r   zTestPayload.set_reply_toc                 C   r>   )NÚextra_headersr@   )r   Úheadersr   r   r   Úset_extra_headersb   r   zTestPayload.set_extra_headersc                 C   r>   )NÚ	text_bodyr@   ©r   Úbodyr   r   r   Úset_text_bodye   r   zTestPayload.set_text_bodyc                 C   r>   )NÚ	html_bodyr@   r[   r   r   r   Úset_html_bodyh   r   zTestPayload.set_html_bodyc                 C   s   |   d| ¡ d S )Nzalternative part with type '%s')Úunsupported_feature)r   ÚcontentÚmimetyper   r   r   Úadd_alternativek   s   zTestPayload.add_alternativec                 C   s   | j  dg ¡ |¡ d S )NÚattachments)r*   Ú
setdefaultr,   )r   Ú
attachmentr   r   r   Úadd_attachmentn   s   zTestPayload.add_attachmentc                 C   r>   )NÚmetadatar@   )r   rh   r   r   r   Úset_metadataq   r   zTestPayload.set_metadatac                 C   r>   )NÚsend_atr@   )r   rj   r   r   r   Úset_send_att   r   zTestPayload.set_send_atc                 C   r>   )NÚtagsr@   )r   rl   r   r   r   Úset_tagsw   r   zTestPayload.set_tagsc                 C   r>   )NÚtrack_clicksr@   )r   rn   r   r   r   Úset_track_clicksz   r   zTestPayload.set_track_clicksc                 C   r>   )NÚtrack_opensr@   )r   rp   r   r   r   Úset_track_opens}   r   zTestPayload.set_track_opensc                 C   r>   )NÚtemplate_idr@   )r   rr   r   r   r   Úset_template_id€   r   zTestPayload.set_template_idc                 C   r>   )NÚ
merge_datar@   )r   rt   r   r   r   Úset_merge_dataƒ   r   zTestPayload.set_merge_datac                 C   r>   )NÚmerge_global_datar@   )r   rv   r   r   r   Úset_merge_global_data†   r   z!TestPayload.set_merge_global_datac                 C   s   | j  |¡ d S r   )r*   Úupdate)r   Úextrar   r   r   Úset_esp_extra‰   s   zTestPayload.set_esp_extraN)r6   r7   r8   r=   rB   rE   rM   rP   rR   rT   rV   rY   r]   r_   rc   rg   ri   rk   rm   ro   rq   rs   ru   rw   rz   r   r   r   r   r   A   s.    r   c                       s    e Zd ZdZ‡ fdd„Z‡  ZS )Ú _EmailBackendWithRequiredSettingzzTest backend with a required setting `sample_setting`.

    Intended only for internal use by Anymail settings tests.
    c                    s2   | j }td||dd�| _tt| ƒj|i |¤Ž d S )NÚsample_settingT)r:   r   Ú
allow_bare)r:   r	   r|   r   r{   r   )r   r   r   r:   r   r   r   r   ”   s
   ÿz)_EmailBackendWithRequiredSetting.__init__)r6   r7   r8   r9   r   r;   r   r   r   r   r{   Ž   s    r{   N)Údjango.corer   Úbaser   r   Ú
exceptionsr   r   r   Úutilsr	   r
   r   r{   r   r   r   r   Ú<module>   s    8M