blob: e9e8a36f6c6615c14a3cf0e70156ce8c0e132952 [file] [log] [blame]
# -*- coding: utf-8
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
import reclass.defaults as defaults
from six import string_types, iteritems
class Settings(object):
known_opts = {
'allow_scalar_over_dict': defaults.OPT_ALLOW_SCALAR_OVER_DICT,
'allow_scalar_over_list': defaults.OPT_ALLOW_SCALAR_OVER_LIST,
'allow_list_over_scalar': defaults.OPT_ALLOW_LIST_OVER_SCALAR,
'allow_dict_over_scalar': defaults.OPT_ALLOW_DICT_OVER_SCALAR,
'allow_none_override': defaults.OPT_ALLOW_NONE_OVERRIDE,
'automatic_parameters': defaults.AUTOMATIC_RECLASS_PARAMETERS,
'class_mappings_match_path': defaults.CLASS_MAPPINGS_MATCH_PATH,
'default_environment': defaults.DEFAULT_ENVIRONMENT,
'delimiter': defaults.PARAMETER_INTERPOLATION_DELIMITER,
'dict_key_override_prefix':
defaults.PARAMETER_DICT_KEY_OVERRIDE_PREFIX,
'dict_key_constant_prefix':
defaults.PARAMETER_DICT_KEY_CONSTANT_PREFIX,
'escape_character': defaults.ESCAPE_CHARACTER,
'export_sentinels': defaults.EXPORT_SENTINELS,
'inventory_ignore_failed_node':
defaults.OPT_INVENTORY_IGNORE_FAILED_NODE,
'inventory_ignore_failed_render':
defaults.OPT_INVENTORY_IGNORE_FAILED_RENDER,
'reference_sentinels': defaults.REFERENCE_SENTINELS,
'ignore_class_notfound': defaults.OPT_IGNORE_CLASS_NOTFOUND,
'strict_constant_parameters':
defaults.OPT_STRICT_CONSTANT_PARAMETERS,
'ignore_class_notfound_regexp':
defaults.OPT_IGNORE_CLASS_NOTFOUND_REGEXP,
'ignore_class_notfound_warning':
defaults.OPT_IGNORE_CLASS_NOTFOUND_WARNING,
'ignore_overwritten_missing_references':
defaults.OPT_IGNORE_OVERWRITTEN_MISSING_REFERENCES,
'group_errors': defaults.OPT_GROUP_ERRORS,
'compose_node_name': defaults.OPT_COMPOSE_NODE_NAME,
}
def __init__(self, options={}):
for opt_name, opt_value in iteritems(self.known_opts):
setattr(self, opt_name, options.get(opt_name, opt_value))
self.dict_key_prefixes = [str(self.dict_key_override_prefix),
str(self.dict_key_constant_prefix)]
if isinstance(self.ignore_class_notfound_regexp, string_types):
self.ignore_class_notfound_regexp = [
self.ignore_class_notfound_regexp]
def __eq__(self, other):
if isinstance(other, type(self)):
return all(getattr(self, opt) == getattr(other, opt)
for opt in self.known_opts)
return False
def __copy__(self):
cls = self.__class__
result = cls.__new__(cls)
result.__dict__.update(self.__dict__)
return result
def __deepcopy__(self, memo):
return self.__copy__()