mirror of
https://github.com/rembo10/headphones.git
synced 2026-01-10 23:38:05 -05:00
Mostly just updating libraries, removing string encoding/decoding, fixing some edge cases. No new functionality was added in this commit.
57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
from __future__ import division, absolute_import, print_function
|
|
|
|
import yaml
|
|
|
|
__all__ = [
|
|
'ConfigError', 'NotFoundError', 'ConfigValueError', 'ConfigTypeError',
|
|
'ConfigTemplateError', 'ConfigReadError']
|
|
|
|
YAML_TAB_PROBLEM = "found character '\\t' that cannot start any token"
|
|
|
|
# Exceptions.
|
|
|
|
|
|
class ConfigError(Exception):
|
|
"""Base class for exceptions raised when querying a configuration.
|
|
"""
|
|
|
|
|
|
class NotFoundError(ConfigError):
|
|
"""A requested value could not be found in the configuration trees.
|
|
"""
|
|
|
|
|
|
class ConfigValueError(ConfigError):
|
|
"""The value in the configuration is illegal."""
|
|
|
|
|
|
class ConfigTypeError(ConfigValueError):
|
|
"""The value in the configuration did not match the expected type.
|
|
"""
|
|
|
|
|
|
class ConfigTemplateError(ConfigError):
|
|
"""Base class for exceptions raised because of an invalid template.
|
|
"""
|
|
|
|
|
|
class ConfigReadError(ConfigError):
|
|
"""A configuration source could not be read."""
|
|
def __init__(self, name, reason=None):
|
|
self.name = name
|
|
self.reason = reason
|
|
|
|
message = u'{0} could not be read'.format(name)
|
|
if (isinstance(reason, yaml.scanner.ScannerError)
|
|
and reason.problem == YAML_TAB_PROBLEM):
|
|
# Special-case error message for tab indentation in YAML markup.
|
|
message += u': found tab character at line {0}, column {1}'.format(
|
|
reason.problem_mark.line + 1,
|
|
reason.problem_mark.column + 1,
|
|
)
|
|
elif reason:
|
|
# Generic error message uses exception's message.
|
|
message += u': {0}'.format(reason)
|
|
|
|
super(ConfigReadError, self).__init__(message)
|