type_bridge.models.role¶
role
¶
Role descriptor for TypeDB relation role players.
Role
¶
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]
|
The type (Entity or Relation) that can play this role |
required |
additional_player_types
|
type[T]
|
Optional additional types allowed to play this role |
()
|
cardinality
|
Card | None
|
Optional cardinality constraint for the role (e.g., Card(2, 2) for exactly 2) |
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) |
Source code in type_bridge/models/role.py
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) -> RoleRef[T]
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
¶
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 cardinality constraint for the role |
None
|
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.