Skip to content

Commit 8405877

Browse files
authored
Merge pull request #15 from strohganoff/fix/generic-cardinal-discriminitor
Fix generic cardinality discriminator type alias
2 parents 060497e + a6487b1 commit 8405877

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

streamdeck/models/events/common.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
from __future__ import annotations
22

33
from abc import ABC
4-
from typing import Annotated, Any, Generic, Literal, NamedTuple, Optional, Union
4+
from typing import Annotated, Generic, Literal, NamedTuple, Optional, Union
55

6-
from pydantic import Field
6+
from pydantic import Field, JsonValue
77
from typing_extensions import TypedDict, TypeVar
88

99
from streamdeck.models.events.base import ConfiguredBaseModel
@@ -28,8 +28,11 @@ class DeviceSpecificEventMixin:
2828
## Payload models and metadata used by multiple event models.
2929

3030

31-
PluginDefinedData = dict[str, Any]
32-
"""Data of arbitrary structure that is defined in and relevant to the plugin."""
31+
PluginDefinedData = dict[str, JsonValue]
32+
"""Data of arbitrary structure that is defined in and relevant to the plugin.
33+
34+
The root of the data structure will always be a dict of string keys, while the values can be any JSON-compatible type.
35+
"""
3336

3437

3538
EncoderControllerType = Literal["Encoder"]
@@ -116,10 +119,14 @@ class MultiActionPayloadMixin:
116119
"""Indicates that this event is part of a multi-action."""
117120

118121

122+
# These need to be covariant, as the Mixin classes are never meant to be instantiated themselves, only inherited from.
123+
SingleActionPayload_co = TypeVar("SingleActionPayload_co", bound=SingleActionPayloadMixin, covariant=True)
124+
MultiActionPayload_co = TypeVar("MultiActionPayload_co", bound=MultiActionPayloadMixin, covariant=True)
125+
119126
CardinalityDiscriminated = Annotated[
120127
Union[ # noqa: UP007
121-
TypeVar("S", bound=SingleActionPayloadMixin),
122-
TypeVar("M", bound=MultiActionPayloadMixin),
128+
SingleActionPayload_co,
129+
MultiActionPayload_co,
123130
],
124131
Field(discriminator="is_in_multi_action"),
125132
]

0 commit comments

Comments
 (0)