blob: 149637cdf9746794cfee285646ea4c9fa6acf63f [file] [log] [blame]
# Copyright 2023 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os
from dataclasses import dataclass
from typing import Self
from execution_params import ExecutionParams
SDK_TOOL_PATH_KEY = "FUCHSIA_SDK_TOOL_PATH"
TARGETS_KEY = "FUCHSIA_TARGETS"
OUTPUT_DIRECTORY_KEY = "FUCHSIA_TEST_OUTDIR"
EXECUTION_JSON_KEY = "FUCHSIA_EXECUTION_JSON"
@dataclass
class Params:
"""Class to parse and validate environment parameters."""
sdk_tool_path: str
target: str
execution_params: ExecutionParams
output_directory: str
@classmethod
def initialize(cls, env_vars: dict) -> Self:
"""This function initializes this class using environment dictionary.
Args:
env_vars (dict): Dictionary containing required environment variables.
Raises:
ValueError: Validation error
Returns:
Self
"""
sdk_tool_path = env_vars.get(SDK_TOOL_PATH_KEY)
output_directory = env_vars.get(OUTPUT_DIRECTORY_KEY)
execution_json = env_vars.get(EXECUTION_JSON_KEY)
if sdk_tool_path is None:
raise ValueError(
f"'{SDK_TOOL_PATH_KEY}' environment variable is not available."
)
if output_directory is None:
raise ValueError(
f"'{OUTPUT_DIRECTORY_KEY}' environment variable is not available."
)
if not os.path.exists(sdk_tool_path):
raise ValueError(
f"'{SDK_TOOL_PATH_KEY}: {sdk_tool_path}' path does not exist."
)
if not os.path.exists(output_directory):
raise ValueError(
f"'{OUTPUT_DIRECTORY_KEY}: {output_directory}' path does not exist."
)
if execution_json is None:
raise ValueError(
f"'{EXECUTION_JSON_KEY}' environment variable is not available."
)
execution_params = ExecutionParams.initialize_from_json(execution_json)
return cls(
sdk_tool_path,
env_vars.get(TARGETS_KEY, None),
execution_params,
output_directory,
)