Astroport.ONE/venv/lib/python3.11/site-packages/graphql/type/assert_name.py

30 lines
1.0 KiB
Python
Raw Normal View History

2024-03-01 16:15:45 +01:00
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