Skip to content

Commit efb0f05

Browse files
update assets templatetag to use correct url (#117)
1 parent bc6d1fc commit efb0f05

File tree

7 files changed

+79
-35
lines changed

7 files changed

+79
-35
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ and this project attempts to adhere to [Semantic Versioning](https://semver.org/
1818

1919
## [Unreleased]
2020

21+
### Changed
22+
23+
- Changed asset URLs to use django-bird's asset view instead of file paths.
24+
2125
## [0.10.1]
2226

2327
### Fixed

src/django_bird/staticfiles.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
from enum import Enum
55
from pathlib import Path
66

7+
from django.contrib.staticfiles import finders
8+
from django.urls import reverse
9+
710
from ._typing import override
811

912

@@ -36,6 +39,21 @@ def __hash__(self) -> int:
3639
def exists(self) -> bool:
3740
return self.path.exists()
3841

42+
@property
43+
def url(self) -> str:
44+
component_name = self.path.stem
45+
asset_filename = self.path.name
46+
47+
path = finders.find(f"django_bird/assets/{component_name}/{asset_filename}")
48+
49+
return path or reverse(
50+
"django_bird:asset",
51+
kwargs={
52+
"component_name": component_name,
53+
"asset_filename": asset_filename,
54+
},
55+
)
56+
3957
@classmethod
4058
def from_path(cls, path: Path) -> Asset:
4159
match path.suffix.lower():

src/django_bird/templatetags/tags/asset.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,12 @@ def _render_assets(self, assets: list[Asset]) -> str:
5757

5858
if self.asset_type == AssetType.CSS:
5959
tags = (
60-
f'<link rel="stylesheet" href="{asset.path}">'
60+
f'<link rel="stylesheet" href="{asset.url}">'
6161
for asset in sorted(assets, key=lambda a: a.path)
6262
)
6363
else: # JS
6464
tags = (
65-
f'<script src="{asset.path}"></script>'
65+
f'<script src="{asset.url}"></script>'
6666
for asset in sorted(assets, key=lambda a: a.path)
6767
)
6868

tests/conftest.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
from django.template.backends.django import Template as DjangoTemplate
1212
from django.template.engine import Engine
1313
from django.test import override_settings
14+
from django.urls import clear_url_caches
15+
from django.urls import include
16+
from django.urls import path
1417

1518
from .settings import DEFAULT_SETTINGS
1619

@@ -49,6 +52,26 @@ def pytest_configure(config):
4952
}
5053

5154

55+
@pytest.fixture(autouse=True)
56+
def setup_urls():
57+
urlpatterns = [
58+
path("__bird__/", include("django_bird.urls")),
59+
]
60+
61+
clear_url_caches()
62+
63+
with override_settings(
64+
ROOT_URLCONF=type(
65+
"urls",
66+
(),
67+
{"urlpatterns": urlpatterns},
68+
),
69+
):
70+
yield
71+
72+
clear_url_caches()
73+
74+
5275
@pytest.fixture
5376
def templates_dir(tmp_path):
5477
templates_dir = tmp_path / "templates"

tests/templatetags/test_asset.py

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,22 @@ def test_template_inheritence(self, create_template, templates_dir):
9696

9797
rendered = template.render({})
9898

99-
assert f'<link rel="stylesheet" href="{alert_css.file}">' in rendered
100-
assert f'<link rel="stylesheet" href="{button_css.file}">' in rendered
101-
assert f'<script src="{alert_js.file}"></script>' in rendered
102-
assert f'<script src="{button_js.file}"></script>' in rendered
99+
assert (
100+
f'<link rel="stylesheet" href="/__bird__/assets/{alert.name}/{alert_css.file.name}">'
101+
in rendered
102+
)
103+
assert (
104+
f'<link rel="stylesheet" href="/__bird__/assets/{button.name}/{button_css.file.name}">'
105+
in rendered
106+
)
107+
assert (
108+
f'<script src="/__bird__/assets/{alert.name}/{alert_js.file.name}"></script>'
109+
in rendered
110+
)
111+
assert (
112+
f'<script src="/__bird__/assets/{button.name}/{button_js.file.name}"></script>'
113+
in rendered
114+
)
103115

104116
def test_with_no_assets(self, create_template, templates_dir):
105117
TestComponent(
@@ -173,14 +185,24 @@ def test_component_render_order(self, create_template, templates_dir):
173185
rendered = template.render({})
174186

175187
head_end = rendered.find("</head>")
176-
assert f'<link rel="stylesheet" href="{first_css.file}">' in rendered[:head_end]
177188
assert (
178-
f'<link rel="stylesheet" href="{second_css.file}">' in rendered[:head_end]
189+
f'<link rel="stylesheet" href="/__bird__/assets/{first.name}/{first_css.file.name}">'
190+
in rendered[:head_end]
191+
)
192+
assert (
193+
f'<link rel="stylesheet" href="/__bird__/assets/{second.name}/{second_css.file.name}">'
194+
in rendered[:head_end]
179195
)
180196

181197
body_start = rendered.find("<body")
182-
assert f'<script src="{first_js.file}"></script>' in rendered[body_start:]
183-
assert f'<script src="{second_js.file}"></script>' in rendered[body_start:]
198+
assert (
199+
f'<script src="/__bird__/assets/{first.name}/{first_js.file.name}"></script>'
200+
in rendered[body_start:]
201+
)
202+
assert (
203+
f'<script src="/__bird__/assets/{second.name}/{second_js.file.name}"></script>'
204+
in rendered[body_start:]
205+
)
184206

185207

186208
class TestNode:

tests/test_integration.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,5 +57,5 @@ def test_template_inheritance_assets(create_template, templates_dir):
5757
""")
5858
rendered = template.render(Context({}))
5959

60-
assert str(parent_css.file) in rendered
61-
assert str(child_css.file) in rendered
60+
assert str(parent_css.file.name) in rendered
61+
assert str(child_css.file.name) in rendered

tests/test_views.py

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@
44

55
import pytest
66
from django.test import override_settings
7-
from django.urls import clear_url_caches
8-
from django.urls import include
9-
from django.urls import path
107
from django.urls import reverse
118

129
from django_bird.staticfiles import AssetType
@@ -21,26 +18,6 @@ def debug_mode():
2118
yield
2219

2320

24-
@pytest.fixture(autouse=True)
25-
def setup_urls():
26-
urlpatterns = [
27-
path("__bird__/", include("django_bird.urls")),
28-
]
29-
30-
clear_url_caches()
31-
32-
with override_settings(
33-
ROOT_URLCONF=type(
34-
"urls",
35-
(),
36-
{"urlpatterns": urlpatterns},
37-
),
38-
):
39-
yield
40-
41-
clear_url_caches()
42-
43-
4421
def test_url_reverse(templates_dir):
4522
button = TestComponent(name="button", content="<button>Click me</button>").create(
4623
templates_dir

0 commit comments

Comments
 (0)