script updated

This commit is contained in:
Sergey Lavrinenko 2015-03-07 02:05:41 +03:00
parent 7cfd7321ba
commit 6ccade1d88
4 changed files with 43 additions and 25 deletions

View File

@ -22,10 +22,18 @@ class InvalidHtmlFile(LoadError):
pass pass
def from_html(html, source_filename=None, base_url=None, message_params=None, local_loader=None, **kwargs): def from_html(html, text=None, base_url=None, message_params=None, local_loader=None,
template_cls=None, message_cls=None, source_filename=None, requests_params=None,
**kwargs):
if template_cls:
html = template_cls(html)
if template_cls and text:
text = template_cls(text)
message_params = message_params or {} message_params = message_params or {}
message = Message(html=html, **message_params) message = (message_cls or Message)(html=html, text=text, **message_params)
message.create_transformer(requests_params=kwargs.pop('requests_params', None), message.create_transformer(requests_params=requests_params,
base_url=base_url, base_url=base_url,
local_loader=local_loader) local_loader=local_loader)
if message.transformer.tree is None: if message.transformer.tree is None:

View File

@ -289,7 +289,6 @@ class MsgLoader(BaseLoader):
self._parsed = True self._parsed = True
def get_file(self, name): def get_file(self, name):
#print("MsgLoader.get_file", name)
self.parse() self.parse()
if name.startswith('cid:'): if name.startswith('cid:'):
name = self._content_ids.get(name[4:]) name = self._content_ids.get(name[4:])

View File

@ -17,7 +17,6 @@ from .backend.smtp import SMTPBackend
from .store import MemoryFileStore, BaseFile from .store import MemoryFileStore, BaseFile
from .signers import DKIMSigner from .signers import DKIMSigner
load_email_charsets() # sic! load_email_charsets() # sic!
@ -352,25 +351,23 @@ class MessageSendMixin(object):
class MessageTransformerMixin(object): class MessageTransformerMixin(object):
transformer_cls = None transformer_cls = None
_transformer = None
def create_transformer(self, **kw): def create_transformer(self, transformer_cls=None, **kw):
cls = self.transformer_cls cls = transformer_cls or self.transformer_cls
if cls is None: if cls is None:
from emails.transformer import MessageTransformer from .transformer import MessageTransformer # avoid cyclic import
cls = MessageTransformer cls = MessageTransformer
self._transformer = cls(message=self, **kw) self._transformer = cls(message=self, **kw)
return self._transformer
def destroy_transformer(self): def destroy_transformer(self):
self._transformer = None self._transformer = None
@property @property
def transformer(self): def transformer(self):
t = getattr(self, '_transformer', None) if self._transformer is None:
if t is None: self.create_transformer()
t = self.create_transformer() return self._transformer
return t
def set_html(self, **kw): def set_html(self, **kw):
# When html set, remove old transformer # When html set, remove old transformer
@ -378,7 +375,6 @@ class MessageTransformerMixin(object):
BaseMessage.set_html(self, **kw) BaseMessage.set_html(self, **kw)
class MessageDKIMMixin(object): class MessageDKIMMixin(object):
dkim_cls = DKIMSigner dkim_cls = DKIMSigner

View File

@ -7,7 +7,9 @@ Simple utility that imports html from url ang print generated rfc822 message to
Example usage: Example usage:
$ python make_rfc822.py --url=http://lavr.github.io/python-emails/tests/campaignmonitor-samples/sample-template/template-widgets.html \ $ python make_rfc822.py \
--url=http://lavr.github.io/python-emails/tests/campaignmonitor-samples/sample-template/template-widgets.html \
--inline-images \
--subject="Some subject" \ --subject="Some subject" \
--from-name="Sergey Lavrinenko" \ --from-name="Sergey Lavrinenko" \
--from-email=s@lavr.me \ --from-email=s@lavr.me \
@ -25,7 +27,6 @@ Copyright 2013 Sergey Lavrinenko <s@lavr.me>
import sys import sys
import logging import logging
import json import json
import argparse import argparse
import emails import emails
@ -61,12 +62,24 @@ class MakeRFC822:
else: else:
message_id = None message_id = None
message_params = dict(headers=self._headers_from_command_line(), args = dict(images_inline=options.inline_images,
template_cls=T, message_params=dict(headers=self._headers_from_command_line(),
mail_from=(options.from_name, options.from_email), mail_from=(options.from_name, options.from_email),
subject=T(unicode(options.subject, 'utf-8')), subject=T(unicode(options.subject, 'utf-8')),
message_id=message_id) message_id=message_id),
message = emails.loader.from_url(url=options.url, images_inline=options.inline_images, message_params=message_params) template_cls=T)
if options.url:
message = emails.loader.from_url(url=options.url, **args)
elif options.from_directory:
message = emails.loader.from_directory(options.from_directory, **args)
elif options.from_file:
message = emails.loader.from_file(options.from_file, **args)
elif options.from_zipfile:
message = emails.loader.from_zip(options.from_zipfile, **args)
else:
logging.error('No message source specified.')
sys.exit(1)
return message return message
def _send_test_email(self, message): def _send_test_email(self, message):
@ -108,7 +121,6 @@ class MakeRFC822:
except ValueError: except ValueError:
# If it is not json, we expect one word with '@' sign # If it is not json, we expect one word with '@' sign
assert len(l.split()) == 1 assert len(l.split()) == 1
print l
login, domain = l.split('@') # ensure there is something email-like login, domain = l.split('@') # ensure there is something email-like
yield {'to': l} yield {'to': l}
@ -144,7 +156,10 @@ if __name__ == "__main__":
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description='Imports html from url ang generate rfc822 message.') description='Imports html from url ang generate rfc822 message.')
parser.add_argument("-u", "--url", metavar="URL", dest="url", action="store", default=None, required=True) parser.add_argument("-u", "--url", metavar="URL", dest="url", action="store", default=None)
parser.add_argument("--source-directory", dest="from_directory", action="store", default=None)
parser.add_argument("--source-file", dest="from_file", action="store", default=None)
parser.add_argument("--source-zipfile", dest="from_zipfile", action="store", default=None)
parser.add_argument("-f", "--from-email", metavar="EMAIL", dest="from_email", default=None, required=True) parser.add_argument("-f", "--from-email", metavar="EMAIL", dest="from_email", default=None, required=True)
parser.add_argument("-n", "--from-name", metavar="NAME", dest="from_name", default=None, required=True) parser.add_argument("-n", "--from-name", metavar="NAME", dest="from_name", default=None, required=True)