Source code for datamasque.client.models.data_selection

"""Models related to data selection in endpoints such as /api/async-generate-ruleset."""

from typing import Optional, Union

from pydantic import BaseModel, ConfigDict

JsonPath = list[Union[str, int]]
"""
A path into a JSON/structured document,
e.g. `["employees", 0, "firstName"]` or `["users", "*", "email"]`.
String elements are object keys (or the `*` wildcard), and integer elements are list indices.
"""

Locator = Union[str, JsonPath]
"""
A locator identifying a masked value within a file.
- Tabular files (CSV, parquet, fixed-width) use a bare string column name, e.g. `"email"`.
- Structured files (JSON) use a :data:`JsonPath`, e.g. `["employees", "*", "email"]`.
"""


[docs] class UserSelection(BaseModel): """Information about selected files and locators for file masking ruleset generation.""" model_config = ConfigDict(extra="forbid") files: list[str] locators: list[Locator]
[docs] class HashColumnsTableConfig(BaseModel): """ Configuration for `hash_columns` at the table level. `table` contains table-level hash column defaults applied to all selected columns. `columns` contains per-column overrides (`None` or `[]` disables hashing for that column). """ model_config = ConfigDict(extra="forbid") table: Optional[list[str]] = None columns: Optional[dict[str, Optional[list[str]]]] = None
[docs] class SelectedColumns(BaseModel): """Selected columns and hash columns for database masking ruleset generation.""" model_config = ConfigDict(extra="forbid") columns: dict[str, dict[str, list[str]]] hash_columns: Optional[dict[str, dict[str, HashColumnsTableConfig]]] = None
[docs] class SelectedFileData(BaseModel): """Selected files and locators for file masking ruleset generation.""" model_config = ConfigDict(extra="forbid") user_selections: list[UserSelection]
SelectedData = Union[SelectedColumns, SelectedFileData]