Skip to content

Commit

Permalink
feat: support python markdown < 3.6
Browse files Browse the repository at this point in the history
  • Loading branch information
agusmakmun committed Mar 30, 2024
1 parent 796ed98 commit 82f9dad
Show file tree
Hide file tree
Showing 9 changed files with 71 additions and 37 deletions.
10 changes: 3 additions & 7 deletions martor/extensions/del_ins.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#! /usr/bin/env python

"""
Del/Ins Extension for Python-Markdown
=====================================
Expand All @@ -26,23 +24,21 @@
See LICENSE.md for details.
"""


import markdown
from markdown.inlinepatterns import SimpleTagPattern


DEL_RE = r"(\~\~)(.+?)(\~\~)"
INS_RE = r"(\+\+)(.+?)(\+\+)"


class DelInsExtension(markdown.extensions.Extension):
"""Adds del_ins extension to Markdown class."""

def extendMarkdown(self, md, md_globals):
def extendMarkdown(self, md: markdown.core.Markdown, *args):
del_tag = SimpleTagPattern(DEL_RE, "del")
ins_tag = SimpleTagPattern(INS_RE, "ins")
md.inlinePatterns.add("del", del_tag, "<not_strong")
md.inlinePatterns.add("ins", ins_tag, "<not_strong")
md.inlinePatterns.register(del_tag, "del", 10)
md.inlinePatterns.register(ins_tag, "ins", 11)


def makeExtension(*args, **kwargs):
Expand Down
8 changes: 5 additions & 3 deletions martor/extensions/emoji.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from xml.etree import ElementTree

import markdown

from ..settings import MARTOR_MARKDOWN_BASE_EMOJI_URL as EMOJI_URL
Expand Down Expand Up @@ -666,17 +668,17 @@ def handleMatch(self, m):
return emoji

url = "{0}{1}.png".format(EMOJI_URL, emoji.replace(":", ""))
el = markdown.util.etree.Element("img")
el = ElementTree.Element("img")
el.set("src", url)
el.set("class", "marked-emoji")
el.text = markdown.util.AtomicString(emoji)
return el


class EmojiExtension(markdown.Extension):
def extendMarkdown(self, md, md_globals):
def extendMarkdown(self, md: markdown.core.Markdown, *args):
"""Setup `emoji_img` with EmojiPattern"""
md.inlinePatterns["emoji_img"] = EmojiPattern(EMOJI_RE, md)
md.inlinePatterns.register(EmojiPattern(EMOJI_RE, md), "emoji_img", 12)


def makeExtension(*args, **kwargs):
Expand Down
2 changes: 1 addition & 1 deletion martor/extensions/escape_html.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@


class EscapeHtml(markdown.Extension):
def extendMarkdown(self, md):
def extendMarkdown(self, md: markdown.core.Markdown, *args):
md.preprocessors.deregister("html_block")
md.inlinePatterns.deregister("html")

Expand Down
17 changes: 8 additions & 9 deletions martor/extensions/mdx_video.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
#!/usr/bin/env python
from xml.etree import ElementTree

import markdown
from markdown.util import etree


class VideoExtension(markdown.Extension):
Expand Down Expand Up @@ -29,13 +28,13 @@ def __init__(self, **kwargs):
for key, value in kwargs.items():
self.setConfig(key, str(value))

def add_inline(self, md, name, klass, re):
def add_inline(self, md: markdown.core.Markdown, name: str, klass: type, re: str):
pattern = klass(re)
pattern.md = md
pattern.ext = self
md.inlinePatterns.add(name, pattern, "<reference")
md.inlinePatterns.register(pattern, name, 15)

def extendMarkdown(self, md, md_globals):
def extendMarkdown(self, md, *args):
self.add_inline(
md,
"dailymotion",
Expand Down Expand Up @@ -131,7 +130,7 @@ def handleMatch(self, m):


def render_iframe(url, width, height):
iframe = etree.Element("iframe")
iframe = ElementTree.Element("iframe")
iframe.set("width", width)
iframe.set("height", height)
iframe.set("src", url)
Expand All @@ -141,16 +140,16 @@ def render_iframe(url, width, height):


def flash_object(url, width, height):
obj = etree.Element("object")
obj = ElementTree.Element("object")
obj.set("type", "application/x-shockwave-flash")
obj.set("width", width)
obj.set("height", height)
obj.set("data", url)
param = etree.Element("param")
param = ElementTree.Element("param")
param.set("name", "movie")
param.set("value", url)
obj.append(param)
param = etree.Element("param")
param = ElementTree.Element("param")
param.set("name", "allowFullScreen")
param.set("value", "true")
obj.append(param)
Expand Down
25 changes: 13 additions & 12 deletions martor/extensions/mention.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from xml.etree import ElementTree

import markdown
from django.contrib.auth import get_user_model

Expand Down Expand Up @@ -28,22 +30,21 @@ def handleMatch(self, m):
) # noqa: E501

