# HG changeset patch # User Sylvain Thénault # Date 1246459477 -7200 # Node ID d9b85a7b0bdddce517268ec4fb018c3122db5381 # Parent 64aace08ae2fe1a58a673f440ba2dfc3472d7f69 create sendmails method on cwconfig, use it in SendMailOp diff -r 64aace08ae2f -r d9b85a7b0bdd cwconfig.py --- a/cwconfig.py Wed Jul 01 16:41:30 2009 +0200 +++ b/cwconfig.py Wed Jul 01 16:44:37 2009 +0200 @@ -17,6 +17,8 @@ import sys import os import logging +from smtplib import SMTP +from threading import Lock from os.path import exists, join, expanduser, abspath, normpath, basename, isdir from logilab.common.decorators import cached @@ -29,6 +31,8 @@ CONFIGURATIONS = [] +SMTP_LOCK = Lock() + class metaconfiguration(type): """metaclass to automaticaly register configuration""" @@ -827,6 +831,28 @@ sourcedirs.append(self.i18n_lib_dir()) return i18n.compile_i18n_catalogs(sourcedirs, i18ndir, langs) + def sendmails(self, msgs): + """msgs: list of 2-uple (message object, recipients)""" + server, port = self['smtp-host'], self['smtp-port'] + SMTP_LOCK.acquire() + try: + try: + smtp = SMTP(server, port) + except Exception, ex: + self.exception("can't connect to smtp server %s:%s (%s)", + server, port, ex) + return + heloaddr = '%s <%s>' % (self['sender-name'], self['sender-addr']) + for msg, recipients in msgs: + try: + smtp.sendmail(heloaddr, recipients, msg.as_string()) + except Exception, ex: + self.exception("error sending mail to %s (%s)", + recipients, ex) + smtp.close() + finally: + SMTP_LOCK.release() + set_log_methods(CubicWebConfiguration, logging.getLogger('cubicweb.configuration')) # alias to get a configuration instance from an application id diff -r 64aace08ae2f -r d9b85a7b0bdd devtools/apptest.py --- a/devtools/apptest.py Wed Jul 01 16:41:30 2009 +0200 +++ b/devtools/apptest.py Wed Jul 01 16:44:37 2009 +0200 @@ -46,8 +46,8 @@ def sendmail(self, helo_addr, recipients, msg): MAILBOX.append(Email(recipients, msg)) -from cubicweb.server import hookhelper -hookhelper.SMTP = MockSMTP +from cubicweb import cwconfig +cwconfig.SMTP = MockSMTP def get_versions(self, checkversions=False): diff -r 64aace08ae2f -r d9b85a7b0bdd server/hookhelper.py --- a/server/hookhelper.py Wed Jul 01 16:41:30 2009 +0200 +++ b/server/hookhelper.py Wed Jul 01 16:44:37 2009 +0200 @@ -7,9 +7,6 @@ """ __docformat__ = "restructuredtext en" -from smtplib import SMTP -from threading import Lock - from cubicweb import RepositoryError from cubicweb.server.pool import SingleLastOperation @@ -47,8 +44,6 @@ # mail related ################################################################ -SMTP_LOCK = Lock() - class SendMailOp(SingleLastOperation): def __init__(self, session, msg=None, recipients=None, **kwargs): # may not specify msg yet, as @@ -70,26 +65,7 @@ self.repo.threaded_task(self.sendmails) def sendmails(self): - server, port = self.config['smtp-host'], self.config['smtp-port'] - SMTP_LOCK.acquire() - try: - try: - smtp = SMTP(server, port) - except Exception, ex: - self.exception("can't connect to smtp server %s:%s (%s)", - server, port, ex) - return - heloaddr = '%s <%s>' % (self.config['sender-name'], - self.config['sender-addr']) - for msg, recipients in self.to_send: - try: - smtp.sendmail(heloaddr, recipients, msg.as_string()) - except Exception, ex: - self.exception("error sending mail to %s (%s)", - recipients, ex) - smtp.close() - finally: - SMTP_LOCK.release() + self.config.sendmails(self.to_send) # state related ###############################################################