type_bridge.models.role¶
role
¶
Role descriptor for TypeDB relation role players.
Role
¶
Role(role_name, player_type=None, *additional_player_types, cardinality=None, plays_cardinality=None, overrides=None, abstract=False, ordered=False, distinct=False, doc=None, meta=None)
Descriptor for relation role players with type safety.
Generic type T represents the type (Entity or Relation) that can play this role. TypeDB supports both entities and relations as role players.
Example
Entity as role player¶
class Employment(Relation): employee: Role[Person] = Role("employee", Person) employer: Role[Company] = Role("employer", Company)
Relation as role player¶
class Permission(Relation): permitted_subject: Role[Subject] = Role("permitted_subject", Subject) permitted_access: Role[Access] = Role("permitted_access", Access) # Access is a Relation
Initialize a role.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
role_name
|
str
|
The name of the role in TypeDB |
required |
player_type
|
type[T] | None
|
The optional type (Entity or Relation) that can play this role |
None
|
additional_player_types
|
type[T]
|
Optional additional types allowed to play this role |
()
|
cardinality
|
Card | None
|
Optional relates-side cardinality — players allowed per relation (e.g., Card(2, 2) for exactly 2 players) |
None
|
plays_cardinality
|
Card | None
|
Optional plays-side cardinality — relations a single player
may play this role in (e.g., Card(0, 1) to enforce "at most one"). Distinct
from |
None
|
overrides
|
str | None
|
Parent role name that this role specializes via TypeDB's
|
None
|
abstract
|
bool
|
When |
False
|
ordered
|
bool
|
When |
False
|
distinct
|
bool
|
When |
False
|
doc
|
str | None
|
TypeDB 3.12+ |
None
|
meta
|
dict[str, str] | None
|
TypeDB 3.12+ |
None
|
Raises:
| Type | Description |
|---|---|
ReservedWordError
|
If role_name is a TypeQL reserved word |
TypeError
|
If player type is a library base class (Entity, Relation, TypeDBType), or if plays_cardinality is set on a relates-only role (no player type) |
ValueError
|
If distinct=True without ordered=True |
Source code in type_bridge/models/role.py
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | |
is_multi_player
property
¶
Check if this role allows multiple players.
Returns True if cardinality allows more than one player (max > 1 or unbounded).
__set_name__
¶
__get__
¶
__get__(obj: None, objtype: type[T_RelationOwner]) -> RoleRef[T, T_RelationOwner]
Get role player from instance or RoleRef from class.
When accessed from the class (obj is None), returns RoleRef for type-safe query building (e.g., Employment.employee.age.gt(Age(30))). When accessed from an instance, returns the entity playing the role.
Source code in type_bridge/models/role.py
__set__
¶
Set role player(s) on instance.
For roles with cardinality > 1, accepts a list of entities. For single-player roles, accepts a single entity.
Source code in type_bridge/models/role.py
multi
classmethod
¶
multi(role_name, player_type, *additional_player_types, cardinality=None, plays_cardinality=None, overrides=None, abstract=False, ordered=False, distinct=False)
Define a role playable by multiple entity types.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
role_name
|
str
|
The name of the role in TypeDB |
required |
player_type
|
type[T]
|
The first entity type that can play this role |
required |
additional_player_types
|
type[T]
|
Additional entity types allowed to play this role |
()
|
cardinality
|
Card | None
|
Optional relates-side cardinality constraint for the role |
None
|
plays_cardinality
|
Card | None
|
Optional plays-side cardinality applied to every player's plays edge for this role |
None
|
overrides
|
str | None
|
Parent role name this role specializes (see |
None
|
abstract
|
bool
|
When |
False
|
ordered
|
bool
|
When |
False
|
distinct
|
bool
|
When |
False
|
Source code in type_bridge/models/role.py
__get_pydantic_core_schema__
classmethod
¶
Define how Pydantic should validate Role fields.
Accepts either: - A single entity instance for single-player roles - A list of entity instances for multi-player roles (cardinality > 1)
Uses a custom validator that checks class names instead of isinstance, to handle generated code in different modules where the same class name exists but as a different Python object.