forked from Archives/langchain
33 lines
981 B
Python
33 lines
981 B
Python
"""Utilities for formatting strings."""
|
|
from string import Formatter
|
|
from typing import Any, Mapping, Sequence, Union
|
|
|
|
|
|
class StrictFormatter(Formatter):
|
|
"""A subclass of formatter that checks for extra keys."""
|
|
|
|
def check_unused_args(
|
|
self,
|
|
used_args: Sequence[Union[int, str]],
|
|
args: Sequence,
|
|
kwargs: Mapping[str, Any],
|
|
) -> None:
|
|
"""Check to see if extra parameters are passed."""
|
|
extra = set(kwargs).difference(used_args)
|
|
if extra:
|
|
raise KeyError(extra)
|
|
|
|
def vformat(
|
|
self, format_string: str, args: Sequence, kwargs: Mapping[str, Any]
|
|
) -> str:
|
|
"""Check that no arguments are provided."""
|
|
if len(args) > 0:
|
|
raise ValueError(
|
|
"No arguments should be provided, "
|
|
"everything should be passed as keyword arguments."
|
|
)
|
|
return super().vformat(format_string, args, kwargs)
|
|
|
|
|
|
formatter = StrictFormatter()
|