Source code for owlmixin.errors
# coding: utf-8
from typing import Any, List, Sequence
class OwlMixinError(Exception):
title: str
def __str__(self) -> str:
return f"""
. ∧,,_∧ ,___________________
⊂ ( ・ω・ )つ- < {self.title}
/// /::/ `-------------------
|::|/⊂ヽノ|::|」
/ ̄ ̄旦 ̄ ̄ ̄/|
______/ | |
|------ー----ー|/
{self.description}
"""
@property
def description(self) -> str:
raise NotImplementedError
[docs]class InvalidTypeError(OwlMixinError):
"""
:ivar str title: Error title
:ivar str description: Error description
:ivar str cls: Class name
:ivar str prop: Property name
:ivar Any value: Property value
:ivar List[str] expected: Expected types
:ivar str actual: Actual type
"""
title: str = "Invalid Type error"
cls: str
prop: str
value: Any
expected: Sequence[str]
actual: str
def __init__(self, *, cls, prop: str, value: Any, expected: Sequence[str], actual):
super().__init__()
self.cls = f"{cls.__module__}.{cls.__name__}"
self.prop = prop
self.value = value
self.expected = [str(t) for t in expected]
self.actual = str(actual)
@property
def description(self) -> str:
# expected_typestr = " or ".join((str(t) for t in expected))
return f"""`{self.cls}#{self.prop} = {self.value}` doesn't match expected types.
Expected type is one of {self.expected}, but actual type is `{self.actual}`
* If you want to force cast, set `force_cast=True`
* If you don't want to force cast, specify value which has correct type"""
[docs]class UnknownPropertiesError(OwlMixinError):
"""
:ivar str title: Error title
:ivar str description: Error description
:ivar str cls: Class name
:ivar List[str] props: Unknown property names
"""
title: str = "Unknown properties error"
cls: str
props: List[str]
def __init__(self, *, cls, props: List[str]):
super().__init__()
self.cls = f"{cls.__module__}.{cls.__name__}"
self.props = props
@property
def description(self) -> str:
return f"""`{self.cls}` has unknown properties {self.props}!!
* If you want to allow unknown properties, set `restrict=False`
* If you want to disallow unknown properties, add {' and '.join(
['`' + x + '`' for x in self.props])} to {self.cls}"""
[docs]class RequiredError(OwlMixinError):
"""
:ivar str title: Error title
:ivar str description: Error description
:ivar str cls: Class name
:ivar str prop: Property name
:ivar str type_: Property type
"""
title: str = "Required error"
cls: str
prop: str
type_: str
def __init__(self, *, cls, prop: str, type_):
super().__init__()
self.cls = f"{cls.__module__}.{cls.__name__}"
self.prop = prop
self.type_ = str(type_)
@property
def description(self) -> str:
return f"""`{self.cls}#{self.prop}: {self.type_}` is empty!!
* If `{self.prop}` is certainly required, specify anything.
* If `{self.prop}` is optional, change type from `{self.type_}` to `TOption[{self.type_}]`"""