aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_compute/_usage.py
blob: 6702382eb6246f967f562170270ef690ff78ee43 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# ---------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# ---------------------------------------------------------

from abc import abstractmethod
from os import PathLike
from typing import IO, Any, AnyStr, Dict, Optional, Union

from azure.ai.ml._restclient.v2022_10_01_preview.models import Usage as RestUsage
from azure.ai.ml._restclient.v2022_10_01_preview.models import UsageUnit
from azure.ai.ml._schema.compute.usage import UsageSchema
from azure.ai.ml._utils.utils import dump_yaml_to_file
from azure.ai.ml.constants._common import BASE_PATH_CONTEXT_KEY
from azure.ai.ml.entities._mixins import RestTranslatableMixin


class UsageName:
    def __init__(self, *, value: Optional[str] = None, localized_value: Optional[str] = None) -> None:
        """The usage name.

        :param value: The name of the resource.
        :type value: Optional[str]
        :param localized_value: The localized name of the resource.
        :type localized_value: Optional[str]
        """
        self.value = value
        self.localized_value = localized_value


class Usage(RestTranslatableMixin):
    """AzureML resource usage.

    :param id: The resource ID.
    :type id: Optional[str]
    :param aml_workspace_location: The region of the AzureML workspace specified by the ID.
    :type aml_workspace_location: Optional[str]
    :param type: The resource type.
    :type type: Optional[str]
    :param unit: The unit of measurement for usage. Accepted value is "Count".
    :type unit: Optional[Union[str, ~azure.ai.ml.entities.UsageUnit]]
    :param current_value: The current usage of the resource.
    :type current_value: Optional[int]
    :param limit: The maximum permitted usage for the resource.
    :type limit: Optional[int]
    :param name: The name of the usage type.
    :type name: Optional[~azure.ai.ml.entities.UsageName]
    """

    def __init__(
        self,
        id: Optional[str] = None,  # pylint: disable=redefined-builtin
        aml_workspace_location: Optional[str] = None,
        type: Optional[str] = None,  # pylint: disable=redefined-builtin
        unit: Optional[Union[str, UsageUnit]] = None,  # enum
        current_value: Optional[int] = None,
        limit: Optional[int] = None,
        name: Optional[UsageName] = None,
    ) -> None:
        self.id = id
        self.aml_workspace_location = aml_workspace_location
        self.type = type
        self.unit = unit
        self.current_value = current_value
        self.limit = limit
        self.name = name

    @classmethod
    def _from_rest_object(cls, obj: RestUsage) -> "Usage":
        result = cls()
        result.__dict__.update(obj.as_dict())
        return result

    def dump(self, dest: Union[str, PathLike, IO[AnyStr]], **kwargs: Any) -> None:
        """Dumps the job content into a file in YAML format.

        :param dest: The local path or file stream to write the YAML content to.
            If dest is a file path, a new file will be created.
            If dest is an open file, the file will be written to directly.
        :type dest: Union[PathLike, str, IO[AnyStr]]
        :raises: FileExistsError if dest is a file path and the file already exists.
        :raises: IOError if dest is an open file and the file is not writable.
        """
        path = kwargs.pop("path", None)
        yaml_serialized = self._to_dict()
        dump_yaml_to_file(dest, yaml_serialized, default_flow_style=False, path=path, **kwargs)

    def _to_dict(self) -> Dict:
        # pylint: disable=no-member
        res: dict = UsageSchema(context={BASE_PATH_CONTEXT_KEY: "./"}).dump(self)
        return res

    @classmethod
    @abstractmethod
    def _load(
        cls,
        path: Union[PathLike, str],
        params_override: Optional[list] = None,
        **kwargs: Any,
    ) -> "Usage":
        pass