def _build(value, property_path=None):
if not property_path:<EOL><INDENT>property_path = []<EOL><DEDENT>if is_config_type(value):<EOL><INDENT>return _build_config(value, property_path=property_path)<EOL><DEDENT>elif is_config_var(value):<EOL><INDENT>return _build_var(value, property_path=property_path)<EOL><DEDENT>elif is_builtin_type(value):<EOL><INDENT>return _build_type(value, value, property_path=property_path)<EOL><DEDENT>elif is_regex_type(value):<EOL><INDENT>return _build_type(str, value, property_path=property_path)<EOL><DEDENT>elif is_typing_type(value):<EOL><INDENT>return _build_type(value, value, property_path=property_path)<EOL><DEDENT>return _build_type(type(value), value, property_path=property_path)<EOL>
The generic schema definition build method.

    :param value: The value to build a schema definition for
    :param List[str] property_path: The property path of the current type,
        defaults to None, optional
    :return: The built schema definition
    :rtype: Dict[str, Any]