"""Makesure `username` is registered and activated."""
if MARTOR_ENABLE_CONFIGS["mention"] == "true":
if users.exists():
url = "{0}{1}/".format(
MARTOR_MARKDOWN_BASE_MENTION_URL, username
) # noqa: E501
el = markdown.util.etree.Element("a")
el.set("href", url)
el.set("class", "direct-mention-link")
el.text = markdown.util.AtomicString("@" + username)
return el
if MARTOR_ENABLE_CONFIGS["mention"] == "true" and users.exists():
url = "{0}{1}/".format(
MARTOR_MARKDOWN_BASE_MENTION_URL, username
) # noqa: E501
el = ElementTree.Element("a")
el.set("href", url)
el.set("class", "direct-mention-link")
el.text = markdown.util.AtomicString("@" + username)
return el


class MentionExtension(markdown.Extension):
def extendMarkdown(self, md, md_globals):
def extendMarkdown(self, md: markdown.core.Markdown, *args):
"""Setup `mention_link` with MentionPattern"""
md.inlinePatterns["mention_link"] = MentionPattern(MENTION_RE, md)
md.inlinePatterns.register(MentionPattern(MENTION_RE, md), "mention_link", 13)


def makeExtension(*args, **kwargs):
Expand Down
10 changes: 6 additions & 4 deletions martor/extensions/urlize.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
"""

from xml.etree import ElementTree

import markdown

# Global Vars
Expand All @@ -61,13 +63,13 @@ def handleMatch(self, m):

text = url

if not url.split("://")[0] in ("http", "https", "ftp"):
if url.split("://")[0] not in ("http", "https", "ftp"):
if "@" in url and "/" not in url:
url = "mailto:" + url
else:
url = "http://" + url

el = markdown.util.etree.Element("a")
el = ElementTree.Element("a")
el.set("href", url)
el.text = markdown.util.AtomicString(text)
return el
Expand All @@ -76,9 +78,9 @@ def handleMatch(self, m):
class UrlizeExtension(markdown.Extension):
"""Urlize Extension for Python-Markdown."""

def extendMarkdown(self, md, md_globals):
def extendMarkdown(self, md: markdown.core.Markdown, *args):
"""Replace autolink with UrlizePattern"""
md.inlinePatterns["autolink"] = UrlizePattern(URLIZE_RE, md)
md.inlinePatterns.register(UrlizePattern(URLIZE_RE, md), "autolink", 14)


def makeExtension(*args, **kwargs):
Expand Down
5 changes: 5 additions & 0 deletions requirements-dev.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
-r requirements.txt

isort
black
flake8
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
urllib3<2 ; python_version < '3.7' # urllib3 2.0 dropped support for Python 3.6
zipp<3.7 ; python_version < '3.7' # zipp 3.7.0 dropped support for Python 3.6
Django>=3.2, <=5.0.3
Markdown<3.4
Markdown<3.6
requests
bleach
tzdata
29 changes: 29 additions & 0 deletions requirements2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
asgiref==3.8.1
black==24.3.0
bleach==6.1.0
certifi==2024.2.2
charset-normalizer==3.3.2
click==8.1.7
Django==4.2.11
flake8==7.0.0
idna==3.6
importlib_metadata==7.1.0
isort==5.13.2
Markdown==3.5.2
martor==1.6.42
mccabe==0.7.0
mypy-extensions==1.0.0
packaging==24.0
pathspec==0.12.1
platformdirs==4.2.0
pycodestyle==2.11.1
pyflakes==3.2.0
requests==2.31.0
six==1.16.0
sqlparse==0.4.4
tomli==2.0.1
typing_extensions==4.10.0
tzdata==2024.1
urllib3==2.2.1
webencodings==0.5.1
zipp==3.18.1

0 comments on commit 82f9dad

Please sign in to comment.