blob: bda46bbe475003b7f0917b08d5a807efd5562745 [file] [log] [blame]
from typing import (
Any,
Callable,
final,
Final,
Iterable,
Literal,
Optional,
overload,
Protocol,
Tuple,
TypeVar,
Union,
)
_Data = TypeVar("_Data")
class _SupportsRead(Protocol):
def read(self, size: int = ...) -> str: ...
class _SupportsWrite(Protocol[_Data]):
def write(self, s: _Data) -> Any: ...
_CallbackStr = TypeVar("_CallbackStr", bound=Callable[[str], None])
_CallbackBytes = TypeVar("_CallbackBytes", bound=Callable[[bytes], None])
_SupportsWriteBytes = TypeVar("_SupportsWriteBytes", bound=_SupportsWrite[bytes])
_SupportsWriteStr = TypeVar("_SupportsWriteStr", bound=_SupportsWrite[str])
###############################################################################
### _exports.pyx
###############################################################################
@final
class Options:
"""Customizations for the ``encoder_*(...)`` function family."""
quotationmark: Final[str] = ...
tojson: Final[Optional[str]] = ...
mappingtypes: Final[Tuple[type, ...]] = ...
def __init__(
self,
*,
quotationmark: Optional[str] = ...,
tojson: Optional[str] = ...,
mappingtypes: Optional[Tuple[type, ...]] = ...,
) -> None: ...
def update(
self,
*,
quotationmark: Optional[str] = ...,
tojson: Optional[str] = ...,
mappingtypes: Optional[Tuple[type, ...]] = ...,
) -> Options:
"""Creates a new Options instance by modifying some members."""
def decode(data: str, maxdepth: Optional[int] = ..., some: bool = ...) -> Any:
"""Decodes JSON5 serialized data from an ``str`` object."""
def decode_latin1(
data: bytes,
maxdepth: Optional[int] = ...,
some: bool = ...,
) -> Any:
"""Decodes JSON5 serialized data from a ``bytes`` object."""
def decode_utf8(
data: bytes,
maxdepth: Optional[int] = ...,
some: bool = ...,
) -> Any:
"""Decodes JSON5 serialized data from a ``bytes`` object."""
def decode_buffer(
data: bytes,
maxdepth: Optional[int] = ...,
some: bool = ...,
wordlength: Optional[int] = ...,
) -> Any:
"""Decodes JSON5 serialized data from an object that supports the buffer protocol, e.g. bytearray."""
def decode_callback(
cb: Callable[..., Union[str, bytes, bytearray, int, None]],
maxdepth: Optional[int] = ...,
some: bool = ...,
args: Optional[Iterable[Any]] = ...,
) -> Any:
"""Decodes JSON5 serialized data by invoking a callback."""
def decode_io(
fp: _SupportsRead,
maxdepth: Optional[int] = ...,
some: bool = ...,
) -> Any:
"""Decodes JSON5 serialized data from a file-like object."""
def encode(
data: Any,
*,
options: Optional[Options] = ...,
quotationmark: Optional[str] = ...,
tojson: Optional[str] = ...,
mappingtypes: Optional[Tuple[type, ...]] = ...,
) -> str:
"""Serializes a Python object to a JSON5 compatible string."""
...
def encode_bytes(
data: Any,
*,
options: Optional[Options] = ...,
quotationmark: Optional[str] = ...,
tojson: Optional[str] = ...,
mappingtypes: Optional[Tuple[type, ...]] = ...,
) -> bytes:
"""Serializes a Python object to a JSON5 compatible bytes string."""
@overload
def encode_callback(
data: Any,
cb: _CallbackStr,
supply_bytes: Literal[False] = ...,
*,
options: Optional[Options] = ...,
quotationmark: Optional[str] = ...,
tojson: Optional[str] = ...,
mappingtypes: Optional[Tuple[type, ...]] = ...,
) -> _CallbackStr:
"""Serializes a Python object into a callback function."""
@overload
def encode_callback(
data: Any,
cb: _CallbackBytes,
supply_bytes: Literal[True],
*,
options: Optional[Options] = ...,
quotationmark: Optional[str] = ...,
tojson: Optional[str] = ...,
mappingtypes: Optional[Tuple[type, ...]] = ...,
) -> _CallbackBytes: ...
@overload
def encode_io(
data: Any,
fp: _SupportsWriteBytes,
supply_bytes: Literal[True] = ...,
*,
options: Optional[Options] = ...,
quotationmark: Optional[str] = ...,
tojson: Optional[str] = ...,
mappingtypes: Optional[Tuple[type, ...]] = ...,
) -> _SupportsWriteBytes:
"""Serializes a Python object into a file-object."""
@overload
def encode_io(
data: Any,
fp: _SupportsWriteStr,
supply_bytes: Literal[False],
*,
options: Optional[Options] = ...,
quotationmark: Optional[str] = ...,
tojson: Optional[str] = ...,
mappingtypes: Optional[Tuple[type, ...]] = ...,
) -> _SupportsWriteStr: ...
def encode_noop(
data: Any,
*,
options: Optional[Options] = ...,
quotationmark: Optional[str] = ...,
tojson: Optional[str] = ...,
mappingtypes: Optional[Tuple[type, ...]] = ...,
) -> bool:
"""Test if the input is serializable."""
###############################################################################
### _legacy.pyx
###############################################################################
def loads(s: str, *, encoding: str = ...) -> Any:
"""Decodes JSON5 serialized data from a string."""
def load(fp: _SupportsRead) -> Any:
"""Decodes JSON5 serialized data from a file-like object."""
def dumps(obj: Any) -> str:
"""Serializes a Python object to a JSON5 compatible string."""
def dump(obj: Any, fp: _SupportsWrite[str]) -> None:
"""Serializes a Python object to a JSON5 compatible string."""
###############################################################################
### _exceptions.pyx
###############################################################################
class Json5Exception(Exception):
"""Base class of any exception thrown by PyJSON5."""
def __init__(self, message: Optional[str] = ..., *args: Any) -> None: ...
@property
def message(self) -> Optional[str]: ...
###############################################################################
### _exceptions_encoder.pyx
###############################################################################
class Json5EncoderException(Json5Exception):
"""Base class of any exception thrown by the serializer."""
@final
class Json5UnstringifiableType(Json5EncoderException):
"""The encoder was not able to stringify the input, or it was told not to by the supplied ``Options``."""
def __init__(
self,
message: Optional[str] = ...,
unstringifiable: Any = ...,
) -> None: ...
@property
def unstringifiable(self) -> Any:
"""The value that caused the problem."""
###############################################################################
### _exceptions_decoder.pyx
###############################################################################
class Json5DecoderException(Json5Exception):
"""Base class of any exception thrown by the parser."""
def __init__(
self,
message: Optional[str] = ...,
result: Any = ...,
*args: Any,
) -> None: ...
@property
def result(self) -> Any:
"""Deserialized data up until now."""
@final
class Json5NestingTooDeep(Json5DecoderException):
"""The maximum nesting level on the input data was exceeded."""
@final
class Json5EOF(Json5DecoderException):
"""The input ended prematurely."""
@final
class Json5IllegalCharacter(Json5DecoderException):
"""An unexpected character was encountered."""
def __init__(
self,
message: Optional[str] = ...,
result: Any = ...,
character: Optional[str] = ...,
*args: Any,
) -> None: ...
@property
def character(self) -> Optional[str]:
"""Illegal character."""
@final
class Json5ExtraData(Json5DecoderException):
"""The input contained extranous data."""
def __init__(
self,
message: Optional[str] = ...,
result: Any = ...,
character: Optional[str] = ...,
*args: Any,
) -> None: ...
@property
def character(self) -> Optional[str]:
"""Extranous character."""
@final
class Json5IllegalType(Json5DecoderException):
"""The user supplied callback function returned illegal data."""
def __init__(
self,
message: Optional[str] = ...,
result: Any = ...,
value: Optional[Any] = ...,
*args: Any,
) -> None: ...
@property
def value(self) -> Optional[Any]:
"""Value that caused the problem."""