Skip to content

Commit 88741ef

Browse files
Skip asset download in CDN mode (GH-22)
Co-authored-by: Maik Sprenger <[email protected]>
2 parents 8fed55d + 76bc82b commit 88741ef

File tree

6 files changed

+61
-21
lines changed

6 files changed

+61
-21
lines changed

setup.cfg

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ classifiers =
3232
Framework :: Django :: 4.0
3333
Framework :: Django :: 4.1
3434
Framework :: Django :: 4.2
35+
Framework :: Django :: 5.0
36+
Framework :: Django :: 5.1
37+
Framework :: Django :: 5.2
3538
Programming Language :: Python
3639
Programming Language :: Python :: 3
3740
Programming Language :: Python :: 3.6
@@ -40,6 +43,7 @@ classifiers =
4043
Programming Language :: Python :: 3.9
4144
Programming Language :: Python :: 3.10
4245
Programming Language :: Python :: 3.11
46+
Programming Language :: Python :: 3.12
4347
License :: OSI Approved :: MIT License
4448

4549
[options]

src/django_mermaid/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "0.0.9"
1+
__version__ = "0.1.0"

src/django_mermaid/apps.py

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,24 @@
77
from .templatetags import DEFAULT_VERSION
88
from .templatetags import MERMAID_CDN
99

10+
def download_if_necessary(version):
11+
"""Download mermaid.js from CDN if not already present"""
12+
cdn = "https://cdnjs.cloudflare.com/ajax/libs/mermaid/%s/mermaid.min.js" % version
13+
current_dir = pathlib.Path(__file__).parent
14+
static_dir = current_dir / "static"
15+
mermaid_dir = static_dir / "mermaid" / version
16+
mermaid_js = mermaid_dir / "mermaid.js"
17+
if not mermaid_js.exists() or \
18+
mermaid_js.stat().st_size == 0:
19+
mermaid_dir.mkdir(parents=True, exist_ok=True)
20+
urlretrieve(MERMAID_CDN % version, str(mermaid_js))
21+
1022

1123
class MermaidConfig(AppConfig):
1224
name = "django_mermaid"
1325

1426
def ready(self):
15-
"""Download mermaid.js from CDN if not already present"""
16-
version = getattr(settings, "MERMAID_VERSION", DEFAULT_VERSION)
17-
current_dir = pathlib.Path(__file__).parent
18-
static_dir = current_dir / "static"
19-
mermaid_dir = static_dir / "mermaid" / version
20-
mermaid_js = mermaid_dir / "mermaid.js"
21-
if not mermaid_js.exists() or \
22-
mermaid_js.stat().st_size == 0:
23-
mermaid_dir.mkdir(parents=True, exist_ok=True)
24-
urlretrieve(MERMAID_CDN % version, str(mermaid_js))
27+
if not getattr(settings, "MERMAID_USE_CDN", False):
28+
version = getattr(settings, "MERMAID_VERSION", DEFAULT_VERSION)
29+
download_if_necessary(version)
30+

src/django_mermaid/templatetags/mermaid.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def startmermaid(parser, token):
5555
else:
5656
theme = None
5757

58-
nodelist = parser.parse(('endmermaid',))
58+
nodelist = parser.parse(("endmermaid",))
5959
parser.delete_first_token()
6060

6161
return MermaidNode(nodelist, theme)

tests/test_package.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from os.path import exists, join
2+
from unittest.mock import patch
3+
4+
from django.apps import apps
5+
from django.test import override_settings
6+
7+
try:
8+
import site
9+
10+
site_packages = site.getsitepackages()[0]
11+
except (ImportError, IndexError):
12+
import sysconfig
13+
14+
site_packages = sysconfig.get_paths()["purelib"]
15+
16+
17+
@override_settings(MERMAID_USE_CDN=False)
18+
@patch("django_mermaid.apps.download_if_necessary")
19+
def test_download_called_when_use_cdn_false(mock_download):
20+
# Re-run the AppConfig.ready() method manually
21+
app_config = apps.get_app_config("django_mermaid")
22+
app_config.ready()
23+
24+
mock_download.assert_called_once()
25+
26+
27+
@override_settings(MERMAID_USE_CDN=True)
28+
@patch("django_mermaid.apps.download_if_necessary")
29+
def test_download_not_called_when_use_cdn_true(mock_download):
30+
app_config = apps.get_app_config("django_mermaid")
31+
app_config.ready()
32+
33+
mock_download.assert_not_called()
34+
35+
36+
def test_tag_use_custom_version():
37+
static_dir = join(site_packages, "django_mermaid", "static")
38+
assert exists(join(static_dir, "mermaid", "8.6.3", "mermaid.js"))
39+
assert exists(join(static_dir, "mermaid", "9.4.3", "mermaid.js"))

tests/test_tag.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
from os.path import exists
2-
from os.path import join
3-
41
import pytest
52
from django.conf import settings
63
from django.template import Context
@@ -123,9 +120,3 @@ def test_tag_use_custom_theme_variables_with_base_theme(version, template_code):
123120
"<script>mermaid.initialize({\"startOnLoad\": true, \"theme\": \"base\", \"themeVariables\": "
124121
"{\"primaryColor\": \"#efefef\"}});</script>" % version
125122
)
126-
127-
128-
def test_tag_use_custom_version():
129-
static_dir = join(site_packages, "django_mermaid", "static")
130-
assert exists(join(static_dir, "mermaid", "8.6.3", "mermaid.js"))
131-
assert exists(join(static_dir, "mermaid", "9.4.3", "mermaid.js"))

0 commit comments

Comments
 (0)