Skip to content

JinjaItem

🛈 DocStrings

An item representing a filter / test.

Source code in src/jinjarope/jinjafile.py
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
@dataclasses.dataclass(frozen=True)
class JinjaItem:
    """An item representing a filter / test."""

    identifier: str
    typ: Literal["filter", "test", "function"]
    fn: str
    group: str
    icon: str | None = None
    examples: dict[str, dict[str, str]] = dataclasses.field(default_factory=dict)
    description: str | None = None
    aliases: list[str] = dataclasses.field(default_factory=list)
    required_packages: list[str] = dataclasses.field(default_factory=list)

    def __repr__(self):
        return utils.get_repr(self, self.identifier)

    @property
    def filter_fn(self) -> Callable[..., Any]:
        """Return the callable to use as filter / test / function."""
        try:
            obj = utils.resolve(self.fn)
        except AttributeError:
            msg = f"Could not import jinja item {self.identifier!r} from {self.fn!r}"
            raise ImportError(msg) from AttributeError
        if not callable(obj):
            msg = "Filter needs correct, importable Path for callable"
            raise TypeError(msg)
        return obj

    @classmethod
    def for_function(
        cls,
        fn: Callable[..., Any],
        typ: Literal["filter", "test", "function"],
        group: str = "imported",
        **kwargs: Any,
    ) -> Self:
        """Alternative ctor to construct a JinjaItem based on a callable.

        Args:
            fn: Callable to get a JinjaItem for
            typ: The item type
            group: Group for metadata
            kwargs: Additional keyword arguments for JinjaItem ctor
        """
        return cls(
            fn.__name__,
            typ=typ,
            fn=f"{fn.__module__}.{fn.__name__}",
            group=group,
            **kwargs,
        )

    def apply(self, *args: Any, **kwargs: Any) -> Any:
        """Apply the filter function using given arguments and keywords.

        Args:
            args: The arguments for the call
            kwargs: They keyword arguments for the call
        """
        return self.filter_fn(*args, **kwargs)

    def resolve_example(self, example_name: str) -> str:
        """Render example with given name and return the result.

        Args:
            example_name: The example identifier
        """
        example = self.examples[example_name]
        loader = jinjarope.FileSystemLoader("")
        env = jinjarope.Environment(loader=loader)
        return env.render_string(example["template"])

filter_fn property

filter_fn: Callable[..., Any]

Return the callable to use as filter / test / function.

apply

apply(*args: Any, **kwargs: Any) -> Any

Apply the filter function using given arguments and keywords.

Parameters:

Name Type Description Default
args Any

The arguments for the call

()
kwargs Any

They keyword arguments for the call

{}
Source code in src/jinjarope/jinjafile.py
171
172
173
174
175
176
177
178
def apply(self, *args: Any, **kwargs: Any) -> Any:
    """Apply the filter function using given arguments and keywords.

    Args:
        args: The arguments for the call
        kwargs: They keyword arguments for the call
    """
    return self.filter_fn(*args, **kwargs)

for_function classmethod

for_function(
    fn: Callable[..., Any],
    typ: Literal["filter", "test", "function"],
    group: str = "imported",
    **kwargs: Any
) -> Self

Alternative ctor to construct a JinjaItem based on a callable.

Parameters:

Name Type Description Default
fn Callable[..., Any]

Callable to get a JinjaItem for

required
typ Literal['filter', 'test', 'function']

The item type

required
group str

Group for metadata

'imported'
kwargs Any

Additional keyword arguments for JinjaItem ctor

{}
Source code in src/jinjarope/jinjafile.py
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
@classmethod
def for_function(
    cls,
    fn: Callable[..., Any],
    typ: Literal["filter", "test", "function"],
    group: str = "imported",
    **kwargs: Any,
) -> Self:
    """Alternative ctor to construct a JinjaItem based on a callable.

    Args:
        fn: Callable to get a JinjaItem for
        typ: The item type
        group: Group for metadata
        kwargs: Additional keyword arguments for JinjaItem ctor
    """
    return cls(
        fn.__name__,
        typ=typ,
        fn=f"{fn.__module__}.{fn.__name__}",
        group=group,
        **kwargs,
    )

resolve_example

resolve_example(example_name: str) -> str

Render example with given name and return the result.

Parameters:

Name Type Description Default
example_name str

The example identifier

required
Source code in src/jinjarope/jinjafile.py
180
181
182
183
184
185
186
187
188
189
def resolve_example(self, example_name: str) -> str:
    """Render example with given name and return the result.

    Args:
        example_name: The example identifier
    """
    example = self.examples[example_name]
    loader = jinjarope.FileSystemLoader("")
    env = jinjarope.Environment(loader=loader)
    return env.render_string(example["template"])

Show source on GitHub