# generated by datamodel-codegen:
#   filename:  System.json

from __future__ import annotations

from typing import Literal, Optional

from pydantic import BaseModel, ConfigDict


class Metadata(BaseModel):
    model_config = ConfigDict(
        extra='forbid',
    )
    name: str
    intent: str


class Body(BaseModel):
    model_config = ConfigDict(
        extra='allow',
    )
    applications: Optional[list] = None


class Policy(BaseModel):
    model_config = ConfigDict(
        extra='forbid',
    )
    uses: Optional[str] = None


class Override(BaseModel):
    model_config = ConfigDict(
        extra='forbid',
    )
    application: Optional[str] = None
    exempt_from: Optional[list[str]] = None
    reason: Optional[str] = None
    expires: Optional[str] = None


class Governance(BaseModel):
    model_config = ConfigDict(
        extra='allow',
    )
    policies: Optional[list[Policy]] = None
    overrides: Optional[list[Override]] = None


class DefaultProfiles(BaseModel):
    model_config = ConfigDict(
        extra='forbid',
    )
    cpu: Optional[str] = None
    memory: Optional[str] = None
    disk: Optional[str] = None


class Compute(BaseModel):
    model_config = ConfigDict(
        extra='allow',
    )
    default_profiles: Optional[dict[str, DefaultProfiles]] = None


class System(BaseModel):
    model_config = ConfigDict(
        extra='forbid',
    )
    kind: Literal['System']
    schema_version: str
    metadata: Metadata
    body: Body
    governance: Optional[Governance] = None
    compute: Optional[Compute] = None
