consider all images to attach as remote (#13450)
This commit is contained in:
parent
a501ee7c56
commit
b56be82b22
|
@ -33,12 +33,7 @@ logger = logging.getLogger(__name__)
|
|||
|
||||
|
||||
def transform_image_src(src, **kwargs):
|
||||
basename = os.path.basename(src)
|
||||
if basename == src:
|
||||
return src
|
||||
name, ext = os.path.splitext(src)
|
||||
hash = hashlib.sha256(name)
|
||||
return '%s_%s%s' % (os.path.basename(name), hash.hexdigest()[:8], ext)
|
||||
return urlparse.urljoin(settings.SITE_BASE_URL, src)
|
||||
|
||||
|
||||
class Category(models.Model):
|
||||
|
@ -184,17 +179,10 @@ class Broadcast(models.Model):
|
|||
html=template.render(
|
||||
Context({'content': self.announce.text,
|
||||
'unsubscribe_link_placeholder': UNSUBSCRIBE_LINK_PLACEHOLDER})))
|
||||
html_tree = etree.HTML(self.announce.text)
|
||||
storage = DefaultStorage()
|
||||
for img in html_tree.xpath('//img/@src'):
|
||||
img_path = img.replace(storage.base_url, '')
|
||||
message.attach(filename=transform_image_src(img), data=storage.open(img_path))
|
||||
|
||||
message.transformer.apply_to_images(func=transform_image_src)
|
||||
# perform transformations in message html, like inline css parsing
|
||||
message.transformer.load_and_transform()
|
||||
# mark all attached images as inline
|
||||
message.transformer.make_all_images_inline()
|
||||
message.transformer.apply_to_images(func=transform_image_src)
|
||||
message.transformer.load_and_transform(images_inline=True)
|
||||
message.transformer.save()
|
||||
for s in subscriptions:
|
||||
if not s.identifier:
|
||||
|
|
|
@ -11,7 +11,8 @@ from django.utils import timezone
|
|||
from django.core.files.storage import DefaultStorage
|
||||
from django.utils.text import slugify
|
||||
|
||||
from corbo.models import Category, Announce, Subscription, Broadcast, transform_image_src
|
||||
from corbo.models import Category, Announce, Subscription, Broadcast
|
||||
from corbo.models import channel_choices
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
|
@ -95,14 +96,17 @@ def test_check_inline_images(mocked_get, app, categories, announces, mailoutbox)
|
|||
Subscription.objects.create(category=announce.category,
|
||||
identifier='%s@example.net' % uuid, uuid=uuid)
|
||||
broadcast = Broadcast.objects.get(announce=announce)
|
||||
mocked_get.return_value = mock.Mock(status_code=200,
|
||||
headers={'content-type': 'image/png'},
|
||||
content=storage.open(image_name).read())
|
||||
broadcast.send()
|
||||
assert broadcast.result
|
||||
|
||||
assert len(mailoutbox) == total_sent + broadcast.result
|
||||
transformed_image_src = transform_image_src(img_src)
|
||||
assert transformed_image_src in mailoutbox[i].attachments.keys()
|
||||
assert 'cid:%s' % transformed_image_src in mailoutbox[i].html_body
|
||||
assert 'cid:%s' % transformed_image_src in mailoutbox[i].text_body
|
||||
attachments = [a['filename'] for a in mailoutbox[0].attachments.as_dict()]
|
||||
assert image_name in attachments
|
||||
assert 'cid:%s' % image_name in mail.outbox[0].html_body
|
||||
assert 'cid:%s' % image_name in mail.outbox[0].text_body
|
||||
total_sent += broadcast.result
|
||||
storage.delete(image_name)
|
||||
|
||||
|
|
Reference in New Issue