Найти - Пользователи
Полная версия: django+AOP
Начало » Python для экспертов » django+AOP
1
Evg
вообщем использую django и AOP библиотеку http://www.cs.tut.fi/~ask/aspects/doc.shtml

Делаю пеерхват отправки емайлов:

mail_aspects.py: - этот файл лежит в корне моего джанго проекта

import aspects
from django.core.mail import send_mail

def on_send_mail(*args, **kwargs):
retval = yield aspects.proceed
... do something
yield aspects.return_stop(retval)

def init():
aspects.with_wrap(on_send_mail, send_mail )

init()
далее в самом начале файла settings.py
подключаю импорт для привязки AOP
import mail_aspects

Но сталкиваюсь с такой проблемой что для некоторых вызовов send_mai происходит несколько вызовов моего метода on_send_mail, мне кажется это из-за того что я в неверном месте (settings.py ) делаю импорт для привязки aop и из-за этого происходит привязка несколько раз.. В итоге мне пришлось перенести импорт из settings.py в каждый файл в котором производится вызов функции send_mail и повторные вызовы вроде как пропали, но не нравится что приходится делать это для каждого файла в котором идет вызов - хотелось бы делать привязку в одном месте.

Подскажите где правильно делать такую привязку (import mail_aspects) и почему если делать внутри settings.py то могут быть возовы по несколько раз?
slav0nic
я обычно в __init__.py пихаю

зачем тебе АОП в джанге?)
Evg
ну как зачем отловить все вызовы send_mail в одном месте например) есть альтернатива?)

slav0nic
я обычно в __init__.py пихаю
что то у меня эффект такой же как от в settings поместить, те повторные вызовы идут.
slav0nic
ну сеттинг не один раз читается, пытайся проверить зарегистрировано ли уже событие или нет
wrap_is_enabled чтоли /me не знаток AOP

по поводу альтернатив:
как человек мало интересующийся “философией AOP” :], я б наверно заманкипатчил send_mail и добавил бы свой сигнал http://docs.djangoproject.com/en/dev/topics/signals/#defining-and-sending-signals
например после этой строки http://code.djangoproject.com/browser/django/trunk/django/core/mail.py#L173 , правда это б реагировало и на всякие mail_admins и тп
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB