odps/models/quota.py (133 lines of code) (raw):

#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright 1999-2024 Alibaba Group Holding Ltd. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from .. import serializers from ..compat import Enum from .core import LazyLoad _MCQA_VERSION = "mcqaVersion" class Quota(LazyLoad): """ Quota provides information about computational resources. """ VERSION = "wlm" __slots__ = ("_mcqa_conn_header",) _root = "Quota" class Strategy(Enum): NoPreempt = "NoPreempt" Preempt = "Preempt" class SchedulerType(Enum): Fifo = "Fifo" Fair = "Fair" class Status(Enum): ON = "ON" OFF = "OFF" INITIALIZING = "INITIALIZING" ABNORMAL = "ABNORMAL" class ResourceSystemType(Enum): FUXI_OFFLINE = "FUXI_OFFLINE" FUXI_ONLINE = "FUXI_ONLINE" FUXI_STANDALONE = "FUXI_STANDALONE" FUXI_VW = "FUXI_VW" UNKNOWN = "UNKNOWN" @classmethod def _missing_(cls, _value): return cls.UNKNOWN class BillingPolicy(serializers.JSONSerializableModel): class BillingMethod(Enum): payasyougo = "payasyougo" subscription = "subscription" billing_method = serializers.JSONNodeField( "billingMethod", parse_callback=serializers.none_or(BillingMethod) ) specification = serializers.JSONNodeField("OdpsSpecCode") order_id = serializers.JSONNodeField("orderId") cluster = serializers.XMLNodeField("Cluster") name = serializers.XMLNodeField("Name") id = serializers.XMLNodeField("ID") is_enabled = serializers.XMLNodeField("IsEnabled", type="bool") resource_system_type = serializers.XMLNodeField( "ResourceSystemType", parse_callback=serializers.none_or(ResourceSystemType) ) session_service_name = serializers.XMLNodeField("SessionServiceName") creation_time = serializers.XMLNodeField("CreateTimeMs", type="timestamp_ms") last_modified_time = serializers.XMLNodeField( "LastModifiedTimeMs", type="timestamp_ms" ) cpu = serializers.XMLNodeField("CPU", type="int") min_cpu = serializers.XMLNodeField("MinCPU", type="int") elastic_cpu_max = serializers.XMLNodeField("ElasticCPUMax", type="int") elastic_cpu_min = serializers.XMLNodeField("ElasticCPUMin", type="int") adhoc_cpu = serializers.XMLNodeField("AdhocCPU", type="int") cpu_usage = serializers.XMLNodeField("CPUUsage", type="float") adhoc_cpu_usage = serializers.XMLNodeField("AdhocCPUUsage", type="float") cpu_ready_ratio = serializers.XMLNodeField("CPUReadyRatio", type="float") memory = serializers.XMLNodeField("Memory", type="int") min_memory = serializers.XMLNodeField("MinMemory", type="int") elastic_memory_max = serializers.XMLNodeField("ElasticMemoryMax", type="int") elastic_memory_min = serializers.XMLNodeField("ElasticMemoryMin", type="int") adhoc_memory = serializers.XMLNodeField("AdhocMemory", type="int") memory_usage = serializers.XMLNodeField("MemoryUsage", type="float") adhoc_memory_usage = serializers.XMLNodeField("AdhocMemoryUsage", type="float") memory_ready_ratio = serializers.XMLNodeField("MemoryReadyRatio", type="float") gpu = serializers.XMLNodeField("GPU", type="int") min_gpu = serializers.XMLNodeField("MinGPU", type="int") elastic_gpu_max = serializers.XMLNodeField("ElasticGPUMax", type="int") elastic_gpu_min = serializers.XMLNodeField("ElasticGPUMin", type="int") adhoc_gpu = serializers.XMLNodeField("AdhocGPU", type="int") strategy = serializers.XMLNodeField( "Strategy", parse_callback=serializers.none_or(Strategy) ) scheduler_type = serializers.XMLNodeField("SchedulerType") is_parent_group = serializers.XMLNodeField("IsParGroup", type="bool") parent_id = serializers.XMLNodeField("ParGroupId") parent_name = serializers.XMLNodeField("ParentName") user_defined_tags = serializers.XMLNodePropertiesField( "UserDefinedTag", "entry", key_attr="key", value_tag="value" ) virtual_cluster_config = serializers.XMLNodeField( "VirtualClusterConfig", type="json" ) tenant_id = serializers.XMLNodeField("TenantId") status = serializers.XMLNodeField( "Status", parse_callback=serializers.none_or(Status) ) nickname = serializers.XMLNodeField("Nickname") parent_nickname = serializers.XMLNodeField("ParentNickname") creator_id = serializers.XMLNodeField("CreatorId") region_id = serializers.XMLNodeField("Region") billing_policy = serializers.XMLNodeReferenceField(BillingPolicy, "BillingPolicy") need_auth = serializers.XMLNodeField("NeedAuth", type="bool") is_pure_link = serializers.XMLNodeField("IsPureLink", type="bool") quota_version = serializers.XMLNodeField("QuotaVersion") is_meta_only = serializers.XMLNodeField("IsMetaOnly", type="bool") properties = serializers.XMLNodeField("Properties", type="json") def __init__(self, *args, **kwds): super(Quota, self).__init__(*args, **kwds) self._mcqa_conn_header = None def _name(self): return self._getattr("nickname") @property def mcqa_conn_header(self): if not self._loaded: self.reload() return self._mcqa_conn_header def reload(self): params = { "project": self._client.project, "version": self.VERSION, } try: if self._getattr("region_id"): params["region"] = self.region_id except AttributeError: pass try: if self._getattr("tenant_id"): params["tenant"] = self.tenant_id except AttributeError: pass resp = self._client.get(self.resource(), params=params) self.parse(self._client, resp, obj=self) self._mcqa_conn_header = resp.headers.get("x-odps-mcqa-conn") self._loaded = True def is_interactive_quota(self): if self.resource_system_type != Quota.ResourceSystemType.FUXI_VW: return False return ( self.user_defined_tags is None or _MCQA_VERSION not in self.user_defined_tags )