mirror of
https://github.com/django-components/django-components.git
synced 2025-08-18 13:10:13 +00:00
refactor: use HTML5 parser for BeautifulSoup (#891)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
203d29f511
commit
81c02ddaa7
5 changed files with 15 additions and 12 deletions
|
@ -394,7 +394,7 @@ CSS_PLACEHOLDER_NAME_B = CSS_PLACEHOLDER_NAME.encode()
|
||||||
JS_PLACEHOLDER_NAME = "JS_PLACEHOLDER"
|
JS_PLACEHOLDER_NAME = "JS_PLACEHOLDER"
|
||||||
JS_PLACEHOLDER_NAME_B = JS_PLACEHOLDER_NAME.encode()
|
JS_PLACEHOLDER_NAME_B = JS_PLACEHOLDER_NAME.encode()
|
||||||
|
|
||||||
CSS_DEPENDENCY_PLACEHOLDER = f'<link name="{CSS_PLACEHOLDER_NAME}"/>'
|
CSS_DEPENDENCY_PLACEHOLDER = f'<link name="{CSS_PLACEHOLDER_NAME}">'
|
||||||
JS_DEPENDENCY_PLACEHOLDER = f'<script name="{JS_PLACEHOLDER_NAME}"></script>'
|
JS_DEPENDENCY_PLACEHOLDER = f'<script name="{JS_PLACEHOLDER_NAME}"></script>'
|
||||||
COMPONENT_DEPS_COMMENT = "<!-- _RENDERED {data} -->"
|
COMPONENT_DEPS_COMMENT = "<!-- _RENDERED {data} -->"
|
||||||
|
|
||||||
|
@ -415,7 +415,7 @@ MAYBE_COMP_CSS_ID = r"(?: data-djc-css-\w{6})?"
|
||||||
|
|
||||||
PLACEHOLDER_REGEX = re.compile(
|
PLACEHOLDER_REGEX = re.compile(
|
||||||
r"{css_placeholder}|{js_placeholder}".format(
|
r"{css_placeholder}|{js_placeholder}".format(
|
||||||
css_placeholder=f'<link{MAYBE_COMP_CSS_ID}{MAYBE_COMP_ID} name="{CSS_PLACEHOLDER_NAME}"/>',
|
css_placeholder=f'<link{MAYBE_COMP_CSS_ID}{MAYBE_COMP_ID} name="{CSS_PLACEHOLDER_NAME}"/?>',
|
||||||
js_placeholder=f'<script{MAYBE_COMP_CSS_ID}{MAYBE_COMP_ID} name="{JS_PLACEHOLDER_NAME}"></script>',
|
js_placeholder=f'<script{MAYBE_COMP_CSS_ID}{MAYBE_COMP_ID} name="{JS_PLACEHOLDER_NAME}"></script>',
|
||||||
).encode()
|
).encode()
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from typing import Any, List, Optional, Sequence
|
from typing import Any, List, Optional, Sequence
|
||||||
|
|
||||||
from bs4 import BeautifulSoup, CData, Comment, Doctype, Tag
|
from bs4 import BeautifulSoup, CData, Comment, Doctype, NavigableString, Tag
|
||||||
|
|
||||||
|
|
||||||
class HTMLNode(ABC):
|
class HTMLNode(ABC):
|
||||||
|
@ -63,8 +63,11 @@ class SoupNode(HTMLNode):
|
||||||
return f"<!-- {self.node} -->"
|
return f"<!-- {self.node} -->"
|
||||||
elif isinstance(self.node, Doctype):
|
elif isinstance(self.node, Doctype):
|
||||||
return f"<!DOCTYPE {self.node}>"
|
return f"<!DOCTYPE {self.node}>"
|
||||||
else:
|
elif isinstance(self.node, NavigableString):
|
||||||
return str(self.node)
|
return str(self.node)
|
||||||
|
else:
|
||||||
|
# See https://github.com/EmilStenstrom/django-components/pull/861#discussion_r1898516210
|
||||||
|
return self.node.encode(formatter="html5").decode()
|
||||||
|
|
||||||
def name(self) -> str:
|
def name(self) -> str:
|
||||||
return self.node.name
|
return self.node.name
|
||||||
|
|
|
@ -153,8 +153,8 @@ class ContextTests(BaseTestCase):
|
||||||
template = Template(template_str)
|
template = Template(template_str)
|
||||||
rendered = template.render(Context())
|
rendered = template.render(Context())
|
||||||
|
|
||||||
self.assertInHTML('<h1 data-djc-id-a1bc45="">Uniquely named variable = unique_val</h1>', rendered)
|
self.assertInHTML("<h1 data-djc-id-a1bc45>Uniquely named variable = unique_val</h1>", rendered)
|
||||||
self.assertInHTML('<h1 data-djc-id-a1bc46="">Uniquely named variable = unique_from_slot</h1>', rendered)
|
self.assertInHTML("<h1 data-djc-id-a1bc46>Uniquely named variable = unique_from_slot</h1>", rendered)
|
||||||
|
|
||||||
@parametrize_context_behavior(["django", "isolated"])
|
@parametrize_context_behavior(["django", "isolated"])
|
||||||
def test_nested_component_context_shadows_outer_context_with_unfilled_slots_and_component_tag(
|
def test_nested_component_context_shadows_outer_context_with_unfilled_slots_and_component_tag(
|
||||||
|
|
|
@ -61,7 +61,7 @@ class RenderDependenciesTests(BaseTestCase):
|
||||||
rendered_raw = template.render(Context({}))
|
rendered_raw = template.render(Context({}))
|
||||||
|
|
||||||
# Placeholders
|
# Placeholders
|
||||||
self.assertEqual(rendered_raw.count('<link name="CSS_PLACEHOLDER"/>'), 1)
|
self.assertEqual(rendered_raw.count('<link name="CSS_PLACEHOLDER">'), 1)
|
||||||
self.assertEqual(rendered_raw.count('<script name="JS_PLACEHOLDER"></script>'), 1)
|
self.assertEqual(rendered_raw.count('<script name="JS_PLACEHOLDER"></script>'), 1)
|
||||||
|
|
||||||
self.assertEqual(rendered_raw.count("<script"), 1)
|
self.assertEqual(rendered_raw.count("<script"), 1)
|
||||||
|
@ -510,7 +510,7 @@ class MiddlewareTests(BaseTestCase):
|
||||||
|
|
||||||
assert_dependencies(rendered1)
|
assert_dependencies(rendered1)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
rendered1.count('Variable: <strong data-djc-id-a1bc41 data-djc-id-a1bc42="">value</strong>'),
|
rendered1.count("Variable: <strong data-djc-id-a1bc41 data-djc-id-a1bc42>value</strong>"),
|
||||||
1,
|
1,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -520,7 +520,7 @@ class MiddlewareTests(BaseTestCase):
|
||||||
)
|
)
|
||||||
assert_dependencies(rendered2)
|
assert_dependencies(rendered2)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
rendered2.count('Variable: <strong data-djc-id-a1bc43 data-djc-id-a1bc44="">value</strong>'),
|
rendered2.count("Variable: <strong data-djc-id-a1bc43 data-djc-id-a1bc44>value</strong>"),
|
||||||
1,
|
1,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -531,6 +531,6 @@ class MiddlewareTests(BaseTestCase):
|
||||||
|
|
||||||
assert_dependencies(rendered3)
|
assert_dependencies(rendered3)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
rendered3.count('Variable: <strong data-djc-id-a1bc45 data-djc-id-a1bc46="">value</strong>'),
|
rendered3.count("Variable: <strong data-djc-id-a1bc45 data-djc-id-a1bc46>value</strong>"),
|
||||||
1,
|
1,
|
||||||
)
|
)
|
||||||
|
|
|
@ -484,8 +484,8 @@ class DynamicExprTests(BaseTestCase):
|
||||||
(
|
(
|
||||||
"<!-- _RENDERED SimpleComponent_5c8766,a1bc41,, -->\n"
|
"<!-- _RENDERED SimpleComponent_5c8766,a1bc41,, -->\n"
|
||||||
"<div data-djc-id-a1bc41><!-- _RENDERED SimpleComponent_5c8766,a1bc40,, -->\n"
|
"<div data-djc-id-a1bc41><!-- _RENDERED SimpleComponent_5c8766,a1bc40,, -->\n"
|
||||||
'<div data-djc-id-a1bc40="">3</div>\n'
|
"<div data-djc-id-a1bc40>3</div>\n"
|
||||||
'<div data-djc-id-a1bc40="">True</div>\n'
|
"<div data-djc-id-a1bc40>True</div>\n"
|
||||||
"</div>\n"
|
"</div>\n"
|
||||||
"<div data-djc-id-a1bc41>True</div>"
|
"<div data-djc-id-a1bc41>True</div>"
|
||||||
),
|
),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue