|
| 1 | +"""Env dataclass to load and hold all environment variables |
| 2 | +""" |
| 3 | +from dataclasses import dataclass |
1 | 4 | import os |
2 | | -from dotenv import load_dotenv |
3 | | - |
4 | | - |
5 | | -class Singleton(object): |
6 | | - _instances = {} |
7 | | - |
8 | | - def __new__(class_, *args, **kwargs): |
9 | | - if class_ not in class_._instances: |
10 | | - class_._instances[class_] = super(Singleton, class_).__new__(class_, *args, **kwargs) # noqa E501 |
11 | | - return class_._instances[class_] |
12 | | - |
13 | | - |
14 | | -class Env(Singleton): |
15 | | - |
16 | | - def __init__(self): |
17 | | - load_dotenv() |
18 | | - self._workspace_name = os.environ.get("WORKSPACE_NAME") |
19 | | - self._resource_group = os.environ.get("RESOURCE_GROUP") |
20 | | - self._subscription_id = os.environ.get("SUBSCRIPTION_ID") |
21 | | - self._tenant_id = os.environ.get("TENANT_ID") |
22 | | - self._app_id = os.environ.get("SP_APP_ID") |
23 | | - self._app_secret = os.environ.get("SP_APP_SECRET") |
24 | | - self._vm_size = os.environ.get("AML_COMPUTE_CLUSTER_CPU_SKU") |
25 | | - self._compute_name = os.environ.get("AML_COMPUTE_CLUSTER_NAME") |
26 | | - self._vm_priority = os.environ.get("AML_CLUSTER_PRIORITY", 'lowpriority') # noqa E501 |
27 | | - self._min_nodes = int(os.environ.get("AML_CLUSTER_MIN_NODES", 0)) |
28 | | - self._max_nodes = int(os.environ.get("AML_CLUSTER_MAX_NODES", 4)) |
29 | | - self._build_id = os.environ.get("BUILD_BUILDID") |
30 | | - self._pipeline_name = os.environ.get("TRAINING_PIPELINE_NAME") |
31 | | - self._sources_directory_train = os.environ.get("SOURCES_DIR_TRAIN") |
32 | | - self._train_script_path = os.environ.get("TRAIN_SCRIPT_PATH") |
33 | | - self._evaluate_script_path = os.environ.get("EVALUATE_SCRIPT_PATH") |
34 | | - self._register_script_path = os.environ.get("REGISTER_SCRIPT_PATH") |
35 | | - self._model_name = os.environ.get("MODEL_NAME") |
36 | | - self._experiment_name = os.environ.get("EXPERIMENT_NAME") |
37 | | - self._model_version = os.environ.get('MODEL_VERSION') |
38 | | - self._image_name = os.environ.get('IMAGE_NAME') |
39 | | - self._db_cluster_id = os.environ.get("DB_CLUSTER_ID") |
40 | | - self._score_script = os.environ.get("SCORE_SCRIPT") |
41 | | - self._build_uri = os.environ.get("BUILD_URI") |
42 | | - self._dataset_name = os.environ.get("DATASET_NAME") |
43 | | - self._datastore_name = os.environ.get("DATASTORE_NAME") |
44 | | - self._dataset_version = os.environ.get("DATASET_VERSION") |
45 | | - self._run_evaluation = os.environ.get("RUN_EVALUATION", "true") |
46 | | - self._allow_run_cancel = os.environ.get( |
47 | | - "ALLOW_RUN_CANCEL", "true") |
48 | | - self._aml_env_name = os.environ.get("AML_ENV_NAME") |
49 | | - self._rebuild_env = os.environ.get("AML_REBUILD_ENVIRONMENT", |
50 | | - "false").lower().strip() == "true" |
51 | | - |
52 | | - @property |
53 | | - def workspace_name(self): |
54 | | - return self._workspace_name |
55 | | - |
56 | | - @property |
57 | | - def resource_group(self): |
58 | | - return self._resource_group |
59 | | - |
60 | | - @property |
61 | | - def subscription_id(self): |
62 | | - return self._subscription_id |
63 | | - |
64 | | - @property |
65 | | - def tenant_id(self): |
66 | | - return self._tenant_id |
67 | | - |
68 | | - @property |
69 | | - def app_id(self): |
70 | | - return self._app_id |
71 | | - |
72 | | - @property |
73 | | - def app_secret(self): |
74 | | - return self._app_secret |
75 | | - |
76 | | - @property |
77 | | - def vm_size(self): |
78 | | - return self._vm_size |
79 | | - |
80 | | - @property |
81 | | - def compute_name(self): |
82 | | - return self._compute_name |
83 | | - |
84 | | - @property |
85 | | - def db_cluster_id(self): |
86 | | - return self._db_cluster_id |
87 | | - |
88 | | - @property |
89 | | - def build_id(self): |
90 | | - return self._build_id |
91 | | - |
92 | | - @property |
93 | | - def pipeline_name(self): |
94 | | - return self._pipeline_name |
| 5 | +from typing import Optional |
95 | 6 |
|
96 | | - @property |
97 | | - def sources_directory_train(self): |
98 | | - return self._sources_directory_train |
99 | | - |
100 | | - @property |
101 | | - def train_script_path(self): |
102 | | - return self._train_script_path |
103 | | - |
104 | | - @property |
105 | | - def evaluate_script_path(self): |
106 | | - return self._evaluate_script_path |
107 | | - |
108 | | - @property |
109 | | - def register_script_path(self): |
110 | | - return self._register_script_path |
111 | | - |
112 | | - @property |
113 | | - def model_name(self): |
114 | | - return self._model_name |
115 | | - |
116 | | - @property |
117 | | - def experiment_name(self): |
118 | | - return self._experiment_name |
119 | | - |
120 | | - @property |
121 | | - def vm_priority(self): |
122 | | - return self._vm_priority |
123 | | - |
124 | | - @property |
125 | | - def min_nodes(self): |
126 | | - return self._min_nodes |
127 | | - |
128 | | - @property |
129 | | - def max_nodes(self): |
130 | | - return self._max_nodes |
131 | | - |
132 | | - @property |
133 | | - def model_version(self): |
134 | | - return self._model_version |
135 | | - |
136 | | - @property |
137 | | - def image_name(self): |
138 | | - return self._image_name |
139 | | - |
140 | | - @property |
141 | | - def score_script(self): |
142 | | - return self._score_script |
143 | | - |
144 | | - @property |
145 | | - def build_uri(self): |
146 | | - return self._build_uri |
147 | | - |
148 | | - @property |
149 | | - def dataset_name(self): |
150 | | - return self._dataset_name |
151 | | - |
152 | | - @property |
153 | | - def datastore_name(self): |
154 | | - return self._datastore_name |
155 | | - |
156 | | - @property |
157 | | - def dataset_version(self): |
158 | | - return self._dataset_version |
159 | | - |
160 | | - @property |
161 | | - def run_evaluation(self): |
162 | | - return self._run_evaluation |
163 | | - |
164 | | - @property |
165 | | - def allow_run_cancel(self): |
166 | | - return self._allow_run_cancel |
| 7 | +from dotenv import load_dotenv |
167 | 8 |
|
168 | | - @property |
169 | | - def aml_env_name(self): |
170 | | - return self._aml_env_name |
171 | 9 |
|
172 | | - @property |
173 | | - def rebuild_env(self): |
174 | | - return self._rebuild_env |
| 10 | +@dataclass(frozen=True) |
| 11 | +class Env: |
| 12 | + """Loads all environment variables into a predefined set of properties |
| 13 | + """ |
| 14 | + # to load .env file into environment variables for local execution |
| 15 | + load_dotenv() |
| 16 | + workspace_name: Optional[str] = os.environ.get("WORKSPACE_NAME") |
| 17 | + resource_group: Optional[str] = os.environ.get("RESOURCE_GROUP") |
| 18 | + subscription_id: Optional[str] = os.environ.get("SUBSCRIPTION_ID") |
| 19 | + tenant_id: Optional[str] = os.environ.get("TENANT_ID") |
| 20 | + app_id: Optional[str] = os.environ.get("SP_APP_ID") |
| 21 | + app_secret: Optional[str] = os.environ.get("SP_APP_SECRET") |
| 22 | + vm_size: Optional[str] = os.environ.get("AML_COMPUTE_CLUSTER_CPU_SKU") |
| 23 | + compute_name: Optional[str] = os.environ.get("AML_COMPUTE_CLUSTER_NAME") |
| 24 | + vm_priority: Optional[str] = os.environ.get("AML_CLUSTER_PRIORITY", |
| 25 | + 'lowpriority') |
| 26 | + min_nodes: int = int(os.environ.get("AML_CLUSTER_MIN_NODES", 0)) |
| 27 | + max_nodes: int = int(os.environ.get("AML_CLUSTER_MAX_NODES", 4)) |
| 28 | + build_id: Optional[str] = os.environ.get("BUILD_BUILDID") |
| 29 | + pipeline_name: Optional[str] = os.environ.get("TRAINING_PIPELINE_NAME") |
| 30 | + sources_directory_train: Optional[str] = os.environ.get( |
| 31 | + "SOURCES_DIR_TRAIN") |
| 32 | + train_script_path: Optional[str] = os.environ.get("TRAIN_SCRIPT_PATH") |
| 33 | + evaluate_script_path: Optional[str] = os.environ.get( |
| 34 | + "EVALUATE_SCRIPT_PATH") |
| 35 | + register_script_path: Optional[str] = os.environ.get( |
| 36 | + "REGISTER_SCRIPT_PATH") |
| 37 | + model_name: Optional[str] = os.environ.get("MODEL_NAME") |
| 38 | + experiment_name: Optional[str] = os.environ.get("EXPERIMENT_NAME") |
| 39 | + model_version: Optional[str] = os.environ.get('MODEL_VERSION') |
| 40 | + image_name: Optional[str] = os.environ.get('IMAGE_NAME') |
| 41 | + db_cluster_id: Optional[str] = os.environ.get("DB_CLUSTER_ID") |
| 42 | + score_script: Optional[str] = os.environ.get("SCORE_SCRIPT") |
| 43 | + build_uri: Optional[str] = os.environ.get("BUILD_URI") |
| 44 | + dataset_name: Optional[str] = os.environ.get("DATASET_NAME") |
| 45 | + datastore_name: Optional[str] = os.environ.get("DATASTORE_NAME") |
| 46 | + dataset_version: Optional[str] = os.environ.get("DATASET_VERSION") |
| 47 | + run_evaluation: Optional[str] = os.environ.get("RUN_EVALUATION", "true") |
| 48 | + allow_run_cancel: Optional[str] = os.environ.get("ALLOW_RUN_CANCEL", |
| 49 | + "true") |
| 50 | + aml_env_name: Optional[str] = os.environ.get("AML_ENV_NAME") |
| 51 | + rebuild_env: Optional[bool] = os.environ.get( |
| 52 | + "AML_REBUILD_ENVIRONMENT", "false").lower().strip() == "true" |
0 commit comments