odps/models/tenant.py (89 lines of code) (raw):
# 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.
import warnings
from datetime import datetime
from .. import serializers
from ..compat import TimeoutError, enum
from ..errors import InternalServerError, ODPSError
from .core import JSONRemoteModel
class Tenant(JSONRemoteModel):
__slots__ = ("_loaded",)
class State(enum.Enum):
NORMAL = "NORMAL"
SUSPEND = "SUSPEND"
DELETING = "DELETING"
DELETED = "DELETED"
class Meta(JSONRemoteModel):
name = serializers.JSONNodeField("Name", set_to_parent=True)
owner_id = serializers.JSONNodeField("OwnerId", set_to_parent=True)
tenant_id = serializers.JSONNodeField("TenantId", set_to_parent=True)
tenant_state = serializers.JSONNodeField(
"TenantState",
parse_callback=lambda x: Tenant.State(x.upper()),
set_to_parent=True,
)
creation_time = serializers.JSONNodeField(
"CreateTime", parse_callback=datetime.fromtimestamp, set_to_parent=True
)
last_modified_time = serializers.JSONNodeField(
"UpdateTime", parse_callback=datetime.fromtimestamp, set_to_parent=True
)
tenant_properties = serializers.JSONNodeField("TenantMeta", set_to_parent=True)
parameters = serializers.JSONNodeField("Parameters", set_to_parent=True)
def __init__(self, **kwargs):
kwargs.pop("name", None)
super(Tenant.Meta, self).__init__(**kwargs)
_meta = serializers.JSONNodeReferenceField(Meta, "Tenant")
name = serializers.JSONNodeField("Name")
owner_id = serializers.JSONNodeField("OwnerId")
tenant_id = serializers.JSONNodeField("TenantId")
tenant_state = serializers.JSONNodeField(
"TenantState", parse_callback=lambda x: Tenant.State(x.upper())
)
creation_time = serializers.JSONNodeField(
"CreateTime", parse_callback=datetime.fromtimestamp
)
last_modified_time = serializers.JSONNodeField(
"UpdateTime", parse_callback=datetime.fromtimestamp
)
tenant_properties = serializers.JSONNodeField("TenantMeta")
parameters = serializers.JSONNodeField("Parameters")
def __init__(self, **kwargs):
super(Tenant, self).__init__(**kwargs)
self._loaded = False
def _getattr(self, attr):
return object.__getattribute__(self, attr)
def __getattribute__(self, attr):
val = object.__getattribute__(self, attr)
if val is None and not self._getattr("_loaded"):
fields = getattr(type(self), "__fields")
if attr in fields:
self.reload()
return object.__getattribute__(self, attr)
@property
def create_time(self):
warnings.warn(
"Tenant.create_time is deprecated and will be replaced "
"by Tenant.creation_time.",
DeprecationWarning,
stacklevel=3,
)
return self.creation_time
def resource(self, client=None, endpoint=None):
endpoint = (
endpoint if endpoint is not None else (client or self._client).endpoint
)
return endpoint + "/tenants"
def reload(self):
try:
resp = self._client.get(self.resource())
self.parse(self._client, resp, obj=self)
except ODPSError as ex:
if isinstance(ex, (InternalServerError, TimeoutError)):
raise
self._loaded = True
def get_parameter(self, key, default=None):
try:
return (self.parameters or {}).get(key, default)
except ODPSError as ex:
if isinstance(ex, (InternalServerError, TimeoutError)):
raise
return default