forked from STI/Astroport.ONE
30 lines
1.0 KiB
Python
30 lines
1.0 KiB
Python
from ..error import GraphQLError
|
|
from ..language.character_classes import is_name_start, is_name_continue
|
|
|
|
__all__ = ["assert_name", "assert_enum_value_name"]
|
|
|
|
|
|
def assert_name(name: str) -> str:
|
|
"""Uphold the spec rules about naming."""
|
|
if name is None:
|
|
raise TypeError("Must provide name.")
|
|
if not isinstance(name, str):
|
|
raise TypeError("Expected name to be a string.")
|
|
if not name:
|
|
raise GraphQLError("Expected name to be a non-empty string.")
|
|
if not all(is_name_continue(char) for char in name[1:]):
|
|
raise GraphQLError(
|
|
f"Names must only contain [_a-zA-Z0-9] but {name!r} does not."
|
|
)
|
|
if not is_name_start(name[0]):
|
|
raise GraphQLError(f"Names must start with [_a-zA-Z] but {name!r} does not.")
|
|
return name
|
|
|
|
|
|
def assert_enum_value_name(name: str) -> str:
|
|
"""Uphold the spec rules about naming enum values."""
|
|
assert_name(name)
|
|
if name in {"true", "false", "null"}:
|
|
raise GraphQLError(f"Enum values cannot be named: {name}.")
|
|
return name
|