1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #
- # Copyright (c) Contributors to the Open 3D Engine Project.
- # For complete copyright and license terms please see the LICENSE at the root of this distribution.
- #
- # SPDX-License-Identifier: Apache-2.0 OR MIT
- #
- #
- import os
- import sys
- import re
- from util import ly_build_error
- class Params(object):
- def __init__(self):
- # Cache params
- self.__params = {}
- def get(self, param_name):
- param_value = self.__params.get(param_name)
- if param_value is not None:
- return param_value
- # Call __get_${param_name} function
- func = getattr(self, '_{}__get_{}'.format(self.__class__.__name__, param_name.lower()), None)
- if func is not None:
- param_value = func()
- # Replace all ${env} in value
- if isinstance(param_value, str):
- param_value = self.__process_string(param_name, param_value)
- elif isinstance(param_value, list):
- param_value = self.__process_list(param_name, param_value)
- elif isinstance(param_value, dict):
- param_value = self.__process_dict(param_name, param_value)
- # Cache param
- self.__params[param_name] = param_value
- return param_value
- ly_build_error('method __get_{} is not defined in class {}'.format(param_name.lower(), self.__class__.__name__))
- def set(self, param_name, param_value):
- self.__params[param_name] = param_value
- def exists(self, param_name):
- try:
- self.get(param_name)
- except LyBuildError:
- return False
- return True
- def __process_string(self, param_name, param_value):
- # Find all param with format ${param}
- params = re.findall('\${(\w+)}', param_value)
- # Avoid using the same param name in value, like 'WORKSPACE': '${WORKSPACE} some string'
- if param_name in params:
- ly_build_error('The use of same parameter name({}) in value is not allowed'.format(param_name))
- # Replace ${param} with actual value
- for param in params:
- param_value = param_value.replace('${' + param + '}', self.get(param))
- return param_value
- def __process_list(self, param_name, param_value):
- processed_list = []
- for entry in param_value:
- if isinstance(entry, str):
- entry = self.__process_string(param_name, entry)
- elif isinstance(entry, list):
- entry = self.__process_list(param_name, entry)
- elif isinstance(entry, dict):
- entry = self.__process_dict(param_name, entry)
- processed_list.append(entry)
- return processed_list
- def __process_dict(self, param_name, param_value):
- for key in param_value:
- if isinstance(param_value[key], str):
- param_value[key] = self.__process_string(param_name, param_value[key])
- elif isinstance(param_value[key], list):
- param_value[key] = self.__process_list(param_name, param_value[key])
- elif isinstance(param_value[key], dict):
- param_value[key] = self.__process_dict(param_name, param_value[key])
- return param_value
|