Source code for mimesis.builder.schema
"""Schema reference types for SchemaBuilder."""
from typing import Any
from mimesis.builder.resolver import NestedSchema
__all__ = ["SchemaRef"]
[docs]
class SchemaRef:
"""Reference to a defined schema.
Returned by ``sb.schema()``. Used for:
1. Foreign keys via ``sb.ref(schema_ref).field``
2. Nesting via ``schema_ref(count=N)``
Example::
users = sb.schema("users", {"id": sb.f("increment")})
posts = sb.schema(
"posts",
{
"user_id": sb.ref(users).id, # Foreign key
},
)
companies = sb.schema(
"companies",
{
"name": sb.f("company"),
"employees": users(count=5), # Nested users
},
)
"""
__slots__ = ("_definition", "_name")
[docs]
def __init__(self, name: str, definition: dict[str, Any]) -> None:
"""Initialize schema reference.
:param name: The schema name.
:param definition: The schema definition dict.
"""
self._name = name
self._definition = definition
@property
def name(self) -> str:
"""Return the schema name."""
return self._name
[docs]
def __call__(self, *, count: int = 1) -> NestedSchema:
"""Create a nested embedding of this schema.
:param count: Number of items to generate and embed.
:return: A NestedSchema that resolves to a list of items.
:raises ValueError: If ``count`` is less than 1.
"""
return NestedSchema(self._name, self._definition, count)
def __repr__(self) -> str:
return f"SchemaRef({self._name!r})"