You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
3.7 KiB
119 lines
3.7 KiB
5 years ago
|
# -*- coding: utf-8 -*-
|
||
|
"""Exceptions module for rfc3986."""
|
||
|
|
||
|
from . import compat
|
||
|
|
||
|
|
||
|
class RFC3986Exception(Exception):
|
||
|
"""Base class for all rfc3986 exception classes."""
|
||
|
|
||
|
pass
|
||
|
|
||
|
|
||
|
class InvalidAuthority(RFC3986Exception):
|
||
|
"""Exception when the authority string is invalid."""
|
||
|
|
||
|
def __init__(self, authority):
|
||
|
"""Initialize the exception with the invalid authority."""
|
||
|
super(InvalidAuthority, self).__init__(
|
||
|
u"The authority ({0}) is not valid.".format(
|
||
|
compat.to_str(authority)))
|
||
|
|
||
|
|
||
|
class InvalidPort(RFC3986Exception):
|
||
|
"""Exception when the port is invalid."""
|
||
|
|
||
|
def __init__(self, port):
|
||
|
"""Initialize the exception with the invalid port."""
|
||
|
super(InvalidPort, self).__init__(
|
||
|
'The port ("{0}") is not valid.'.format(port))
|
||
|
|
||
|
|
||
|
class ResolutionError(RFC3986Exception):
|
||
|
"""Exception to indicate a failure to resolve a URI."""
|
||
|
|
||
|
def __init__(self, uri):
|
||
|
"""Initialize the error with the failed URI."""
|
||
|
super(ResolutionError, self).__init__(
|
||
|
"{0} is not an absolute URI.".format(uri.unsplit()))
|
||
|
|
||
|
|
||
|
class ValidationError(RFC3986Exception):
|
||
|
"""Exception raised during Validation of a URI."""
|
||
|
|
||
|
pass
|
||
|
|
||
|
|
||
|
class MissingComponentError(ValidationError):
|
||
|
"""Exception raised when a required component is missing."""
|
||
|
|
||
|
def __init__(self, uri, *component_names):
|
||
|
"""Initialize the error with the missing component name."""
|
||
|
verb = 'was'
|
||
|
if len(component_names) > 1:
|
||
|
verb = 'were'
|
||
|
|
||
|
self.uri = uri
|
||
|
self.components = sorted(component_names)
|
||
|
components = ', '.join(self.components)
|
||
|
super(MissingComponentError, self).__init__(
|
||
|
"{} {} required but missing".format(components, verb),
|
||
|
uri,
|
||
|
self.components,
|
||
|
)
|
||
|
|
||
|
|
||
|
class UnpermittedComponentError(ValidationError):
|
||
|
"""Exception raised when a component has an unpermitted value."""
|
||
|
|
||
|
def __init__(self, component_name, component_value, allowed_values):
|
||
|
"""Initialize the error with the unpermitted component."""
|
||
|
super(UnpermittedComponentError, self).__init__(
|
||
|
"{} was required to be one of {!r} but was {!r}".format(
|
||
|
component_name, list(sorted(allowed_values)), component_value,
|
||
|
),
|
||
|
component_name,
|
||
|
component_value,
|
||
|
allowed_values,
|
||
|
)
|
||
|
self.component_name = component_name
|
||
|
self.component_value = component_value
|
||
|
self.allowed_values = allowed_values
|
||
|
|
||
|
|
||
|
class PasswordForbidden(ValidationError):
|
||
|
"""Exception raised when a URL has a password in the userinfo section."""
|
||
|
|
||
|
def __init__(self, uri):
|
||
|
"""Initialize the error with the URI that failed validation."""
|
||
|
unsplit = getattr(uri, 'unsplit', lambda: uri)
|
||
|
super(PasswordForbidden, self).__init__(
|
||
|
'"{}" contained a password when validation forbade it'.format(
|
||
|
unsplit()
|
||
|
)
|
||
|
)
|
||
|
self.uri = uri
|
||
|
|
||
|
|
||
|
class InvalidComponentsError(ValidationError):
|
||
|
"""Exception raised when one or more components are invalid."""
|
||
|
|
||
|
def __init__(self, uri, *component_names):
|
||
|
"""Initialize the error with the invalid component name(s)."""
|
||
|
verb = 'was'
|
||
|
if len(component_names) > 1:
|
||
|
verb = 'were'
|
||
|
|
||
|
self.uri = uri
|
||
|
self.components = sorted(component_names)
|
||
|
components = ', '.join(self.components)
|
||
|
super(InvalidComponentsError, self).__init__(
|
||
|
"{} {} found to be invalid".format(components, verb),
|
||
|
uri,
|
||
|
self.components,
|
||
|
)
|
||
|
|
||
|
|
||
|
class MissingDependencyError(RFC3986Exception):
|
||
|
"""Exception raised when an IRI is encoded without the 'idna' module."""
|