68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
|
|
from typing import Never, TypeIs, overload, override
|
||
|
|
|
||
|
|
from .messages import Message
|
||
|
|
from .midifiles import MetaMessage, UnknownMetaMessage
|
||
|
|
from .midifiles.meta import _MetaMessage # pyright: ignore[reportPrivateUsage]
|
||
|
|
|
||
|
|
class Frozen:
|
||
|
|
@override
|
||
|
|
def __setattr__(self, *_) -> Never: ...
|
||
|
|
@override
|
||
|
|
def __hash__(self) -> int: ...
|
||
|
|
|
||
|
|
class FrozenMessage(Frozen, Message): ...
|
||
|
|
class FrozenMetaMessage(Frozen, _MetaMessage): ...
|
||
|
|
class FrozenUnknownMetaMessage(Frozen, UnknownMetaMessage): ...
|
||
|
|
|
||
|
|
@overload
|
||
|
|
def is_frozen(msg: UnknownMetaMessage) -> TypeIs[FrozenUnknownMetaMessage]: ... # pyright: ignore[reportOverlappingOverload]
|
||
|
|
@overload
|
||
|
|
def is_frozen(msg: _MetaMessage) -> TypeIs[FrozenMetaMessage]: ...
|
||
|
|
@overload
|
||
|
|
def is_frozen(msg: Message) -> TypeIs[FrozenMessage]: ...
|
||
|
|
@overload
|
||
|
|
def is_frozen(msg: object) -> TypeIs[Frozen]:
|
||
|
|
"""Return True if message is frozen, otherwise False."""
|
||
|
|
|
||
|
|
@overload
|
||
|
|
def freeze_message[T: Frozen](msg: T) -> T: ...
|
||
|
|
@overload
|
||
|
|
def freeze_message(msg: Message) -> FrozenMessage: ...
|
||
|
|
@overload
|
||
|
|
def freeze_message(msg: UnknownMetaMessage) -> FrozenUnknownMetaMessage: ...
|
||
|
|
@overload
|
||
|
|
def freeze_message(msg: MetaMessage) -> FrozenMetaMessage: ...
|
||
|
|
@overload
|
||
|
|
def freeze_message(msg: None) -> None: ...
|
||
|
|
@overload
|
||
|
|
def freeze_message[T: Frozen](
|
||
|
|
msg: T | Message | UnknownMetaMessage | MetaMessage | None,
|
||
|
|
) -> T | FrozenMessage | FrozenUnknownMetaMessage | FrozenMetaMessage | None:
|
||
|
|
"""Freeze message.
|
||
|
|
|
||
|
|
Returns a frozen version of the message. Frozen messages are
|
||
|
|
immutable, hashable and can be used as dictionary keys.
|
||
|
|
|
||
|
|
Will return None if called with None. This allows you to do things
|
||
|
|
like::
|
||
|
|
|
||
|
|
msg = freeze_message(port.poll())
|
||
|
|
"""
|
||
|
|
|
||
|
|
@overload
|
||
|
|
def thaw_message(msg: FrozenUnknownMetaMessage) -> UnknownMetaMessage: ...
|
||
|
|
@overload
|
||
|
|
def thaw_message(msg: FrozenMetaMessage) -> MetaMessage: ...
|
||
|
|
@overload
|
||
|
|
def thaw_message(msg: FrozenMessage) -> Message: ...
|
||
|
|
@overload
|
||
|
|
def thaw_message(
|
||
|
|
msg: FrozenMessage | FrozenUnknownMetaMessage | FrozenMetaMessage,
|
||
|
|
) -> Message | UnknownMetaMessage | MetaMessage:
|
||
|
|
"""Thaw message.
|
||
|
|
|
||
|
|
Returns a mutable version of a frozen message.
|
||
|
|
|
||
|
|
Will return None if called with None.
|
||
|
|
"""
|