mirror of
https://github.com/django-components/django-components.git
synced 2025-08-08 08:17:59 +00:00
[pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
This commit is contained in:
parent
089cda54c5
commit
ab7f3e0cdb
5 changed files with 27 additions and 20 deletions
|
@ -20,19 +20,24 @@ from django.views import View
|
|||
# way the two modules depend on one another.
|
||||
from django_components.component_registry import registry # NOQA
|
||||
from django_components.component_registry import AlreadyRegistered, ComponentRegistry, NotRegistered, register # NOQA
|
||||
from django_components.context import capture_root_context, set_root_context, get_root_context, set_slot_component_association
|
||||
from django_components.context import (
|
||||
capture_root_context,
|
||||
get_root_context,
|
||||
set_root_context,
|
||||
set_slot_component_association,
|
||||
)
|
||||
from django_components.logger import logger, trace_msg
|
||||
from django_components.middleware import is_dependency_middleware_active
|
||||
from django_components.node import walk_nodelist
|
||||
from django_components.slots import (
|
||||
DEFAULT_SLOT_KEY,
|
||||
FillContent,
|
||||
FillNode,
|
||||
SlotName,
|
||||
SlotNode,
|
||||
render_component_template_with_slots,
|
||||
DEFAULT_SLOT_KEY,
|
||||
)
|
||||
from django_components.utils import search, gen_id
|
||||
from django_components.utils import gen_id, search
|
||||
|
||||
RENDERED_COMMENT_TEMPLATE = "<!-- _RENDERED {name} -->"
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ pass data across components, nodes, slots, and contexts.
|
|||
You can think of the Context as our storage system.
|
||||
"""
|
||||
|
||||
from typing import Optional, TYPE_CHECKING
|
||||
from typing import TYPE_CHECKING, Optional
|
||||
|
||||
from django.template import Context
|
||||
|
||||
|
|
|
@ -9,15 +9,15 @@ else:
|
|||
from typing import TypeAlias
|
||||
|
||||
from django.template import Context, Template
|
||||
from django.template.base import FilterExpression, Node, NodeList, TextNode, Parser
|
||||
from django.template.base import FilterExpression, Node, NodeList, Parser, TextNode
|
||||
from django.template.defaulttags import CommentNode
|
||||
from django.template.exceptions import TemplateSyntaxError
|
||||
from django.utils.safestring import SafeString, mark_safe
|
||||
|
||||
from django_components.app_settings import SlotContextBehavior, app_settings
|
||||
from django_components.context import get_root_context, get_slot_fill, set_slot_fill, get_slot_component_association
|
||||
from django_components.node import nodelist_has_content
|
||||
from django_components.context import get_root_context, get_slot_component_association, get_slot_fill, set_slot_fill
|
||||
from django_components.logger import trace_msg
|
||||
from django_components.node import nodelist_has_content
|
||||
from django_components.utils import gen_id
|
||||
|
||||
DEFAULT_SLOT_KEY = "_DJANGO_COMPONENTS_DEFAULT_SLOT"
|
||||
|
@ -58,10 +58,11 @@ class UserSlotVar:
|
|||
class ComponentIdMixin:
|
||||
"""
|
||||
Mixin for classes use or pass through component ID.
|
||||
|
||||
|
||||
We use component IDs to identify which slots should be
|
||||
rendered with which fills for which components.
|
||||
"""
|
||||
|
||||
_component_id: str
|
||||
|
||||
@property
|
||||
|
@ -369,7 +370,7 @@ def render_component_template_with_slots(
|
|||
|
||||
NOTE: The nodes in the template are mutated in the process!
|
||||
"""
|
||||
# ---- Prepare slot fills ----
|
||||
# ---- Prepare slot fills ----
|
||||
slot_name2fill_content = _collect_slot_fills_from_component_template(template, fill_content, registered_name)
|
||||
|
||||
# Give slot nodes knowledge of their parent component.
|
||||
|
@ -411,7 +412,7 @@ def _collect_slot_fills_from_component_template(
|
|||
# Type check so the rest of the logic has type of `node` is inferred
|
||||
if not isinstance(node, SlotNode):
|
||||
continue
|
||||
|
||||
|
||||
slot_name = node.name
|
||||
if slot_name in slot_name2fill_content:
|
||||
raise TemplateSyntaxError(
|
||||
|
@ -440,7 +441,7 @@ def _collect_slot_fills_from_component_template(
|
|||
content_data = named_fills_content.get(node.name)
|
||||
|
||||
slot_name2fill_content[slot_name] = content_data
|
||||
|
||||
|
||||
# Check: Only component templates that include a 'default' slot
|
||||
# can be invoked with implicit filling.
|
||||
if default_fill_content and not default_slot_encountered:
|
||||
|
|
|
@ -190,7 +190,7 @@ def do_fill(parser: Parser, token: Token) -> FillNode:
|
|||
alias_fexp = FilterExpression(alias, parser)
|
||||
else:
|
||||
raise TemplateSyntaxError(f"'{tag}' tag takes either 1 or 3 arguments: Received {len(args)}.")
|
||||
|
||||
|
||||
# Use a unique ID to be able to tie the fill nodes with components and slots
|
||||
# NOTE: MUST be called BEFORE `parser.parse()` to ensure predictable numbering
|
||||
fill_id = gen_id()
|
||||
|
|
|
@ -240,7 +240,7 @@ class ComponentTest(SimpleTestCase):
|
|||
)
|
||||
|
||||
# {{ name }} should be "Jannete" everywhere
|
||||
rendered = self.template.render(Context({ "day": "Monday", "name": "Jannete" }))
|
||||
rendered = self.template.render(Context({"day": "Monday", "name": "Jannete"}))
|
||||
self.assertHTMLEqual(
|
||||
rendered,
|
||||
"""
|
||||
|
@ -537,6 +537,7 @@ class ComponentIsolationTests(SimpleTestCase):
|
|||
""",
|
||||
)
|
||||
|
||||
|
||||
class SlotBehaviorTests(SimpleTestCase):
|
||||
def setUp(self):
|
||||
class SlottedComponent(component.Component):
|
||||
|
@ -578,7 +579,7 @@ class SlotBehaviorTests(SimpleTestCase):
|
|||
)
|
||||
def test_slot_context_allow_override(self):
|
||||
# {{ name }} should be neither Jannete not empty, because overriden everywhere
|
||||
rendered = self.template.render(Context({ "day": "Monday", "name": "Jannete" }))
|
||||
rendered = self.template.render(Context({"day": "Monday", "name": "Jannete"}))
|
||||
self.assertHTMLEqual(
|
||||
rendered,
|
||||
"""
|
||||
|
@ -597,7 +598,7 @@ class SlotBehaviorTests(SimpleTestCase):
|
|||
)
|
||||
|
||||
# {{ name }} should be effectively the same as before, because overriden everywhere
|
||||
rendered2 = self.template.render(Context({ "day": "Monday" }))
|
||||
rendered2 = self.template.render(Context({"day": "Monday"}))
|
||||
self.assertHTMLEqual(rendered2, rendered)
|
||||
|
||||
@override_settings(
|
||||
|
@ -605,7 +606,7 @@ class SlotBehaviorTests(SimpleTestCase):
|
|||
)
|
||||
def test_slot_context_isolated(self):
|
||||
# {{ name }} should be "Jannete" everywhere
|
||||
rendered = self.template.render(Context({ "day": "Monday", "name": "Jannete" }))
|
||||
rendered = self.template.render(Context({"day": "Monday", "name": "Jannete"}))
|
||||
self.assertHTMLEqual(
|
||||
rendered,
|
||||
"""
|
||||
|
@ -624,7 +625,7 @@ class SlotBehaviorTests(SimpleTestCase):
|
|||
)
|
||||
|
||||
# {{ name }} should be empty everywhere
|
||||
rendered2 = self.template.render(Context({ "day": "Monday" }))
|
||||
rendered2 = self.template.render(Context({"day": "Monday"}))
|
||||
self.assertHTMLEqual(
|
||||
rendered2,
|
||||
"""
|
||||
|
@ -644,12 +645,12 @@ class SlotBehaviorTests(SimpleTestCase):
|
|||
|
||||
@override_settings(
|
||||
COMPONENTS={
|
||||
"slot_context_behavior": "prefer_root",
|
||||
"slot_context_behavior": "prefer_root",
|
||||
},
|
||||
)
|
||||
def test_slot_context_prefer_root(self):
|
||||
# {{ name }} should be "Jannete" everywhere
|
||||
rendered = self.template.render(Context({ "day": "Monday", "name": "Jannete" }))
|
||||
rendered = self.template.render(Context({"day": "Monday", "name": "Jannete"}))
|
||||
self.assertHTMLEqual(
|
||||
rendered,
|
||||
"""
|
||||
|
@ -668,7 +669,7 @@ class SlotBehaviorTests(SimpleTestCase):
|
|||
)
|
||||
|
||||
# {{ name }} should be neither "Jannete" nor empty anywhere
|
||||
rendered = self.template.render(Context({ "day": "Monday" }))
|
||||
rendered = self.template.render(Context({"day": "Monday"}))
|
||||
self.assertHTMLEqual(
|
||||
rendered,
|
||||
"""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue