blob: d8b5a94e5fdafc1ce85baef79dedc2148a06e1ce [file] [log] [blame]
#
# 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.
#
# Authors:
# Tristan Van Berkom <tristan.vanberkom@codethink.co.uk>
from typing import TYPE_CHECKING
from ..node import _assert_symbol_name
if TYPE_CHECKING:
from typing import Optional
# Shared symbols for validation purposes
#
OPTION_SYMBOLS = ["type", "description", "variable"]
# Option()
#
# An abstract class representing a project option.
#
# Concrete classes must be created to handle option types,
# the loaded project options is a collection of typed Option
# instances.
#
class Option:
# Subclasses use this to specify the type name used
# for the yaml format and error messages
OPTION_TYPE = None # type: Optional[str]
def __init__(self, name, definition, pool):
self.name = name
self.variable = None
self.value = None
self.pool = pool
self.load(definition)
# load()
#
# Loads the option attributes from the descriptions
# in the project.conf
#
# Args:
# node (dict): The loaded YAML dictionary describing
# the option
def load(self, node):
# We don't use the description, but we do require that options have a
# description.
node.get_str("description")
self.variable = node.get_str("variable", default=None)
# Assert valid symbol name for variable name
if self.variable is not None:
_assert_symbol_name(self.variable, "variable name", ref_node=node.get_node("variable"))
# load_value()
#
# Loads the value of the option in string form.
#
# Args:
# node (Mapping): The YAML loaded key/value dictionary
# to load the value from
#
def load_value(self, node):
pass # pragma: nocover
# set_value()
#
# Sets the value of an option from a string passed
# to buildstream on the command line
#
# Args:
# value (str): The value in string form
#
def set_value(self, value):
pass # pragma: nocover
# get_value()
#
# Gets the value of an option in string form, this
# is for the purpose of exporting option values to
# variables which must be in string form.
#
# Returns:
# (str): The value in string form
#
def get_value(self):
pass # pragma: nocover
# resolve()
#
# Called on each option once, after all configuration
# and cli options have been passed.
#
def resolve(self):
pass # pragma: nocover