some random stuff. caelestia incoming

This commit is contained in:
voidarclabs
2025-08-21 17:40:48 +01:00
parent 12df9a0b6e
commit 1cc414a96a
1308 changed files with 217219 additions and 8 deletions

View File

@@ -0,0 +1,216 @@
from typing import Any, Optional, Type
from mashumaro.core.meta.helpers import type_name
class MissingField(LookupError):
def __init__(self, field_name: str, field_type: Type, holder_class: Type):
self.field_name = field_name
self.field_type = field_type
self.holder_class = holder_class
@property
def field_type_name(self) -> str:
return type_name(self.field_type, short=True)
@property
def holder_class_name(self) -> str:
return type_name(self.holder_class, short=True)
def __str__(self) -> str:
return (
f'Field "{self.field_name}" of type {self.field_type_name}'
f" is missing in {self.holder_class_name} instance"
)
class ExtraKeysError(ValueError):
def __init__(self, extra_keys: set[str], target_type: Type):
self.extra_keys = extra_keys
self.target_type = target_type
@property
def target_class_name(self) -> str:
return type_name(self.target_type, short=True)
def __str__(self) -> str:
extra_keys_str = ", ".join(k for k in self.extra_keys)
return (
"Serialized dict has keys that are not defined in "
f"{self.target_class_name}: {extra_keys_str}"
)
class UnserializableDataError(TypeError):
pass
class UnserializableField(UnserializableDataError):
def __init__(
self,
field_name: str,
field_type: Type,
holder_class: Type,
msg: Optional[str] = None,
):
self.field_name = field_name
self.field_type = field_type
self.holder_class = holder_class
self.msg = msg
@property
def field_type_name(self) -> str:
return type_name(self.field_type, short=True)
@property
def holder_class_name(self) -> str:
return type_name(self.holder_class, short=True)
def __str__(self) -> str:
s = (
f'Field "{self.field_name}" of type {self.field_type_name} '
f"in {self.holder_class_name} is not serializable"
)
if self.msg:
s += f": {self.msg}"
return s
class UnsupportedSerializationEngine(UnserializableField):
def __init__(
self,
field_name: str,
field_type: Type,
holder_class: Type,
engine: Any,
):
super(UnsupportedSerializationEngine, self).__init__(
field_name,
field_type,
holder_class,
msg=f'Unsupported serialization engine "{engine}"',
)
class UnsupportedDeserializationEngine(UnserializableField):
def __init__(
self,
field_name: str,
field_type: Type,
holder_class: Type,
engine: Any,
):
super(UnsupportedDeserializationEngine, self).__init__(
field_name,
field_type,
holder_class,
msg=f'Unsupported deserialization engine "{engine}"',
)
class InvalidFieldValue(ValueError):
def __init__(
self,
field_name: str,
field_type: Type,
field_value: Any,
holder_class: Type,
msg: Optional[str] = None,
):
self.field_name = field_name
self.field_type = field_type
self.field_value = field_value
self.holder_class = holder_class
self.msg = msg
@property
def field_type_name(self) -> str:
return type_name(self.field_type, short=True)
@property
def holder_class_name(self) -> str:
return type_name(self.holder_class, short=True)
def __str__(self) -> str:
s = (
f'Field "{self.field_name}" of type {self.field_type_name} '
f"in {self.holder_class_name} has invalid value "
f"{repr(self.field_value)}"
)
if self.msg:
s += f": {self.msg}"
return s
class MissingDiscriminatorError(LookupError):
def __init__(self, field_name: str):
self.field_name = field_name
def __str__(self) -> str:
return f"Discriminator '{self.field_name}' is missing"
class SuitableVariantNotFoundError(ValueError):
def __init__(
self,
variants_type: Type,
discriminator_name: Optional[str] = None,
discriminator_value: Any = None,
):
self.variants_type = variants_type
self.discriminator_name = discriminator_name
self.discriminator_value = discriminator_value
def __str__(self) -> str:
s = f"{type_name(self.variants_type)} has no "
if self.discriminator_value is not None:
s += (
f"subtype with attribute '{self.discriminator_name}' "
f"equal to {self.discriminator_value!r}"
)
else:
s += "suitable subtype"
return s
class BadHookSignature(TypeError):
pass
class ThirdPartyModuleNotFoundError(ModuleNotFoundError):
def __init__(self, module_name: str, field_name: str, holder_class: Type):
self.module_name = module_name
self.field_name = field_name
self.holder_class = holder_class
@property
def holder_class_name(self) -> str:
return type_name(self.holder_class, short=True)
def __str__(self) -> str:
s = (
f'Install "{self.module_name}" to use it as the serialization '
f'method for the field "{self.field_name}" '
f"in {self.holder_class_name}"
)
return s
class UnresolvedTypeReferenceError(NameError):
def __init__(self, holder_class: Type, unresolved_type_name: str):
self.holder_class = holder_class
self.name = unresolved_type_name
@property
def holder_class_name(self) -> str:
return type_name(self.holder_class, short=True)
def __str__(self) -> str:
return (
f"Class {self.holder_class_name} has unresolved type reference "
f"{self.name} in some of its fields"
)
class BadDialect(ValueError):
pass