# Generated by cloudcoil-model-codegen v0.1.1
# DO NOT EDIT

from __future__ import annotations

from typing import Annotated, Callable, Literal, Optional, Type, Union

from pydantic import Field

from cloudcoil import apimachinery
from cloudcoil.pydantic import BaseBuilder, ListBuilder, Self
from cloudcoil.resources import Resource, ResourceList


class PriorityClass(Resource):
    class Builder(BaseBuilder):
        def build(self) -> "PriorityClass":
            return PriorityClass(**self._attrs)

        def api_version(self, value: Optional[Literal["scheduling.k8s.io/v1"]]) -> Self:
            return self._set("api_version", value)

        def description(self, value: Optional[str]) -> Self:
            return self._set("description", value)

        def global_default(self, value: Optional[bool]) -> Self:
            return self._set("global_default", value)

        def kind(self, value: Optional[Literal["PriorityClass"]]) -> Self:
            return self._set("kind", value)

        def metadata(
            self,
            value_or_callback: Union[
                Optional[apimachinery.ObjectMeta],
                Callable[[Type[apimachinery.ObjectMeta]], apimachinery.ObjectMeta],
            ],
        ) -> Self:
            value = value_or_callback
            if callable(value_or_callback):
                value = value_or_callback(apimachinery.ObjectMeta)
            return self._set("metadata", value)

        def preemption_policy(self, value: Optional[str]) -> Self:
            return self._set("preemption_policy", value)

        def value(self, value: int) -> Self:
            return self._set("value", value)

    @classmethod
    def builder(cls) -> Builder:
        return cls.Builder()

    @classmethod
    def list_builder(cls) -> ListBuilder[Self]:
        return ListBuilder[cls]()  # type: ignore[valid-type]

    api_version: Annotated[
        Optional[Literal["scheduling.k8s.io/v1"]],
        Field(
            alias="apiVersion",
            description="APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
        ),
    ] = "scheduling.k8s.io/v1"
    description: Annotated[
        Optional[str],
        Field(
            description="description is an arbitrary string that usually provides guidelines on when this priority class should be used."
        ),
    ] = None
    global_default: Annotated[
        Optional[bool],
        Field(
            alias="globalDefault",
            description="globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.",
        ),
    ] = None
    kind: Annotated[
        Optional[Literal["PriorityClass"]],
        Field(
            description="Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"
        ),
    ] = "PriorityClass"
    metadata: Annotated[
        Optional[apimachinery.ObjectMeta],
        Field(
            description="Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata"
        ),
    ] = None
    preemption_policy: Annotated[
        Optional[str],
        Field(
            alias="preemptionPolicy",
            description="preemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset.",
        ),
    ] = None
    value: Annotated[
        int,
        Field(
            description="value represents the integer value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec."
        ),
    ]


PriorityClassList = ResourceList["PriorityClass"]
