# PyUtils

Python Utils

This package contains dependency-free Python utility functions used throughout the codebase.

Each utility should belong in its own file and be the default export.

These functions are not part of the module interface and are subject to change.

graphql.pyutils.camel_to_snake(s: str) → str

  Convert from CamelCase to snake_case

graphql.pyutils.snake_to_camel(s: str, upper: bool = True) → str

  Convert from snake_case to CamelCase

  If upper is set, then convert to upper CamelCase, otherwise the first character keeps its case.

graphql.pyutils.cached_property(func)

graphql.pyutils.register_description(base: Type[Any]) → None

  Register a class that shall be accepted as a description.

graphql.pyutils.unregister_description(base: Type[Any]) → None

  Unregister a class that shall no more be accepted as a description.

graphql.pyutils.did_you_mean(suggestions: Sequence[str], sub_message: str | None = None) → str

  Given [ A, B, C ] return ‘ Did you mean A, B, or C?’

graphql.pyutils.identity_func(x: T = Undefined, *_args: Any) → T

  Return the first received argument.

graphql.pyutils.inspect(value: Any) → str

  Inspect value and a return string representation for error messages.

  Used to print values in error messages. We do not use repr() in order to not leak too much of the inner Python representation of unknown objects, and we do not use json.dumps() because not all objects can be serialized as JSON and we want to output strings with single quotes like Python repr() does it.

  We also restrict the size of the representation by truncating strings and collections and allowing only a maximum recursion depth.

graphql.pyutils.is_awaitable(value: Any) → bool

  Return true if object can be passed to an `await` expression.

  Instead of testing if the object is an instance of abc.Awaitable, it checks the existence of an __await__ attribute. This is much faster.

graphql.pyutils.is_collection(value: Any) → bool

  Check if value is a collection, but not a string or a mapping.

graphql.pyutils.is_iterable(value: Any) → bool

  Check if value is an iterable, but not a string or a mapping.

graphql.pyutils.natural_comparison_key(key: str) → Tuple

  Comparison key function for sorting strings by natural sort order.

  See: https://en.wikipedia.org/wiki/Natural_sort_order

graphql.pyutils.AwaitableOrValue

  alias of `Awaitable`[`T`] | `T`

graphql.pyutils.suggestion_list(input_: str, options: Collection[str]) → List[str]

  Get list with suggestions for a given input.

  Given an invalid input string and list of valid options, returns a filtered list of valid options sorted based on their similarity with the input.

class graphql.pyutils.FrozenError

  Bases: `TypeError`

  Error when trying to change a frozen (read only) collection.

class graphql.pyutils.Path(prev: Any, key: str | int, typename: str | None)

  Bases: `NamedTuple`

  A generic path of string or integer indices

  __init__()
  add_key(key: str | int, typename: str | None = None) → Path

    Return a new Path containing the given key.

  as_list() → List[str | int]

    Return a list of the path keys.

  count(value, /)

    Return number of occurrences of value.

  index(value, start=0, stop=9223372036854775807, /)

    Return first index of value.

    Raises ValueError if the value is not present.

  key: str | int

    current index in the path (string or integer)

  prev: Any

    path with the previous indices

  typename: str | None

    name of the parent type to avoid path ambiguity

graphql.pyutils.print_path_list(path: Collection[str | int]) → str

  Build a string describing the path.

class graphql.pyutils.SimplePubSub

  Bases: `object`

  A very simple publish-subscript system.

  Creates an AsyncIterator from an EventEmitter.

  Useful for mocking a PubSub system for tests.

  __init__() → None
  emit(event: Any) → bool

    Emit an event.

  get_subscriber(transform: Callable | None = None) → SimplePubSubIterator
  subscribers: Set[Callable]

class graphql.pyutils.SimplePubSubIterator(pubsub: SimplePubSub, transform: Callable | None)

  Bases: `AsyncIterator`

  __init__(pubsub: SimplePubSub, transform: Callable | None) → None
  async aclose() → None
  async empty_queue() → None
  pull_queue: Queue[Future]
  push_queue: Queue[Any]
  async push_value(event: Any) → None

graphql.pyutils.Undefined = Undefined

  Symbol for undefined values

  This singleton object is used to describe undefined or invalid values. It can be used in places where you would use `undefined` in GraphQL.js.