X-Git-Url: https://git.madduck.net/etc/neomutt.git/blobdiff_plain/e75c1b39e98e2f4b4062620ec8ea1e8eede23c65..34926144a6ff1605e0449d90eaccf80c4dfddfe7:/.config/neomutt/buildmimetree.py?ds=sidebyside diff --git a/.config/neomutt/buildmimetree.py b/.config/neomutt/buildmimetree.py index f10158f..a27f64c 100755 --- a/.config/neomutt/buildmimetree.py +++ b/.config/neomutt/buildmimetree.py @@ -11,7 +11,7 @@ # source '$my_confdir/buildmimetree.py \ # --tempdir $tempdir --extensions $my_mdwn_extensions \ # --css-file $my_confdir/htmlmail.css |'\ -# sourc e \$my_mdwn_postprocess_cmd_file\ +# source \$my_mdwn_postprocess_cmd_file\ # " "Convert message into a modern MIME tree with inline images" # # (Yes, we need to call source twice, as mutt only starts to process output @@ -34,8 +34,8 @@ # Latest version: # https://git.madduck.net/etc/neomutt.git/blob_plain/HEAD:/.config/neomutt/buildmimetree.py # -# Copyright © 2023 martin f. krafft -# Released under the GPL-2+ licence, just like Mutt itself. +# Copyright © 2023–24 martin f. krafft +# Released under the GPL-2+ licence, just like NeoMutt itself. # import sys @@ -50,6 +50,7 @@ import bs4 import xml.etree.ElementTree as etree import io import enum +import warnings from contextlib import contextmanager from collections import namedtuple, OrderedDict from markdown.extensions import Extension @@ -71,7 +72,7 @@ def parse_cli_args(*args, **kwargs): ) ) parser.epilog = ( - "Copyright © 2023 martin f. krafft .\n" + "Copyright © 2023-24 martin f. krafft .\n" "Released under the MIT licence" ) @@ -125,6 +126,11 @@ def parse_cli_args(*args, **kwargs): help="Only build, don't send the message", ) + parser.add_argument( + "--domain", + help="Domain to use in content IDs", + ) + parser.add_argument( "--tempdir", metavar="DIR", @@ -349,12 +355,12 @@ class ImageRegistry: def __init__(self): self._images = OrderedDict() - def register(self, path, description=None): + def register(self, path, description=None, *, domain=None): # path = str(pathlib.Path(path).expanduser()) path = os.path.expanduser(path) if path.startswith("/"): path = f"file://{path}" - cid = make_msgid()[1:-1] + cid = make_msgid(domain=domain)[1:-1] self._images[path] = InlineImageInfo(cid, description) return cid @@ -446,7 +452,10 @@ def markdown_with_inline_image_support( try: - import pynliner + with warnings.catch_warnings(): + # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1081037 + warnings.filterwarnings("ignore", category=SyntaxWarning) + import pynliner _PYNLINER = True @@ -700,6 +709,7 @@ def convert_markdown_to_html( tempdir=None, extensions=None, extension_configs=None, + domain=None, ): # TODO extension_configs need to be handled differently extension_configs = extension_configs or {} @@ -734,7 +744,7 @@ def convert_markdown_to_html( for img in soup.find_all("img"): uri = img.attrs["src"] desc = img.attrs.get("title", img.attrs.get("alt")) - cid = image_registry.register(uri, desc) + cid = image_registry.register(uri, desc, domain=domain) img.attrs["src"] = f"cid:{cid}" htmlsig = str(soup) @@ -964,6 +974,7 @@ def do_massage( only_build=False, max_other_attachments=20, tempdir=None, + domain=None, debug_commands=False, debug_walk=False, ): @@ -985,6 +996,7 @@ def do_massage( related_to_html_only=related_to_html_only, tempdir=tempdir, extensions=extensions, + domain=domain, ) mimetree = MIMETreeDFWalker(debug=debug_walk) @@ -1157,6 +1169,7 @@ if __name__ == "__main__": max_other_attachments=args.max_number_other_attachments, only_build=args.only_build, tempdir=args.tempdir, + domain=args.domain, debug_commands=args.debug_commands, debug_walk=args.debug_walk, ) @@ -1868,6 +1881,15 @@ try: assert not cid.endswith(">") assert const1 in reg + @pytest.mark.imgproc + def test_image_registry_domain(self, const1, const2): + reg = ImageRegistry() + cid = reg.register(const1, domain=const2) + assert f"@{const2}" in cid + assert not cid.startswith("<") + assert not cid.endswith(">") + assert const1 in reg + @pytest.mark.imgproc def test_image_registry_file_uri(self, const1): reg = ImageRegistry()