or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

asgi.mdcore-schema.mderror-handling.mdexecution.mdexplorer.mdfederation.mdfile-uploads.mdindex.mdrelay.mdresolvers.mdtype-bindables.mdvalidation.md

relay.mddocs/

0

# Relay Support

1

2

Implementation of Relay specifications including connections, global object identification, and pagination.

3

4

## Capabilities

5

6

### Relay Types

7

8

```python { .api }

9

class RelayObjectType(ObjectType):

10

"""Object type with Relay connection support."""

11

12

class RelayQueryType(QueryType):

13

"""Query type with Relay node interface support."""

14

15

class RelayNodeInterfaceType(InterfaceType):

16

"""Relay Node interface implementation."""

17

```

18

19

### Relay Connections

20

21

```python { .api }

22

class RelayConnection:

23

"""Implementation of Relay connection specification."""

24

25

def __init__(

26

self,

27

edges: list,

28

page_info: dict,

29

total_count: Optional[int] = None

30

): ...

31

32

class ConnectionArguments:

33

"""Arguments for Relay connections."""

34

first: Optional[int]

35

after: Optional[str]

36

last: Optional[int]

37

before: Optional[str]

38

```

39

40

### Global ID Utilities

41

42

```python { .api }

43

def encode_global_id(type_name: str, node_id: str) -> str:

44

"""Encode global ID for Relay."""

45

46

def decode_global_id(global_id: str) -> tuple[str, str]:

47

"""Decode global ID from Relay, returns (type_name, node_id)."""

48

```

49

50

### Types

51

52

```python { .api }

53

ConnectionResolver = Callable

54

GlobalIDTuple = tuple[str, str]

55

```

56

57

## Usage Examples

58

59

```python

60

from ariadne.contrib.relay import (

61

RelayQueryType, RelayConnection, encode_global_id, decode_global_id

62

)

63

64

query = RelayQueryType()

65

66

@query.field("node")

67

def resolve_node(_, info, id):

68

type_name, node_id = decode_global_id(id)

69

if type_name == "User":

70

return get_user(node_id)

71

return None

72

73

# Connection resolver

74

@query.field("users")

75

def resolve_users_connection(_, info, first=None, after=None):

76

users = get_users(first=first, after=after)

77

return RelayConnection(

78

edges=[{"node": user, "cursor": encode_cursor(user.id)} for user in users],

79

page_info={"hasNextPage": True, "hasPreviousPage": False}

80

)

81

```