diff --git a/pyproject.toml b/pyproject.toml index e2112cea..95e1e601 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,7 +14,7 @@ dependencies = [ "graypy", "marshmallow", "requests", - "pydantic>=2,<3", + "pydantic~=2.13", "workflows>=3.0", "opentelemetry-api" ] diff --git a/requirements_dev.txt b/requirements_dev.txt index c59ac4f8..de930034 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -51,9 +51,9 @@ pika==1.3.2 # via workflows pluggy==1.5.0 # via pytest -pydantic==2.9.2 +pydantic==2.13.4 # via zocalo -pydantic-core==2.23.4 +pydantic-core==2.46.4 # via pydantic pygments==2.18.0 # via sphinx @@ -98,11 +98,14 @@ stomp-py==8.2.0 # via workflows tomli==2.1.0 ; python_full_version <= '3.11' # via coverage -typing-extensions==4.12.2 +typing-extensions==4.15.0 # via # opentelemetry-api # pydantic # pydantic-core + # typing-inspection +typing-inspection==0.4.2 + # via pydantic urllib3==2.2.3 # via requests websocket-client==1.8.0 diff --git a/src/zocalo/util/slurm/__init__.py b/src/zocalo/util/slurm/__init__.py index 0b25a7aa..e58abbf0 100644 --- a/src/zocalo/util/slurm/__init__.py +++ b/src/zocalo/util/slurm/__init__.py @@ -51,7 +51,7 @@ class SlurmRestApi: def __init__( self, url: str, - version: str = "v0.0.40", + version: str = "v0.0.44", user_name: str | None = None, user_token: str | pathlib.Path | None = None, ): @@ -151,9 +151,9 @@ def get_job_info(self, job_id: int) -> models.JobInfo: def submit_job( self, job_submission: models.JobSubmitReq - ) -> models.JobSubmitResponseMsg: + ) -> models.OpenapiJobSubmitResponse: endpoint = f"slurm/{self.version}/job/submit" response = self.post( endpoint, json=job_submission.model_dump(exclude_defaults=True) ) - return models.JobSubmitResponseMsg(**response.json()) + return models.OpenapiJobSubmitResponse(**response.json()) diff --git a/src/zocalo/util/slurm/models.py b/src/zocalo/util/slurm/models.py index ec911dff..30b41a3d 100644 --- a/src/zocalo/util/slurm/models.py +++ b/src/zocalo/util/slurm/models.py @@ -1,71 +1,132 @@ # generated by datamodel-codegen: # filename: -# timestamp: 2024-07-19T07:42:04+00:00 +# timestamp: 2026-06-10T14:22:00+00:00 from __future__ import annotations -from enum import Enum -from typing import List, Optional +from enum import StrEnum +from typing import Any, Dict, List from pydantic import BaseModel, Field, RootModel +class TypeEnum(StrEnum): + USER = "USER" + ASSOCIATION = "ASSOCIATION" + + +class Float64NoValStruct(BaseModel): + set: bool | None = None + """ + True if number has been set; False if number is unset + """ + infinite: bool | None = None + """ + True if number has been set to infinite; "set" and "number" will be ignored + """ + number: float | None = None + """ + If "set" is True the number will be set with value; otherwise ignore number contents + """ + + +class Uint32NoValStruct(BaseModel): + set: bool | None = None + """ + True if number has been set; False if number is unset + """ + infinite: bool | None = None + """ + True if number has been set to infinite; "set" and "number" will be ignored + """ + number: int | None = None + """ + If "set" is True the number will be set with value; otherwise ignore number contents + """ + + +class Uint64NoValStruct(BaseModel): + set: bool | None = None + """ + True if number has been set; False if number is unset + """ + infinite: bool | None = None + """ + True if number has been set to infinite; "set" and "number" will be ignored + """ + number: int | None = None + """ + If "set" is True the number will be set with value; otherwise ignore number contents + """ + + +class SharesFloat128Tres(BaseModel): + name: str | None = None + """ + TRES name + """ + value: float | None = None + """ + TRES value + """ + + class Plugin(BaseModel): - type: Optional[str] = None + type: str | None = None """ Slurm plugin type (if applicable) """ - name: Optional[str] = None + name: str | None = None """ Slurm plugin name (if applicable) """ - data_parser: Optional[str] = None + data_parser: str | None = None """ Slurm data_parser plugin """ - accounting_storage: Optional[str] = None + accounting_storage: str | None = None """ Slurm accounting plugin """ class Client(BaseModel): - source: Optional[str] = None + source: str | None = None """ Client source description """ - user: Optional[str] = None + user: str | None = None """ Client user (if known) """ - group: Optional[str] = None + group: str | None = None """ Client group (if known) """ class Version(BaseModel): - major: Optional[str] = None + major: str | None = None """ Slurm release major version """ - micro: Optional[str] = None + micro: str | None = None """ Slurm release micro version """ - minor: Optional[str] = None + minor: str | None = None """ Slurm release minor version """ class Slurm(BaseModel): - version: Optional[Version] = None - release: Optional[str] = None + version: Version | None = None + release: str | None = None """ Slurm release string """ - cluster: Optional[str] = None + cluster: str | None = None """ Slurm cluster name """ @@ -76,398 +137,241 @@ class StringArray(RootModel[List[str]]): class OpenapiError(BaseModel): - description: Optional[str] = None + description: str | None = None """ Long form error description """ - error_number: Optional[int] = None + error_number: int | None = None """ Slurm numeric error identifier """ - error: Optional[str] = None + error: str | None = None """ Short form error description """ - source: Optional[str] = None + source: str | None = None """ Source of error or where error was first detected """ class OpenapiWarning(BaseModel): - description: Optional[str] = None + description: str | None = None """ Long form warning description """ - source: Optional[str] = None + source: str | None = None """ Source of warning or where warning was first detected """ -class Uint64NoVal(BaseModel): +class ScheduleExitFields(BaseModel): + end_job_queue: int | None = None """ - Integer number with flags + Reached end of queue """ - - set: Optional[bool] = False + default_queue_depth: int | None = None """ - True if number has been set. False if number is unset + Reached number of jobs allowed to be tested """ - infinite: Optional[bool] = 0 + max_job_start: int | None = None """ - True if number has been set to infinite. "set" and "number" will be ignored. + Reached number of jobs allowed to start """ - number: Optional[int] = None + max_rpc_cnt: int | None = None """ - If set is True the number will be set with value. Otherwise ignore number contents. + Reached RPC limit + """ + max_sched_time: int | None = None + """ + Reached maximum allowed scheduler time + """ + licenses: int | None = None + """ + Blocked on licenses """ - - -class ScheduleExitFields(BaseModel): - end_job_queue: Optional[int] = None - default_queue_depth: Optional[int] = None - max_job_start: Optional[int] = None - max_rpc_cnt: Optional[int] = None - max_sched_time: Optional[int] = None - licenses: Optional[int] = None class BfExitFields(BaseModel): - end_job_queue: Optional[int] = None - bf_max_job_start: Optional[int] = None - bf_max_job_test: Optional[int] = None - bf_max_time: Optional[int] = None - bf_node_space_size: Optional[int] = None - state_changed: Optional[int] = None - - -class StatsMsgRpcsByTypeItem(BaseModel): + end_job_queue: int | None = None """ - RPC + Reached end of queue """ - - message_type: Optional[str] = None + bf_max_job_start: int | None = None """ - Message type as string + Reached number of jobs allowed to start """ - type_id: Optional[int] = None + bf_max_job_test: int | None = None """ - Message type as integer + Reached number of jobs allowed to be tested """ - count: Optional[int] = None + bf_max_time: int | None = None """ - Number of RPCs received + Reached maximum allowed scheduler time """ - average_time: Optional[int] = None + bf_node_space_size: int | None = None """ - Average time spent processing RPC in seconds + Reached table size limit """ - total_time: Optional[int] = None + state_changed: int | None = None """ - Total time spent processing RPC in seconds + System state changed """ -class StatsMsgRpcsByType(RootModel[List[StatsMsgRpcsByTypeItem]]): +class StatsMsgRpcType(BaseModel): + type_id: int """ - RPCs by message type + Message type as integer """ - - root: List[StatsMsgRpcsByTypeItem] + message_type: str """ - RPCs by message type + Message type as string (Slurm RPC message type) """ - - -class StatsMsgRpcsByUserItem(BaseModel): + count: int """ - user + Number of RPCs received """ - - user: Optional[str] = None + queued: int """ - user name + Number of RPCs queued """ - user_id: Optional[int] = None + dropped: int """ - user id (numeric) + Number of RPCs dropped """ - count: Optional[int] = None + cycle_last: int """ - Number of RPCs received + Number of RPCs processed within the last RPC queue cycle """ - average_time: Optional[int] = None + cycle_max: int """ - Average time spent processing RPC in seconds + Maximum number of RPCs processed within a RPC queue cycle since start """ - total_time: Optional[int] = None + total_time: int """ Total time spent processing RPC in seconds """ + average_time: Uint64NoValStruct + """ + Average time spent processing RPC in seconds (64 bit integer number with flags) + """ -class StatsMsgRpcsByUser(RootModel[List[StatsMsgRpcsByUserItem]]): +class StatsMsgRpcUser(BaseModel): + user_id: int """ - RPCs by user + User ID (numeric) """ - - root: List[StatsMsgRpcsByUserItem] + user: str """ - RPCs by user + User name """ - - -class License(BaseModel): - LicenseName: Optional[str] = None - Total: Optional[int] = None - Used: Optional[int] = None - Free: Optional[int] = None - Remote: Optional[bool] = None - Reserved: Optional[int] = None - LastConsumed: Optional[int] = None - LastDeficit: Optional[int] = None - LastUpdate: Optional[int] = None - - -class ControllerPing(BaseModel): - hostname: Optional[str] = None - pinged: Optional[str] = None - latency: Optional[int] = None - mode: Optional[str] = None - - -class Flag(Enum): - KILL_INVALID_DEPENDENCY = "KILL_INVALID_DEPENDENCY" - NO_KILL_INVALID_DEPENDENCY = "NO_KILL_INVALID_DEPENDENCY" - HAS_STATE_DIRECTORY = "HAS_STATE_DIRECTORY" - TESTING_BACKFILL = "TESTING_BACKFILL" - GRES_BINDING_ENFORCED = "GRES_BINDING_ENFORCED" - TEST_NOW_ONLY = "TEST_NOW_ONLY" - SEND_JOB_ENVIRONMENT = "SEND_JOB_ENVIRONMENT" - SPREAD_JOB = "SPREAD_JOB" - PREFER_MINIMUM_NODE_COUNT = "PREFER_MINIMUM_NODE_COUNT" - JOB_KILL_HURRY = "JOB_KILL_HURRY" - SKIP_TRES_STRING_ACCOUNTING = "SKIP_TRES_STRING_ACCOUNTING" - SIBLING_CLUSTER_UPDATE_ONLY = "SIBLING_CLUSTER_UPDATE_ONLY" - HETEROGENEOUS_JOB = "HETEROGENEOUS_JOB" - EXACT_TASK_COUNT_REQUESTED = "EXACT_TASK_COUNT_REQUESTED" - EXACT_CPU_COUNT_REQUESTED = "EXACT_CPU_COUNT_REQUESTED" - TESTING_WHOLE_NODE_BACKFILL = "TESTING_WHOLE_NODE_BACKFILL" - TOP_PRIORITY_JOB = "TOP_PRIORITY_JOB" - ACCRUE_COUNT_CLEARED = "ACCRUE_COUNT_CLEARED" - GRED_BINDING_DISABLED = "GRED_BINDING_DISABLED" - JOB_WAS_RUNNING = "JOB_WAS_RUNNING" - JOB_ACCRUE_TIME_RESET = "JOB_ACCRUE_TIME_RESET" - CRON_JOB = "CRON_JOB" - EXACT_MEMORY_REQUESTED = "EXACT_MEMORY_REQUESTED" - USING_DEFAULT_ACCOUNT = "USING_DEFAULT_ACCOUNT" - USING_DEFAULT_PARTITION = "USING_DEFAULT_PARTITION" - USING_DEFAULT_QOS = "USING_DEFAULT_QOS" - USING_DEFAULT_WCKEY = "USING_DEFAULT_WCKEY" - DEPENDENT = "DEPENDENT" - MAGNETIC = "MAGNETIC" - PARTITION_ASSIGNED = "PARTITION_ASSIGNED" - BACKFILL_ATTEMPTED = "BACKFILL_ATTEMPTED" - SCHEDULING_ATTEMPTED = "SCHEDULING_ATTEMPTED" - SAVE_BATCH_SCRIPT = "SAVE_BATCH_SCRIPT" - - -class JobStateEnum(Enum): - PENDING = "PENDING" - RUNNING = "RUNNING" - SUSPENDED = "SUSPENDED" - COMPLETED = "COMPLETED" - CANCELLED = "CANCELLED" - FAILED = "FAILED" - TIMEOUT = "TIMEOUT" - NODE_FAIL = "NODE_FAIL" - PREEMPTED = "PREEMPTED" - BOOT_FAIL = "BOOT_FAIL" - DEADLINE = "DEADLINE" - OUT_OF_MEMORY = "OUT_OF_MEMORY" - LAUNCH_FAILED = "LAUNCH_FAILED" - UPDATE_DB = "UPDATE_DB" - REQUEUED = "REQUEUED" - REQUEUE_HOLD = "REQUEUE_HOLD" - SPECIAL_EXIT = "SPECIAL_EXIT" - RESIZING = "RESIZING" - CONFIGURING = "CONFIGURING" - COMPLETING = "COMPLETING" - STOPPED = "STOPPED" - RECONFIG_FAIL = "RECONFIG_FAIL" - POWER_UP_NODE = "POWER_UP_NODE" - REVOKED = "REVOKED" - REQUEUE_FED = "REQUEUE_FED" - RESV_DEL_HOLD = "RESV_DEL_HOLD" - SIGNALING = "SIGNALING" - STAGE_OUT = "STAGE_OUT" - - -class MailTypeEnum(Enum): - BEGIN = "BEGIN" - END = "END" - FAIL = "FAIL" - REQUEUE = "REQUEUE" - TIME_100_ = "TIME=100%" - TIME_90_ = "TIME=90%" - TIME_80_ = "TIME=80%" - TIME_50_ = "TIME=50%" - STAGE_OUT = "STAGE_OUT" - ARRAY_TASKS = "ARRAY_TASKS" - INVALID_DEPENDENCY = "INVALID_DEPENDENCY" - - -class FlagModel(Enum): - EQUAL_POWER = "EQUAL_POWER" - - -class Power(BaseModel): - flags: Optional[List[FlagModel]] = None - - -class ProfileEnum(Enum): - NOT_SET = "NOT_SET" - NONE = "NONE" - ENERGY = "ENERGY" - LUSTRE = "LUSTRE" - NETWORK = "NETWORK" - TASK = "TASK" - - -class SharedEnum(Enum): - none = "none" - oversubscribe = "oversubscribe" - user = "user" - mcs = "mcs" - - -class ExclusiveEnum(Enum): - true = "true" - false = "false" - user = "user" - mcs = "mcs" - - -class ShowFlag(Enum): - ALL = "ALL" - DETAIL = "DETAIL" - MIXED = "MIXED" - LOCAL = "LOCAL" - SIBLING = "SIBLING" - FEDERATION = "FEDERATION" - FUTURE = "FUTURE" - - -class Uint32NoVal(BaseModel): + count: int + """ + Number of RPCs received + """ + total_time: int """ - Integer number with flags + Total time spent processing RPC in seconds + """ + average_time: Uint64NoValStruct """ + Average time spent processing RPC in seconds (64 bit integer number with flags) + """ + - set: Optional[bool] = False +class StatsMsgRpcQueue(BaseModel): + type_id: int """ - True if number has been set. False if number is unset + Message type as integer """ - infinite: Optional[bool] = 0 + message_type: str """ - True if number has been set to infinite. "set" and "number" will be ignored. + Message type as string (Slurm RPC message type) """ - number: Optional[int] = None + count: int """ - If set is True the number will be set with value. Otherwise ignore number contents. + Number of pending RPCs queued """ -class Uint16NoVal(BaseModel): +class HostlistString(RootModel[List[str]]): + root: List[str] + + +class ControllerPing(BaseModel): + hostname: str | None = None """ - Integer number with flags + Target for ping """ - - set: Optional[bool] = False + pinged: str | None = Field(None, deprecated=True) + """ + Ping result """ - True if number has been set. False if number is unset + responding: bool """ - infinite: Optional[bool] = 0 + If ping RPC responded with pong from controller """ - True if number has been set to infinite. "set" and "number" will be ignored. + latency: int | None = None """ - number: Optional[int] = None + Number of microseconds it took to successfully ping or timeout """ - If set is True the number will be set with value. Otherwise ignore number contents. + mode: str | None = Field(None, deprecated=True) + """ + The operating mode of the responding slurmctld + """ + primary: bool + """ + Is responding slurmctld the primary controller (Is responding slurmctld the primary controller) """ -class Float64NoVal(BaseModel): +class License(BaseModel): + LicenseName: str | None = None """ - 64 bit floating point number with flags + Name of the license """ - - set: Optional[bool] = False + Total: int | None = None """ - True if number has been set. False if number is unset + Total number of licenses present """ - infinite: Optional[bool] = 0.0 + Used: int | None = None """ - True if number has been set to infinite. "set" and "number" will be ignored. + Number of licenses in use """ - number: Optional[float] = None + Free: int | None = None """ - If set is True the number will be set with value. Otherwise ignore number contents. + Number of licenses currently available """ - - -class StatusEnum(Enum): - INVALID = "INVALID" - PENDING = "PENDING" - SUCCESS = "SUCCESS" - ERROR = "ERROR" - SIGNALED = "SIGNALED" - CORE_DUMPED = "CORE_DUMPED" - - -class Signal(BaseModel): - id: Optional[Uint16NoVal] = None + Remote: bool | None = None """ - Signal sent to process (numeric) + Indicates whether licenses are served by the database """ - name: Optional[str] = None + Reserved: int | None = None """ - Signal sent to process + Number of licenses reserved """ - - -class ProcessExitCodeVerbose(BaseModel): - status: Optional[List[StatusEnum]] = None + LastConsumed: int | None = None """ - Status given by return code + Last known number of licenses that were consumed in the license manager (Remote Only) """ - return_code: Optional[Uint32NoVal] = None + LastDeficit: int | None = None """ - Process return code (numeric) + Number of "missing licenses" from the cluster's perspective """ - signal: Optional[Signal] = None - - -class JobInfoGresDetail(RootModel[List[str]]): - root: List[str] - - -class JobResNodes(RootModel[List]): + LastUpdate: int | None = None """ - job node resources + When the license information was last updated (UNIX Timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]')) """ - - root: List + Nodes: str | None = None """ - job node resources + HRes nodes """ -class CsvString(RootModel[List[str]]): - root: List[str] - - -class FlagModel1(Enum): +class Flag(StrEnum): KILL_INVALID_DEPENDENCY = "KILL_INVALID_DEPENDENCY" NO_KILL_INVALID_DEPENDENCY = "NO_KILL_INVALID_DEPENDENCY" HAS_STATE_DIRECTORY = "HAS_STATE_DIRECTORY" @@ -486,11 +390,12 @@ class FlagModel1(Enum): TESTING_WHOLE_NODE_BACKFILL = "TESTING_WHOLE_NODE_BACKFILL" TOP_PRIORITY_JOB = "TOP_PRIORITY_JOB" ACCRUE_COUNT_CLEARED = "ACCRUE_COUNT_CLEARED" - GRED_BINDING_DISABLED = "GRED_BINDING_DISABLED" + GRES_BINDING_DISABLED = "GRES_BINDING_DISABLED" JOB_WAS_RUNNING = "JOB_WAS_RUNNING" JOB_ACCRUE_TIME_RESET = "JOB_ACCRUE_TIME_RESET" CRON_JOB = "CRON_JOB" EXACT_MEMORY_REQUESTED = "EXACT_MEMORY_REQUESTED" + EXTERNAL_JOB = "EXTERNAL_JOB" USING_DEFAULT_ACCOUNT = "USING_DEFAULT_ACCOUNT" USING_DEFAULT_PARTITION = "USING_DEFAULT_PARTITION" USING_DEFAULT_QOS = "USING_DEFAULT_QOS" @@ -500,10 +405,13 @@ class FlagModel1(Enum): PARTITION_ASSIGNED = "PARTITION_ASSIGNED" BACKFILL_ATTEMPTED = "BACKFILL_ATTEMPTED" SCHEDULING_ATTEMPTED = "SCHEDULING_ATTEMPTED" - SAVE_BATCH_SCRIPT = "SAVE_BATCH_SCRIPT" + STEPMGR_ENABLED = "STEPMGR_ENABLED" + SPREAD_SEGMENTS = "SPREAD_SEGMENTS" + CONSOLIDATE_SEGMENTS = "CONSOLIDATE_SEGMENTS" + EXPEDITED_REQUEUE = "EXPEDITED_REQUEUE" -class CpuBindingFlag(Enum): +class CpuBindingFlag(StrEnum): CPU_BIND_TO_THREADS = "CPU_BIND_TO_THREADS" CPU_BIND_TO_CORES = "CPU_BIND_TO_CORES" CPU_BIND_TO_SOCKETS = "CPU_BIND_TO_SOCKETS" @@ -520,69 +428,95 @@ class CpuBindingFlag(Enum): class Rlimits(BaseModel): - cpu: Optional[Uint64NoVal] = None + cpu: Uint64NoValStruct | None = None """ - Per-process CPU limit, in seconds. + Per-process CPU limit, in seconds (Per-process CPU limit, in seconds.) (64 bit integer number with flags) """ - fsize: Optional[Uint64NoVal] = None + fsize: Uint64NoValStruct | None = None """ - Largest file that can be created, in bytes. + Largest file that can be created, in bytes (Largest file that can be created, in bytes.) (64 bit integer number with flags) """ - data: Optional[Uint64NoVal] = None + data: Uint64NoValStruct | None = None """ - Maximum size of data segment, in bytes. + Maximum size of data segment, in bytes (Maximum size of data segment, in bytes. ) (64 bit integer number with flags) """ - stack: Optional[Uint64NoVal] = None + stack: Uint64NoValStruct | None = None """ - Maximum size of stack segment, in bytes. + Maximum size of stack segment, in bytes (Maximum size of stack segment, in bytes.) (64 bit integer number with flags) """ - core: Optional[Uint64NoVal] = None + core: Uint64NoValStruct | None = None """ - Largest core file that can be created, in bytes. + Largest core file that can be created, in bytes (Largest core file that can be created, in bytes.) (64 bit integer number with flags) """ - rss: Optional[Uint64NoVal] = None + rss: Uint64NoValStruct | None = None """ - Largest resident set size, in bytes. This affects swapping; processes that are exceeding their resident set size will be more likely to have physical memory taken from them. + Largest resident set size, in bytes. This affects swapping; processes that are exceeding their resident set size will be more likely to have physical memory taken from them (Largest resident set size, in bytes. This affects swapping; processes that are exceeding their resident set size will be more likely to have physical memory taken from them.) (64 bit integer number with flags) """ - nproc: Optional[Uint64NoVal] = None + nproc: Uint64NoValStruct | None = None """ - Number of processes. + Number of processes (Number of processes.) (64 bit integer number with flags) """ - nofile: Optional[Uint64NoVal] = None + nofile: Uint64NoValStruct | None = None """ - Number of open files. + Number of open files (Number of open files.) (64 bit integer number with flags) """ - memlock: Optional[Uint64NoVal] = None + memlock: Uint64NoValStruct | None = None """ - Locked-in-memory address space + Locked-in-memory address space (Locked-in-memory address space) (64 bit integer number with flags) """ - as_: Optional[Uint64NoVal] = Field(None, alias="as") + as_: Uint64NoValStruct | None = Field(None, alias="as") """ - Address space limit. + Address space limit (Address space limit.) (64 bit integer number with flags) """ -class MemoryBindingTypeEnum(Enum): +class MailTypeEnum(StrEnum): + BEGIN = "BEGIN" + END = "END" + FAIL = "FAIL" + REQUEUE = "REQUEUE" + TIME_100_ = "TIME=100%" + TIME_90_ = "TIME=90%" + TIME_80_ = "TIME=80%" + TIME_50_ = "TIME=50%" + STAGE_OUT = "STAGE_OUT" + ARRAY_TASKS = "ARRAY_TASKS" + INVALID_DEPENDENCY = "INVALID_DEPENDENCY" + + +class MemoryBindingTypeEnum(StrEnum): NONE = "NONE" RANK = "RANK" MAP = "MAP" MASK = "MASK" LOCAL = "LOCAL" VERBOSE = "VERBOSE" - SORT = "SORT" PREFER = "PREFER" -class OpenModeEnum(Enum): +class OpenModeEnum(StrEnum): APPEND = "APPEND" TRUNCATE = "TRUNCATE" -class PowerFlag(Enum): - EQUAL_POWER = "EQUAL_POWER" +class ProfileEnum(StrEnum): + NOT_SET = "NOT_SET" + NONE = "NONE" + ENERGY = "ENERGY" + LUSTRE = "LUSTRE" + NETWORK = "NETWORK" + TASK = "TASK" + + +class SharedEnum(StrEnum): + none = "none" + oversubscribe = "oversubscribe" + user = "user" + mcs = "mcs" + topo = "topo" -class KillWarningFlag(Enum): +class KillWarningFlag(StrEnum): BATCH_JOB = "BATCH_JOB" ARRAY_TASK = "ARRAY_TASK" FULL_STEPS_ONLY = "FULL_STEPS_ONLY" @@ -592,17 +526,19 @@ class KillWarningFlag(Enum): OUT_OF_MEMORY = "OUT_OF_MEMORY" NO_SIBLING_JOBS = "NO_SIBLING_JOBS" RESERVATION_JOB = "RESERVATION_JOB" + VERBOSE = "VERBOSE" + CRON_JOBS = "CRON_JOBS" WARNING_SENT = "WARNING_SENT" -class X11Enum(Enum): +class X11Enum(StrEnum): FORWARD_ALL_NODES = "FORWARD_ALL_NODES" BATCH_NODE = "BATCH_NODE" FIRST_NODE = "FIRST_NODE" LAST_NODE = "LAST_NODE" -class FlagModel2(Enum): +class FlagModel(StrEnum): WILD_MINUTE = "WILD_MINUTE" WILD_HOUR = "WILD_HOUR" WILD_DAY_OF_MONTH = "WILD_DAY_OF_MONTH" @@ -611,54 +547,353 @@ class FlagModel2(Enum): class Line(BaseModel): - start: Optional[int] = None - end: Optional[int] = None + start: int | None = None + """ + Start of this entry in file + """ + end: int | None = None + """ + End of this entry in file + """ class CronEntry(BaseModel): - flags: Optional[List[FlagModel2]] = None - minute: Optional[str] = None - hour: Optional[str] = None - day_of_month: Optional[str] = None - month: Optional[str] = None - day_of_week: Optional[str] = None - specification: Optional[str] = None - command: Optional[str] = None - line: Optional[Line] = None - - -class JobArrayResponseMsgEntry(BaseModel): - job_id: Optional[int] = None + flags: List[FlagModel] | None = None """ - JobId for updated Job + Flags """ - step_id: Optional[str] = None + minute: str | None = None """ - StepId for updated Job + Ranged string specifying eligible minute values (e.g. 0-10,50) """ - error: Optional[str] = None + hour: str | None = None + """ + Ranged string specifying eligible hour values (e.g. 0-5,23) + """ + day_of_month: str | None = None + """ + Ranged string specifying eligible day of month values (e.g. 0-10,29) + """ + month: str | None = None + """ + Ranged string specifying eligible month values (e.g. 0-5,12) + """ + day_of_week: str | None = None + """ + Ranged string specifying eligible day of week values (e.g.0-3,7) + """ + specification: str | None = None + """ + Complete time specification (* means valid for all allowed values) - minute hour day_of_month month day_of_week + """ + command: str | None = None + """ + Command to run + """ + line: Line | None = None + + +class CsvString(RootModel[List[str]]): + root: List[str] + + +class Uint16NoValStruct(BaseModel): + set: bool | None = None + """ + True if number has been set; False if number is unset + """ + infinite: bool | None = None + """ + True if number has been set to infinite; "set" and "number" will be ignored + """ + number: int | None = None + """ + If "set" is True the number will be set with value; otherwise ignore number contents + """ + + +class SlurmStepId(BaseModel): + sluid: str | None = None + """ + SLUID (Slurm Lexicographically-sortable Unique ID) + """ + job_id: Uint32NoValStruct | None = None + """ + Job ID (32 bit integer number with flags) + """ + step_het_component: Uint32NoValStruct | None = None + """ + HetJob component (32 bit integer number with flags) + """ + step_id: str | None = None + """ + Job step ID + """ + + +class FlagModel1(StrEnum): + KILL_INVALID_DEPENDENCY = "KILL_INVALID_DEPENDENCY" + NO_KILL_INVALID_DEPENDENCY = "NO_KILL_INVALID_DEPENDENCY" + HAS_STATE_DIRECTORY = "HAS_STATE_DIRECTORY" + TESTING_BACKFILL = "TESTING_BACKFILL" + GRES_BINDING_ENFORCED = "GRES_BINDING_ENFORCED" + TEST_NOW_ONLY = "TEST_NOW_ONLY" + SEND_JOB_ENVIRONMENT = "SEND_JOB_ENVIRONMENT" + SPREAD_JOB = "SPREAD_JOB" + PREFER_MINIMUM_NODE_COUNT = "PREFER_MINIMUM_NODE_COUNT" + JOB_KILL_HURRY = "JOB_KILL_HURRY" + SKIP_TRES_STRING_ACCOUNTING = "SKIP_TRES_STRING_ACCOUNTING" + SIBLING_CLUSTER_UPDATE_ONLY = "SIBLING_CLUSTER_UPDATE_ONLY" + HETEROGENEOUS_JOB = "HETEROGENEOUS_JOB" + EXACT_TASK_COUNT_REQUESTED = "EXACT_TASK_COUNT_REQUESTED" + EXACT_CPU_COUNT_REQUESTED = "EXACT_CPU_COUNT_REQUESTED" + TESTING_WHOLE_NODE_BACKFILL = "TESTING_WHOLE_NODE_BACKFILL" + TOP_PRIORITY_JOB = "TOP_PRIORITY_JOB" + ACCRUE_COUNT_CLEARED = "ACCRUE_COUNT_CLEARED" + GRES_BINDING_DISABLED = "GRES_BINDING_DISABLED" + JOB_WAS_RUNNING = "JOB_WAS_RUNNING" + JOB_ACCRUE_TIME_RESET = "JOB_ACCRUE_TIME_RESET" + CRON_JOB = "CRON_JOB" + EXACT_MEMORY_REQUESTED = "EXACT_MEMORY_REQUESTED" + EXTERNAL_JOB = "EXTERNAL_JOB" + USING_DEFAULT_ACCOUNT = "USING_DEFAULT_ACCOUNT" + USING_DEFAULT_PARTITION = "USING_DEFAULT_PARTITION" + USING_DEFAULT_QOS = "USING_DEFAULT_QOS" + USING_DEFAULT_WCKEY = "USING_DEFAULT_WCKEY" + DEPENDENT = "DEPENDENT" + MAGNETIC = "MAGNETIC" + PARTITION_ASSIGNED = "PARTITION_ASSIGNED" + BACKFILL_ATTEMPTED = "BACKFILL_ATTEMPTED" + SCHEDULING_ATTEMPTED = "SCHEDULING_ATTEMPTED" + STEPMGR_ENABLED = "STEPMGR_ENABLED" + SPREAD_SEGMENTS = "SPREAD_SEGMENTS" + CONSOLIDATE_SEGMENTS = "CONSOLIDATE_SEGMENTS" + EXPEDITED_REQUEUE = "EXPEDITED_REQUEUE" + + +class JobStateEnum(StrEnum): + PENDING = "PENDING" + RUNNING = "RUNNING" + SUSPENDED = "SUSPENDED" + COMPLETED = "COMPLETED" + CANCELLED = "CANCELLED" + FAILED = "FAILED" + TIMEOUT = "TIMEOUT" + NODE_FAIL = "NODE_FAIL" + PREEMPTED = "PREEMPTED" + BOOT_FAIL = "BOOT_FAIL" + DEADLINE = "DEADLINE" + OUT_OF_MEMORY = "OUT_OF_MEMORY" + LAUNCH_FAILED = "LAUNCH_FAILED" + REQUEUED = "REQUEUED" + REQUEUE_HOLD = "REQUEUE_HOLD" + SPECIAL_EXIT = "SPECIAL_EXIT" + RESIZING = "RESIZING" + CONFIGURING = "CONFIGURING" + COMPLETING = "COMPLETING" + STOPPED = "STOPPED" + RECONFIG_FAIL = "RECONFIG_FAIL" + POWER_UP_NODE = "POWER_UP_NODE" + REVOKED = "REVOKED" + REQUEUE_FED = "REQUEUE_FED" + RESV_DEL_HOLD = "RESV_DEL_HOLD" + SIGNALING = "SIGNALING" + STAGE_OUT = "STAGE_OUT" + EXPEDITING = "EXPEDITING" + + +class Power(BaseModel): + flags: List[Any] | None = Field(None, deprecated=True) + + +class StatusEnum(StrEnum): + INVALID = "INVALID" + PENDING = "PENDING" + SUCCESS = "SUCCESS" + ERROR = "ERROR" + SIGNALED = "SIGNALED" + CORE_DUMPED = "CORE_DUMPED" + + +class Signal(BaseModel): + id: Uint16NoValStruct | None = None + """ + Signal sent to process (numeric) (16 bit integer number with flags) + """ + name: str | None = None + """ + Signal sent to process (name) + """ + + +class ProcessExitCodeVerbose(BaseModel): + status: List[StatusEnum] | None = None + """ + Status given by return code + """ + return_code: Uint32NoValStruct | None = None + """ + Process return code (numeric) (32 bit integer number with flags) + """ + signal: Signal | None = None + + +class JobInfoGresDetail(RootModel[List[str]]): + root: List[str] + + +class SelectTypeEnum(StrEnum): + CPU = "CPU" + SOCKET = "SOCKET" + CORE = "CORE" + BOARD = "BOARD" + MEMORY = "MEMORY" + ONE_TASK_PER_CORE = "ONE_TASK_PER_CORE" + PACK_NODES = "PACK_NODES" + CORE_DEFAULT_DIST_BLOCK = "CORE_DEFAULT_DIST_BLOCK" + LLN = "LLN" + LINEAR = "LINEAR" + + +class SelectTypeEnumModel(StrEnum): + AVAILABLE = "AVAILABLE" + ONE_ROW = "ONE_ROW" + RESERVED = "RESERVED" + + +class Cpus(BaseModel): + count: int | None = None + """ + Total number of CPUs assigned to job + """ + used: int | None = None + """ + Total number of CPUs used by job + """ + + +class Memory(BaseModel): + used: int | None = None + """ + Total memory (MiB) used by job + """ + allocated: int | None = None + """ + Total memory (MiB) allocated to job + """ + + +class StatusEnumModel(StrEnum): + INVALID = "INVALID" + UNALLOCATED = "UNALLOCATED" + ALLOCATED = "ALLOCATED" + IN_USE = "IN_USE" + + +class JobResCore(BaseModel): + index: int + """ + Core index + """ + status: List[StatusEnumModel] + """ + Core status + """ + + +class PartPrio(BaseModel): + partition: str | None = None + """ + Partition name + """ + priority: int | None = None + """ + Prospective job priority if it runs in this partition + """ + + +class Error(BaseModel): + string: str | None = None + """ + String error encountered signaling job + """ + code: int | None = None + """ + Numeric error encountered signaling job + """ + message: str | None = None + """ + Error message why signaling job failed + """ + + +class Federation(BaseModel): + sibling: str | None = None + """ + Name of federation sibling (may be empty for non-federation) + """ + + +class KillJobsRespJob(BaseModel): + error: Error | None = None + step_id: str + """ + Job or Step ID that signaling failed + """ + job_id: Uint32NoValStruct + """ + Job ID that signaling failed (32 bit integer number with flags) + """ + federation: Federation | None = None + + +class FlagModel2(StrEnum): + BATCH_JOB = "BATCH_JOB" + ARRAY_TASK = "ARRAY_TASK" + FULL_STEPS_ONLY = "FULL_STEPS_ONLY" + FULL_JOB = "FULL_JOB" + FEDERATION_REQUEUE = "FEDERATION_REQUEUE" + HURRY = "HURRY" + OUT_OF_MEMORY = "OUT_OF_MEMORY" + NO_SIBLING_JOBS = "NO_SIBLING_JOBS" + RESERVATION_JOB = "RESERVATION_JOB" + VERBOSE = "VERBOSE" + CRON_JOBS = "CRON_JOBS" + WARNING_SENT = "WARNING_SENT" + + +class KillJobsMsgJobsArray(RootModel[List[str]]): + root: List[str] + + +class JobArrayResponseMsgEntry(BaseModel): + job_id: int | None = None + """ + Job ID for updated job + """ + step_id: str | None = None + """ + Step ID for updated job + """ + error: str | None = None """ Verbose update status or error """ - error_code: Optional[int] = None + error_code: int | None = None """ Verbose update status or error """ - why: Optional[str] = None + why: str | None = None """ Update response message """ -class JobSubmitResponseMsg(BaseModel): - job_id: Optional[int] = None - step_id: Optional[str] = None - error_code: Optional[int] = None - error: Optional[str] = None - job_submit_user_msg: Optional[str] = None +class CertFlag(StrEnum): + TOKEN_SET = "TOKEN_SET" -class NextStateAfterRebootEnum(Enum): +class NextStateAfterRebootEnum(StrEnum): INVALID = "INVALID" UNKNOWN = "UNKNOWN" DOWN = "DOWN" @@ -667,7 +902,7 @@ class NextStateAfterRebootEnum(Enum): ERROR = "ERROR" MIXED = "MIXED" FUTURE = "FUTURE" - PERFCTRS = "PERFCTRS" + EXTERNAL = "EXTERNAL" RESERVED = "RESERVED" UNDRAIN = "UNDRAIN" CLOUD = "CLOUD" @@ -690,9 +925,10 @@ class NextStateAfterRebootEnum(Enum): POWER_UP = "POWER_UP" POWER_DRAIN = "POWER_DRAIN" DYNAMIC_NORM = "DYNAMIC_NORM" + BLOCKED = "BLOCKED" -class StateEnum(Enum): +class StateEnum(StrEnum): INVALID = "INVALID" UNKNOWN = "UNKNOWN" DOWN = "DOWN" @@ -701,7 +937,7 @@ class StateEnum(Enum): ERROR = "ERROR" MIXED = "MIXED" FUTURE = "FUTURE" - PERFCTRS = "PERFCTRS" + EXTERNAL = "EXTERNAL" RESERVED = "RESERVED" UNDRAIN = "UNDRAIN" CLOUD = "CLOUD" @@ -724,116 +960,290 @@ class StateEnum(Enum): POWER_UP = "POWER_UP" POWER_DRAIN = "POWER_DRAIN" DYNAMIC_NORM = "DYNAMIC_NORM" + BLOCKED = "BLOCKED" class AcctGatherEnergy(BaseModel): - average_watts: Optional[int] = None - base_consumed_energy: Optional[int] = None - consumed_energy: Optional[int] = None - current_watts: Optional[Uint32NoVal] = None - previous_consumed_energy: Optional[int] = None - last_collected: Optional[int] = None - + average_watts: int | None = None + """ + Average power consumption, in watts + """ + base_consumed_energy: int | None = None + """ + The energy consumed between when the node was powered on and the last time it was registered by slurmd, in joules + """ + consumed_energy: int | None = None + """ + The energy consumed between the last time the node was registered by the slurmd daemon and the last node energy accounting sample, in joules + """ + current_watts: Uint32NoValStruct | None = None + """ + The instantaneous power consumption at the time of the last node energy accounting sample, in watts (32 bit integer number with flags) + """ + previous_consumed_energy: int | None = None + """ + Previous value of consumed_energy + """ + last_collected: int | None = None + """ + Time when energy data was last retrieved (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]')) + """ -class ExtSensorsData(BaseModel): - consumed_energy: Optional[Uint64NoVal] = None - temperature: Optional[Uint32NoVal] = None - energy_update_time: Optional[int] = None - current_watts: Optional[int] = None +class UpdateNodeMsg(BaseModel): + comment: str | None = None + """ + Arbitrary comment + """ + cpu_bind: int | None = None + """ + Default method for binding tasks to allocated CPUs + """ + extra: str | None = None + """ + Arbitrary string used for node filtering if extra constraints are enabled + """ + features: CsvString | None = None + """ + Available features + """ + features_act: CsvString | None = None + """ + Currently active features + """ + gres: str | None = None + """ + Generic resources + """ + address: HostlistString | None = None + """ + NodeAddr, used to establish a communication path + """ + hostname: HostlistString | None = None + """ + NodeHostname + """ + name: HostlistString | None = None + """ + NodeName + """ + state: List[StateEnum] | None = None + """ + New state to assign to the node + """ + reason: str | None = None + """ + Reason for node being DOWN or DRAINING + """ + reason_uid: str | None = None + """ + User ID to associate with the reason (needed if user root is sending message) + """ + resume_after: Uint32NoValStruct | None = None + """ + Number of seconds after which to automatically resume DOWN or DRAINED node (32 bit integer number with flags) + """ + topology_str: str | None = None + """ + Topology + """ + weight: Uint32NoValStruct | None = None + """ + Weight of the node for scheduling purposes (32 bit integer number with flags) + """ -class PowerMgmtData(BaseModel): - maximum_watts: Optional[Uint32NoVal] = None - current_watts: Optional[int] = None - total_energy: Optional[int] = None - new_maximum_watts: Optional[int] = None - peak_watts: Optional[int] = None - lowest_watts: Optional[int] = None - new_job_time: Optional[Uint64NoVal] = None - state: Optional[int] = None - time_start_day: Optional[int] = None - -class HostlistString(RootModel[List[str]]): - root: List[str] - - -class Nodes(BaseModel): - allowed_allocation: Optional[str] = None - configured: Optional[str] = None - total: Optional[int] = None +class Nodes(BaseModel): + allowed_allocation: str | None = None + """ + AllocNodes - Comma-separated list of nodes from which users can submit jobs in the partition + """ + configured: str | None = None + """ + Nodes - Comma-separated list of nodes which are associated with this partition + """ + total: int | None = None + """ + TotalNodes - Number of nodes available in this partition + """ class Accounts(BaseModel): - allowed: Optional[str] = None - deny: Optional[str] = None + allowed: str | None = None + """ + AllowAccounts - Comma-separated list of accounts which may execute jobs in the partition + """ + deny: str | None = None + """ + DenyAccounts - Comma-separated list of accounts which may not execute jobs in the partition + """ class Groups(BaseModel): - allowed: Optional[str] = None + allowed: str | None = None + """ + AllowGroups - Comma-separated list of group names which may execute jobs in this partition + """ class Qos(BaseModel): - allowed: Optional[str] = None - deny: Optional[str] = None - assigned: Optional[str] = None + allowed: str | None = None + """ + AllowQOS - Comma-separated list of Qos which may execute jobs in the partition + """ + deny: str | None = None + """ + DenyQOS - Comma-separated list of Qos which may not execute jobs in the partition + """ + assigned: str | None = None + """ + QOS - QOS name containing limits that will apply to all jobs in this partition + """ class Tres(BaseModel): - billing_weights: Optional[str] = None - configured: Optional[str] = None + billing_weights: str | None = None + """ + TRESBillingWeights - Billing weights of each tracked TRES type that will be used in calculating the usage of a job + """ + configured: str | None = None + """ + TRES - Number of each applicable TRES type available in this partition + """ -class Cpus(BaseModel): - task_binding: Optional[int] = None - total: Optional[int] = None +class SelectTypeEnumModel1(StrEnum): + CPU = "CPU" + SOCKET = "SOCKET" + CORE = "CORE" + BOARD = "BOARD" + MEMORY = "MEMORY" + ONE_TASK_PER_CORE = "ONE_TASK_PER_CORE" + PACK_NODES = "PACK_NODES" + CORE_DEFAULT_DIST_BLOCK = "CORE_DEFAULT_DIST_BLOCK" + LLN = "LLN" + LINEAR = "LINEAR" + + +class CpusModel(BaseModel): + task_binding: int | None = None + """ + CpuBind - Default method controlling how tasks are bound to allocated resources + """ + total: int | None = None + """ + TotalCPUs - Number of CPUs available in this partition + """ class Defaults(BaseModel): - memory_per_cpu: Optional[int] = None - partition_memory_per_cpu: Optional[Uint64NoVal] = None - partition_memory_per_node: Optional[Uint64NoVal] = None - time: Optional[Uint32NoVal] = None - job: Optional[str] = None + memory_per_cpu: int | None = None + """ + Raw value for DefMemPerCPU or DefMemPerNode + """ + partition_memory_per_cpu: Uint64NoValStruct | None = None + """ + DefMemPerCPU - Default real memory size available per allocated CPU in megabytes (64 bit integer number with flags) + """ + partition_memory_per_node: Uint64NoValStruct | None = None + """ + DefMemPerNode - Default real memory size available per allocated node in megabytes (64 bit integer number with flags) + """ + time: Uint32NoValStruct | None = None + """ + DefaultTime - Run time limit in minutes used for jobs that don't specify a value (32 bit integer number with flags) + """ + job: str | None = None + """ + JobDefaults - Comma-separated list of job default values (this field is only used to set new defaults) + """ -class FlagModel3(Enum): +class FlagModel3(StrEnum): force = "force" class Oversubscribe(BaseModel): - jobs: Optional[int] = None - flags: Optional[List[FlagModel3]] = None + jobs: int | None = None + """ + Maximum number of jobs allowed to oversubscribe resources + """ + flags: List[FlagModel3] | None = None + """ + Flags applicable to the OverSubscribe setting + """ class Maximums(BaseModel): - cpus_per_node: Optional[Uint32NoVal] = None - cpus_per_socket: Optional[Uint32NoVal] = None - memory_per_cpu: Optional[int] = None - partition_memory_per_cpu: Optional[Uint64NoVal] = None - partition_memory_per_node: Optional[Uint64NoVal] = None - nodes: Optional[Uint32NoVal] = None - shares: Optional[int] = None - oversubscribe: Optional[Oversubscribe] = None - time: Optional[Uint32NoVal] = None - over_time_limit: Optional[Uint16NoVal] = None + cpus_per_node: Uint32NoValStruct | None = None + """ + MaxCPUsPerNode - Maximum number of CPUs on any node available to all jobs from this partition (32 bit integer number with flags) + """ + cpus_per_socket: Uint32NoValStruct | None = None + """ + MaxCPUsPerSocket - Maximum number of CPUs on any node available on the all jobs from this partition (32 bit integer number with flags) + """ + memory_per_cpu: int | None = None + """ + Raw value for MaxMemPerCPU or MaxMemPerNode + """ + partition_memory_per_cpu: Uint64NoValStruct | None = None + """ + MaxMemPerCPU - Maximum real memory size available per allocated CPU in megabytes (64 bit integer number with flags) + """ + partition_memory_per_node: Uint64NoValStruct | None = None + """ + MaxMemPerNode - Maximum real memory size available per allocated node in a job allocation in megabytes (64 bit integer number with flags) + """ + nodes: Uint32NoValStruct | None = None + """ + MaxNodes - Maximum count of nodes which may be allocated to any single job (32 bit integer number with flags) + """ + shares: int | None = None + """ + OverSubscribe - Controls the ability of the partition to execute more than one job at a time on each resource + """ + oversubscribe: Oversubscribe | None = None + time: Uint32NoValStruct | None = None + """ + MaxTime - Maximum run time limit for jobs (32 bit integer number with flags) + """ + over_time_limit: Uint16NoValStruct | None = None + """ + OverTimeLimit - Number of minutes by which a job can exceed its time limit before being canceled (16 bit integer number with flags) + """ class Minimums(BaseModel): - nodes: Optional[int] = None + nodes: int | None = None + """ + MinNodes - Minimum count of nodes which may be allocated to any single job + """ class Priority(BaseModel): - job_factor: Optional[int] = None - tier: Optional[int] = None + job_factor: int | None = None + """ + PriorityJobFactor - Partition factor used by priority/multifactor plugin in calculating job priority + """ + tier: int | None = None + """ + PriorityTier - Controls the order in which the scheduler evaluates jobs from different partitions + """ class Timeouts(BaseModel): - resume: Optional[Uint16NoVal] = None - suspend: Optional[Uint16NoVal] = None + resume: Uint16NoValStruct | None = None + """ + ResumeTimeout - Resumed nodes which fail to respond in this time frame will be marked DOWN (GLOBAL if both set and infinite are false) (16 bit integer number with flags) + """ + suspend: Uint16NoValStruct | None = None + """ + SuspendTimeout - Maximum time permitted (in seconds) between when a node suspend request is issued and when the node is shutdown (GLOBAL if both set and infinite are false) (16 bit integer number with flags) + """ -class StateEnumModel(Enum): +class StateEnumModel(StrEnum): INACTIVE = "INACTIVE" UNKNOWN = "UNKNOWN" UP = "UP" @@ -842,31 +1252,60 @@ class StateEnumModel(Enum): class Partition(BaseModel): - state: Optional[List[StateEnumModel]] = None + state: List[StateEnumModel] | None = None + """ + Current state(s) + """ class PartitionInfo(BaseModel): - nodes: Optional[Nodes] = None - accounts: Optional[Accounts] = None - groups: Optional[Groups] = None - qos: Optional[Qos] = None - alternate: Optional[str] = None - tres: Optional[Tres] = None - cluster: Optional[str] = None - cpus: Optional[Cpus] = None - defaults: Optional[Defaults] = None - grace_time: Optional[int] = None - maximums: Optional[Maximums] = None - minimums: Optional[Minimums] = None - name: Optional[str] = None - node_sets: Optional[str] = None - priority: Optional[Priority] = None - timeouts: Optional[Timeouts] = None - partition: Optional[Partition] = None - suspend_time: Optional[Uint32NoVal] = None - - -class FlagModel4(Enum): + nodes: Nodes | None = None + accounts: Accounts | None = None + groups: Groups | None = None + qos: Qos | None = None + alternate: str | None = None + """ + Alternate - Partition name of alternate partition to be used if the state of this partition is DRAIN or INACTIVE + """ + tres: Tres | None = None + cluster: str | None = None + """ + Cluster name + """ + select_type: List[SelectTypeEnumModel1] | None = None + """ + Scheduler consumable resource selection type + """ + cpus: CpusModel | None = None + defaults: Defaults | None = None + grace_time: int | None = None + """ + GraceTime - Grace time in seconds to be extended to a job which has been selected for preemption + """ + maximums: Maximums | None = None + minimums: Minimums | None = None + name: str | None = None + """ + PartitionName - Name by which the partition may be referenced + """ + node_sets: str | None = None + """ + NodeSets - Comma-separated list of nodesets which are associated with this partition + """ + priority: Priority | None = None + timeouts: Timeouts | None = None + topology: str | None = None + """ + Topology - Name of the topology, defined in topology.yaml, used by jobs in this partition + """ + partition: Partition | None = None + suspend_time: Uint32NoValStruct | None = None + """ + SuspendTime - Nodes which remain idle or down for this number of seconds will be placed into power save mode (GLOBAL if both set and infinite are false) (32 bit integer number with flags) + """ + + +class FlagModel4(StrEnum): MAINT = "MAINT" NO_MAINT = "NO_MAINT" DAILY = "DAILY" @@ -876,6 +1315,7 @@ class FlagModel4(Enum): IGNORE_JOBS = "IGNORE_JOBS" NO_IGNORE_JOBS = "NO_IGNORE_JOBS" ANY_NODES = "ANY_NODES" + NO_ANY_NODES = "NO_ANY_NODES" STATIC = "STATIC" NO_STATIC = "NO_STATIC" PART_NODES = "PART_NODES" @@ -895,115 +1335,194 @@ class FlagModel4(Enum): DURATION_PLUS = "DURATION_PLUS" DURATION_MINUS = "DURATION_MINUS" NO_HOLD_JOBS_AFTER_END = "NO_HOLD_JOBS_AFTER_END" + REPLACE_DOWN = "REPLACE_DOWN" NO_PURGE_COMP = "NO_PURGE_COMP" MAGNETIC = "MAGNETIC" + NO_MAGNETIC = "NO_MAGNETIC" SKIP = "SKIP" HOURLY = "HOURLY" NO_HOURLY = "NO_HOURLY" + USER_DELETE = "USER_DELETE" + FORCE_START = "FORCE_START" + NO_USER_DELETE = "NO_USER_DELETE" REOCCURRING = "REOCCURRING" + TRES_PER_NODE = "TRES_PER_NODE" class PurgeCompleted(BaseModel): - time: Optional[Uint32NoVal] = None + time: Uint32NoValStruct | None = None + """ + If PURGE_COMP flag is set, the number of seconds this reservation will sit idle until it is revoked (32 bit integer number with flags) + """ class ReservationCoreSpec(BaseModel): - node: Optional[str] = None - core: Optional[str] = None - - -class Fairshare(BaseModel): - factor: Optional[float] = None + node: str | None = None """ - fairshare factor + Name of reserved node """ - level: Optional[float] = None + core: str | None = None """ - fairshare factor at this level. stored on an assoc as a long double, but that is not needed for display in sshare + IDs of reserved cores """ -class TypeEnum(Enum): - USER = "USER" - ASSOCIATION = "ASSOCIATION" - - -class SharesUint64Tres(BaseModel): - name: Optional[str] = None +class TresModel(BaseModel): + type: str """ - TRES name + TRES type (CPU, MEM, etc) """ - value: Optional[Uint64NoVal] = None + name: str | None = None """ - TRES value + TRES name (if applicable) + """ + id: int | None = None + """ + ID used in the database + """ + count: int | None = None + """ + TRES count (0 if listed generically) """ -class SharesFloat128Tres(BaseModel): - name: Optional[str] = None +class NodeGresLayout(BaseModel): + name: str """ - TRES name + GRES name """ - value: Optional[float] = None + type: str | None = None """ - TRES value + GRES type (optional) + """ + count: int | None = None + """ + Count + """ + index: str | None = None + """ + Index """ class Comment(BaseModel): - administrator: Optional[str] = None - job: Optional[str] = None - system: Optional[str] = None + administrator: str | None = None + """ + Arbitrary comment made by administrator + """ + job: str | None = None + """ + Arbitrary comment made by user + """ + system: str | None = None + """ + Arbitrary comment from slurmctld + """ class Running(BaseModel): - tasks: Optional[int] = None + tasks: int | None = None + """ + Maximum number of simultaneously running tasks, 0 if no limit + """ class Max(BaseModel): - running: Optional[Running] = None + running: Running | None = None class Limits(BaseModel): - max: Optional[Max] = None + max: Max | None = None class Array(BaseModel): - job_id: Optional[int] = None - limits: Optional[Limits] = None - task_id: Optional[Uint32NoVal] = None - task: Optional[str] = None + job_id: int | None = None + """ + Job ID of job array, or 0 if N/A + """ + limits: Limits | None = None + task_id: Uint32NoValStruct | None = None + """ + Task ID of this task in job array (32 bit integer number with flags) + """ + task: str | None = None + """ + String expression of task IDs in this record + """ class System(BaseModel): - seconds: Optional[int] = None - microseconds: Optional[int] = None + seconds: int | None = None + """ + System CPU time used by the job in seconds + """ + microseconds: int | None = None + """ + System CPU time used by the job in microseconds + """ class Total(BaseModel): - seconds: Optional[int] = None - microseconds: Optional[int] = None + seconds: int | None = None + """ + Sum of System and User CPU time used by the job in seconds + """ + microseconds: int | None = None + """ + Sum of System and User CPU time used by the job in microseconds + """ class User(BaseModel): - seconds: Optional[int] = None - microseconds: Optional[int] = None + seconds: int | None = None + """ + User CPU time used by the job in seconds + """ + microseconds: int | None = None + """ + User CPU time used by the job in microseconds + """ class Time(BaseModel): - elapsed: Optional[int] = None - eligible: Optional[int] = None - end: Optional[int] = None - start: Optional[int] = None - submission: Optional[int] = None - suspended: Optional[int] = None - system: Optional[System] = None - limit: Optional[Uint32NoVal] = None - total: Optional[Total] = None - user: Optional[User] = None - - -class FlagModel5(Enum): + elapsed: int | None = None + """ + Elapsed time in seconds + """ + eligible: int | None = None + """ + Time when the job became eligible to run (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]')) + """ + end: int | None = None + """ + End time (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]')) + """ + planned: Uint64NoValStruct | None = None + """ + Time required to start job after becoming eligible to run in seconds (64 bit integer number with flags) + """ + start: int | None = None + """ + Time execution began (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]')) + """ + submission: int | None = None + """ + Time when the job was submitted (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]')) + """ + suspended: int | None = None + """ + Total time in suspended state in seconds + """ + system: System | None = None + limit: Uint32NoValStruct | None = None + """ + Maximum run time in minutes (32 bit integer number with flags) + """ + total: Total | None = None + user: User | None = None + + +class FlagModel5(StrEnum): NONE = "NONE" CLEAR_SCHEDULING = "CLEAR_SCHEDULING" NOT_SET = "NOT_SET" @@ -1011,29 +1530,58 @@ class FlagModel5(Enum): STARTED_ON_SCHEDULE = "STARTED_ON_SCHEDULE" STARTED_ON_BACKFILL = "STARTED_ON_BACKFILL" START_RECEIVED = "START_RECEIVED" + JOB_ALTERED = "JOB_ALTERED" class Het(BaseModel): - job_id: Optional[int] = None - job_offset: Optional[Uint32NoVal] = None + job_id: int | None = None + """ + Heterogeneous job ID, if applicable + """ + job_offset: Uint32NoValStruct | None = None + """ + Unique sequence number applied to this component of the heterogeneous job (32 bit integer number with flags) + """ class Mcs(BaseModel): - label: Optional[str] = None + label: str | None = None + """ + Multi-Category Security label on the job + """ class Required(BaseModel): - CPUs: Optional[int] = None - memory_per_cpu: Optional[Uint64NoVal] = None - memory_per_node: Optional[Uint64NoVal] = None + CPUs: int | None = None + """ + Minimum number of CPUs required + """ + memory_per_cpu: Uint64NoValStruct | None = None + """ + Minimum memory in megabytes per allocated CPU (64 bit integer number with flags) + """ + memory_per_node: Uint64NoValStruct | None = None + """ + Minimum memory in megabytes per allocated node (64 bit integer number with flags) + """ class Reservation(BaseModel): - id: Optional[int] = None - name: Optional[str] = None + id: int | None = None + """ + Unique identifier of requested reservation + """ + name: str | None = None + """ + Name of reservation to use + """ + requested: str | None = None + """ + Comma-separated list of requested reservation names + """ -class CurrentEnum(Enum): +class CurrentEnum(StrEnum): PENDING = "PENDING" RUNNING = "RUNNING" SUSPENDED = "SUSPENDED" @@ -1047,7 +1595,6 @@ class CurrentEnum(Enum): DEADLINE = "DEADLINE" OUT_OF_MEMORY = "OUT_OF_MEMORY" LAUNCH_FAILED = "LAUNCH_FAILED" - UPDATE_DB = "UPDATE_DB" REQUEUED = "REQUEUED" REQUEUE_HOLD = "REQUEUE_HOLD" SPECIAL_EXIT = "SPECIAL_EXIT" @@ -1062,61 +1609,129 @@ class CurrentEnum(Enum): RESV_DEL_HOLD = "RESV_DEL_HOLD" SIGNALING = "SIGNALING" STAGE_OUT = "STAGE_OUT" + EXPEDITING = "EXPEDITING" class State(BaseModel): - current: Optional[List[CurrentEnum]] = None - reason: Optional[str] = None + current: List[CurrentEnum] | None = None + """ + Current state + """ + reason: str | None = None + """ + Reason for previous Pending or Failed state + """ class AssocShort(BaseModel): - account: Optional[str] = None + account: str | None = None """ - Association account (if assigned) + Account name """ - cluster: Optional[str] = None + cluster: str | None = None """ - Association cluster (if assigned) + Cluster name """ - partition: Optional[str] = None + partition: str | None = None """ - Association partition (if assigned) + Partition name """ user: str """ - Assocation user (if assigned) + User name + """ + id: int | None = None + """ + Numeric association ID + """ + + +class SystemModel(BaseModel): + seconds: int | None = None + """ + System CPU time used by the step in seconds + """ + microseconds: int | None = None + """ + System CPU time used by the step in microseconds + """ + + +class TotalModel(BaseModel): + seconds: int | None = None + """ + Total CPU time used by the step in seconds + """ + microseconds: int | None = None + """ + Total CPU time used by the step in microseconds + """ + + +class UserModel(BaseModel): + seconds: int | None = None + """ + User CPU time used by the step in seconds """ - id: Optional[int] = None + microseconds: int | None = None """ - Numeric Association ID (if known) + User CPU time used by the step in microseconds """ class TimeModel(BaseModel): - elapsed: Optional[int] = None - end: Optional[Uint64NoVal] = None - start: Optional[Uint64NoVal] = None - suspended: Optional[int] = None - system: Optional[System] = None - total: Optional[Total] = None - user: Optional[User] = None + elapsed: int | None = None + """ + Elapsed time in seconds + """ + end: Uint64NoValStruct | None = None + """ + End time (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) + """ + start: Uint64NoValStruct | None = None + """ + Time execution began (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) + """ + suspended: int | None = None + """ + Total time in suspended state in seconds + """ + system: SystemModel | None = None + limit: Uint32NoValStruct | None = None + """ + Maximum run time in minutes (32 bit integer number with flags) + """ + total: TotalModel | None = None + user: UserModel | None = None class Tasks(BaseModel): - count: Optional[int] = None + count: int | None = None + """ + Total number of tasks + """ class RequestedFrequency(BaseModel): - min: Optional[Uint32NoVal] = None - max: Optional[Uint32NoVal] = None + min: Uint32NoValStruct | None = None + """ + Minimum requested CPU frequency in kHz (32 bit integer number with flags) + """ + max: Uint32NoValStruct | None = None + """ + Maximum requested CPU frequency in kHz (32 bit integer number with flags) + """ class CPU(BaseModel): - requested_frequency: Optional[RequestedFrequency] = None - governor: Optional[str] = None + requested_frequency: RequestedFrequency | None = None + governor: str | None = None + """ + Requested CPU frequency governor in kHz + """ -class StateEnumModel1(Enum): +class StateEnumModel1(StrEnum): PENDING = "PENDING" RUNNING = "RUNNING" SUSPENDED = "SUSPENDED" @@ -1130,7 +1745,6 @@ class StateEnumModel1(Enum): DEADLINE = "DEADLINE" OUT_OF_MEMORY = "OUT_OF_MEMORY" LAUNCH_FAILED = "LAUNCH_FAILED" - UPDATE_DB = "UPDATE_DB" REQUEUED = "REQUEUED" REQUEUE_HOLD = "REQUEUE_HOLD" SPECIAL_EXIT = "SPECIAL_EXIT" @@ -1145,42 +1759,76 @@ class StateEnumModel1(Enum): RESV_DEL_HOLD = "RESV_DEL_HOLD" SIGNALING = "SIGNALING" STAGE_OUT = "STAGE_OUT" + EXPEDITING = "EXPEDITING" class CPUModel(BaseModel): - actual_frequency: Optional[int] = None + actual_frequency: int | None = None + """ + Average weighted CPU frequency of all tasks in kHz + """ class Energy(BaseModel): - consumed: Optional[Uint64NoVal] = None + consumed: Uint64NoValStruct | None = None + """ + Total energy consumed by all tasks in a job in joules (64 bit integer number with flags) + """ class Statistics(BaseModel): - CPU: Optional[CPUModel] = None - energy: Optional[Energy] = None + CPU: CPUModel | None = None + energy: Energy | None = None class Step(BaseModel): - id: Optional[str] = None + id: str | None = None + """ + Step ID (Slurm job step ID) + """ + name: str | None = None """ - Slurm Job StepId + Step name + """ + stderr: str | None = None + """ + Path to stderr file + """ + stdin: str | None = None + """ + Path to stdin file + """ + stdout: str | None = None + """ + Path to stdout file + """ + stderr_expanded: str | None = None + """ + Step stderr with expanded fields + """ + stdin_expanded: str | None = None + """ + Step stdin with expanded fields + """ + stdout_expanded: str | None = None + """ + Step stdout with expanded fields """ - name: Optional[str] = None class Task(BaseModel): - distribution: Optional[str] = None + distribution: str | None = None + """ + The layout of the step was when it was running + """ class Hostlist(RootModel[List[str]]): root: List[str] -class TresModel(BaseModel): - type: str - name: Optional[str] = None - id: Optional[int] = None - count: Optional[int] = None +class StepTresReqMax(RootModel[List[TresModel]]): + root: List[TresModel] class StepTresReqMin(RootModel[List[TresModel]]): @@ -1195,11 +1843,7 @@ class StepTresUsageMin(RootModel[List[TresModel]]): root: List[TresModel] -class TresList(RootModel[List[TresModel]]): - root: List[TresModel] - - -class FlagModel6(Enum): +class FlagModel6(StrEnum): ASSIGNED_DEFAULT = "ASSIGNED_DEFAULT" @@ -1214,37 +1858,42 @@ class WckeyTagStruct(BaseModel): """ +class StringList(RootModel[List[str]]): + root: List[str] + + class Controller(BaseModel): - host: Optional[str] = None - port: Optional[int] = None + host: str | None = None + """ + ControlHost + """ + port: int | None = None + """ + ControlPort + """ -class FlagModel7(Enum): +class FlagModel7(StrEnum): + DELETED = "DELETED" REGISTERING = "REGISTERING" MULTIPLE_SLURMD = "MULTIPLE_SLURMD" - FRONT_END = "FRONT_END" - CRAY_NATIVE = "CRAY_NATIVE" FEDERATION = "FEDERATION" EXTERNAL = "EXTERNAL" class Associations(BaseModel): - root: Optional[AssocShort] = None - - -class ClusterRec(BaseModel): - controller: Optional[Controller] = None - flags: Optional[List[FlagModel7]] = None - name: Optional[str] = None - nodes: Optional[str] = None - select_plugin: Optional[str] = None - associations: Optional[Associations] = None - rpc_version: Optional[int] = None - tres: Optional[TresList] = None + root: AssocShort | None = None + """ + Root association information + """ -class FlagModel8(Enum): +class FlagModel8(StrEnum): DELETED = "DELETED" + WithAssociations = "WithAssociations" + WithCoordinators = "WithCoordinators" + NoUsersAreCoords = "NoUsersAreCoords" + UsersAreCoords = "UsersAreCoords" class AssocShortList(RootModel[List[AssocShort]]): @@ -1253,10 +1902,16 @@ class AssocShortList(RootModel[List[AssocShort]]): class Coord(BaseModel): name: str - direct: Optional[bool] = None + """ + User name + """ + direct: bool | None = None + """ + Indicates whether the coordinator was directly assigned to this account + """ -class AdministratorLevelEnum(Enum): +class AdministratorLevelEnum(StrEnum): Not_Set = "Not Set" None_ = "None" Operator = "Operator" @@ -1264,34 +1919,61 @@ class AdministratorLevelEnum(Enum): class Default(BaseModel): - account: Optional[str] = None - wckey: Optional[str] = None + qos: int | None = None + """ + Default QOS + """ + account: str | None = None + """ + Default account + """ + wckey: str | None = None + """ + Default WCKey + """ -class FlagModel9(Enum): +class FlagModel9(StrEnum): NONE = "NONE" DELETED = "DELETED" -class FlagModel10(Enum): +class FlagModel10(StrEnum): DELETED = "DELETED" class Allocated(BaseModel): - seconds: Optional[int] = None + seconds: int | None = None + """ + Number of seconds allocated + """ class Accounting(BaseModel): - allocated: Optional[Allocated] = None - id: Optional[int] = None - start: Optional[int] = None - TRES: Optional[TresModel] = None + allocated: Allocated | None = None + id: int | None = None + """ + Association ID or Workload characterization key ID + """ + id_alt: int | None = None + """ + Alternate ID (not currently used) + """ + start: int | None = None + """ + When the record was started (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]')) + """ + TRES: TresModel | None = None + """ + Trackable resources + """ -class FlagModel11(Enum): +class FlagModel11(StrEnum): NOT_SET = "NOT_SET" ADD = "ADD" REMOVE = "REMOVE" + DELETED = "DELETED" PARTITION_MINIMUM_NODE = "PARTITION_MINIMUM_NODE" PARTITION_MAXIMUM_NODE = "PARTITION_MAXIMUM_NODE" PARTITION_TIME_LIMIT = "PARTITION_TIME_LIMIT" @@ -1300,1950 +1982,4191 @@ class FlagModel11(Enum): REQUIRED_RESERVATION = "REQUIRED_RESERVATION" DENY_LIMIT = "DENY_LIMIT" OVERRIDE_PARTITION_QOS = "OVERRIDE_PARTITION_QOS" + PARTITION_QOS = "PARTITION_QOS" NO_DECAY = "NO_DECAY" USAGE_FACTOR_SAFE = "USAGE_FACTOR_SAFE" RELATIVE = "RELATIVE" class ActiveJobs(BaseModel): - accruing: Optional[Uint32NoVal] = None - count: Optional[Uint32NoVal] = None + accruing: Uint32NoValStruct | None = None + """ + GrpJobsAccrue - Maximum number of pending jobs able to accrue age priority (32 bit integer number with flags) + """ + count: Uint32NoValStruct | None = None + """ + GrpJobs - Maximum number of running jobs (32 bit integer number with flags) + """ class Per(BaseModel): - qos: Optional[TresList] = None - job: Optional[TresList] = None - account: Optional[TresList] = None - user: Optional[TresList] = None + account: Uint32NoValStruct | None = None + """ + MaxJobsPerAccount - Maximum number of running jobs per account (32 bit integer number with flags) + """ + user: Uint32NoValStruct | None = None + """ + MaxJobsPerUser - Maximum number of running jobs per user (32 bit integer number with flags) + """ -class Minutes(BaseModel): - per: Optional[Per] = None +class ActiveJobsModel(BaseModel): + per: Per | None = None class PerModel(BaseModel): - account: Optional[TresList] = None - job: Optional[TresList] = None - node: Optional[TresList] = None - user: Optional[TresList] = None + account: Uint32NoValStruct | None = None + """ + MaxSubmitJobsPerAccount - Maximum number of jobs in a pending or running state per account (32 bit integer number with flags) + """ + user: Uint32NoValStruct | None = None + """ + MaxSubmitJobsPerUser - Maximum number of jobs in a pending or running state per user (32 bit integer number with flags) + """ -class TresModel1(BaseModel): - total: Optional[TresList] = None - minutes: Optional[Minutes] = None - per: Optional[PerModel] = None +class Jobs(BaseModel): + count: Uint32NoValStruct | None = None + """ + GrpSubmitJobs - Maximum number of jobs in a pending or running state at any time (32 bit integer number with flags) + """ + active_jobs: ActiveJobsModel | None = None + per: PerModel | None = None class PerModel1(BaseModel): - qos: Optional[Uint32NoVal] = None - job: Optional[Uint32NoVal] = None + qos: Uint32NoValStruct | None = None + """ + GrpWall - Maximum wall clock time in minutes able to be allocated by running jobs (32 bit integer number with flags) + """ + job: Uint32NoValStruct | None = None + """ + MaxWallDurationPerJob - Maximum wall clock time in minutes each job can use (32 bit integer number with flags) + """ class WallClock(BaseModel): - per: Optional[PerModel1] = None + per: PerModel1 | None = None class PerModel2(BaseModel): - account: Optional[Uint32NoVal] = None - user: Optional[Uint32NoVal] = None + account: Uint32NoValStruct | None = None + """ + MaxJobsAccruePerAccount - Maximum number of pending jobs an account (or subacct) can have accruing age priority (32 bit integer number with flags) + """ + user: Uint32NoValStruct | None = None + """ + MaxJobsAccruePerUser - Maximum number of pending jobs a user can have accruing age priority (32 bit integer number with flags) + """ -class ActiveJobsModel(BaseModel): - per: Optional[PerModel2] = None +class Accruing(BaseModel): + per: PerModel2 | None = None -class Jobs(BaseModel): - active_jobs: Optional[ActiveJobsModel] = None - per: Optional[PerModel2] = None +class ModeEnum(StrEnum): + DISABLED = "DISABLED" + SUSPEND = "SUSPEND" + REQUEUE = "REQUEUE" + CANCEL = "CANCEL" + GANG = "GANG" -class Accruing(BaseModel): - per: Optional[PerModel2] = None +class QosPreemptList(RootModel[List[str]]): + root: List[str] -class MaxModel(BaseModel): - active_jobs: Optional[ActiveJobs] = None - tres: Optional[TresModel1] = None - wall_clock: Optional[WallClock] = None - jobs: Optional[Jobs] = None - accruing: Optional[Accruing] = None +class DefaultModel(BaseModel): + qos: str | None = None + """ + Default QOS + """ + + +class FlagModel12(StrEnum): + DELETED = "DELETED" + NoUpdate = "NoUpdate" + Exact = "Exact" + NoUsersAreCoords = "NoUsersAreCoords" + UsersAreCoords = "UsersAreCoords" class PerModel3(BaseModel): - job: Optional[TresList] = None + count: Uint32NoValStruct | None = None + """ + GrpJobs - Maximum number of running jobs in this association and its children (32 bit integer number with flags) + """ + accruing: Uint32NoValStruct | None = None + """ + GrpJobsAccrue - Maximum number of pending jobs able to accrue age priority in this association and its children (32 bit integer number with flags) + """ + submitted: Uint32NoValStruct | None = None + """ + GrpSubmitJobs - Maximum number of jobs in a pending or running state at any time in this association and its children (32 bit integer number with flags) + """ + wall_clock: Uint32NoValStruct | None = None + """ + MaxWallDurationPerJob - Maximum wall clock time in minutes each job can use in this association (32 bit integer number with flags) + """ -class TresModel2(BaseModel): - per: Optional[PerModel3] = None +class JobsModel(BaseModel): + per: PerModel3 | None = None + active: Uint32NoValStruct | None = None + """ + MaxJobs - Maximum number of running jobs per user in this association (32 bit integer number with flags) + """ + accruing: Uint32NoValStruct | None = None + """ + MaxJobsAccrue - Maximum number of pending jobs able to accrue age priority at any given time in this association (32 bit integer number with flags) + """ + total: Uint32NoValStruct | None = None + """ + MaxSubmitJobs - Maximum number of jobs in a pending or running state at any time in this association (32 bit integer number with flags) + """ + + +class Account(BaseModel): + wall_clock: Uint32NoValStruct | None = None + """ + GrpWall - Maximum wall clock time in minutes able to be allocated by running jobs in this association and its children (32 bit integer number with flags) + """ + + +class PerModel4(BaseModel): + account: Account | None = None class Min(BaseModel): - priority_threshold: Optional[Uint32NoVal] = None - tres: Optional[TresModel2] = None + priority_threshold: Uint32NoValStruct | None = None + """ + MinPrioThreshold - Minimum priority required to reserve resources when scheduling (32 bit integer number with flags) + """ -class LimitsModel(BaseModel): - grace_time: Optional[int] = None - max: Optional[MaxModel] = None - factor: Optional[Float64NoVal] = None - min: Optional[Min] = None +class QosStringIdList(RootModel[List[str]]): + """ + List of QOS names + """ + + root: List[str] + """ + List of QOS names + """ -class ModeEnum(Enum): - DISABLED = "DISABLED" - SUSPEND = "SUSPEND" - REQUEUE = "REQUEUE" - CANCEL = "CANCEL" - GANG = "GANG" +class TimeModel1(BaseModel): + time_end: int | None = None + """ + When the instance will end (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]')) + """ + time_start: int | None = None + """ + When the instance will start (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]')) + """ -class QosPreemptList(RootModel[List[str]]): +class Instance(BaseModel): + cluster: str | None = None + """ + Cluster name + """ + extra: str | None = None + """ + Arbitrary string used for node filtering if extra constraints are enabled + """ + instance_id: str | None = None + """ + Cloud instance ID + """ + instance_type: str | None = None + """ + Cloud instance type + """ + node_name: str | None = None + """ + NodeName + """ + time: TimeModel1 | None = None + + +class AdminlevelEnum(StrEnum): + Not_Set = "Not Set" + None_ = "None" + Operator = "Operator" + Administrator = "Administrator" + + +class UserShort(BaseModel): + adminlevel: List[AdminlevelEnum] | None = None + """ + AdminLevel granted to the user + """ + defaultqos: int | None = None + """ + Default QOS + """ + defaultaccount: str | None = None + """ + Default account + """ + defaultwckey: str | None = None + """ + Default WCKey + """ + + +class AccountShort(BaseModel): + description: str | None = None + """ + Arbitrary string describing the account + """ + organization: str | None = None + """ + Organization to which the account belongs + """ + + +class SelectedStepList(RootModel[List[str]]): root: List[str] -class DefaultModel(BaseModel): - qos: Optional[str] = None +class Duration(BaseModel): + last: int | None = None + """ + Total time spent doing last daily rollup (seconds) + """ + max: int | None = None + """ + Longest hourly rollup time (seconds) + """ + time: int | None = None + """ + Total time spent doing hourly rollups (seconds) + """ -class FlagModel12(Enum): - DELETED = "DELETED" +class Hourly(BaseModel): + count: int | None = None + """ + Number of hourly rollups since last_run + """ + last_run: int | None = None + """ + Last time hourly rollup ran (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]')) + """ + duration: Duration | None = None -class PerModel4(BaseModel): - count: Optional[Uint32NoVal] = None - accruing: Optional[Uint32NoVal] = None - submitted: Optional[Uint32NoVal] = None - wall_clock: Optional[Uint32NoVal] = None +class DurationModel(BaseModel): + last: int | None = None + """ + Total time spent doing daily daily rollup (seconds) + """ + max: int | None = None + """ + Longest daily rollup time (seconds) + """ + time: int | None = None + """ + Total time spent doing daily rollups (seconds) + """ -class JobsModel(BaseModel): - per: Optional[PerModel4] = None - active: Optional[Uint32NoVal] = None - accruing: Optional[Uint32NoVal] = None - total: Optional[Uint32NoVal] = None +class Daily(BaseModel): + count: int | None = None + """ + Number of daily rollups since last_run + """ + last_run: int | None = None + """ + Last time daily rollup ran (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]')) + """ + duration: DurationModel | None = None -class Group(BaseModel): - minutes: Optional[TresList] = None - active: Optional[TresList] = None +class DurationModel1(BaseModel): + last: int | None = None + """ + Total time spent doing monthly daily rollup (seconds) + """ + max: int | None = None + """ + Longest monthly rollup time (seconds) + """ + time: int | None = None + """ + Total time spent doing monthly rollups (seconds) + """ + + +class Monthly(BaseModel): + count: int | None = None + """ + Number of monthly rollups since last_run + """ + last_run: int | None = None + """ + Last time monthly rollup ran (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]')) + """ + duration: DurationModel1 | None = None + + +class RollupStats(BaseModel): + hourly: Hourly | None = None + daily: Daily | None = None + monthly: Monthly | None = None + + +class TimeModel2(BaseModel): + average: int | None = None + """ + Average RPC processing time in microseconds + """ + total: int | None = None + """ + Total RPC processing time in microseconds + """ + + +class StatsRpc(BaseModel): + rpc: str | None = None + """ + RPC type + """ + count: int | None = None + """ + Number of RPCs processed + """ + time: TimeModel2 | None = None + + +class StatsUser(BaseModel): + user: str | None = None + """ + User ID + """ + count: int | None = None + """ + Number of RPCs processed + """ + time: TimeModel2 | None = None + + +class SlurmdbdPing(BaseModel): + hostname: str + """ + Target for ping + """ + responding: bool + """ + If ping RPC responded with pong from slurmdbd + """ + latency: int + """ + Number of microseconds it took to successfully ping or timeout + """ + primary: bool + """ + Is responding slurmdbd the primary controller (Is responding slurmctld the primary controller) + """ + + +class Fairshare(BaseModel): + factor: Float64NoValStruct | None = None + """ + Fairshare factor (64 bit floating point number with flags) + """ + level: Float64NoValStruct | None = None + """ + Fairshare factor at this level; stored on an assoc as a long double, but that is not needed for display in sshare (64 bit floating point number with flags) + """ + + +class SharesUint64Tres(BaseModel): + name: str | None = None + """ + TRES name + """ + value: Uint64NoValStruct | None = None + """ + TRES value (64 bit integer number with flags) + """ + + +class SharesFloat128TresList(RootModel[List[SharesFloat128Tres]]): + root: List[SharesFloat128Tres] + + +class OpenapiMeta(BaseModel): + plugin: Plugin | None = None + client: Client | None = None + command: StringArray | None = None + """ + CLI command (if applicable) + """ + slurm: Slurm | None = None + + +class OpenapiErrors(RootModel[List[OpenapiError]]): + root: List[OpenapiError] + + +class OpenapiWarnings(RootModel[List[OpenapiWarning]]): + root: List[OpenapiWarning] + + +class OpenapiResp(BaseModel): + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class StatsMsgRpcsByType(RootModel[List[StatsMsgRpcType]]): + """ + RPCs by type + """ + + root: List[StatsMsgRpcType] + """ + RPCs by type + """ + + +class StatsMsgRpcsByUser(RootModel[List[StatsMsgRpcUser]]): + """ + RPCs by user + """ + + root: List[StatsMsgRpcUser] + """ + RPCs by user + """ + + +class StatsMsgRpcsQueue(RootModel[List[StatsMsgRpcQueue]]): + """ + Pending RPCs + """ + + root: List[StatsMsgRpcQueue] + """ + Pending RPCs + """ + + +class StatsMsgRpcDump(BaseModel): + type_id: int + """ + Message type as integer + """ + message_type: str + """ + Message type as string (Slurm RPC message type) + """ + count: HostlistString + """ + Number of RPCs received + """ + + +class ControllerPingArray(RootModel[List[ControllerPing]]): + root: List[ControllerPing] + + +class Licenses(RootModel[List[License]]): + root: List[License] + + +class OpenapiJobSubmitResponse(BaseModel): + job_id: int | None = None + """ + submitted Job ID + """ + step_id: str | None = None + """ + submitted Step ID + """ + job_submit_user_msg: str | None = None + """ + Job submission user message + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class JobDescMsg(BaseModel): + account: str | None = None + """ + Account associated with the job + """ + account_gather_frequency: str | None = None + """ + Job accounting and profiling sampling intervals in seconds + """ + admin_comment: str | None = None + """ + Arbitrary comment made by administrator + """ + allocation_node_list: str | None = None + """ + Local node making the resource allocation + """ + allocation_node_port: int | None = None + """ + Port to send allocation confirmation to + """ + argv: StringArray | None = None + """ + Arguments to the script. Note: The slurmstepd always overrides argv[0] with the path to the created script file. If this option is used, argv[0] should be a throwaway value. + """ + array: str | None = None + """ + Job array index value specification + """ + batch_features: str | None = None + """ + Features required for batch script's node + """ + begin_time: Uint64NoValStruct | None = None + """ + Defer the allocation of the job until the specified time (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) + """ + flags: List[Flag] | None = None + """ + Job flags + """ + burst_buffer: str | None = None + """ + Burst buffer specifications + """ + clusters: str | None = None + """ + Clusters that a federated job can run on + """ + cluster_constraint: str | None = None + """ + Required features that a federated cluster must have to have a sibling job submitted to it + """ + comment: str | None = None + """ + Arbitrary comment made by user + """ + contiguous: bool | None = None + """ + True if job requires contiguous nodes + """ + container: str | None = None + """ + Absolute path to OCI container bundle + """ + container_id: str | None = None + """ + OCI container ID + """ + core_specification: int | None = None + """ + Specialized core count + """ + thread_specification: int | None = None + """ + Specialized thread count + """ + cpu_binding: str | None = None + """ + Method for binding tasks to allocated CPUs + """ + cpu_binding_flags: List[CpuBindingFlag] | None = None + """ + Flags for CPU binding + """ + cpu_frequency: str | None = None + """ + Requested CPU frequency range [-p2][:p3] + """ + cpus_per_tres: str | None = None + """ + Semicolon delimited list of TRES=# values values indicating how many CPUs should be allocated for each specified TRES (currently only used for gres/gpu) + """ + crontab: CronEntry | None = None + """ + Specification for scrontab job (crontab entry) + """ + deadline: int | None = None + """ + Latest time that the job may start (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]')) + """ + delay_boot: int | None = None + """ + Number of seconds after job eligible start that nodes will be rebooted to satisfy feature specification + """ + dependency: str | None = None + """ + Other jobs that must meet certain criteria before this job can start + """ + end_time: int | None = None + """ + Expected end time (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]')) + """ + environment: StringArray | None = None + """ + Environment variables to be set for the job + """ + rlimits: Rlimits | None = None + excluded_nodes: CsvString | None = None + """ + Comma-separated list of nodes that may not be used + """ + extra: str | None = None + """ + Arbitrary string used for node filtering if extra constraints are enabled + """ + constraints: str | None = None + """ + Comma-separated list of features that are required + """ + group_id: str | None = None + """ + Group ID of the user that owns the job + """ + hetjob_group: int | None = None + """ + Unique sequence number applied to this component of the heterogeneous job + """ + immediate: bool | None = None + """ + If true, exit if resources are not available within the time period specified + """ + job_id: int | None = None + """ + Job ID + """ + kill_on_node_fail: bool | None = None + """ + If true, kill job on node failure + """ + licenses: str | None = None + """ + License(s) required by the job + """ + mail_type: List[MailTypeEnum] | None = None + """ + Mail event type(s) + """ + mail_user: str | None = None + """ + User to receive email notifications + """ + mcs_label: str | None = None + """ + Multi-Category Security label on the job + """ + memory_binding: str | None = None + """ + Binding map for map/mask_cpu + """ + memory_binding_type: List[MemoryBindingTypeEnum] | None = None + """ + Method for binding tasks to memory + """ + memory_per_tres: str | None = None + """ + Semicolon delimited list of TRES=# values indicating how much memory in megabytes should be allocated for each specified TRES (currently only used for gres/gpu) + """ + name: str | None = None + """ + Job name + """ + network: str | None = None + """ + Network specs for job step + """ + nice: int | None = None + """ + Requested job priority change + """ + tasks: int | None = None + """ + Number of tasks + """ + oom_kill_step: int | None = None + """ + Kill whole step in case of OOM in one of the tasks + """ + open_mode: List[OpenModeEnum] | None = None + """ + Open mode used for stdout and stderr files + """ + reserve_ports: int | None = None + """ + Port to send various notification msg to + """ + overcommit: bool | None = None + """ + Overcommit resources + """ + partition: str | None = None + """ + Partition assigned to the job + """ + distribution_plane_size: Uint16NoValStruct | None = None + """ + Plane size specification when distribution specifies plane (16 bit integer number with flags) + """ + power_flags: List[Any] | None = Field(None, deprecated=True) + prefer: str | None = None + """ + Comma-separated list of features that are preferred but not required + """ + hold: bool | None = None + """ + Hold (true) or release (false) job (Job held) + """ + priority: Uint32NoValStruct | None = None + """ + Request specific job priority (32 bit integer number with flags) + """ + profile: List[ProfileEnum] | None = None + """ + Profile used by the acct_gather_profile plugin + """ + qos: str | None = None + """ + Quality of Service assigned to the job + """ + reboot: bool | None = None + """ + Node reboot requested before start + """ + required_nodes: CsvString | None = None + """ + Comma-separated list of required nodes + """ + requeue: bool | None = None + """ + Determines whether the job may be requeued + """ + reservation: str | None = None + """ + Name of reservation to use + """ + script: str | None = None + """ + Job batch script contents; only the first component in a HetJob is populated or honored + """ + shared: List[SharedEnum] | None = None + """ + How the job can share resources with other jobs, if at all + """ + site_factor: int | None = None + """ + Site-specific priority factor + """ + spank_environment: StringArray | None = None + """ + Environment variables for job prolog/epilog scripts as set by SPANK plugins + """ + step_id: SlurmStepId | None = None + """ + Job step ID + """ + distribution: str | None = None + """ + Layout + """ + time_limit: Uint32NoValStruct | None = None + """ + Maximum run time in minutes (32 bit integer number with flags) + """ + time_minimum: Uint32NoValStruct | None = None + """ + Minimum run time in minutes (32 bit integer number with flags) + """ + tres_bind: str | None = None + """ + Task to TRES binding directives + """ + tres_freq: str | None = None + """ + TRES frequency directives + """ + tres_per_job: str | None = None + """ + Comma-separated list of TRES=# values to be allocated for every job + """ + tres_per_node: str | None = None + """ + Comma-separated list of TRES=# values to be allocated for every node + """ + tres_per_socket: str | None = None + """ + Comma-separated list of TRES=# values to be allocated for every socket + """ + tres_per_task: str | None = None + """ + Comma-separated list of TRES=# values to be allocated for every task + """ + user_id: str | None = None + """ + User ID that owns the job + """ + wait_all_nodes: bool | None = None + """ + If true, wait to start until after all nodes have booted + """ + kill_warning_flags: List[KillWarningFlag] | None = None + """ + Flags related to job signals + """ + kill_warning_signal: str | None = None + """ + Signal to send when approaching end time (e.g. "10" or "USR1") + """ + kill_warning_delay: Uint16NoValStruct | None = None + """ + Number of seconds before end time to send the warning signal (16 bit integer number with flags) + """ + current_working_directory: str | None = None + """ + Working directory to use for the job + """ + cpus_per_task: int | None = None + """ + Number of CPUs required by each task + """ + minimum_cpus: int | None = None + """ + Minimum number of CPUs required + """ + maximum_cpus: int | None = None + """ + Maximum number of CPUs required + """ + nodes: str | None = None + """ + Node count range specification (e.g. 1-15:4) + """ + minimum_nodes: int | None = None + """ + Minimum node count + """ + maximum_nodes: int | None = None + """ + Maximum node count + """ + minimum_boards_per_node: int | None = None + """ + Boards per node required + """ + minimum_sockets_per_board: int | None = None + """ + Sockets per board required + """ + sockets_per_node: int | None = None + """ + Sockets per node required + """ + threads_per_core: int | None = None + """ + Threads per core required + """ + tasks_per_node: int | None = None + """ + Number of tasks to invoke on each node + """ + tasks_per_socket: int | None = None + """ + Number of tasks to invoke on each socket + """ + tasks_per_core: int | None = None + """ + Number of tasks to invoke on each core + """ + tasks_per_board: int | None = None + """ + Number of tasks to invoke on each board + """ + ntasks_per_tres: int | None = None + """ + Number of tasks that can access each GPU + """ + minimum_cpus_per_node: int | None = None + """ + Minimum number of CPUs per node + """ + memory_per_cpu: Uint64NoValStruct | None = None + """ + Minimum memory in megabytes per allocated CPU (64 bit integer number with flags) + """ + memory_per_node: Uint64NoValStruct | None = None + """ + Minimum memory in megabytes per allocated node (64 bit integer number with flags) + """ + temporary_disk_per_node: int | None = None + """ + Minimum tmp disk space required per node + """ + selinux_context: str | None = None + """ + SELinux context + """ + required_switches: Uint32NoValStruct | None = None + """ + Maximum number of switches (32 bit integer number with flags) + """ + segment_size: Uint16NoValStruct | None = None + """ + Segment size for topology/block (16 bit integer number with flags) + """ + standard_error: str | None = None + """ + Path to stderr file + """ + standard_input: str | None = None + """ + Path to stdin file + """ + standard_output: str | None = None + """ + Path to stdout file + """ + wait_for_switch: int | None = None + """ + Maximum time to wait for switches in seconds + """ + wckey: str | None = None + """ + Workload characterization key + """ + x11: List[X11Enum] | None = None + """ + X11 forwarding options + """ + x11_magic_cookie: str | None = None + """ + Magic cookie for X11 forwarding + """ + x11_target_host: str | None = None + """ + Hostname or UNIX socket if x11_target_port=0 + """ + x11_target_port: int | None = None + """ + TCP port + """ + + +class OpenapiJobAllocResp(BaseModel): + job_id: int | None = None + """ + Submitted Job ID + """ + job_submit_user_msg: str | None = None + """ + Job submission user message + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class JobResCoreArray(RootModel[List[JobResCore]]): + root: List[JobResCore] + + +class PriorityByPartition(RootModel[List[PartPrio]]): + root: List[PartPrio] + + +class KillJobsRespMsg(RootModel[List[KillJobsRespJob]]): + """ + List of jobs signal responses + """ + + root: List[KillJobsRespJob] + """ + List of jobs signal responses + """ + + +class KillJobsMsg(BaseModel): + account: str | None = None + """ + Filter jobs to a specific account + """ + flags: List[FlagModel2] | None = None + """ + Filter jobs according to flags + """ + job_name: str | None = None + """ + Filter jobs to a specific name + """ + jobs: KillJobsMsgJobsArray | None = None + """ + List of jobs to signal + """ + partition: str | None = None + """ + Filter jobs to a specific partition + """ + qos: str | None = None + """ + Filter jobs to a specific QOS + """ + reservation: str | None = None + """ + Filter jobs to a specific reservation + """ + signal: str | None = None + """ + Signal to send to jobs + """ + job_state: List[JobStateEnum] | None = None + """ + Filter jobs to a specific state + """ + user_id: str | None = None + """ + Filter jobs to a specific numeric user id + """ + user_name: str | None = None + """ + Filter jobs to a specific user name + """ + wckey: str | None = None + """ + Filter jobs to a specific wckey + """ + nodes: HostlistString | None = None + """ + Filter jobs to a set of nodes + """ + + +class JobArrayResponseArray(RootModel[List[JobArrayResponseMsgEntry]]): + root: List[JobArrayResponseMsgEntry] + + +class OpenapiKillJobResp(BaseModel): + status: KillJobsRespMsg + """ + resultant status of signal request (List of jobs signal responses) + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class Node(BaseModel): + architecture: str | None = None + """ + Computer architecture + """ + burstbuffer_network_address: str | None = None + """ + Alternate network path to be used for sbcast network traffic + """ + boards: int | None = None + """ + Number of Baseboards in nodes with a baseboard controller + """ + boot_time: Uint64NoValStruct | None = None + """ + Time when the node booted (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) + """ + tls_cert_last_renewal: Uint64NoValStruct | None = None + """ + Time when TLS certificate was created (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) + """ + cert_flags: List[CertFlag] | None = None + """ + Certmgr status flags + """ + cluster_name: str | None = None + """ + Cluster name (only set in federated environments) + """ + cores: int | None = None + """ + Number of cores in a single physical processor socket + """ + specialized_cores: int | None = None + """ + Number of cores reserved for system use + """ + cpu_binding: int | None = None + """ + Default method for binding tasks to allocated CPUs + """ + cpu_load: int | None = None + """ + CPU load as reported by the OS + """ + free_mem: Uint64NoValStruct | None = None + """ + Total memory in MB currently free as reported by the OS (64 bit integer number with flags) + """ + cpus: int | None = None + """ + Total CPUs, including cores and threads + """ + effective_cpus: int | None = None + """ + Number of effective CPUs (excluding specialized CPUs) + """ + specialized_cpus: str | None = None + """ + Abstract CPU IDs on this node reserved for exclusive use by slurmd and slurmstepd + """ + energy: AcctGatherEnergy | None = None + """ + Energy usage data + """ + external_sensors: Dict[str, Any] | None = Field(None, deprecated=True) + extra: str | None = None + """ + Arbitrary string used for node filtering if extra constraints are enabled + """ + power: Dict[str, Any] | None = Field(None, deprecated=True) + features: CsvString | None = None + """ + Available features + """ + active_features: CsvString | None = None + """ + Currently active features + """ + gpu_spec: str | None = None + """ + CPU cores reserved for jobs that also use a GPU + """ + gres: str | None = None + """ + Generic resources + """ + gres_drained: str | None = None + """ + Drained generic resources + """ + gres_used: str | None = None + """ + Generic resources currently in use + """ + instance_id: str | None = None + """ + Cloud instance ID + """ + instance_type: str | None = None + """ + Cloud instance type + """ + last_busy: Uint64NoValStruct | None = None + """ + Time when the node was last busy (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) + """ + mcs_label: str | None = None + """ + Multi-Category Security label + """ + specialized_memory: int | None = None + """ + Combined memory limit, in MB, for Slurm compute node daemons + """ + name: str | None = None + """ + NodeName + """ + next_state_after_reboot: List[NextStateAfterRebootEnum] | None = None + """ + The state the node will be assigned after rebooting + """ + address: str | None = None + """ + NodeAddr, used to establish a communication path + """ + hostname: str | None = None + """ + NodeHostname + """ + state: List[StateEnum] | None = None + """ + Node state(s) applicable to this node + """ + operating_system: str | None = None + """ + Operating system reported by the node + """ + owner: str | None = None + """ + User allowed to run jobs on this node (unset if no restriction) + """ + partitions: CsvString | None = None + """ + Partitions containing this node + """ + port: int | None = None + """ + TCP port number of the slurmd + """ + real_memory: int | None = None + """ + Total memory in MB on the node + """ + res_cores_per_gpu: int | None = None + """ + Number of CPU cores per GPU restricted to GPU jobs + """ + comment: str | None = None + """ + Arbitrary comment + """ + reason: str | None = None + """ + Describes why the node is in a "DOWN", "DRAINED", "DRAINING", "FAILING" or "FAIL" state + """ + reason_changed_at: Uint64NoValStruct | None = None + """ + When the reason changed (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) + """ + reason_set_by_user: str | None = None + """ + User who set the reason + """ + resume_after: Uint64NoValStruct | None = None + """ + Number of seconds after the node's state is updated to "DOWN" or "DRAIN" before scheduling a node state resume (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) + """ + reservation: str | None = None + """ + Name of reservation containing this node + """ + alloc_memory: int | None = None + """ + Total memory in MB currently allocated for jobs + """ + alloc_cpus: int | None = None + """ + Total number of CPUs currently allocated for jobs + """ + alloc_idle_cpus: int | None = None + """ + Total number of idle CPUs + """ + tres_used: str | None = None + """ + Trackable resources currently allocated for jobs + """ + tres_weighted: float | None = Field(None, deprecated=True) + """ + Ignored. Was weighted number of billable trackable resources allocated + """ + slurmd_start_time: Uint64NoValStruct | None = None + """ + Time when the slurmd started (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) + """ + sockets: int | None = None + """ + Number of physical processor sockets/chips on the node + """ + threads: int | None = None + """ + Number of logical threads in a single physical core + """ + temporary_disk: int | None = None + """ + Total size in MB of temporary disk storage in TmpFS + """ + weight: int | None = None + """ + Weight of the node for scheduling purposes + """ + topology: str | None = None + """ + Topology + """ + tres: str | None = None + """ + Configured trackable resources + """ + version: str | None = None + """ + Slurmd version + """ + + +class PartitionInfoMsg(RootModel[List[PartitionInfo]]): + root: List[PartitionInfo] + + +class ReservationInfoCoreSpec(RootModel[List[ReservationCoreSpec]]): + root: List[ReservationCoreSpec] + + +class TresList(RootModel[List[TresModel]]): + root: List[TresModel] + + +class OpenapiCreateNodeReq(BaseModel): + node_conf: str + """ + Node configuration line + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class NodeGresLayoutList(RootModel[List[NodeGresLayout]]): + root: List[NodeGresLayout] + + +class TresModel1(BaseModel): + allocated: TresList | None = None + """ + Trackable resources allocated to the job + """ + requested: TresList | None = None + """ + Trackable resources requested by job + """ + + +class NodesModel(BaseModel): + count: int | None = None + """ + Number of nodes in the job step + """ + range: str | None = None + """ + Node(s) allocated to the job step + """ + list: Hostlist | None = None + """ + List of nodes used by the step + """ + + +class Requested(BaseModel): + max: StepTresReqMax | None = None + """ + Maximum TRES usage requested among all tasks + """ + min: StepTresReqMin | None = None + """ + Minimum TRES usage requested among all tasks + """ + average: TresList | None = None + """ + Average TRES usage requested among all tasks + """ + total: TresList | None = None + """ + Total TRES usage requested among all tasks + """ + + +class Consumed(BaseModel): + max: StepTresUsageMax | None = None + """ + Maximum TRES usage consumed among all tasks + """ + min: StepTresUsageMin | None = None + """ + Minimum TRES usage consumed among all tasks + """ + average: TresList | None = None + """ + Average TRES usage consumed among all tasks + """ + total: TresList | None = None + """ + Total TRES usage consumed among all tasks + """ + + +class TresModel2(BaseModel): + requested: Requested | None = None + consumed: Consumed | None = None + allocated: TresList | None = None + """ + Trackable resources allocated to the step + """ + + +class StepModel(BaseModel): + time: TimeModel | None = None + exit_code: ProcessExitCodeVerbose | None = None + """ + Exit code (return code returned by process) + """ + nodes: NodesModel | None = None + tasks: Tasks | None = None + pid: str | None = Field(None, deprecated=True) + """ + Deprecated; Process ID + """ + CPU_1: CPU | None = Field(None, alias="CPU") + kill_request_user: str | None = None + """ + User ID that requested termination of the step + """ + state: List[StateEnumModel1] | None = None + """ + Current state + """ + statistics: Statistics | None = None + step: Step | None = None + task: Task | None = None + tres: TresModel2 | None = None + + +class OpenapiJobModifyResp(BaseModel): + results: StringList + """ + Job modify results + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class TresModel3(BaseModel): + allocated: TresList | None = None + """ + Trackable resources allocated to the job + """ + + +class JobModify(BaseModel): + comment: Comment | None = None + derived_exit_code: ProcessExitCodeVerbose | None = None + """ + Highest exit code of all job steps (return code returned by process) + """ + extra: str | None = None + """ + Arbitrary string used for node filtering if extra constraints are enabled + """ + tres: TresModel3 | None = None + wckey: str | None = None + """ + Workload characterization key + """ + + +class ClusterRec(BaseModel): + controller: Controller | None = None + flags: List[FlagModel7] | None = None + """ + Flags + """ + name: str | None = None + """ + ClusterName + """ + nodes: str | None = None + """ + Node names + """ + select_plugin: str | None = Field(None, deprecated=True) + associations: Associations | None = None + rpc_version: int | None = None + """ + RPC version used in the cluster + """ + tres: TresList | None = None + """ + Trackable resources + """ + + +class CoordList(RootModel[List[Coord]]): + root: List[Coord] + + +class AccountingList(RootModel[List[Accounting]]): + root: List[Accounting] + + +class PerModel5(BaseModel): + qos: TresList | None = None + """ + GrpTRESRunMins - Maximum number of TRES minutes able to be allocated by running jobs + """ + job: TresList | None = None + """ + MaxTRESMinsPerJob - Maximum number of TRES minutes each job can use + """ + account: TresList | None = None + """ + MaxTRESRunMinsPerAccount - Maximum number of TRES minutes each account can use + """ + user: TresList | None = None + """ + MaxTRESRunMinsPerUser - Maximum number of TRES minutes each user can use + """ + + +class Minutes(BaseModel): + total: TresList | None = None + """ + GrpTRESMins - Maximum number of TRES minutes that can possibly be used by past, present, and future jobs + """ + per: PerModel5 | None = None + + +class PerModel6(BaseModel): + account: TresList | None = None + """ + MaxTRESPerAccount - Maximum number of TRES each account can use + """ + job: TresList | None = None + """ + MaxTRESPerJob - Maximum number of TRES each job can use + """ + node: TresList | None = None + """ + MaxTRESPerNode - Maximum number of TRES each node in a job allocation can use + """ + user: TresList | None = None + """ + MaxTRESPerUser - Maximum number of TRES each user can use + """ + + +class TresModel4(BaseModel): + total: TresList | None = None + """ + GrpTRES - Maximum number of TRES able to be allocated by running jobs + """ + minutes: Minutes | None = None + per: PerModel6 | None = None + + +class MaxModel(BaseModel): + active_jobs: ActiveJobs | None = None + jobs: Jobs | None = None + tres: TresModel4 | None = None + wall_clock: WallClock | None = None + accruing: Accruing | None = None + + +class PerModel7(BaseModel): + job: TresList | None = None + """ + MinTRESPerJob - Minimum number of TRES each job running under this QOS must request + """ + + +class TresModel5(BaseModel): + per: PerModel7 | None = None + + +class MinModel(BaseModel): + priority_threshold: Uint32NoValStruct | None = None + """ + MinPrioThreshold - Minimum priority required to reserve resources when scheduling (32 bit integer number with flags) + """ + tres: TresModel5 | None = None + + +class LimitsModel(BaseModel): + grace_time: int | None = None + """ + GraceTime - Preemption grace time in seconds to be extended to a job which has been selected for preemption + """ + max: MaxModel | None = None + factor: Float64NoValStruct | None = None + """ + LimitFactor - A float that is factored into an association's [Grp|Max]TRES limits (64 bit floating point number with flags) + """ + min: MinModel | None = None + + +class Preempt(BaseModel): + list: QosPreemptList | None = None + """ + Other QOS's this QOS can preempt + """ + mode: List[ModeEnum] | None = None + """ + PreemptMode - Mechanism used to preempt jobs or enable gang scheduling + """ + exempt_time: Uint32NoValStruct | None = None + """ + PreemptExemptTime - Specifies a minimum run time for jobs before they are considered for preemption (32 bit integer number with flags) + """ + + +class QosModel(BaseModel): + description: str | None = None + """ + Arbitrary description + """ + flags: List[FlagModel11] | None = None + """ + Flags, to avoid modifying current values specify NOT_SET + """ + id: int | None = None + """ + Unique ID + """ + limits: LimitsModel | None = None + name: str | None = None + """ + Name + """ + preempt: Preempt | None = None + priority: Uint32NoValStruct | None = None + """ + Priority - QOS priority factor (32 bit integer number with flags) + """ + usage_factor: Float64NoValStruct | None = None + """ + UsageFactor - A float that is factored into a job's TRES usage (64 bit floating point number with flags) + """ + usage_threshold: Float64NoValStruct | None = None + """ + UsageThreshold - A float representing the lowest fairshare of an association allowed to run a job (64 bit floating point number with flags) + """ + + +class Group(BaseModel): + minutes: TresList | None = None + """ + GrpTRESMins - Maximum number of TRES minutes that can possibly be used by past, present, and future jobs in this association and its children + """ + active: TresList | None = None + """ + GrpTRESRunMins - Maximum number of TRES minutes able to be allocated by running jobs in this association and its children + """ + + +class PerModel8(BaseModel): + job: TresList | None = None + """ + MaxTRESMinsPerJob - Maximum number of TRES minutes each job can use in this association + """ + + +class MinutesModel(BaseModel): + total: TresList | None = None + """ + Not implemented + """ + per: PerModel8 | None = None + + +class PerModel9(BaseModel): + job: TresList | None = None + """ + MaxTRESPerJob - Maximum number of TRES each job can use in this association + """ + node: TresList | None = None + """ + MaxTRESPerNode - Maximum number of TRES each node in a job allocation can use in this association + """ + + +class TresModel6(BaseModel): + total: TresList | None = None + """ + GrpTRES - Maximum number of TRES able to be allocated by running jobs in this association and its children + """ + group: Group | None = None + minutes: MinutesModel | None = None + per: PerModel9 | None = None + + +class MaxModel1(BaseModel): + jobs: JobsModel | None = None + tres: TresModel6 | None = None + per: PerModel4 | None = None + + +class Assoc(BaseModel): + accounting: AccountingList | None = None + """ + Accounting records containing related resource usage + """ + account: str | None = None + """ + Account name + """ + cluster: str | None = None + """ + Cluster name + """ + comment: str | None = None + """ + Arbitrary comment + """ + default: DefaultModel | None = None + flags: List[FlagModel12] | None = None + """ + Flags on the association + """ + max: MaxModel1 | None = None + id: int | None = None + """ + Unique ID (Association ID) + """ + is_default: bool | None = None + """ + Is default association for user + """ + lineage: str | None = None + """ + Complete path up the hierarchy to the root association + """ + min: Min | None = None + parent_account: str | None = None + """ + Name of parent account + """ + partition: str | None = None + """ + Partition name + """ + priority: Uint32NoValStruct | None = None + """ + Association priority factor (32 bit integer number with flags) + """ + qos: QosStringIdList | None = None + """ + List of available QOS names (List of QOS names) + """ + shares_raw: int | None = None + """ + Allocated shares used for fairshare calculation + """ + user: str + """ + User name + """ + + +class InstanceList(RootModel[List[Instance]]): + root: List[Instance] + + +class OpenapiTresResp(BaseModel): + TRES: TresList + """ + TRES + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class OpenapiSlurmdbdQosRemovedResp(BaseModel): + removed_qos: StringList + """ + removed QOS + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class OpenapiAssocsRemovedResp(BaseModel): + removed_associations: StringList + """ + removed_associations + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class OpenapiInstancesResp(BaseModel): + instances: InstanceList + """ + instances + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class OpenapiUsersAddCondRespStr(BaseModel): + added_users: str + """ + added_users + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class AssocRecSet(BaseModel): + comment: str | None = None + """ + Arbitrary comment + """ + defaultqos: str | None = None + """ + Default QOS + """ + grpjobs: Uint32NoValStruct | None = None + """ + GrpJobs - Maximum number of running jobs in this association and its children (32 bit integer number with flags) + """ + grpjobsaccrue: Uint32NoValStruct | None = None + """ + GrpJobsAccrue - Maximum number of pending jobs able to accrue age priority in this association and its children (32 bit integer number with flags) + """ + grpsubmitjobs: Uint32NoValStruct | None = None + """ + GrpSubmitJobs - Maximum number of jobs in a pending or running state at any time in this association and its children (32 bit integer number with flags) + """ + grptres: TresList | None = None + """ + GrpTRES - Maximum number of TRES able to be allocated by running jobs in this association and its children + """ + grptresmins: TresList | None = None + """ + GrpTRESMins - Maximum number of TRES minutes that can possibly be used by past, present, and future jobs in this association and its children + """ + grptresrunmins: TresList | None = None + """ + GrpTRESRunMins - Maximum number of TRES minutes able to be allocated by running jobs in this association and its children + """ + grpwall: Uint32NoValStruct | None = None + """ + GrpWall - Maximum wall clock time in minutes able to be allocated by running jobs in this association and its children (32 bit integer number with flags) + """ + maxjobs: Uint32NoValStruct | None = None + """ + MaxJobs - Maximum number of running jobs per user in this association (32 bit integer number with flags) + """ + maxjobsaccrue: Uint32NoValStruct | None = None + """ + MaxJobsAccrue - Maximum number of pending jobs able to accrue age priority at any given time in this association (32 bit integer number with flags) + """ + maxsubmitjobs: Uint32NoValStruct | None = None + """ + MaxSubmitJobs - Maximum number of jobs in a pending or running state at any time in this association (32 bit integer number with flags) + """ + maxtresminsperjob: TresList | None = None + """ + MaxTRESMinsPerJob - Maximum number of TRES minutes each job can use in this association + """ + maxtresrunmins: TresList | None = None + """ + Not implemented + """ + maxtresperjob: TresList | None = None + """ + MaxTRESPerJob - Maximum number of TRES each job can use in this association + """ + maxtrespernode: TresList | None = None + """ + MaxTRESPerNode - Maximum number of TRES each node in a job allocation can use in this association + """ + maxwalldurationperjob: Uint32NoValStruct | None = None + """ + MaxWallDurationPerJob - Maximum wall clock time in minutes each job can use in this association (32 bit integer number with flags) + """ + minpriothresh: Uint32NoValStruct | None = None + """ + MinPrioThreshold - Minimum priority required to reserve resources when scheduling (32 bit integer number with flags) + """ + parent: str | None = None + """ + Name of parent account + """ + priority: Uint32NoValStruct | None = None + """ + Association priority factor (32 bit integer number with flags) + """ + qoslevel: QosStringIdList | None = None + """ + List of available QOS names (List of QOS names) + """ + fairshare: int | None = None + """ + Allocated shares used for fairshare calculation + """ + + +class OpenapiClustersRemovedResp(BaseModel): + deleted_clusters: StringList + """ + deleted_clusters + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class OpenapiWckeyRemovedResp(BaseModel): + deleted_wckeys: StringList + """ + deleted wckeys + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class OpenapiAccountsRemovedResp(BaseModel): + removed_accounts: StringList + """ + removed_accounts + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class OpenapiAccountsAddCondRespStr(BaseModel): + added_accounts: str + """ + added_accounts + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class AccountsAddCond(BaseModel): + accounts: StringList + """ + CSV accounts list + """ + association: AssocRecSet | None = None + """ + Association limits and options + """ + clusters: StringList | None = None + """ + CSV clusters list + """ + + +class OpenapiJobModifyReq(BaseModel): + job_id_list: SelectedStepList | None = None + """ + CSV list of Job IDs to modify + """ + job_rec: JobModify | None = None + """ + Job modify message + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class StatsRpcList(RootModel[List[StatsRpc]]): + root: List[StatsRpc] + + +class StatsUserList(RootModel[List[StatsUser]]): + root: List[StatsUser] + + +class SlurmdbdPingArray(RootModel[List[SlurmdbdPing]]): + root: List[SlurmdbdPing] + + +class OpenapiHostnamesReqResp(BaseModel): + hostnames: HostlistString + """ + Array of host names + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class OpenapiHostlistReqResp(BaseModel): + hostlist: str + """ + Hostlist expression string (Hostlist expression string) + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class SharesUint64TresList(RootModel[List[SharesUint64Tres]]): + root: List[SharesUint64Tres] + + +class StatsMsgRpcsDump(RootModel[List[StatsMsgRpcDump]]): + """ + Pending RPCs by hostlist + """ + + root: List[StatsMsgRpcDump] + """ + Pending RPCs by hostlist + """ + + +class OpenapiPingArrayResp(BaseModel): + pings: ControllerPingArray + """ + pings + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class OpenapiLicensesResp(BaseModel): + licenses: Licenses + """ + List of licenses + """ + last_update: Uint64NoValStruct + """ + Time of last licenses change (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class JobDescMsgList(RootModel[List[JobDescMsg]]): + root: List[JobDescMsg] + + +class JobAllocReq(BaseModel): + hetjob: JobDescMsgList | None = None + """ + HetJob description + """ + job: JobDescMsg | None = None + """ + Job description + """ + + +class JobResSocket(BaseModel): + index: int + """ + Core index + """ + cores: JobResCoreArray + """ + Core in socket + """ + + +class OpenapiKillJobsResp(BaseModel): + status: KillJobsRespMsg + """ + resultant status of signal request (List of jobs signal responses) + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class OpenapiJobPostResponse(BaseModel): + results: JobArrayResponseArray | None = None + """ + Job update results (Job update results) + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class NodesModel1(RootModel[List[Node]]): + root: List[Node] + + +class OpenapiPartitionResp(BaseModel): + partitions: PartitionInfoMsg + """ + List of partitions + """ + last_update: Uint64NoValStruct + """ + Time of last partition change (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class ReservationInfo(BaseModel): + accounts: str | None = None + """ + Comma-separated list of permitted accounts + """ + burst_buffer: str | None = None + """ + BurstBuffer - Burst buffer resources reserved + """ + core_count: int | None = None + """ + CoreCnt - Number of cores reserved + """ + core_specializations: ReservationInfoCoreSpec | None = None + """ + Reserved cores specification + """ + end_time: Uint64NoValStruct | None = None + """ + EndTime (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) + """ + features: str | None = None + """ + Features - Expression describing the reservation's required node features + """ + flags: List[FlagModel4] | None = None + """ + Flags associated with this reservation + """ + groups: str | None = None + """ + Groups - Comma-separated list of permitted groups + """ + licenses: str | None = None + """ + Licenses - Comma-separated list of licenses reserved + """ + max_start_delay: int | None = None + """ + MaxStartDelay - Maximum time an eligible job not requesting this reservation can delay a job requesting it in seconds + """ + name: str | None = None + """ + ReservationName - Name of the reservation + """ + node_count: int | None = None + """ + NodeCnt - Number of nodes reserved + """ + node_list: str | None = None + """ + Nodes - Comma-separated list of node names and/or node ranges reserved + """ + partition: str | None = None + """ + PartitionName - Partition used to reserve nodes from + """ + purge_completed: PurgeCompleted | None = None + start_time: Uint64NoValStruct | None = None + """ + StartTime (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) + """ + watts: Uint32NoValStruct | None = Field(None, deprecated=True) + """ + 32 bit integer number with flags + """ + tres: str | None = None + """ + Comma-separated list of required TRES + """ + users: str | None = None + """ + Comma-separated list of permitted users + """ + + +class ReservationDescMsg(BaseModel): + accounts: CsvString | None = None + """ + List of permitted accounts + """ + burst_buffer: str | None = None + """ + BurstBuffer + """ + comment: str | None = None + """ + Arbitrary string + """ + core_count: Uint32NoValStruct | None = None + """ + Number of cores to reserve (32 bit integer number with flags) + """ + duration: Uint32NoValStruct | None = None + """ + The length of a reservation in minutes (32 bit integer number with flags) + """ + end_time: Uint64NoValStruct | None = None + """ + EndTime (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) + """ + features: str | None = None + """ + Requested node features. Multiple values may be "&" separated if all features are required (AND operation) or separated by "|" if any of the specified features are required (OR operation). Parenthesis are also supported for features to be ANDed together with counts of nodes having the specified features. + """ + flags: List[FlagModel4] | None = None + """ + Flags associated with this reservation. Note, to remove flags use "NO_" prefixed flag excluding NO_HOLD_JOBS_AFTER_END + """ + groups: CsvString | None = None + """ + List of groups permitted to use the reservation. This is mutually exclusive with users. + """ + licenses: CsvString | None = None + """ + List of license names + """ + max_start_delay: Uint32NoValStruct | None = None + """ + MaxStartDelay in seconds (32 bit integer number with flags) + """ + name: str | None = None + """ + ReservationName + """ + node_count: Uint32NoValStruct | None = None + """ + NodeCnt (32 bit integer number with flags) + """ + node_list: HostlistString | None = None + """ + The nodes to be reserved. Multiple node names may be specified using simple node range expressions. + """ + partition: str | None = None + """ + Partition used to reserve nodes from. This will attempt to allocate all nodes in the specified partition unless you request fewer resources than are available with core_cnt, node_cnt or tres. + """ + purge_completed: PurgeCompleted | None = None + start_time: Uint64NoValStruct | None = None + """ + StartTime (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) + """ + tres: TresList | None = None + """ + List of trackable resources + """ + users: CsvString | None = None + """ + List of permitted users + """ + + +class NodeResourceLayout(BaseModel): + node: str + """ + Node name + """ + sockets_per_node: int | None = None + """ + Sockets per node + """ + cores_per_socket: int | None = None + """ + Cores per socket + """ + mem_alloc: int | None = None + """ + Allocated memory + """ + core_bitmap: str | None = None + """ + Abstract core bitmap + """ + channel: Uint32NoValStruct | None = None + """ + IMEX channel (32 bit integer number with flags) + """ + gres: NodeGresLayoutList | None = None + """ + Allocated GRES + """ + + +class StepList(RootModel[List[StepModel]]): + root: List[StepModel] + + +class ClusterRecList(RootModel[List[ClusterRec]]): + root: List[ClusterRec] + + +class AccountModel(BaseModel): + associations: AssocShortList | None = None + """ + Associations involving this account (only populated if requested) + """ + coordinators: CoordList | None = None + """ + List of users that are a coordinator of this account (only populated if requested) + """ + description: str + """ + Arbitrary string describing the account + """ + name: str + """ + Account name + """ + organization: str + """ + Organization to which the account belongs + """ + flags: List[FlagModel8] | None = None + """ + Flags associated with this account + """ + + +class Wckey(BaseModel): + accounting: AccountingList | None = None + """ + Accounting records containing related resource usage + """ + cluster: str + """ + Cluster name + """ + id: int | None = None + """ + Unique ID for this user-cluster-wckey combination + """ + name: str + """ + WCKey name + """ + user: str + """ + User name + """ + flags: List[FlagModel10] | None = None + """ + Flags associated with this WCKey + """ + + +class QosList(RootModel[List[QosModel]]): + root: List[QosModel] + + +class AssocList(RootModel[List[Assoc]]): + root: List[Assoc] + + +class OpenapiSlurmdbdQosResp(BaseModel): + qos: QosList + """ + List of QOS + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class OpenapiAssocsResp(BaseModel): + associations: AssocList + """ + associations + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class UsersAddCond(BaseModel): + accounts: StringList | None = None + """ + CSV accounts list + """ + association: AssocRecSet | None = None + """ + Association limits and options + """ + clusters: StringList | None = None + """ + CSV clusters list + """ + partitions: StringList | None = None + """ + CSV partitions list + """ + users: StringList + """ + CSV users list + """ + wckeys: StringList | None = None + """ + CSV WCKeys list + """ + + +class OpenapiClustersResp(BaseModel): + clusters: ClusterRecList + """ + clusters + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class OpenapiAccountsAddCondResp(BaseModel): + association_condition: AccountsAddCond + """ + CSV list of accounts, association limits and options, CSV list of clusters + """ + account: AccountShort | None = None + """ + Account organization and description + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class StatsRec(BaseModel): + time_start: int | None = None + """ + When data collection started (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]')) + """ + rollups: RollupStats | None = None + """ + Rollup statistics + """ + RPCs: StatsRpcList | None = None + """ + List of RPCs sent to the slurmdbd + """ + users: StatsUserList | None = None + """ + List of users that issued RPCs + """ + + +class OpenapiSlurmdbdPingResp(BaseModel): + pings: SlurmdbdPingArray + """ + pings + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class TresModel7(BaseModel): + run_seconds: SharesUint64TresList | None = None + """ + Currently running tres-secs = grp_used_tres_run_secs + """ + group_minutes: SharesUint64TresList | None = None + """ + TRES-minute limit + """ + usage: SharesFloat128TresList | None = None + """ + Measure of each TRES usage + """ + + +class AssocSharesObjWrap(BaseModel): + id: int | None = None + """ + Association ID + """ + cluster: str | None = None + """ + Cluster name + """ + name: str | None = None + """ + Share name + """ + parent: str | None = None + """ + Parent name + """ + partition: str | None = None + """ + Partition name + """ + shares_normalized: Float64NoValStruct | None = None + """ + Normalized shares (64 bit floating point number with flags) + """ + shares: Uint32NoValStruct | None = None + """ + Number of shares allocated (32 bit integer number with flags) + """ + tres: TresModel7 | None = None + effective_usage: Float64NoValStruct | None = None + """ + Effective, normalized usage (64 bit floating point number with flags) + """ + usage_normalized: Float64NoValStruct | None = None + """ + Normalized usage (64 bit floating point number with flags) + """ + usage: int | None = None + """ + Measure of tresbillableunits usage + """ + fairshare: Fairshare | None = None + type: List[TypeEnum] | None = None + """ + User or account association + """ -class PerModel5(BaseModel): - job: Optional[TresList] = None +class StatsMsg(BaseModel): + parts_packed: int | None = Field(None, deprecated=True) + """ + Zero if only RPC statistic included + """ + req_time: Uint64NoValStruct | None = None + """ + When the request was made (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) + """ + req_time_start: Uint64NoValStruct | None = None + """ + When the data in the report started (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) + """ + server_thread_count: int | None = None + """ + Number of current active slurmctld threads + """ + agent_queue_size: int | None = None + """ + Number of enqueued outgoing RPC requests in an internal retry list + """ + agent_count: int | None = None + """ + Number of agent threads + """ + agent_thread_count: int | None = None + """ + Total number of active threads created by all agent threads + """ + dbd_agent_queue_size: int | None = None + """ + Number of messages for SlurmDBD that are queued + """ + gettimeofday_latency: int | None = None + """ + Latency of 1000 calls to the gettimeofday() syscall in microseconds, as measured at controller startup + """ + schedule_cycle_max: int | None = None + """ + Max time of any scheduling cycle in microseconds since last reset + """ + schedule_cycle_last: int | None = None + """ + Time in microseconds for last scheduling cycle + """ + schedule_cycle_sum: int | None = None + """ + Total run time in microseconds for all scheduling cycles since last reset + """ + schedule_cycle_total: int | None = None + """ + Number of scheduling cycles since last reset + """ + schedule_cycle_mean: int | None = None + """ + Mean time in microseconds for all scheduling cycles since last reset + """ + schedule_cycle_mean_depth: int | None = None + """ + Mean of the number of jobs processed in a scheduling cycle + """ + schedule_cycle_per_minute: int | None = None + """ + Number of scheduling executions per minute + """ + schedule_cycle_depth: int | None = None + """ + Total number of jobs processed in scheduling cycles + """ + schedule_exit: ScheduleExitFields | None = None + """ + Reasons for which the scheduling cycle exited since last reset + """ + schedule_queue_length: int | None = None + """ + Number of jobs pending in queue + """ + jobs_submitted: int | None = None + """ + Number of jobs submitted since last reset + """ + jobs_started: int | None = None + """ + Number of jobs started since last reset + """ + jobs_completed: int | None = None + """ + Number of jobs completed since last reset + """ + jobs_canceled: int | None = None + """ + Number of jobs canceled since the last reset + """ + jobs_failed: int | None = None + """ + Number of jobs failed due to slurmd or other internal issues since last reset + """ + jobs_pending: int | None = None + """ + Number of jobs pending at the time of listed in job_state_ts + """ + jobs_running: int | None = None + """ + Number of jobs running at the time of listed in job_state_ts + """ + job_states_ts: Uint64NoValStruct | None = None + """ + When the job state counts were gathered (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) + """ + bf_backfilled_jobs: int | None = None + """ + Number of jobs started through backfilling since last slurm start + """ + bf_last_backfilled_jobs: int | None = None + """ + Number of jobs started through backfilling since last reset + """ + bf_backfilled_het_jobs: int | None = None + """ + Number of heterogeneous job components started through backfilling since last Slurm start + """ + bf_cycle_counter: int | None = None + """ + Number of backfill scheduling cycles since last reset + """ + bf_cycle_mean: int | None = None + """ + Mean time in microseconds of backfilling scheduling cycles since last reset + """ + bf_depth_mean: int | None = None + """ + Mean number of eligible to run jobs processed during all backfilling scheduling cycles since last reset + """ + bf_depth_mean_try: int | None = None + """ + The subset of Depth Mean that the backfill scheduler attempted to schedule + """ + bf_cycle_sum: int | None = None + """ + Total time in microseconds of backfilling scheduling cycles since last reset + """ + bf_cycle_last: int | None = None + """ + Execution time in microseconds of last backfill scheduling cycle + """ + bf_cycle_max: int | None = None + """ + Execution time in microseconds of longest backfill scheduling cycle + """ + bf_exit: BfExitFields | None = None + """ + Reasons for which the backfill scheduling cycle exited since last reset + """ + bf_last_depth: int | None = None + """ + Number of processed jobs during last backfilling scheduling cycle + """ + bf_last_depth_try: int | None = None + """ + Number of processed jobs during last backfilling scheduling cycle that had a chance to start using available resources + """ + bf_depth_sum: int | None = None + """ + Total number of jobs processed during all backfilling scheduling cycles since last reset + """ + bf_depth_try_sum: int | None = None + """ + Subset of bf_depth_sum that the backfill scheduler attempted to schedule + """ + bf_queue_len: int | None = None + """ + Number of jobs pending to be processed by backfilling algorithm + """ + bf_queue_len_mean: int | None = None + """ + Mean number of jobs pending to be processed by backfilling algorithm + """ + bf_queue_len_sum: int | None = None + """ + Total number of jobs pending to be processed by backfilling algorithm since last reset + """ + bf_table_size: int | None = None + """ + Number of different time slots tested by the backfill scheduler in its last iteration + """ + bf_table_size_sum: int | None = None + """ + Total number of different time slots tested by the backfill scheduler + """ + bf_table_size_mean: int | None = None + """ + Mean number of different time slots tested by the backfill scheduler + """ + bf_when_last_cycle: Uint64NoValStruct | None = None + """ + When the last backfill scheduling cycle happened (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) + """ + bf_active: bool | None = None + """ + Backfill scheduler currently running + """ + rpcs_by_message_type: StatsMsgRpcsByType | None = None + """ + Most frequently issued remote procedure calls (RPCs) (RPCs by type) + """ + rpcs_by_user: StatsMsgRpcsByUser | None = None + """ + RPCs issued by user ID (RPCs by user) + """ + pending_rpcs: StatsMsgRpcsQueue | None = None + """ + Pending RPC statistics (Pending RPCs) + """ + pending_rpcs_by_hostlist: StatsMsgRpcsDump | None = None + """ + Pending RPCs hostlists (Pending RPCs by hostlist) + """ -class MinutesModel(BaseModel): - total: Optional[TresList] = None - per: Optional[PerModel5] = None +class JobSubmitReq(BaseModel): + script: str | None = None + """ + Job batch script contents; Same as the script field in jobs[0] or job. + """ + jobs: JobDescMsgList | None = None + """ + HetJob description + """ + job: JobDescMsg | None = None + """ + Job description + """ -class PerModel6(BaseModel): - job: Optional[TresList] = None - node: Optional[TresList] = None +class JobResSocketArray(RootModel[List[JobResSocket]]): + root: List[JobResSocket] -class TresModel3(BaseModel): - total: Optional[TresList] = None - group: Optional[Group] = None - minutes: Optional[MinutesModel] = None - per: Optional[PerModel6] = None +class OpenapiNodesResp(BaseModel): + nodes: NodesModel1 + """ + List of nodes + """ + last_update: Uint64NoValStruct + """ + Time of last node change (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ -class Account(BaseModel): - wall_clock: Optional[Uint32NoVal] = None +class ReservationInfoMsg(RootModel[List[ReservationInfo]]): + root: List[ReservationInfo] -class PerModel7(BaseModel): - account: Optional[Account] = None +class ReservationDescMsgList(RootModel[List[ReservationDescMsg]]): + root: List[ReservationDescMsg] -class MaxModel1(BaseModel): - jobs: Optional[JobsModel] = None - tres: Optional[TresModel3] = None - per: Optional[PerModel7] = None +class ReservationModReq(BaseModel): + reservations: ReservationDescMsgList | None = None + """ + Array of reservation descriptions + """ -class MinModel(BaseModel): - priority_threshold: Optional[Uint32NoVal] = None +class NodeResourceLayoutList(RootModel[List[NodeResourceLayout]]): + root: List[NodeResourceLayout] -class QosStringIdList(RootModel[List[str]]): +class Job(BaseModel): + account: str | None = None """ - List of QOS names + Account the job ran under """ - - root: List[str] + comment: Comment | None = None + allocation_nodes: int | None = None """ - List of QOS names + List of nodes allocated to the job """ - - -class TimeModel1(BaseModel): - time_end: Optional[int] = None - time_start: Optional[int] = None - - -class Instance(BaseModel): - cluster: Optional[str] = None - extra: Optional[str] = None - instance_id: Optional[str] = None - instance_type: Optional[str] = None - node_name: Optional[str] = None - time: Optional[TimeModel1] = None - - -class StringList(RootModel[List[str]]): - root: List[str] - - -class AssocRecSet(BaseModel): - comment: Optional[str] = None + array: Array | None = None + association: AssocShort | None = None """ - Comment for the association + Unique identifier for the association """ - defaultqos: Optional[str] = None + block: str | None = None """ - Which QOS id is this association default + The name of the block to be used (used with Blue Gene systems) """ - grpjobs: Optional[Uint32NoVal] = None + cluster: str | None = None """ - Max number of jobs the underlying group of associations can run at one time + Cluster name """ - grpjobsaccrue: Optional[Uint32NoVal] = None + constraints: str | None = None """ - Max number of jobs the underlying group of associations can have accruing priority at one time + Feature(s) the job requested as a constraint """ - grpsubmitjobs: Optional[Uint32NoVal] = None + container: str | None = None """ - Max number of jobs the underlying group of associations can submit at one time + Absolute path to OCI container bundle """ - grptres: Optional[TresList] = None - grptresmins: Optional[TresList] = None + derived_exit_code: ProcessExitCodeVerbose | None = None """ - Max number of cpu minutes the underlying group of associations can run for + Highest exit code of all job steps (return code returned by process) """ - grptresrunmins: Optional[TresList] = None + time: Time | None = None + exit_code: ProcessExitCodeVerbose | None = None """ - Max number of cpu minutes the underlying group of associations can having running at one time + Exit code (return code returned by process) """ - grpwall: Optional[Uint32NoVal] = None + extra: str | None = None """ - Total time in minutes the underlying group of associations can run for + Arbitrary string used for node filtering if extra constraints are enabled """ - maxjobs: Optional[Uint32NoVal] = None + failed_node: str | None = None """ - Max number of jobs this association can run at one time + Name of node that caused job failure """ - maxjobsaccrue: Optional[Uint32NoVal] = None + flags: List[FlagModel5] | None = None """ - Max number of jobs this association can have accruing priority time + Flags associated with this job """ - maxsubmitjobs: Optional[Uint32NoVal] = None + group: str | None = None """ - Max number of jobs that can be submitted by association + Group ID of the user that owns the job """ - maxtresminsperjob: Optional[TresList] = None + het: Het | None = None + job_id: int | None = None """ - Max number of cpu minutes this association can have per job + Job ID """ - maxtresrunmins: Optional[TresList] = None + name: str | None = None """ - Max number of cpu minutes this association can having running at one time + Job name """ - maxtresperjob: Optional[TresList] = None + licenses: str | None = None """ - Max number of cpus this association can allocate per job + License(s) required by the job """ - maxtrespernode: Optional[TresList] = None + mcs: Mcs | None = None + nodes: str | None = None """ - Max number of TRES this association can allocate per node + Node(s) allocated to the job """ - maxwalldurationperjob: Optional[Uint32NoVal] = None + partition: str | None = None """ - Longest time this association can run a job + Partition assigned to the job """ - minpriothresh: Optional[Uint32NoVal] = None + hold: bool | None = None """ - Don't reserve resources for pending jobs unless they have a priority equal to or higher than this + Hold (true) or release (false) job (Job held) """ - parent: Optional[str] = None + priority: Uint32NoValStruct | None = None """ - Name of parent account + Request specific job priority (32 bit integer number with flags) """ - priority: Optional[Uint32NoVal] = None + qos: str | None = None """ - Association priority + Quality of Service assigned to the job """ - qoslevel: Optional[QosStringIdList] = None + qosreq: str | None = None """ - List of QOS names + Requested QOS + """ + required: Required | None = None + kill_request_user: str | None = None + """ + User ID that requested termination of the job + """ + restart_cnt: int | None = None + """ + How many times this job has been requeued/restarted + """ + reservation: Reservation | None = None + script: str | None = None + """ + Job batch script contents; only the first component in a HetJob is populated or honored + """ + segment_size: int | None = None + """ + Requested segment size + """ + stdin_expanded: str | None = None + """ + Job stdin with expanded fields + """ + stdout_expanded: str | None = None + """ + Job stdout with expanded fields + """ + stderr_expanded: str | None = None + """ + Job stderr with expanded fields + """ + stdout: str | None = None + """ + Path to stdout file + """ + stderr: str | None = None + """ + Path to stderr file + """ + stdin: str | None = None + """ + Path to stdin file + """ + state: State | None = None + steps: StepList | None = None + """ + Individual steps in the job + """ + submit_line: str | None = None """ - fairshare: Optional[int] = None + Command used to submit the job """ - Number of shares allocated to this association + tres: TresModel1 | None = None + used_gres: str | None = None + """ + Generic resources used by job + """ + user: str | None = None + """ + User that owns the job + """ + wckey: WckeyTagStruct | None = None + """ + Workload characterization key (WCKey ID with tagging) + """ + working_directory: str | None = None + """ + Path to current working directory """ -class AdminlevelEnum(Enum): - Not_Set = "Not Set" - None_ = "None" - Operator = "Operator" - Administrator = "Administrator" +class AccountList(RootModel[List[AccountModel]]): + root: List[AccountModel] -class UserShort(BaseModel): - adminlevel: Optional[List[AdminlevelEnum]] = None +class WckeyList(RootModel[List[Wckey]]): + root: List[Wckey] + + +class OpenapiUsersAddCondResp(BaseModel): + association_condition: UsersAddCond + """ + Filters to select associations for users + """ + user: UserShort + """ + Admin level of user, DefaultAccount, DefaultWCKey """ - Admin level of user. Valid levels are None, Operator, and Admin. + meta: OpenapiMeta | None = None """ - defaultaccount: Optional[str] = None + Slurm meta values + """ + errors: OpenapiErrors | None = None """ - Identify the default bank account name to be used for a job if none is specified at submission time. + Query errors """ - defaultwckey: Optional[str] = None + warnings: OpenapiWarnings | None = None """ - Identify the default Workload Characterization Key. + Query warnings """ -class AccountsAddCond(BaseModel): - accounts: StringList +class OpenapiWckeyResp(BaseModel): + wckeys: WckeyList """ - CSV accounts list + wckeys """ - association: Optional[AssocRecSet] = None + meta: OpenapiMeta | None = None """ - Association limits and options + Slurm meta values """ - clusters: Optional[StringList] = None + errors: OpenapiErrors | None = None """ - CSV clusters list + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings """ -class AccountShort(BaseModel): - description: Optional[str] = None +class OpenapiAccountsResp(BaseModel): + accounts: AccountList + """ + accounts + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values + """ + errors: OpenapiErrors | None = None + """ + Query errors + """ + warnings: OpenapiWarnings | None = None + """ + Query warnings + """ + + +class OpenapiSlurmdbdStatsResp(BaseModel): + statistics: StatsRec """ - An arbitrary string describing an account + statistics + """ + meta: OpenapiMeta | None = None + """ + Slurm meta values """ - organization: Optional[str] = None + errors: OpenapiErrors | None = None """ - Organization to which the account belongs + Query errors """ - - -class Type(Enum): + warnings: OpenapiWarnings | None = None """ - type + Query warnings """ - internal = "internal" - user = "user" - unknown = "unknown" +class AssocSharesObjList(RootModel[List[AssocSharesObjWrap]]): + root: List[AssocSharesObjWrap] -class RollupStat(BaseModel): - """ - recorded rollup statistics - """ - type: Optional[Type] = None +class OpenapiDiagResp(BaseModel): + statistics: StatsMsg """ - type + statistics """ - last_run: Optional[int] = Field(None, alias="last run") + meta: OpenapiMeta | None = None """ - Last time rollup ran (UNIX timestamp) + Slurm meta values """ - max_cycle: Optional[int] = None + errors: OpenapiErrors | None = None """ - longest rollup time (seconds) + Query errors """ - total_time: Optional[int] = None + warnings: OpenapiWarnings | None = None """ - total time spent doing rollups (seconds) + Query warnings """ - total_cycles: Optional[int] = None + + +class JobResNode(BaseModel): + index: int """ - number of rollups since last_run + Node index """ - mean_cycles: Optional[int] = None + name: str """ - average time for rollup (seconds) + Node name """ - - -class RollupStats(RootModel[List[RollupStat]]): + cpus: Cpus | None = None + memory: Memory | None = None + sockets: JobResSocketArray """ - list of recorded rollup statistics + Socket allocations in node """ - root: List[RollupStat] + +class OpenapiReservationResp(BaseModel): + reservations: ReservationInfoMsg """ - list of recorded rollup statistics + List of reservations """ - - -class TimeModel2(BaseModel): - average: Optional[int] = None - total: Optional[int] = None - - -class StatsRpc(BaseModel): - rpc: Optional[str] = None - count: Optional[int] = None - time: Optional[TimeModel2] = None - - -class StatsUser(BaseModel): - user: Optional[str] = None - count: Optional[int] = None - time: Optional[TimeModel2] = None - - -class OpenapiMeta(BaseModel): - plugin: Optional[Plugin] = None - client: Optional[Client] = None - command: Optional[StringArray] = None + last_update: Uint64NoValStruct """ - CLI command (if applicable) + Time of last reservation change (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) """ - slurm: Optional[Slurm] = None - - -class OpenapiErrors(RootModel[List[OpenapiError]]): - root: List[OpenapiError] - - -class OpenapiWarnings(RootModel[List[OpenapiWarning]]): - root: List[OpenapiWarning] - - -class StatsMsg(BaseModel): - parts_packed: Optional[int] = None - req_time: Optional[Uint64NoVal] = None - req_time_start: Optional[Uint64NoVal] = None - server_thread_count: Optional[int] = None - agent_queue_size: Optional[int] = None - agent_count: Optional[int] = None - agent_thread_count: Optional[int] = None - dbd_agent_queue_size: Optional[int] = None - gettimeofday_latency: Optional[int] = None - schedule_cycle_max: Optional[int] = None - schedule_cycle_last: Optional[int] = None - schedule_cycle_total: Optional[int] = None - schedule_cycle_mean: Optional[int] = None - schedule_cycle_mean_depth: Optional[int] = None - schedule_cycle_per_minute: Optional[int] = None - schedule_queue_length: Optional[int] = None - schedule_exit: Optional[ScheduleExitFields] = None - jobs_submitted: Optional[int] = None - jobs_started: Optional[int] = None - jobs_completed: Optional[int] = None - jobs_canceled: Optional[int] = None - jobs_failed: Optional[int] = None - jobs_pending: Optional[int] = None - jobs_running: Optional[int] = None - job_states_ts: Optional[Uint64NoVal] = None - bf_backfilled_jobs: Optional[int] = None - bf_last_backfilled_jobs: Optional[int] = None - bf_backfilled_het_jobs: Optional[int] = None - bf_cycle_counter: Optional[int] = None - bf_cycle_mean: Optional[int] = None - bf_depth_mean: Optional[int] = None - bf_depth_mean_try: Optional[int] = None - bf_cycle_sum: Optional[int] = None - bf_cycle_last: Optional[int] = None - bf_last_depth: Optional[int] = None - bf_last_depth_try: Optional[int] = None - bf_depth_sum: Optional[int] = None - bf_depth_try_sum: Optional[int] = None - bf_queue_len: Optional[int] = None - bf_queue_len_mean: Optional[int] = None - bf_queue_len_sum: Optional[int] = None - bf_table_size: Optional[int] = None - bf_table_size_mean: Optional[int] = None - bf_when_last_cycle: Optional[Uint64NoVal] = None - bf_active: Optional[bool] = None - bf_exit: Optional[BfExitFields] = None - rpcs_by_message_type: Optional[StatsMsgRpcsByType] = None - rpcs_by_user: Optional[StatsMsgRpcsByUser] = None - - -class Licenses(RootModel[List[License]]): - root: List[License] - - -class ControllerPingArray(RootModel[List[ControllerPing]]): - root: List[ControllerPing] - - -class JobRes(BaseModel): - nodes: Optional[str] = None - allocated_cores: Optional[int] = None - allocated_cpus: Optional[int] = None - allocated_hosts: Optional[int] = None - allocated_nodes: Optional[JobResNodes] = None - - -class JobDescMsg(BaseModel): - account: Optional[str] = None - account_gather_frequency: Optional[str] = None - admin_comment: Optional[str] = None - allocation_node_list: Optional[str] = None - allocation_node_port: Optional[int] = None - argv: Optional[StringArray] = None - array: Optional[str] = None - batch_features: Optional[str] = None - begin_time: Optional[Uint64NoVal] = None - flags: Optional[List[FlagModel1]] = None - burst_buffer: Optional[str] = None - clusters: Optional[str] = None - cluster_constraint: Optional[str] = None - comment: Optional[str] = None - contiguous: Optional[bool] = None - container: Optional[str] = None - container_id: Optional[str] = None - core_specification: Optional[int] = None - thread_specification: Optional[int] = None - cpu_binding: Optional[str] = None - cpu_binding_flags: Optional[List[CpuBindingFlag]] = None - cpu_frequency: Optional[str] = None - cpus_per_tres: Optional[str] = None - crontab: Optional[CronEntry] = None - deadline: Optional[int] = None - delay_boot: Optional[int] = None - dependency: Optional[str] = None - end_time: Optional[int] = None - environment: Optional[StringArray] = None - rlimits: Optional[Rlimits] = None - excluded_nodes: Optional[CsvString] = None - extra: Optional[str] = None - constraints: Optional[str] = None - group_id: Optional[str] = None - hetjob_group: Optional[int] = None - immediate: Optional[bool] = None - job_id: Optional[int] = None - kill_on_node_fail: Optional[bool] = None - licenses: Optional[str] = None - mail_type: Optional[List[MailTypeEnum]] = None - mail_user: Optional[str] = None - mcs_label: Optional[str] = None - memory_binding: Optional[str] = None - memory_binding_type: Optional[List[MemoryBindingTypeEnum]] = None - memory_per_tres: Optional[str] = None - name: Optional[str] = None - network: Optional[str] = None - nice: Optional[int] = None - tasks: Optional[int] = None - open_mode: Optional[List[OpenModeEnum]] = None - reserve_ports: Optional[int] = None - overcommit: Optional[bool] = None - partition: Optional[str] = None - distribution_plane_size: Optional[int] = None - power_flags: Optional[List[PowerFlag]] = None - prefer: Optional[str] = None - priority: Optional[Uint32NoVal] = None - profile: Optional[List[ProfileEnum]] = None - qos: Optional[str] = None - reboot: Optional[bool] = None - required_nodes: Optional[CsvString] = None - requeue: Optional[bool] = None - reservation: Optional[str] = None - script: Optional[str] = None - shared: Optional[List[SharedEnum]] = None - exclusive: Optional[List[ExclusiveEnum]] = None - oversubscribe: Optional[bool] = None - site_factor: Optional[int] = None - spank_environment: Optional[StringArray] = None - distribution: Optional[str] = None - time_limit: Optional[Uint32NoVal] = None - time_minimum: Optional[Uint32NoVal] = None - tres_bind: Optional[str] = None - tres_freq: Optional[str] = None - tres_per_job: Optional[str] = None - tres_per_node: Optional[str] = None - tres_per_socket: Optional[str] = None - tres_per_task: Optional[str] = None - user_id: Optional[str] = None - wait_all_nodes: Optional[bool] = None - kill_warning_flags: Optional[List[KillWarningFlag]] = None - kill_warning_signal: Optional[str] = None - kill_warning_delay: Optional[Uint16NoVal] = None - current_working_directory: Optional[str] = None - cpus_per_task: Optional[int] = None - minimum_cpus: Optional[int] = None - maximum_cpus: Optional[int] = None - nodes: Optional[str] = None - minimum_nodes: Optional[int] = None - maximum_nodes: Optional[int] = None - minimum_boards_per_node: Optional[int] = None - minimum_sockets_per_board: Optional[int] = None - sockets_per_node: Optional[int] = None - threads_per_core: Optional[int] = None - tasks_per_node: Optional[int] = None - tasks_per_socket: Optional[int] = None - tasks_per_core: Optional[int] = None - tasks_per_board: Optional[int] = None - ntasks_per_tres: Optional[int] = None - minimum_cpus_per_node: Optional[int] = None - memory_per_cpu: Optional[Uint64NoVal] = None - memory_per_node: Optional[Uint64NoVal] = None - temporary_disk_per_node: Optional[int] = None - selinux_context: Optional[str] = None - required_switches: Optional[Uint32NoVal] = None - standard_error: Optional[str] = None - standard_input: Optional[str] = None - standard_output: Optional[str] = None - wait_for_switch: Optional[int] = None - wckey: Optional[str] = None - x11: Optional[List[X11Enum]] = None - x11_magic_cookie: Optional[str] = None - x11_target_host: Optional[str] = None - x11_target_port: Optional[int] = None - - -class JobArrayResponseArray(RootModel[List[JobArrayResponseMsgEntry]]): - root: List[JobArrayResponseMsgEntry] - - -class JobDescMsgList(RootModel[List[JobDescMsg]]): - root: List[JobDescMsg] - - -class OpenapiJobSubmitResponse(BaseModel): - result: Optional[JobSubmitResponseMsg] = None + meta: OpenapiMeta | None = None """ - Job submission + Slurm meta values """ - job_id: Optional[int] = None + errors: OpenapiErrors | None = None """ - submited JobId + Query errors """ - step_id: Optional[str] = None + warnings: OpenapiWarnings | None = None """ - submited StepID + Query warnings """ - job_submit_user_msg: Optional[str] = None + + +class OpenapiReservationModResp(BaseModel): + reservations: ReservationDescMsgList """ - job submision user message + Reservation descriptions """ - meta: Optional[OpenapiMeta] = None + meta: OpenapiMeta | None = None """ Slurm meta values """ - errors: Optional[OpenapiErrors] = None + errors: OpenapiErrors | None = None """ Query errors """ - warnings: Optional[OpenapiWarnings] = None + warnings: OpenapiWarnings | None = None """ Query warnings """ -class Node(BaseModel): - architecture: Optional[str] = None - burstbuffer_network_address: Optional[str] = None - boards: Optional[int] = None - boot_time: Optional[Uint64NoVal] = None - cluster_name: Optional[str] = None - cores: Optional[int] = None - specialized_cores: Optional[int] = None - cpu_binding: Optional[int] = None - cpu_load: Optional[int] = None - free_mem: Optional[Uint64NoVal] = None - cpus: Optional[int] = None - effective_cpus: Optional[int] = None - specialized_cpus: Optional[str] = None - energy: Optional[AcctGatherEnergy] = None - external_sensors: Optional[ExtSensorsData] = None - extra: Optional[str] = None - power: Optional[PowerMgmtData] = None - features: Optional[CsvString] = None - active_features: Optional[CsvString] = None - gres: Optional[str] = None - gres_drained: Optional[str] = None - gres_used: Optional[str] = None - instance_id: Optional[str] = None - instance_type: Optional[str] = None - last_busy: Optional[Uint64NoVal] = None - mcs_label: Optional[str] = None - specialized_memory: Optional[int] = None - name: Optional[str] = None - next_state_after_reboot: Optional[List[NextStateAfterRebootEnum]] = None - address: Optional[str] = None - hostname: Optional[str] = None - state: Optional[List[StateEnum]] = None - operating_system: Optional[str] = None - owner: Optional[str] = None - partitions: Optional[CsvString] = None - port: Optional[int] = None - real_memory: Optional[int] = None - comment: Optional[str] = None - reason: Optional[str] = None - reason_changed_at: Optional[Uint64NoVal] = None - reason_set_by_user: Optional[str] = None - resume_after: Optional[Uint64NoVal] = None - reservation: Optional[str] = None - alloc_memory: Optional[int] = None - alloc_cpus: Optional[int] = None - alloc_idle_cpus: Optional[int] = None - tres_used: Optional[str] = None - tres_weighted: Optional[float] = None - slurmd_start_time: Optional[Uint64NoVal] = None - sockets: Optional[int] = None - threads: Optional[int] = None - temporary_disk: Optional[int] = None - weight: Optional[int] = None - tres: Optional[str] = None - version: Optional[str] = None - - -class UpdateNodeMsg(BaseModel): - comment: Optional[str] = None - """ - arbitrary comment - """ - cpu_bind: Optional[int] = None +class OpenapiResourceLayoutResp(BaseModel): + nodes: NodeResourceLayoutList """ - default CPU binding type + Node resource layouts """ - extra: Optional[str] = None + meta: OpenapiMeta | None = None """ - arbitrary string + Slurm meta values """ - features: Optional[CsvString] = None + errors: OpenapiErrors | None = None """ - new available feature for node + Query errors """ - features_act: Optional[CsvString] = None + warnings: OpenapiWarnings | None = None """ - new active feature for node + Query warnings """ - gres: Optional[str] = None + + +class JobList(RootModel[List[Job]]): + root: List[Job] + + +class UserModel1(BaseModel): + administrator_level: List[AdministratorLevelEnum] | None = None """ - new generic resources for node + AdminLevel granted to the user """ - address: Optional[HostlistString] = None + associations: AssocShortList | None = None """ - communication name + Associations created for this user """ - hostname: Optional[HostlistString] = None + coordinators: CoordList | None = None """ - node's hostname + Accounts this user is a coordinator for """ - name: Optional[HostlistString] = None + default: Default | None = None + flags: List[FlagModel9] | None = None """ - node to update + Flags associated with this user """ - state: Optional[List[StateEnum]] = None + name: str """ - assign new node state + User name """ - reason: Optional[str] = None + old_name: str | None = None """ - reason for node being DOWN or DRAINING + Previous user name """ - reason_uid: Optional[str] = None + wckeys: WckeyList | None = None """ - user ID of sending (needed if user root is sending message) + List of available WCKeys """ - resume_after: Optional[Uint32NoVal] = None + + +class SharesRespMsg(BaseModel): + shares: AssocSharesObjList | None = None """ - automatically resume DOWN or DRAINED node after this amount of seconds + Association shares """ - weight: Optional[Uint32NoVal] = None + total_shares: int | None = None """ - new weight for node + Total number of shares """ -class PartitionInfoMsg(RootModel[List[PartitionInfo]]): - root: List[PartitionInfo] - - -class ReservationInfoCoreSpec(RootModel[List[ReservationCoreSpec]]): - root: List[ReservationCoreSpec] - - -class SharesUint64TresList(RootModel[List[SharesUint64Tres]]): - root: List[SharesUint64Tres] - - -class SharesFloat128TresList(RootModel[List[SharesFloat128Tres]]): - root: List[SharesFloat128Tres] - - -class TresModel4(BaseModel): - allocated: Optional[TresList] = None - requested: Optional[TresList] = None - - -class NodesModel(BaseModel): - count: Optional[int] = None - range: Optional[str] = None - list: Optional[Hostlist] = None - - -class Consumed(BaseModel): - max: Optional[StepTresUsageMax] = None - min: Optional[StepTresUsageMin] = None - average: Optional[TresList] = None - total: Optional[TresList] = None - - -class StepTresReqMax(RootModel[List[TresModel]]): - root: List[TresModel] - - -class ClusterRecList(RootModel[List[ClusterRec]]): - root: List[ClusterRec] - - -class CoordList(RootModel[List[Coord]]): - root: List[Coord] - - -class AccountingList(RootModel[List[Accounting]]): - root: List[Accounting] - - -class Preempt(BaseModel): - list: Optional[QosPreemptList] = None - mode: Optional[List[ModeEnum]] = None - exempt_time: Optional[Uint32NoVal] = None - - -class QosModel(BaseModel): - description: Optional[str] = None - flags: Optional[List[FlagModel11]] = None - id: Optional[int] = None - limits: Optional[LimitsModel] = None - name: Optional[str] = None - preempt: Optional[Preempt] = None - priority: Optional[Uint32NoVal] = None - usage_factor: Optional[Float64NoVal] = None - usage_threshold: Optional[Float64NoVal] = None - +class JobResNodes(RootModel[List[JobResNode]]): + """ + Job resources for a node + """ -class Assoc(BaseModel): - accounting: Optional[AccountingList] = None + root: List[JobResNode] """ - Usage accounting + Job resources for a node """ - account: Optional[str] = None - cluster: Optional[str] = None - comment: Optional[str] = None + + +class OpenapiSlurmdbdJobsResp(BaseModel): + jobs: JobList """ - comment for the association + jobs """ - default: Optional[DefaultModel] = None - flags: Optional[List[FlagModel12]] = None - max: Optional[MaxModel1] = None - id: Optional[AssocShort] = None + meta: OpenapiMeta | None = None """ - Association ID + Slurm meta values """ - is_default: Optional[bool] = None - lineage: Optional[str] = None + errors: OpenapiErrors | None = None """ - Complete path up the hierarchy to the root association + Query errors """ - min: Optional[MinModel] = None - parent_account: Optional[str] = None - partition: Optional[str] = None - priority: Optional[Uint32NoVal] = None - qos: Optional[QosStringIdList] = None + warnings: OpenapiWarnings | None = None """ - List of QOS names + Query warnings """ - shares_raw: Optional[int] = None - user: str -class InstanceList(RootModel[List[Instance]]): - root: List[Instance] +class UserList(RootModel[List[UserModel1]]): + root: List[UserModel1] -class OpenapiTresResp(BaseModel): - TRES: TresList +class OpenapiUsersResp(BaseModel): + users: UserList """ - TRES + users """ - meta: Optional[OpenapiMeta] = None + meta: OpenapiMeta | None = None """ Slurm meta values """ - errors: Optional[OpenapiErrors] = None + errors: OpenapiErrors | None = None """ Query errors """ - warnings: Optional[OpenapiWarnings] = None + warnings: OpenapiWarnings | None = None """ Query warnings """ -class OpenapiSlurmdbdQosRemovedResp(BaseModel): - removed_qos: StringList +class OpenapiSharesResp(BaseModel): + shares: SharesRespMsg """ - removed QOS + fairshare info """ - meta: Optional[OpenapiMeta] = None + meta: OpenapiMeta | None = None """ Slurm meta values """ - errors: Optional[OpenapiErrors] = None + errors: OpenapiErrors | None = None """ Query errors """ - warnings: Optional[OpenapiWarnings] = None + warnings: OpenapiWarnings | None = None """ Query warnings """ -class OpenapiAssocsRemovedResp(BaseModel): - removed_associations: StringList +class NodesModel2(BaseModel): + count: int | None = None """ - removed_associations + Number of allocated nodes """ - meta: Optional[OpenapiMeta] = None + select_type: List[SelectTypeEnumModel] | None = None """ - Slurm meta values + Node scheduling selection method """ - errors: Optional[OpenapiErrors] = None + list: str | None = None """ - Query errors + Node(s) allocated to the job """ - warnings: Optional[OpenapiWarnings] = None + whole: bool | None = None """ - Query warnings + Whether whole nodes were allocated """ - - -class OpenapiInstancesResp(BaseModel): - instances: InstanceList + allocation: JobResNodes | None = None """ - instances + Allocated node resources (Job resources for a node) """ - meta: Optional[OpenapiMeta] = None + + +class JobRes(BaseModel): + select_type: List[SelectTypeEnum] """ - Slurm meta values + Scheduler consumable resource selection type """ - errors: Optional[OpenapiErrors] = None + nodes: NodesModel2 | None = None + cpus: int """ - Query errors + Number of allocated CPUs """ - warnings: Optional[OpenapiWarnings] = None + threads_per_core: Uint16NoValStruct """ - Query warnings + Number of processor threads per CPU core (16 bit integer number with flags) """ -class UsersAddCond(BaseModel): - accounts: Optional[StringList] = None +class OpenapiSlurmdbdConfigResp(BaseModel): + clusters: ClusterRecList | None = None """ - CSV accounts list + Clusters """ - association: Optional[AssocRecSet] = None + tres: TresList | None = None """ - Association limits and options + TRES """ - clusters: Optional[StringList] = None + accounts: AccountList | None = None """ - CSV clusters list + Accounts """ - partitions: Optional[StringList] = None + users: UserList | None = None """ - CSV partitions list + Users """ - users: StringList + qos: QosList | None = None """ - CSV users list + QOS """ - wckeys: Optional[StringList] = None + wckeys: WckeyList | None = None """ - CSV WCKeys list + WCKeys """ - - -class OpenapiUsersAddCondRespStr(BaseModel): - added_users: str + associations: AssocList | None = None """ - added_users + Associations """ - meta: Optional[OpenapiMeta] = None + instances: InstanceList | None = Field(None, deprecated=True) + meta: OpenapiMeta | None = None """ Slurm meta values """ - errors: Optional[OpenapiErrors] = None + errors: OpenapiErrors | None = None """ Query errors """ - warnings: Optional[OpenapiWarnings] = None + warnings: OpenapiWarnings | None = None """ Query warnings """ -class OpenapiClustersRemovedResp(BaseModel): - deleted_clusters: StringList +class JobInfo(BaseModel): + account: str | None = None """ - deleted_clusters + Account associated with the job """ - meta: Optional[OpenapiMeta] = None + accrue_time: Uint64NoValStruct | None = None """ - Slurm meta values + When the job started accruing age priority (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) """ - errors: Optional[OpenapiErrors] = None + admin_comment: str | None = None """ - Query errors + Arbitrary comment made by administrator """ - warnings: Optional[OpenapiWarnings] = None + allocating_node: str | None = None """ - Query warnings + Local node making the resource allocation """ - - -class OpenapiClustersResp(BaseModel): - clusters: ClusterRecList + array_job_id: Uint32NoValStruct | None = None """ - clusters + Job ID of job array, or 0 if N/A (32 bit integer number with flags) """ - meta: Optional[OpenapiMeta] = None + array_task_id: Uint32NoValStruct | None = None """ - Slurm meta values + Task ID of this task in job array (32 bit integer number with flags) """ - errors: Optional[OpenapiErrors] = None + array_max_tasks: Uint32NoValStruct | None = None """ - Query errors + Maximum number of simultaneously running array tasks, 0 if no limit (32 bit integer number with flags) """ - warnings: Optional[OpenapiWarnings] = None + array_task_string: str | None = None """ - Query warnings + String expression of task IDs in this record """ - - -class OpenapiWckeyRemovedResp(BaseModel): - deleted_wckeys: StringList + association_id: int | None = None """ - deleted wckeys + Unique identifier for the association """ - meta: Optional[OpenapiMeta] = None + batch_features: str | None = None """ - Slurm meta values + Features required for batch script's node """ - errors: Optional[OpenapiErrors] = None + batch_flag: bool | None = None """ - Query errors + True if batch job """ - warnings: Optional[OpenapiWarnings] = None + batch_host: str | None = None """ - Query warnings + Name of host running batch script """ - - -class OpenapiAccountsRemovedResp(BaseModel): - removed_accounts: StringList + flags: List[FlagModel1] | None = None """ - removed_accounts + Job flags """ - meta: Optional[OpenapiMeta] = None + burst_buffer: str | None = None """ - Slurm meta values + Burst buffer specifications """ - errors: Optional[OpenapiErrors] = None + burst_buffer_state: str | None = None """ - Query errors + Burst buffer state details """ - warnings: Optional[OpenapiWarnings] = None + cluster: str | None = None """ - Query warnings + Cluster name """ - - -class OpenapiAccountsAddCondRespStr(BaseModel): - added_accounts: str + cluster_features: str | None = None """ - added_accounts + List of required cluster features """ - meta: Optional[OpenapiMeta] = None + command: str | None = None """ - Slurm meta values + Executed command """ - errors: Optional[OpenapiErrors] = None + comment: str | None = None """ - Query errors + Arbitrary comment """ - warnings: Optional[OpenapiWarnings] = None + container: str | None = None """ - Query warnings + Absolute path to OCI container bundle """ - - -class OpenapiAccountsAddCondResp(BaseModel): - association_condition: Optional[AccountsAddCond] = None + container_id: str | None = None """ - CSV list of accounts, association limits and options, CSV list of clusters + OCI container ID """ - account: Optional[AccountShort] = None + contiguous: bool | None = None """ - Account organization and description + True if job requires contiguous nodes """ - meta: Optional[OpenapiMeta] = None + core_spec: int | None = None """ - Slurm meta values + Specialized core count + """ + thread_spec: int | None = None + """ + Specialized thread count + """ + cores_per_socket: Uint16NoValStruct | None = None + """ + Cores per socket required (16 bit integer number with flags) + """ + billable_tres: Float64NoValStruct | None = None + """ + Billable TRES (64 bit floating point number with flags) """ - errors: Optional[OpenapiErrors] = None + cpus_per_task: Uint16NoValStruct | None = None """ - Query errors + Number of CPUs required by each task (16 bit integer number with flags) """ - warnings: Optional[OpenapiWarnings] = None + cpu_frequency_minimum: Uint32NoValStruct | None = None """ - Query warnings + Minimum CPU frequency (32 bit integer number with flags) """ - - -class StatsRpcList(RootModel[List[StatsRpc]]): - root: List[StatsRpc] - - -class StatsUserList(RootModel[List[StatsUser]]): - root: List[StatsUser] - - -class OpenapiResp(BaseModel): - meta: Optional[OpenapiMeta] = None + cpu_frequency_maximum: Uint32NoValStruct | None = None """ - Slurm meta values + Maximum CPU frequency (32 bit integer number with flags) """ - errors: Optional[OpenapiErrors] = None + cpu_frequency_governor: Uint32NoValStruct | None = None """ - Query errors + CPU frequency governor (32 bit integer number with flags) """ - warnings: Optional[OpenapiWarnings] = None + cpus_per_tres: str | None = None """ - Query warnings + Semicolon delimited list of TRES=# values indicating how many CPUs should be allocated for each specified TRES (currently only used for gres/gpu) """ - - -class OpenapiDiagResp(BaseModel): - statistics: StatsMsg + cron: str | None = None """ - statistics + Time specification for scrontab job """ - meta: Optional[OpenapiMeta] = None + deadline: Uint64NoValStruct | None = None """ - Slurm meta values + Latest time that the job may start (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) """ - errors: Optional[OpenapiErrors] = None + delay_boot: Uint32NoValStruct | None = None """ - Query errors + Number of seconds after job eligible start that nodes will be rebooted to satisfy feature specification (32 bit integer number with flags) """ - warnings: Optional[OpenapiWarnings] = None + dependency: str | None = None """ - Query warnings + Other jobs that must meet certain criteria before this job can start """ - - -class OpenapiLicensesResp(BaseModel): - licenses: Licenses + derived_exit_code: ProcessExitCodeVerbose | None = None """ - list of licenses + Highest exit code of all job steps (return code returned by process) """ - last_update: Uint64NoVal + eligible_time: Uint64NoValStruct | None = None """ - time of last licenses change (UNIX timestamp) + Time when the job became eligible to run (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) """ - meta: Optional[OpenapiMeta] = None + end_time: Uint64NoValStruct | None = None """ - Slurm meta values + End time, real or expected (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) """ - errors: Optional[OpenapiErrors] = None + excluded_nodes: str | None = None """ - Query errors + Comma-separated list of nodes that may not be used """ - warnings: Optional[OpenapiWarnings] = None + exit_code: ProcessExitCodeVerbose | None = None """ - Query warnings + Exit code of the job (return code returned by process) """ - - -class OpenapiPingArrayResp(BaseModel): - pings: ControllerPingArray + extra: str | None = None """ - pings + Arbitrary string used for node filtering if extra constraints are enabled """ - meta: Optional[OpenapiMeta] = None + failed_node: str | None = None """ - Slurm meta values + Name of node that caused job failure """ - errors: Optional[OpenapiErrors] = None + features: str | None = None """ - Query errors + Comma-separated list of features that are required """ - warnings: Optional[OpenapiWarnings] = None + federation_origin: str | None = None """ - Query warnings + Origin cluster's name (when using federation) """ - - -class JobInfo(BaseModel): - account: Optional[str] = None - accrue_time: Optional[Uint64NoVal] = None - admin_comment: Optional[str] = None - allocating_node: Optional[str] = None - array_job_id: Optional[Uint32NoVal] = None - array_task_id: Optional[Uint32NoVal] = None - array_max_tasks: Optional[Uint32NoVal] = None - array_task_string: Optional[str] = None - association_id: Optional[int] = None - batch_features: Optional[str] = None - batch_flag: Optional[bool] = None - batch_host: Optional[str] = None - flags: Optional[List[Flag]] = None - burst_buffer: Optional[str] = None - burst_buffer_state: Optional[str] = None - cluster: Optional[str] = None - cluster_features: Optional[str] = None - command: Optional[str] = None - comment: Optional[str] = None - container: Optional[str] = None - container_id: Optional[str] = None - contiguous: Optional[bool] = None - core_spec: Optional[int] = None - thread_spec: Optional[int] = None - cores_per_socket: Optional[Uint16NoVal] = None - billable_tres: Optional[Float64NoVal] = None - cpus_per_task: Optional[Uint16NoVal] = None - cpu_frequency_minimum: Optional[Uint32NoVal] = None - cpu_frequency_maximum: Optional[Uint32NoVal] = None - cpu_frequency_governor: Optional[Uint32NoVal] = None - cpus_per_tres: Optional[str] = None - cron: Optional[str] = None - deadline: Optional[Uint64NoVal] = None - delay_boot: Optional[Uint32NoVal] = None - dependency: Optional[str] = None - derived_exit_code: Optional[ProcessExitCodeVerbose] = None - """ - return code returned by process - """ - eligible_time: Optional[Uint64NoVal] = None - end_time: Optional[Uint64NoVal] = None - excluded_nodes: Optional[str] = None - exit_code: Optional[ProcessExitCodeVerbose] = None - """ - return code returned by process - """ - extra: Optional[str] = None - failed_node: Optional[str] = None - features: Optional[str] = None - federation_origin: Optional[str] = None - federation_siblings_active: Optional[str] = None - federation_siblings_viable: Optional[str] = None - gres_detail: Optional[JobInfoGresDetail] = None - group_id: Optional[int] = None - group_name: Optional[str] = None - het_job_id: Optional[Uint32NoVal] = None - het_job_id_set: Optional[str] = None - het_job_offset: Optional[Uint32NoVal] = None - job_id: Optional[int] = None - job_resources: Optional[JobRes] = None - job_size_str: Optional[CsvString] = None - job_state: Optional[List[JobStateEnum]] = None - last_sched_evaluation: Optional[Uint64NoVal] = None - licenses: Optional[str] = None - mail_type: Optional[List[MailTypeEnum]] = None - mail_user: Optional[str] = None - max_cpus: Optional[Uint32NoVal] = None - max_nodes: Optional[Uint32NoVal] = None - mcs_label: Optional[str] = None - memory_per_tres: Optional[str] = None - name: Optional[str] = None - network: Optional[str] = None - nodes: Optional[str] = None - nice: Optional[int] = None - tasks_per_core: Optional[Uint16NoVal] = None - tasks_per_tres: Optional[Uint16NoVal] = None - tasks_per_node: Optional[Uint16NoVal] = None - tasks_per_socket: Optional[Uint16NoVal] = None - tasks_per_board: Optional[Uint16NoVal] = None - cpus: Optional[Uint32NoVal] = None - node_count: Optional[Uint32NoVal] = None - tasks: Optional[Uint32NoVal] = None - partition: Optional[str] = None - prefer: Optional[str] = None - memory_per_cpu: Optional[Uint64NoVal] = None - memory_per_node: Optional[Uint64NoVal] = None - minimum_cpus_per_node: Optional[Uint16NoVal] = None - minimum_tmp_disk_per_node: Optional[Uint32NoVal] = None - power: Optional[Power] = None - preempt_time: Optional[Uint64NoVal] = None - preemptable_time: Optional[Uint64NoVal] = None - pre_sus_time: Optional[Uint64NoVal] = None - priority: Optional[Uint32NoVal] = None - profile: Optional[List[ProfileEnum]] = None - qos: Optional[str] = None - reboot: Optional[bool] = None - required_nodes: Optional[str] = None - minimum_switches: Optional[int] = None - requeue: Optional[bool] = None - resize_time: Optional[Uint64NoVal] = None - restart_cnt: Optional[int] = None - resv_name: Optional[str] = None - scheduled_nodes: Optional[str] = None - selinux_context: Optional[str] = None - shared: Optional[List[SharedEnum]] = None - exclusive: Optional[List[ExclusiveEnum]] = None - oversubscribe: Optional[bool] = None - show_flags: Optional[List[ShowFlag]] = None - sockets_per_board: Optional[int] = None - sockets_per_node: Optional[Uint16NoVal] = None - start_time: Optional[Uint64NoVal] = None - state_description: Optional[str] = None - state_reason: Optional[str] = None - standard_error: Optional[str] = None - standard_input: Optional[str] = None - standard_output: Optional[str] = None - submit_time: Optional[Uint64NoVal] = None - suspend_time: Optional[Uint64NoVal] = None - system_comment: Optional[str] = None - time_limit: Optional[Uint32NoVal] = None - time_minimum: Optional[Uint32NoVal] = None - threads_per_core: Optional[Uint16NoVal] = None - tres_bind: Optional[str] = None - tres_freq: Optional[str] = None - tres_per_job: Optional[str] = None - tres_per_node: Optional[str] = None - tres_per_socket: Optional[str] = None - tres_per_task: Optional[str] = None - tres_req_str: Optional[str] = None - tres_alloc_str: Optional[str] = None - user_id: Optional[int] = None - user_name: Optional[str] = None - maximum_switch_wait_time: Optional[int] = None - wckey: Optional[str] = None - current_working_directory: Optional[str] = None - - -class OpenapiJobPostResponse(BaseModel): - results: Optional[JobArrayResponseArray] = None + federation_siblings_active: str | None = None """ - Job update results + Active sibling job names """ - job_id: Optional[str] = None + federation_siblings_viable: str | None = None """ - First updated JobId - Use results instead + Viable sibling job names """ - step_id: Optional[str] = None + gres_detail: JobInfoGresDetail | None = None """ - First updated StepID - Use results instead + List of GRES index and counts allocated per node """ - job_submit_user_msg: Optional[str] = None + group_id: int | None = None """ - First updated Job submision user message - Use results instead + Group ID of the user that owns the job """ - meta: Optional[OpenapiMeta] = None + group_name: str | None = None """ - Slurm meta values + Group name of the user that owns the job """ - errors: Optional[OpenapiErrors] = None + het_job_id: Uint32NoValStruct | None = None """ - Query errors + Heterogeneous job ID, if applicable (32 bit integer number with flags) """ - warnings: Optional[OpenapiWarnings] = None + het_job_id_set: str | None = None """ - Query warnings + Job ID range for all heterogeneous job components """ - - -class JobSubmitReq(BaseModel): - script: Optional[str] = None + het_job_offset: Uint32NoValStruct | None = None """ - batch job script + Unique sequence number applied to this component of the heterogeneous job (32 bit integer number with flags) """ - jobs: Optional[JobDescMsgList] = None + job_id: int | None = None """ - HetJob description + Job ID """ - job: Optional[JobDescMsg] = None + job_resources: JobRes | None = None """ - Job description + Resources used by the job """ - - -class NodesModel1(RootModel[List[Node]]): - root: List[Node] - - -class OpenapiPartitionResp(BaseModel): - partitions: PartitionInfoMsg + job_size_str: CsvString | None = None """ - list of partitions + Number of nodes (in a range) required for this job """ - last_update: Uint64NoVal + job_state: List[JobStateEnum] | None = None """ - time of last partition change (UNIX timestamp) + Current state """ - meta: Optional[OpenapiMeta] = None + last_sched_evaluation: Uint64NoValStruct | None = None """ - Slurm meta values + Last time job was evaluated for scheduling (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) """ - errors: Optional[OpenapiErrors] = None + licenses: str | None = None """ - Query errors + License(s) required by the job """ - warnings: Optional[OpenapiWarnings] = None + licenses_allocated: str | None = None """ - Query warnings + License(s) allocated to the job """ - - -class ReservationInfo(BaseModel): - accounts: Optional[str] = None - burst_buffer: Optional[str] = None - core_count: Optional[int] = None - core_specializations: Optional[ReservationInfoCoreSpec] = None - end_time: Optional[Uint64NoVal] = None - features: Optional[str] = None - flags: Optional[List[FlagModel4]] = None - groups: Optional[str] = None - licenses: Optional[str] = None - max_start_delay: Optional[int] = None - name: Optional[str] = None - node_count: Optional[int] = None - node_list: Optional[str] = None - partition: Optional[str] = None - purge_completed: Optional[PurgeCompleted] = None - start_time: Optional[Uint64NoVal] = None - watts: Optional[Uint32NoVal] = None - tres: Optional[str] = None - users: Optional[str] = None - - -class TresModel5(BaseModel): - run_seconds: Optional[SharesUint64TresList] = None + mail_type: List[MailTypeEnum] | None = None """ - currently running tres-secs = grp_used_tres_run_secs + Mail event type(s) """ - group_minutes: Optional[SharesUint64TresList] = None + mail_user: str | None = None """ - tres-minute limit + User to receive email notifications """ - usage: Optional[SharesFloat128TresList] = None + max_cpus: Uint32NoValStruct | None = None """ - measure of each tres usage + Maximum number of CPUs usable by the job (32 bit integer number with flags) """ - - -class AssocSharesObjWrap(BaseModel): - id: Optional[int] = None + max_nodes: Uint32NoValStruct | None = None """ - assocation id + Maximum number of nodes usable by the job (32 bit integer number with flags) """ - cluster: Optional[str] = None + mcs_label: str | None = None """ - cluster name + Multi-Category Security label on the job """ - name: Optional[str] = None + memory_per_tres: str | None = None """ - share name + Semicolon delimited list of TRES=# values indicating how much memory in megabytes should be allocated for each specified TRES (currently only used for gres/gpu) """ - parent: Optional[str] = None + name: str | None = None """ - parent name + Job name """ - partition: Optional[str] = None + network: str | None = None """ - partition name + Network specs for the job """ - shares_normalized: Optional[Float64NoVal] = None + nodes: str | None = None """ - normalized shares + Node(s) allocated to the job """ - shares: Optional[Uint32NoVal] = None + nice: int | None = None """ - number of shares allocated + Requested job priority change """ - tres: Optional[TresModel5] = None - effective_usage: Optional[float] = None + tasks_per_core: Uint16NoValStruct | None = None """ - effective, normalized usage + Number of tasks invoked on each core (16 bit integer number with flags) """ - usage_normalized: Optional[Float64NoVal] = None + tasks_per_tres: Uint16NoValStruct | None = None """ - normalized usage + Number of tasks that can assess each GPU (16 bit integer number with flags) """ - usage: Optional[int] = None + tasks_per_node: Uint16NoValStruct | None = None """ - measure of tresbillableunits usage + Number of tasks invoked on each node (16 bit integer number with flags) """ - fairshare: Optional[Fairshare] = None - type: Optional[List[TypeEnum]] = None + tasks_per_socket: Uint16NoValStruct | None = None """ - user or account association + Number of tasks invoked on each socket (16 bit integer number with flags) """ - - -class Requested(BaseModel): - max: Optional[StepTresReqMax] = None - min: Optional[StepTresReqMin] = None - average: Optional[TresList] = None - total: Optional[TresList] = None - - -class TresModel6(BaseModel): - requested: Optional[Requested] = None - consumed: Optional[Consumed] = None - allocated: Optional[TresList] = None - - -class StepModel(BaseModel): - time: Optional[TimeModel] = None - exit_code: Optional[ProcessExitCodeVerbose] = None + tasks_per_board: Uint16NoValStruct | None = None """ - return code returned by process + Number of tasks invoked on each board (16 bit integer number with flags) """ - nodes: Optional[NodesModel] = None - tasks: Optional[Tasks] = None - pid: Optional[str] = None - CPU: Optional[CPU] = None - kill_request_user: Optional[str] = None - state: Optional[List[StateEnumModel1]] = None - statistics: Optional[Statistics] = None - step: Optional[Step] = None - task: Optional[Task] = None - tres: Optional[TresModel6] = None - - -class AccountModel(BaseModel): - associations: Optional[AssocShortList] = None - coordinators: Optional[CoordList] = None - description: str - name: str - organization: str - flags: Optional[List[FlagModel8]] = None - - -class Wckey(BaseModel): - accounting: Optional[AccountingList] = None - cluster: str - id: Optional[int] = None - name: str - user: str - flags: Optional[List[FlagModel10]] = None - - -class QosList(RootModel[List[QosModel]]): - root: List[QosModel] - - -class AssocList(RootModel[List[Assoc]]): - root: List[Assoc] - - -class OpenapiSlurmdbdQosResp(BaseModel): - qos: QosList + cpus: Uint32NoValStruct | None = None """ - List of QOS + Minimum number of CPUs required (32 bit integer number with flags) """ - meta: Optional[OpenapiMeta] = None + node_count: Uint32NoValStruct | None = None """ - Slurm meta values + Minimum number of nodes required (32 bit integer number with flags) """ - errors: Optional[OpenapiErrors] = None + tasks: Uint32NoValStruct | None = None """ - Query errors + Number of tasks (32 bit integer number with flags) """ - warnings: Optional[OpenapiWarnings] = None + partition: str | None = None """ - Query warnings + Partition assigned to the job """ - - -class OpenapiAssocsResp(BaseModel): - associations: AssocList + prefer: str | None = None """ - associations + Feature(s) the job requested but that are not required """ - meta: Optional[OpenapiMeta] = None + memory_per_cpu: Uint64NoValStruct | None = None """ - Slurm meta values + Minimum memory in megabytes per allocated CPU (64 bit integer number with flags) """ - errors: Optional[OpenapiErrors] = None + memory_per_node: Uint64NoValStruct | None = None """ - Query errors + Minimum memory in megabytes per allocated node (64 bit integer number with flags) """ - warnings: Optional[OpenapiWarnings] = None + minimum_cpus_per_node: Uint16NoValStruct | None = None """ - Query warnings + Minimum number of CPUs per node (16 bit integer number with flags) """ - - -class OpenapiUsersAddCondResp(BaseModel): - association_condition: Optional[UsersAddCond] = None + minimum_tmp_disk_per_node: Uint32NoValStruct | None = None """ - Filters to select associations for users + Minimum tmp disk space required per node (32 bit integer number with flags) """ - user: Optional[UserShort] = None + power: Power | None = None + preempt_time: Uint64NoValStruct | None = None """ - Admin level of user, DefaultAccount, DefaultWCKey + Time job received preemption signal (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) """ - meta: Optional[OpenapiMeta] = None + preemptable_time: Uint64NoValStruct | None = None """ - Slurm meta values + Time job becomes eligible for preemption (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) """ - errors: Optional[OpenapiErrors] = None + pre_sus_time: Uint64NoValStruct | None = None """ - Query errors + Total run time prior to last suspend in seconds (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) """ - warnings: Optional[OpenapiWarnings] = None + hold: bool | None = None """ - Query warnings + Hold (true) or release (false) job (Job held) """ - - -class StatsRec(BaseModel): - time_start: Optional[int] = None - rollups: Optional[RollupStats] = None - RPCs: Optional[StatsRpcList] = None - users: Optional[StatsUserList] = None - - -class JobInfoMsg(RootModel[List[JobInfo]]): - root: List[JobInfo] - - -class OpenapiNodesResp(BaseModel): - nodes: NodesModel1 + priority: Uint32NoValStruct | None = None """ - list of nodes + Request specific job priority (32 bit integer number with flags) """ - last_update: Uint64NoVal + priority_by_partition: PriorityByPartition | None = None """ - time of last node change (UNIX timestamp) + Prospective job priority in each partition that may be used by this job """ - meta: Optional[OpenapiMeta] = None + profile: List[ProfileEnum] | None = None """ - Slurm meta values + Profile used by the acct_gather_profile plugin """ - errors: Optional[OpenapiErrors] = None + qos: str | None = None """ - Query errors + Quality of Service assigned to the job, if pending the QOS requested """ - warnings: Optional[OpenapiWarnings] = None + reboot: bool | None = None """ - Query warnings + Node reboot requested before start """ - - -class ReservationInfoMsg(RootModel[List[ReservationInfo]]): - root: List[ReservationInfo] - - -class AssocSharesObjList(RootModel[List[AssocSharesObjWrap]]): - root: List[AssocSharesObjWrap] - - -class StepList(RootModel[List[StepModel]]): - root: List[StepModel] - - -class AccountList(RootModel[List[AccountModel]]): - root: List[AccountModel] - - -class WckeyList(RootModel[List[Wckey]]): - root: List[Wckey] - - -class OpenapiWckeyResp(BaseModel): - wckeys: WckeyList + required_nodes: str | None = None """ - wckeys + Comma-separated list of required nodes """ - meta: Optional[OpenapiMeta] = None + required_switches: int | None = None """ - Slurm meta values + Maximum number of switches """ - errors: Optional[OpenapiErrors] = None + requeue: bool | None = None """ - Query errors + Determines whether the job may be requeued """ - warnings: Optional[OpenapiWarnings] = None + resize_time: Uint64NoValStruct | None = None """ - Query warnings + Time of last size change (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) """ - - -class OpenapiAccountsResp(BaseModel): - accounts: AccountList + restart_cnt: int | None = None """ - accounts + Number of job restarts """ - meta: Optional[OpenapiMeta] = None + resv_name: str | None = None """ - Slurm meta values + Name of reservation to use """ - errors: Optional[OpenapiErrors] = None + scheduled_nodes: str | None = None """ - Query errors + List of nodes scheduled to be used for the job """ - warnings: Optional[OpenapiWarnings] = None + segment_size: int | None = None """ - Query warnings + Requested segment size """ - - -class OpenapiSlurmdbdStatsResp(BaseModel): - statistics: StatsRec + selinux_context: str | None = None """ - statistics + SELinux context """ - meta: Optional[OpenapiMeta] = None + shared: List[SharedEnum] | None = None """ - Slurm meta values + How the job can share resources with other jobs, if at all """ - errors: Optional[OpenapiErrors] = None + step_id: SlurmStepId | None = None """ - Query errors + Job step ID """ - warnings: Optional[OpenapiWarnings] = None + sockets_per_board: int | None = None """ - Query warnings + Number of sockets per board required """ - - -class OpenapiJobInfoResp(BaseModel): - jobs: JobInfoMsg + sockets_per_node: Uint16NoValStruct | None = None """ - list of jobs + Number of sockets per node required (16 bit integer number with flags) """ - last_backfill: Uint64NoVal + start_time: Uint64NoValStruct | None = None """ - time of last backfill scheduler run (UNIX timestamp) + Time execution began, or is expected to begin (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) """ - last_update: Uint64NoVal + state_description: str | None = None """ - time of last job change (UNIX timestamp) + Optional details for state_reason """ - meta: Optional[OpenapiMeta] = None + state_reason: str | None = None """ - Slurm meta values + Reason for current Pending or Failed state """ - errors: Optional[OpenapiErrors] = None + standard_input: str | None = None """ - Query errors + Path to stdin file """ - warnings: Optional[OpenapiWarnings] = None + standard_output: str | None = None """ - Query warnings + Path to stdout file """ - - -class OpenapiReservationResp(BaseModel): - reservations: ReservationInfoMsg + standard_error: str | None = None """ - list of reservations + Path to stderr file """ - last_update: Uint64NoVal + stdin_expanded: str | None = None """ - time of last reservation change (UNIX timestamp) + Job stdin with expanded fields """ - meta: Optional[OpenapiMeta] = None + stdout_expanded: str | None = None """ - Slurm meta values + Job stdout with expanded fields """ - errors: Optional[OpenapiErrors] = None + stderr_expanded: str | None = None """ - Query errors + Job stderr with expanded fields """ - warnings: Optional[OpenapiWarnings] = None + submit_time: Uint64NoValStruct | None = None """ - Query warnings + Time when the job was submitted (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) """ - - -class SharesRespMsg(BaseModel): - shares: Optional[AssocSharesObjList] = None + submit_line: str | None = None """ - Assocation shares + Job submit line (e.g. 'sbatch -N3 job.sh job_arg' """ - total_shares: Optional[int] = None + suspend_time: Uint64NoValStruct | None = None """ - Total number of shares + Time the job was last suspended or resumed (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) """ - - -class Job(BaseModel): - account: Optional[str] = None - comment: Optional[Comment] = None - allocation_nodes: Optional[int] = None - array: Optional[Array] = None - association: Optional[AssocShort] = None - block: Optional[str] = None - cluster: Optional[str] = None - constraints: Optional[str] = None - container: Optional[str] = None - derived_exit_code: Optional[ProcessExitCodeVerbose] = None - """ - return code returned by process - """ - time: Optional[Time] = None - exit_code: Optional[ProcessExitCodeVerbose] = None - """ - return code returned by process - """ - extra: Optional[str] = None - failed_node: Optional[str] = None - flags: Optional[List[FlagModel5]] = None - group: Optional[str] = None - het: Optional[Het] = None - job_id: Optional[int] = None - name: Optional[str] = None - licenses: Optional[str] = None - mcs: Optional[Mcs] = None - nodes: Optional[str] = None - partition: Optional[str] = None - priority: Optional[Uint32NoVal] = None - qos: Optional[str] = None - required: Optional[Required] = None - kill_request_user: Optional[str] = None - reservation: Optional[Reservation] = None - script: Optional[str] = None - state: Optional[State] = None - steps: Optional[StepList] = None - submit_line: Optional[str] = None - tres: Optional[TresModel4] = None - used_gres: Optional[str] = None - user: Optional[str] = None - wckey: Optional[WckeyTagStruct] = None - """ - WCKey ID with tagging - """ - working_directory: Optional[str] = None - - -class UserModel(BaseModel): - administrator_level: Optional[List[AdministratorLevelEnum]] = None - associations: Optional[AssocShortList] = None - coordinators: Optional[CoordList] = None - default: Optional[Default] = None - flags: Optional[List[FlagModel9]] = None - name: str - old_name: Optional[str] = None - wckeys: Optional[WckeyList] = None - - -class OpenapiSharesResp(BaseModel): - shares: SharesRespMsg + system_comment: str | None = None """ - fairshare info + Arbitrary comment from slurmctld """ - meta: Optional[OpenapiMeta] = None + time_limit: Uint32NoValStruct | None = None """ - Slurm meta values + Maximum run time in minutes (32 bit integer number with flags) """ - errors: Optional[OpenapiErrors] = None + time_minimum: Uint32NoValStruct | None = None """ - Query errors + Minimum run time in minutes (32 bit integer number with flags) """ - warnings: Optional[OpenapiWarnings] = None + threads_per_core: Uint16NoValStruct | None = None """ - Query warnings + Number of processor threads per CPU core required (16 bit integer number with flags) """ - - -class JobList(RootModel[List[Job]]): - root: List[Job] - - -class UserList(RootModel[List[UserModel]]): - root: List[UserModel] - - -class OpenapiUsersResp(BaseModel): - users: UserList + tres_bind: str | None = None """ - users + Task to TRES binding directives """ - meta: Optional[OpenapiMeta] = None + tres_freq: str | None = None """ - Slurm meta values + TRES frequency directives """ - errors: Optional[OpenapiErrors] = None + tres_per_job: str | None = None """ - Query errors + Comma-separated list of TRES=# values to be allocated per job """ - warnings: Optional[OpenapiWarnings] = None + tres_per_node: str | None = None """ - Query warnings + Comma-separated list of TRES=# values to be allocated per node """ - - -class OpenapiSlurmdbdJobsResp(BaseModel): - jobs: JobList + tres_per_socket: str | None = None """ - jobs + Comma-separated list of TRES=# values to be allocated per socket """ - meta: Optional[OpenapiMeta] = None + tres_per_task: str | None = None """ - Slurm meta values + Comma-separated list of TRES=# values to be allocated per task """ - errors: Optional[OpenapiErrors] = None + tres_req_str: str | None = None """ - Query errors + TRES requested by the job """ - warnings: Optional[OpenapiWarnings] = None + tres_alloc_str: str | None = None """ - Query warnings + TRES used by the job """ - - -class OpenapiSlurmdbdConfigResp(BaseModel): - clusters: Optional[ClusterRecList] = None + user_id: int | None = None """ - clusters + User ID that owns the job """ - tres: Optional[TresList] = None + user_name: str | None = None """ - tres + User name that owns the job """ - accounts: Optional[AccountList] = None + maximum_switch_wait_time: int | None = None """ - accounts + Maximum time to wait for switches in seconds """ - users: Optional[UserList] = None + wckey: str | None = None """ - users + Workload characterization key """ - qos: Optional[QosList] = None + current_working_directory: str | None = None """ - qos + Working directory to use for the job """ - wckeys: Optional[WckeyList] = None + + +class JobInfoMsg(RootModel[List[JobInfo]]): + root: List[JobInfo] + + +class OpenapiJobInfoResp(BaseModel): + jobs: JobInfoMsg """ - wckeys + List of jobs """ - associations: Optional[AssocList] = None + last_backfill: Uint64NoValStruct """ - associations + Time of last backfill scheduler run (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) """ - instances: Optional[InstanceList] = None + last_update: Uint64NoValStruct """ - instances + Time of last job change (UNIX timestamp) (UNIX timestamp or time string recognized by Slurm (e.g., '[MM/DD[/YY]-]HH:MM[:SS]'); may also be infinite or unset) (64 bit integer number with flags) """ - meta: Optional[OpenapiMeta] = None + meta: OpenapiMeta | None = None """ Slurm meta values """ - errors: Optional[OpenapiErrors] = None + errors: OpenapiErrors | None = None """ Query errors """ - warnings: Optional[OpenapiWarnings] = None + warnings: OpenapiWarnings | None = None """ Query warnings """ diff --git a/tests/util/test_slurm.py b/tests/util/test_slurm.py index a8fbcfe8..e778fa9c 100644 --- a/tests/util/test_slurm.py +++ b/tests/util/test_slurm.py @@ -111,19 +111,35 @@ def jobs_response(): "het_job_offset": {"infinite": False, "number": 0, "set": True}, "job_id": 6080221, "job_resources": { - "allocated_cores": 1, - "allocated_cpus": 0, - "allocated_hosts": 1, - "allocated_nodes": [ - { - "cpus_used": 0, - "memory_allocated": 9000, - "memory_used": 0, - "nodename": "cma2-02", - "sockets": {"0": {"cores": {"8": "allocated"}}}, - } - ], - "nodes": "cma2-02", + "select_type": ["CORE"], + "cpus": 1, + "threads_per_core": { + "set": True, + "infinite": False, + "number": 1, + }, + "nodes": { + "count": 1, + "select_type": ["ONE_ROW"], + "list": "cma2-02", + "whole": False, + "allocation": [ + { + "index": 0, + "name": "cma2-02", + "cpus": {"count": 1, "used": 0}, + "memory": {"used": 0, "allocated": 9000}, + "sockets": [ + { + "index": 0, + "cores": [ + {"index": 8, "status": ["ALLOCATED"]} + ], + } + ], + } + ], + }, }, "job_size_str": [], "job_state": ["RUNNING"], diff --git a/uv.lock b/uv.lock index 0b7333fa..92328014 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 2 +revision = 3 requires-python = ">=3.11" resolution-markers = [ "python_full_version >= '3.13'", @@ -344,63 +344,119 @@ wheels = [ [[package]] name = "pydantic" -version = "2.9.2" +version = "2.13.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-types" }, { name = "pydantic-core" }, { name = "typing-extensions" }, + { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a9/b7/d9e3f12af310e1120c21603644a1cd86f59060e040ec5c3a80b8f05fae30/pydantic-2.9.2.tar.gz", hash = "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f", size = 769917, upload-time = "2024-09-17T15:59:54.273Z" } +sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/df/e4/ba44652d562cbf0bf320e0f3810206149c8a4e99cdbf66da82e97ab53a15/pydantic-2.9.2-py3-none-any.whl", hash = "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12", size = 434928, upload-time = "2024-09-17T15:59:51.827Z" }, + { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" }, ] [[package]] name = "pydantic-core" -version = "2.23.4" +version = "2.46.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e2/aa/6b6a9b9f8537b872f552ddd46dd3da230367754b6f707b8e1e963f515ea3/pydantic_core-2.23.4.tar.gz", hash = "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863", size = 402156, upload-time = "2024-09-16T16:06:44.786Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/30/890a583cd3f2be27ecf32b479d5d615710bb926d92da03e3f7838ff3e58b/pydantic_core-2.23.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8", size = 1865160, upload-time = "2024-09-16T16:04:18.628Z" }, - { url = "https://files.pythonhosted.org/packages/1d/9a/b634442e1253bc6889c87afe8bb59447f106ee042140bd57680b3b113ec7/pydantic_core-2.23.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d", size = 1776777, upload-time = "2024-09-16T16:04:20.038Z" }, - { url = "https://files.pythonhosted.org/packages/75/9a/7816295124a6b08c24c96f9ce73085032d8bcbaf7e5a781cd41aa910c891/pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e", size = 1799244, upload-time = "2024-09-16T16:04:21.799Z" }, - { url = "https://files.pythonhosted.org/packages/a9/8f/89c1405176903e567c5f99ec53387449e62f1121894aa9fc2c4fdc51a59b/pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607", size = 1805307, upload-time = "2024-09-16T16:04:23.324Z" }, - { url = "https://files.pythonhosted.org/packages/d5/a5/1a194447d0da1ef492e3470680c66048fef56fc1f1a25cafbea4bc1d1c48/pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd", size = 2000663, upload-time = "2024-09-16T16:04:25.203Z" }, - { url = "https://files.pythonhosted.org/packages/13/a5/1df8541651de4455e7d587cf556201b4f7997191e110bca3b589218745a5/pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea", size = 2655941, upload-time = "2024-09-16T16:04:27.211Z" }, - { url = "https://files.pythonhosted.org/packages/44/31/a3899b5ce02c4316865e390107f145089876dff7e1dfc770a231d836aed8/pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e", size = 2052105, upload-time = "2024-09-16T16:04:28.611Z" }, - { url = "https://files.pythonhosted.org/packages/1b/aa/98e190f8745d5ec831f6d5449344c48c0627ac5fed4e5340a44b74878f8e/pydantic_core-2.23.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b", size = 1919967, upload-time = "2024-09-16T16:04:30.045Z" }, - { url = "https://files.pythonhosted.org/packages/ae/35/b6e00b6abb2acfee3e8f85558c02a0822e9a8b2f2d812ea8b9079b118ba0/pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0", size = 1964291, upload-time = "2024-09-16T16:04:32.376Z" }, - { url = "https://files.pythonhosted.org/packages/13/46/7bee6d32b69191cd649bbbd2361af79c472d72cb29bb2024f0b6e350ba06/pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64", size = 2109666, upload-time = "2024-09-16T16:04:33.923Z" }, - { url = "https://files.pythonhosted.org/packages/39/ef/7b34f1b122a81b68ed0a7d0e564da9ccdc9a2924c8d6c6b5b11fa3a56970/pydantic_core-2.23.4-cp311-none-win32.whl", hash = "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f", size = 1732940, upload-time = "2024-09-16T16:04:35.467Z" }, - { url = "https://files.pythonhosted.org/packages/2f/76/37b7e76c645843ff46c1d73e046207311ef298d3f7b2f7d8f6ac60113071/pydantic_core-2.23.4-cp311-none-win_amd64.whl", hash = "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3", size = 1916804, upload-time = "2024-09-16T16:04:37.06Z" }, - { url = "https://files.pythonhosted.org/packages/74/7b/8e315f80666194b354966ec84b7d567da77ad927ed6323db4006cf915f3f/pydantic_core-2.23.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231", size = 1856459, upload-time = "2024-09-16T16:04:38.438Z" }, - { url = "https://files.pythonhosted.org/packages/14/de/866bdce10ed808323d437612aca1ec9971b981e1c52e5e42ad9b8e17a6f6/pydantic_core-2.23.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee", size = 1770007, upload-time = "2024-09-16T16:04:40.229Z" }, - { url = "https://files.pythonhosted.org/packages/dc/69/8edd5c3cd48bb833a3f7ef9b81d7666ccddd3c9a635225214e044b6e8281/pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87", size = 1790245, upload-time = "2024-09-16T16:04:41.794Z" }, - { url = "https://files.pythonhosted.org/packages/80/33/9c24334e3af796ce80d2274940aae38dd4e5676298b4398eff103a79e02d/pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8", size = 1801260, upload-time = "2024-09-16T16:04:43.991Z" }, - { url = "https://files.pythonhosted.org/packages/a5/6f/e9567fd90104b79b101ca9d120219644d3314962caa7948dd8b965e9f83e/pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327", size = 1996872, upload-time = "2024-09-16T16:04:45.593Z" }, - { url = "https://files.pythonhosted.org/packages/2d/ad/b5f0fe9e6cfee915dd144edbd10b6e9c9c9c9d7a56b69256d124b8ac682e/pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2", size = 2661617, upload-time = "2024-09-16T16:04:47.3Z" }, - { url = "https://files.pythonhosted.org/packages/06/c8/7d4b708f8d05a5cbfda3243aad468052c6e99de7d0937c9146c24d9f12e9/pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36", size = 2071831, upload-time = "2024-09-16T16:04:48.893Z" }, - { url = "https://files.pythonhosted.org/packages/89/4d/3079d00c47f22c9a9a8220db088b309ad6e600a73d7a69473e3a8e5e3ea3/pydantic_core-2.23.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126", size = 1917453, upload-time = "2024-09-16T16:04:51.099Z" }, - { url = "https://files.pythonhosted.org/packages/e9/88/9df5b7ce880a4703fcc2d76c8c2d8eb9f861f79d0c56f4b8f5f2607ccec8/pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e", size = 1968793, upload-time = "2024-09-16T16:04:52.604Z" }, - { url = "https://files.pythonhosted.org/packages/e3/b9/41f7efe80f6ce2ed3ee3c2dcfe10ab7adc1172f778cc9659509a79518c43/pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24", size = 2116872, upload-time = "2024-09-16T16:04:54.41Z" }, - { url = "https://files.pythonhosted.org/packages/63/08/b59b7a92e03dd25554b0436554bf23e7c29abae7cce4b1c459cd92746811/pydantic_core-2.23.4-cp312-none-win32.whl", hash = "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84", size = 1738535, upload-time = "2024-09-16T16:04:55.828Z" }, - { url = "https://files.pythonhosted.org/packages/88/8d/479293e4d39ab409747926eec4329de5b7129beaedc3786eca070605d07f/pydantic_core-2.23.4-cp312-none-win_amd64.whl", hash = "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9", size = 1917992, upload-time = "2024-09-16T16:04:57.395Z" }, - { url = "https://files.pythonhosted.org/packages/ad/ef/16ee2df472bf0e419b6bc68c05bf0145c49247a1095e85cee1463c6a44a1/pydantic_core-2.23.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc", size = 1856143, upload-time = "2024-09-16T16:04:59.062Z" }, - { url = "https://files.pythonhosted.org/packages/da/fa/bc3dbb83605669a34a93308e297ab22be82dfb9dcf88c6cf4b4f264e0a42/pydantic_core-2.23.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd", size = 1770063, upload-time = "2024-09-16T16:05:00.522Z" }, - { url = "https://files.pythonhosted.org/packages/4e/48/e813f3bbd257a712303ebdf55c8dc46f9589ec74b384c9f652597df3288d/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05", size = 1790013, upload-time = "2024-09-16T16:05:02.619Z" }, - { url = "https://files.pythonhosted.org/packages/b4/e0/56eda3a37929a1d297fcab1966db8c339023bcca0b64c5a84896db3fcc5c/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d", size = 1801077, upload-time = "2024-09-16T16:05:04.154Z" }, - { url = "https://files.pythonhosted.org/packages/04/be/5e49376769bfbf82486da6c5c1683b891809365c20d7c7e52792ce4c71f3/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510", size = 1996782, upload-time = "2024-09-16T16:05:06.931Z" }, - { url = "https://files.pythonhosted.org/packages/bc/24/e3ee6c04f1d58cc15f37bcc62f32c7478ff55142b7b3e6d42ea374ea427c/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6", size = 2661375, upload-time = "2024-09-16T16:05:08.773Z" }, - { url = "https://files.pythonhosted.org/packages/c1/f8/11a9006de4e89d016b8de74ebb1db727dc100608bb1e6bbe9d56a3cbbcce/pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b", size = 2071635, upload-time = "2024-09-16T16:05:10.456Z" }, - { url = "https://files.pythonhosted.org/packages/7c/45/bdce5779b59f468bdf262a5bc9eecbae87f271c51aef628d8c073b4b4b4c/pydantic_core-2.23.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327", size = 1916994, upload-time = "2024-09-16T16:05:12.051Z" }, - { url = "https://files.pythonhosted.org/packages/d8/fa/c648308fe711ee1f88192cad6026ab4f925396d1293e8356de7e55be89b5/pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6", size = 1968877, upload-time = "2024-09-16T16:05:14.021Z" }, - { url = "https://files.pythonhosted.org/packages/16/16/b805c74b35607d24d37103007f899abc4880923b04929547ae68d478b7f4/pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f", size = 2116814, upload-time = "2024-09-16T16:05:15.684Z" }, - { url = "https://files.pythonhosted.org/packages/d1/58/5305e723d9fcdf1c5a655e6a4cc2a07128bf644ff4b1d98daf7a9dbf57da/pydantic_core-2.23.4-cp313-none-win32.whl", hash = "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769", size = 1738360, upload-time = "2024-09-16T16:05:17.258Z" }, - { url = "https://files.pythonhosted.org/packages/a5/ae/e14b0ff8b3f48e02394d8acd911376b7b66e164535687ef7dc24ea03072f/pydantic_core-2.23.4-cp313-none-win_amd64.whl", hash = "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5", size = 1919411, upload-time = "2024-09-16T16:05:18.934Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872, upload-time = "2026-05-06T13:40:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255, upload-time = "2026-05-06T13:39:12.574Z" }, + { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827, upload-time = "2026-05-06T13:38:19.841Z" }, + { url = "https://files.pythonhosted.org/packages/ef/25/1ab42e8048fe551934d9884e8d64daa7e990ad386f310a15981aeb6a5b08/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04", size = 2041051, upload-time = "2026-05-06T13:38:10.447Z" }, + { url = "https://files.pythonhosted.org/packages/94/c2/1a934597ddf08da410385b3b7aae91956a5a76c635effef456074fad7e88/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e", size = 2221314, upload-time = "2026-05-06T13:40:13.089Z" }, + { url = "https://files.pythonhosted.org/packages/02/6d/9e8ad178c9c4df27ad3c8f25d1fe2a7ab0d2ba0559fad4aee5d3d1f16771/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3", size = 2285146, upload-time = "2026-05-06T13:38:59.224Z" }, + { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685, upload-time = "2026-05-06T13:38:17.762Z" }, + { url = "https://files.pythonhosted.org/packages/6b/a4/b440ad35f05f6a38f89fa0f149accb3f0e02be94ca5e15f3c449a61b4bc9/pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398", size = 2115420, upload-time = "2026-05-06T13:37:58.195Z" }, + { url = "https://files.pythonhosted.org/packages/99/61/de4f55db8dfd57bfdfa9a12ec90fe1b57c4f41062f7ca86f08586b3e0ac0/pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3", size = 2165122, upload-time = "2026-05-06T13:37:01.167Z" }, + { url = "https://files.pythonhosted.org/packages/f7/52/7c529d7bdb2d1068bd52f51fe32572c8301f9a4febf1948f10639f1436f5/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848", size = 2182573, upload-time = "2026-05-06T13:38:45.04Z" }, + { url = "https://files.pythonhosted.org/packages/37/b3/7c40325848ba78247f2812dcf9c7274e38cd801820ca6dd9fe63bcfb0eb4/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3", size = 2317139, upload-time = "2026-05-06T13:37:15.539Z" }, + { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433, upload-time = "2026-05-06T13:37:30.099Z" }, + { url = "https://files.pythonhosted.org/packages/c4/67/6acaa1be2567f9256b056d8477158cac7240813956ce86e49deae8e173b4/pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda", size = 1985513, upload-time = "2026-05-06T13:38:15.669Z" }, + { url = "https://files.pythonhosted.org/packages/aa/e6/c505f83dfeda9a2e5c995cfd872949e4d05e12f7feb3dca72f633daefa94/pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33", size = 2071114, upload-time = "2026-05-06T13:40:35.416Z" }, + { url = "https://files.pythonhosted.org/packages/0f/da/7a263a96d965d9d0df5e8de8a475f33495451117035b09acb110288c381f/pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d", size = 2044298, upload-time = "2026-05-06T13:38:29.754Z" }, + { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158, upload-time = "2026-05-06T13:38:57.215Z" }, + { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724, upload-time = "2026-05-06T13:37:02.697Z" }, + { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742, upload-time = "2026-05-06T13:37:09.448Z" }, + { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418, upload-time = "2026-05-06T13:37:38.234Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274, upload-time = "2026-05-06T13:38:27.753Z" }, + { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940, upload-time = "2026-05-06T13:38:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516, upload-time = "2026-05-06T13:39:10.577Z" }, + { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854, upload-time = "2026-05-06T13:40:22.59Z" }, + { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306, upload-time = "2026-05-06T13:40:10.666Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044, upload-time = "2026-05-06T13:40:43.231Z" }, + { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133, upload-time = "2026-05-06T13:39:57.365Z" }, + { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464, upload-time = "2026-05-06T13:38:06.976Z" }, + { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823, upload-time = "2026-05-06T13:40:47.985Z" }, + { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919, upload-time = "2026-05-06T13:39:21.153Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604, upload-time = "2026-05-06T13:39:03.753Z" }, + { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306, upload-time = "2026-05-06T13:37:48.029Z" }, + { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906, upload-time = "2026-05-06T13:37:17.012Z" }, + { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802, upload-time = "2026-05-06T13:37:35.113Z" }, + { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446, upload-time = "2026-05-06T13:37:12.313Z" }, + { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757, upload-time = "2026-05-06T13:39:01.149Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275, upload-time = "2026-05-06T13:37:41.406Z" }, + { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467, upload-time = "2026-05-06T13:39:18.847Z" }, + { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417, upload-time = "2026-05-06T13:40:17.944Z" }, + { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782, upload-time = "2026-05-06T13:40:32.618Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782, upload-time = "2026-05-06T13:36:51.018Z" }, + { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334, upload-time = "2026-05-06T13:40:37.764Z" }, + { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986, upload-time = "2026-05-06T13:39:34.152Z" }, + { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693, upload-time = "2026-05-06T13:37:55.072Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819, upload-time = "2026-05-06T13:38:49.139Z" }, + { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411, upload-time = "2026-05-06T13:40:45.796Z" }, + { url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079, upload-time = "2026-05-06T13:38:41.019Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179, upload-time = "2026-05-06T13:36:59.812Z" }, + { url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926, upload-time = "2026-05-06T13:37:39.933Z" }, + { url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785, upload-time = "2026-05-06T13:38:01.995Z" }, + { url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733, upload-time = "2026-05-06T13:40:50.371Z" }, + { url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534, upload-time = "2026-05-06T13:37:21.531Z" }, + { url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732, upload-time = "2026-05-06T13:39:31.942Z" }, + { url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627, upload-time = "2026-05-06T13:37:25.033Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141, upload-time = "2026-05-06T13:37:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325, upload-time = "2026-05-06T13:36:53.615Z" }, + { url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990, upload-time = "2026-05-06T13:40:29.971Z" }, + { url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978, upload-time = "2026-05-06T13:37:23.027Z" }, + { url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354, upload-time = "2026-05-06T13:38:03.499Z" }, + { url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238, upload-time = "2026-05-06T13:39:40.807Z" }, + { url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251, upload-time = "2026-05-06T13:37:26.72Z" }, + { url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593, upload-time = "2026-05-06T13:39:47.682Z" }, + { url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226, upload-time = "2026-05-06T13:40:40.428Z" }, + { url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605, upload-time = "2026-05-06T13:37:32.029Z" }, + { url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777, upload-time = "2026-05-06T13:38:55.239Z" }, + { url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641, upload-time = "2026-05-06T13:37:08.096Z" }, + { url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404, upload-time = "2026-05-06T13:40:20.221Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219, upload-time = "2026-05-06T13:38:12.153Z" }, + { url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594, upload-time = "2026-05-06T13:40:02.971Z" }, + { url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542, upload-time = "2026-05-06T13:39:27.506Z" }, + { url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146, upload-time = "2026-05-06T13:38:31.93Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309, upload-time = "2026-05-06T13:37:44.717Z" }, + { url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736, upload-time = "2026-05-06T13:37:05.645Z" }, + { url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575, upload-time = "2026-05-06T13:38:51.116Z" }, + { url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624, upload-time = "2026-05-06T13:38:21.672Z" }, + { url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325, upload-time = "2026-05-06T13:40:52.723Z" }, + { url = "https://files.pythonhosted.org/packages/ee/a4/73995fd4ebbb46ba0ee51e6fa049b8f02c40daebb762208feda8a6b7894d/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c", size = 2111589, upload-time = "2026-05-06T13:37:10.817Z" }, + { url = "https://files.pythonhosted.org/packages/fb/7f/f37d3a5e8bfcc2e403f5c57a730f2d815693fb42119e8ea48b3789335af1/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b", size = 1944552, upload-time = "2026-05-06T13:36:56.717Z" }, + { url = "https://files.pythonhosted.org/packages/15/3c/d7eb777b3ff43e8433a4efb39a17aa8fd98a4ee8561a24a67ef5db07b2d6/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b", size = 1982984, upload-time = "2026-05-06T13:39:06.207Z" }, + { url = "https://files.pythonhosted.org/packages/63/87/70b9f40170a81afd55ca26c9b2acb25c20d64bcfbf888fafecb3ba077d4c/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea", size = 2138417, upload-time = "2026-05-06T13:39:45.476Z" }, + { url = "https://files.pythonhosted.org/packages/9d/1d/8987ad40f65ae1432753072f214fb5c74fe47ffbd0698bb9cbbb585664f8/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7", size = 2095527, upload-time = "2026-05-06T13:39:52.283Z" }, + { url = "https://files.pythonhosted.org/packages/64/d3/84c282a7eee1d3ac4c0377546ef5a1ea436ce26840d9ac3b7ed54a377507/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df", size = 1936024, upload-time = "2026-05-06T13:40:15.671Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ca/eac61596cdeb4d7e174d3dc0bd8a6238f14f75f97a24e7b7db4c7e7340a0/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526", size = 1990696, upload-time = "2026-05-06T13:38:34.717Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0", size = 2147590, upload-time = "2026-05-06T13:39:29.883Z" }, + { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782, upload-time = "2026-05-06T13:37:04.016Z" }, + { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146, upload-time = "2026-05-06T13:39:43.092Z" }, + { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492, upload-time = "2026-05-06T13:36:58.124Z" }, + { url = "https://files.pythonhosted.org/packages/de/df/5e5ffc085ed07cc22d298134d3d911c63e91f6a0eb91fe646750a3209910/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9", size = 2156604, upload-time = "2026-05-06T13:37:49.88Z" }, + { url = "https://files.pythonhosted.org/packages/81/44/6e112a4253e56f5705467cbab7ab5e91ee7398ba3d56d358635958893d3e/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf", size = 2183828, upload-time = "2026-05-06T13:37:43.053Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ad/5565071e937d8e752842ac241463944c9eb14c87e2d269f2658a5bd05e98/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30", size = 2310000, upload-time = "2026-05-06T13:37:56.694Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286, upload-time = "2026-05-06T13:40:05.667Z" }, + { url = "https://files.pythonhosted.org/packages/4b/2d/69abac8f838090bbecd5df894befb2c2619e7996a98ddb949db9f3b93225/pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983", size = 2193071, upload-time = "2026-05-06T13:38:08.682Z" }, ] [[package]] @@ -663,11 +719,23 @@ wheels = [ [[package]] name = "typing-extensions" -version = "4.12.2" +version = "4.15.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321, upload-time = "2024-06-07T18:52:15.995Z" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438, upload-time = "2024-06-07T18:52:13.582Z" }, + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, ] [[package]] @@ -743,7 +811,7 @@ requires-dist = [ { name = "graypy" }, { name = "marshmallow" }, { name = "opentelemetry-api" }, - { name = "pydantic", specifier = ">=2,<3" }, + { name = "pydantic", specifier = "~=2.13" }, { name = "pyyaml" }, { name = "requests" }, { name = "workflows", specifier = ">=3.0" },