pycascadeui 3.3.0__tar.gz → 3.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pycascadeui-3.3.0/pycascadeui.egg-info → pycascadeui-3.3.1}/PKG-INFO +1 -1
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/__init__.py +1 -1
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/components/selects.py +14 -4
- {pycascadeui-3.3.0 → pycascadeui-3.3.1/pycascadeui.egg-info}/PKG-INFO +1 -1
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/pyproject.toml +1 -1
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_selects.py +37 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/LICENSE +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/README.md +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/__main__.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/components/__init__.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/components/base.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/components/buttons.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/components/inputs.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/components/patterns/__init__.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/components/patterns/v1.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/components/patterns/v2.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/components/types.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/components/v1_composition.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/components/wrappers.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/devtools.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/exceptions.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/persistence/__init__.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/persistence/backends/__init__.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/persistence/backends/memory.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/persistence/backends/postgres.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/persistence/backends/sqlite.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/persistence/config.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/persistence/manager.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/persistence/migrations.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/persistence/protocols.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/persistence/schema.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/persistence/schema_postgres.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/py.typed +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/setup.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/state/__init__.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/state/actions.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/state/computed.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/state/middleware/__init__.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/state/middleware/logging.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/state/middleware/persistence.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/state/middleware/undo.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/state/reducers.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/state/singleton.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/state/slots.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/state/store.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/state/types.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/theming/__init__.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/theming/context.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/theming/core.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/theming/themes.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/tracing.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/utils/__init__.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/utils/coercion.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/utils/decorators.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/utils/errors.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/utils/fetch.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/utils/logging.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/utils/strings.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/utils/tasks.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/validation.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/views/__init__.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/views/_interaction.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/views/_navigation.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/views/_placement.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/views/base.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/views/layout.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/views/patterns/__init__.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/views/patterns/form.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/views/patterns/leaderboard.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/views/patterns/menu.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/views/patterns/paginated.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/views/patterns/roles.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/views/patterns/tabs.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/views/patterns/types.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/views/patterns/wizard.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/views/persistent.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/cascadeui/views/view.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/pycascadeui.egg-info/SOURCES.txt +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/pycascadeui.egg-info/dependency_links.txt +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/pycascadeui.egg-info/requires.txt +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/pycascadeui.egg-info/top_level.txt +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/setup.cfg +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_auto_defer.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_backends.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_backends_postgres.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_backends_raw_sql.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_batching.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_button_grid.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_components.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_computed.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_devtools.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_dynamic_persistent_button.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_emoji_grid.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_ephemeral_refresh.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_fetch.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_five_pillars.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_form_patterns.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_hooks.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_input_coercion.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_inputs.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_instance_limit.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_layout_pagination.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_layout_patterns.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_layout_persistent.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_layout_view.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_leaderboard_patterns.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_menu_patterns.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_message_cleanup.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_middleware.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_nav_version.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_navigation.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_navigation_artifact_restore.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_owner_only.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_paginated_patterns.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_pagination.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_persistence.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_persistence_middleware.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_persistent_views.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_pillar_isolation.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_placement.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_rebuild_callback.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_reducers.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_roles_patterns.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_scoping.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_state_slots.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_state_store.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_tab_patterns.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_theming.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_undo.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_update_coalescing.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_v2_helpers.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_validation.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_view_init.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_wizard_patterns.py +0 -0
- {pycascadeui-3.3.0 → pycascadeui-3.3.1}/tests/test_wrappers.py +0 -0
|
@@ -37,7 +37,12 @@ def _wrap_default_values(
|
|
|
37
37
|
out.append(value)
|
|
38
38
|
continue
|
|
39
39
|
snowflake_id = coerce_snowflake_id(value)
|
|
40
|
-
|
|
40
|
+
# SelectDefaultValue stores type verbatim; a bare string breaks to_dict().
|
|
41
|
+
out.append(
|
|
42
|
+
discord.SelectDefaultValue(
|
|
43
|
+
id=snowflake_id, type=discord.SelectDefaultValueType[default_type]
|
|
44
|
+
)
|
|
45
|
+
)
|
|
41
46
|
return out
|
|
42
47
|
|
|
43
48
|
|
|
@@ -63,15 +68,20 @@ def _wrap_mentionable_defaults(
|
|
|
63
68
|
if isinstance(value, discord.SelectDefaultValue):
|
|
64
69
|
out.append(value)
|
|
65
70
|
elif isinstance(value, discord.Role):
|
|
66
|
-
out.append(
|
|
71
|
+
out.append(
|
|
72
|
+
discord.SelectDefaultValue(id=value.id, type=discord.SelectDefaultValueType.role)
|
|
73
|
+
)
|
|
67
74
|
elif isinstance(value, (discord.Member, discord.User)):
|
|
68
|
-
out.append(
|
|
75
|
+
out.append(
|
|
76
|
+
discord.SelectDefaultValue(id=value.id, type=discord.SelectDefaultValueType.user)
|
|
77
|
+
)
|
|
69
78
|
else:
|
|
70
79
|
raise TypeError(
|
|
71
80
|
f"MentionableSelect default values must be Member, User, Role, "
|
|
72
81
|
f"or SelectDefaultValue (got {type(value).__name__}: {value!r}). "
|
|
73
82
|
f"Raw int IDs cannot be auto-typed; construct "
|
|
74
|
-
f"discord.SelectDefaultValue(id=...,
|
|
83
|
+
f"discord.SelectDefaultValue(id=..., "
|
|
84
|
+
f"type=discord.SelectDefaultValueType.user or .role) "
|
|
75
85
|
f"explicitly for those."
|
|
76
86
|
)
|
|
77
87
|
return out
|
|
@@ -224,3 +224,40 @@ class TestMentionableSelect:
|
|
|
224
224
|
existing = discord.SelectDefaultValue(id=999, type="user")
|
|
225
225
|
select = MentionableSelect(default_values=[existing])
|
|
226
226
|
assert _ids_and_types(select.default_values) == [(999, "user")]
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
# // ========================================( Serialization )======================================== // #
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
class TestDefaultValueSerialization:
|
|
233
|
+
"""default_values survive to_component_dict() on discord.py 2.7.
|
|
234
|
+
|
|
235
|
+
SelectDefaultValue.to_dict() reads ``self._type.value``, so a bare string
|
|
236
|
+
type passed at construction raises AttributeError at serialization time.
|
|
237
|
+
The _ids_and_types assertions above never reach serialization, so these
|
|
238
|
+
tests drive to_component_dict() directly to exercise the enum coercion.
|
|
239
|
+
"""
|
|
240
|
+
|
|
241
|
+
@pytest.mark.parametrize(
|
|
242
|
+
"select_cls, type_name",
|
|
243
|
+
[(RoleSelect, "role"), (UserSelect, "user"), (ChannelSelect, "channel")],
|
|
244
|
+
)
|
|
245
|
+
def test_typed_select_serializes_raw_int_defaults(self, select_cls, type_name):
|
|
246
|
+
select = select_cls(default_values=[111, 222])
|
|
247
|
+
payload = select.to_component_dict()
|
|
248
|
+
assert payload["default_values"] == [
|
|
249
|
+
{"id": 111, "type": type_name},
|
|
250
|
+
{"id": 222, "type": type_name},
|
|
251
|
+
]
|
|
252
|
+
|
|
253
|
+
def test_mentionable_serializes_inferred_defaults(self):
|
|
254
|
+
member = MagicMock(spec=discord.Member)
|
|
255
|
+
member.id = 300
|
|
256
|
+
role = MagicMock(spec=discord.Role)
|
|
257
|
+
role.id = 400
|
|
258
|
+
select = MentionableSelect(default_values=[member, role])
|
|
259
|
+
payload = select.to_component_dict()
|
|
260
|
+
assert payload["default_values"] == [
|
|
261
|
+
{"id": 300, "type": "user"},
|
|
262
|
+
{"id": 400, "type": "role"},
|
|
263
|
+
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|