69 lines
2.3 KiB
Python
69 lines
2.3 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Any, Literal
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
from govoplan_core.privacy.schemas import PrivacyRetentionPolicyItem, PrivacyRetentionPolicyPatchItem
|
|
|
|
|
|
class PolicySourceStepItem(BaseModel):
|
|
scope_type: str
|
|
scope_id: str | None = None
|
|
path: str
|
|
label: str
|
|
applied_fields: list[str] = Field(default_factory=list)
|
|
policy: dict[str, Any] = Field(default_factory=dict)
|
|
|
|
|
|
class PrivacyRetentionPolicyScopeRequest(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
policy: PrivacyRetentionPolicyPatchItem = Field(default_factory=PrivacyRetentionPolicyPatchItem)
|
|
change_request_id: str | None = None
|
|
|
|
|
|
class PrivacyRetentionPolicyScopeResponse(BaseModel):
|
|
scope_type: Literal["system", "tenant", "user", "group", "campaign"]
|
|
scope_id: str | None = None
|
|
policy: dict[str, Any]
|
|
effective_policy: PrivacyRetentionPolicyItem
|
|
parent_policy: PrivacyRetentionPolicyItem | None = None
|
|
effective_policy_sources: list[PolicySourceStepItem] = Field(default_factory=list)
|
|
parent_policy_sources: list[PolicySourceStepItem] = Field(default_factory=list)
|
|
|
|
|
|
class PolicyDecisionItem(BaseModel):
|
|
allowed: bool
|
|
reason: str | None = None
|
|
source_path: list[PolicySourceStepItem] = Field(default_factory=list)
|
|
requirements: list[str] = Field(default_factory=list)
|
|
details: dict[str, Any] = Field(default_factory=dict)
|
|
|
|
|
|
class PrivacyRetentionPolicyExplainResponse(BaseModel):
|
|
scope_type: Literal["system", "tenant", "user", "group", "campaign"]
|
|
scope_id: str | None = None
|
|
decision: PolicyDecisionItem
|
|
effective_policy: PrivacyRetentionPolicyItem
|
|
parent_policy: PrivacyRetentionPolicyItem | None = None
|
|
effective_policy_sources: list[PolicySourceStepItem] = Field(default_factory=list)
|
|
parent_policy_sources: list[PolicySourceStepItem] = Field(default_factory=list)
|
|
blocked_fields: list[str] = Field(default_factory=list)
|
|
|
|
|
|
class PrivacyRetentionPolicySimulationResponse(BaseModel):
|
|
scope_type: Literal["system", "tenant", "user", "group", "campaign"]
|
|
scope_id: str | None = None
|
|
simulation: dict[str, Any]
|
|
|
|
|
|
class RetentionRunRequest(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
dry_run: bool = True
|
|
|
|
|
|
class RetentionRunResponse(BaseModel):
|
|
result: dict[str, Any]
|