我正在构建一个我试图保持可插拔的应用程序。唯一的问题是我需要稍微修改django-mailer
,以便我的应用可以跟踪已发送/未发送的电子邮件,并可以访问电子邮件内容。
确保这与使用django-mailer
的其他人或我决定为我自己的应用程序分叉/调整的任何其他python库不冲突的最佳方法是什么?
我应该在我的分叉中重命名邮件以及所有相关的导入吗?我错过了更容易的东西吗?
答案 0 :(得分:0)
您可以使用功能解决它。创建一个完成这两件事的函数:
或者你可以做一些更重的管道。确保记录良好,并尝试让其他人不在家里尝试这个无用的目的,而是联系Django或Django-mailer团队,询问他们是否可以安排更好的解决方案。
从django.core.mail模块中装饰EmailMessage类:确保在成功发送消息时,您所需的信息也会在其他地方传递。
# wrappedmailer.py
from django.core.mail import EmailMessage
class WrappedEmailMessage(object):
def __init__(self, message):
self.__message = message
# more initialization
# override all EmailMessage methods:
# do what you want with what is provided,
# then return self.__message.method(...)
然后,当您的应用程序初始化时,在加载django-mailer之前,您可以执行以下操作:
import django.core.mail
import newmailer
django.core.mail.EmailMessage = newmailer.WrappedEmailMessage
django.core.mail模块保留在同一个Python进程的缓存中,因此无论何时导入django.core.mail,EmailMessage类实际上都是WrappedEmailMessage类。