meltygui 0.1.0__py3-none-any.whl
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.
- meltygui/__init__.py +107 -0
- meltygui/accounts/__init__.py +0 -0
- meltygui/accounts/internet_accounts.py +1355 -0
- meltygui/chat/__init__.py +91 -0
- meltygui/chat/activity.py +75 -0
- meltygui/chat/backends.py +36 -0
- meltygui/chat/chat_interface.py +732 -0
- meltygui/chat/chat_proxy.py +352 -0
- meltygui/chat/codex_proxy.py +592 -0
- meltygui/chat/codex_settings.py +100 -0
- meltygui/chat/codex_transport.py +60 -0
- meltygui/chat/command_parser.py +204 -0
- meltygui/chat/images.py +227 -0
- meltygui/chat/messages.py +417 -0
- meltygui/chat/metadata.py +139 -0
- meltygui/chat/writer_locks.py +64 -0
- meltygui/code/__init__.py +0 -0
- meltygui/code/basic_converters.py +533 -0
- meltygui/code/chain_converters.py +2111 -0
- meltygui/code/code_checks.py +2209 -0
- meltygui/code/core_syntax.py +1430 -0
- meltygui/code/file_converters.py +1933 -0
- meltygui/code/fileref.py +702 -0
- meltygui/code/hotswap_guard.py +144 -0
- meltygui/code/libcst_conversion.py +9724 -0
- meltygui/code/live_instrument.py +392 -0
- meltygui/code/live_view.py +2490 -0
- meltygui/code/melty_scan.py +2684 -0
- meltygui/code/new_codecs.py +1255 -0
- meltygui/code/new_converters.py +3017 -0
- meltygui/code/project_code.py +278 -0
- meltygui/code/source_context.py +63 -0
- meltygui/code/symbol_roster.py +1588 -0
- meltygui/code/syntax_check.py +34 -0
- meltygui/code/syntax_check_worker.py +114 -0
- meltygui/completion/__init__.py +0 -0
- meltygui/completion/fim.py +1232 -0
- meltygui/completion/fim_context.py +481 -0
- meltygui/completion/providers/__init__.py +0 -0
- meltygui/completion/providers/anthropic_oauth.py +446 -0
- meltygui/completion/providers/anthropic_requests.py +69 -0
- meltygui/completion/providers/claude.py +203 -0
- meltygui/completion/providers/claude_usage.py +499 -0
- meltygui/completion/providers/codex_accounts.py +180 -0
- meltygui/completion/providers/copilot.py +617 -0
- meltygui/completion/providers/oauth_popup.py +220 -0
- meltygui/completion/providers/ollama.py +320 -0
- meltygui/completion/providers/profiles.py +23 -0
- meltygui/core/README.md +88 -0
- meltygui/core/__init__.py +1 -0
- meltygui/core/automation/__init__.py +1 -0
- meltygui/core/automation/action_core.py +153 -0
- meltygui/core/automation/collection_action.py +45 -0
- meltygui/core/automation/mcp_eval.py +167 -0
- meltygui/core/automation/mcp_hotswap.py +107 -0
- meltygui/core/automation/mcp_query.py +552 -0
- meltygui/core/automation/mcp_server.py +657 -0
- meltygui/core/automation/orchestration_core.py +2636 -0
- meltygui/core/automation/query_core.py +124 -0
- meltygui/core/automation/search_core.py +26 -0
- meltygui/core/automation/selector_core.py +340 -0
- meltygui/core/automation/value_core.py +1752 -0
- meltygui/core/cache/__init__.py +1 -0
- meltygui/core/cache/cache_diagnostics.py +0 -0
- meltygui/core/cache/invalidation_decoration.py +153 -0
- meltygui/core/cache/invalidation_tracker.py +43 -0
- meltygui/core/cache/tile_cache.py +5968 -0
- meltygui/core/conversion/__init__.py +1 -0
- meltygui/core/conversion/bubbling.py +599 -0
- meltygui/core/conversion/cache_tree.py +188 -0
- meltygui/core/conversion/chain.py +113 -0
- meltygui/core/conversion/converter_register.py +145 -0
- meltygui/core/conversion/data_decoration.py +67 -0
- meltygui/core/conversion/dict_conversion.py +1815 -0
- meltygui/core/conversion/dict_conversion_util.py +177 -0
- meltygui/core/conversion/dynamic_obj.py +89 -0
- meltygui/core/conversion/graph_compare.py +183 -0
- meltygui/core/conversion/load_save_v2.py +1032 -0
- meltygui/core/conversion/missing_saved_class.py +39 -0
- meltygui/core/conversion/path_finder.py +606 -0
- meltygui/core/conversion/render_host.py +1083 -0
- meltygui/core/core_render.py +6537 -0
- meltygui/core/definition_hotswap.py +231 -0
- meltygui/core/diagnostics/__init__.py +1 -0
- meltygui/core/diagnostics/attribute_churn.py +38 -0
- meltygui/core/diagnostics/fps_counter.py +39 -0
- meltygui/core/diagnostics/gpu_frame_timer.py +103 -0
- meltygui/core/diagnostics/inspection_core.py +169 -0
- meltygui/core/diagnostics/monitor_core.py +105 -0
- meltygui/core/diagnostics/notifications.py +706 -0
- meltygui/core/diagnostics/perf_trace.py +281 -0
- meltygui/core/diagnostics/profile_decoration.py +88 -0
- meltygui/core/diagnostics/resize_trace.py +62 -0
- meltygui/core/diagnostics/screenshot_core.py +247 -0
- meltygui/core/diagnostics/session_status.py +98 -0
- meltygui/core/diagnostics/trace_core.py +445 -0
- meltygui/core/files/__init__.py +1 -0
- meltygui/core/files/file_core.py +208 -0
- meltygui/core/files/file_explorer_core.py +104 -0
- meltygui/core/files/file_tree_core.py +198 -0
- meltygui/core/files/file_watch_core.py +43 -0
- meltygui/core/files/import_graph_core.py +43 -0
- meltygui/core/files/metadata_core.py +51 -0
- meltygui/core/graphics/__init__.py +1 -0
- meltygui/core/graphics/cuda_context_core.py +166 -0
- meltygui/core/graphics/cuda_interop_core.py +136 -0
- meltygui/core/graphics/cuda_kernel_core.py +91 -0
- meltygui/core/graphics/framebuffer_recorder.py +337 -0
- meltygui/core/graphics/gl_state.py +658 -0
- meltygui/core/graphics/lut_core.py +52 -0
- meltygui/core/graphics/overlay_renderer.py +984 -0
- meltygui/core/graphics/scene_target.py +180 -0
- meltygui/core/graphics/screenshot.py +439 -0
- meltygui/core/graphics/shader_func.py +478 -0
- meltygui/core/graphics/tensor_core.py +45 -0
- meltygui/core/graphics/text_texture.py +329 -0
- meltygui/core/graphics/wayland_color.py +635 -0
- meltygui/core/input/__init__.py +1 -0
- meltygui/core/input/collision.py +165 -0
- meltygui/core/input/drag_drop_core.py +1525 -0
- meltygui/core/input/hypr_left_drag.py +323 -0
- meltygui/core/input/input_core.py +245 -0
- meltygui/core/input/input_handler.py +1101 -0
- meltygui/core/input/mouse_cursor.py +355 -0
- meltygui/core/input/pynput_backend.py +1054 -0
- meltygui/core/input/space_mouse.py +338 -0
- meltygui/core/input/touchpad_backend.py +393 -0
- meltygui/core/input/view_selection.py +177 -0
- meltygui/core/layout/__init__.py +1 -0
- meltygui/core/layout/column_core.py +2153 -0
- meltygui/core/layout/cursor_core.py +161 -0
- meltygui/core/layout/dropdown_core.py +278 -0
- meltygui/core/layout/edge_constraints.py +155 -0
- meltygui/core/layout/grid_core.py +117 -0
- meltygui/core/layout/header_core.py +23 -0
- meltygui/core/layout/header_runtime.py +67 -0
- meltygui/core/layout/layout_core.py +87 -0
- meltygui/core/layout/tile_manager_core.py +591 -0
- meltygui/core/melty.py +6726 -0
- meltygui/core/module_map.json +896 -0
- meltygui/core/module_names.py +19 -0
- meltygui/core/rendering/__init__.py +1 -0
- meltygui/core/rendering/core_decoration.py +431 -0
- meltygui/core/rendering/core_render_helpers.py +328 -0
- meltygui/core/rendering/func_metadata.py +398 -0
- meltygui/core/rendering/mode.py +818 -0
- meltygui/core/rendering/mode_defaults.py +41 -0
- meltygui/core/rendering/modes.py +136 -0
- meltygui/core/rendering/parameter_core.py +1665 -0
- meltygui/core/rendering/render_dispatch.py +1891 -0
- meltygui/core/rendering/render_funcs.py +273 -0
- meltygui/core/rendering/shaped.py +312 -0
- meltygui/core/rendering/window_decoration.py +25 -0
- meltygui/core/runtime/__init__.py +1 -0
- meltygui/core/runtime/app.py +735 -0
- meltygui/core/runtime/app_session.py +140 -0
- meltygui/core/runtime/background.py +564 -0
- meltygui/core/runtime/extensions.py +53 -0
- meltygui/core/runtime/gc_manager.py +1163 -0
- meltygui/core/runtime/lifecycle.py +21 -0
- meltygui/core/runtime/paths.py +27 -0
- meltygui/core/runtime/settings.py +14 -0
- meltygui/core/runtime/singleton.py +16 -0
- meltygui/core/runtime/thread_safe_bool.py +24 -0
- meltygui/core/runtime/thread_signal.py +30 -0
- meltygui/core/runtime/toggles.py +3115 -0
- meltygui/core/services/__init__.py +1 -0
- meltygui/core/services/account_core.py +10 -0
- meltygui/core/services/chat_core.py +19 -0
- meltygui/core/services/claude_terminal_core.py +346 -0
- meltygui/core/services/terminal_core.py +458 -0
- meltygui/core/services/terminal_runtime.py +78 -0
- meltygui/core/styling/__init__.py +1 -0
- meltygui/core/styling/color_core.py +46 -0
- meltygui/core/styling/fonts.py +639 -0
- meltygui/core/styling/global_style.py +338 -0
- meltygui/core/styling/style.py +198 -0
- meltygui/core/styling/style_core.py +522 -0
- meltygui/core/styling/warm_start.py +149 -0
- meltygui/core/windowing/__init__.py +1 -0
- meltygui/core/windowing/backends/PYIMGUI_LICENSE +28 -0
- meltygui/core/windowing/backends/__init__.py +1 -0
- meltygui/core/windowing/backends/imgui_renderer.py +138 -0
- meltygui/core/windowing/backends/native_wayland.py +850 -0
- meltygui/core/windowing/backends/protocols/xdg-decoration-unstable-v1.xml +156 -0
- meltygui/core/windowing/backends/protocols/xdg-shell.xml +1420 -0
- meltygui/core/windowing/backends/wayland_protocol.py +101 -0
- meltygui/core/windowing/dock_core.py +182 -0
- meltygui/core/windowing/frame_geometry.py +42 -0
- meltygui/core/windowing/geometry_feed.py +864 -0
- meltygui/core/windowing/glfw_utils.py +1343 -0
- meltygui/core/windowing/os_frame.py +1552 -0
- meltygui/core/windowing/surface.py +643 -0
- meltygui/core/windowing/titlebar.py +1560 -0
- meltygui/core/windowing/titlebar_buttons.py +281 -0
- meltygui/core/windowing/wayland_move.py +932 -0
- meltygui/core/windowing/window_api.py +62 -0
- meltygui/core/windowing/window_constants.py +339 -0
- meltygui/core/windowing/window_visibility.py +162 -0
- meltygui/debug/__init__.py +0 -0
- meltygui/debug/app_view_utils.py +9 -0
- meltygui/editor/__init__.py +0 -0
- meltygui/editor/bash_syntax.py +30 -0
- meltygui/editor/code_line_fast.py +152 -0
- meltygui/editor/diff.py +139 -0
- meltygui/editor/external_changes.py +159 -0
- meltygui/editor/file_header.py +41 -0
- meltygui/editor/live_usage.py +169 -0
- meltygui/editor/live_view_views.py +1803 -0
- meltygui/editor/pending_save.py +1351 -0
- meltygui/editor/roster_tints.py +547 -0
- meltygui/editor/source_preview.py +16 -0
- meltygui/editor/source_tools.py +10 -0
- meltygui/editor/source_ui.py +70 -0
- meltygui/editor/spell_check.py +77 -0
- meltygui/editor/text_editor.py +9076 -0
- meltygui/editor/usage_picker.py +538 -0
- meltygui/events/__init__.py +0 -0
- meltygui/events/example.py +118 -0
- meltygui/examples/__init__.py +0 -0
- meltygui/examples/columns_demo.py +33 -0
- meltygui/examples/columns_window_demo.py +60 -0
- meltygui/examples/context_menu_demo.py +24 -0
- meltygui/examples/context_menu_window_demo.py +49 -0
- meltygui/examples/gui_playground.py +127 -0
- meltygui/examples/live_view_playground.py +256 -0
- meltygui/examples/lora.py +43 -0
- meltygui/examples/lora_data.py +59 -0
- meltygui/examples/lora_policies.py +67 -0
- meltygui/examples/mode_demo.py +49 -0
- meltygui/examples/modifies_demo.py +119 -0
- meltygui/examples/scalar_policies.py +60 -0
- meltygui/examples/style_layouts.py +149 -0
- meltygui/examples/tile_manager_demo.py +74 -0
- meltygui/examples/tint_demo.py +160 -0
- meltygui/examples/tint_functions.py +56 -0
- meltygui/examples/trace_demo.py +88 -0
- meltygui/examples/two_windows.py +36 -0
- meltygui/files/__init__.py +0 -0
- meltygui/files/fast_file_explorer.py +439 -0
- meltygui/gnome_extension/lsd-window-geometry@latent-descent/extension.js +237 -0
- meltygui/gnome_extension/lsd-window-geometry@latent-descent/lsd-window-geometry@latent-descent.iml +9 -0
- meltygui/gnome_extension/lsd-window-geometry@latent-descent/metadata.json +7 -0
- meltygui/graphics/__init__.py +6 -0
- meltygui/graphics/base.py +85 -0
- meltygui/graphics/examples.py +507 -0
- meltygui/graphics/executor.py +520 -0
- meltygui/graphics/filter.py +667 -0
- meltygui/graphics/filter.pyi +856 -0
- meltygui/graphics/generate_stubs.py +22 -0
- meltygui/graphics/registry.py +203 -0
- meltygui/graphics/shader_compiler.py +155 -0
- meltygui/graphics/shaders.py +1302 -0
- meltygui/graphics/stub_generator.py +250 -0
- meltygui/graphics/texture_manager.py +170 -0
- meltygui/graphics/texture_min_max.py +295 -0
- meltygui/hdr_color.py +757 -0
- meltygui/image_load.py +308 -0
- meltygui/model/__init__.py +1 -0
- meltygui/model/account_model.py +142 -0
- meltygui/model/camera_model.py +159 -0
- meltygui/model/chat_model.py +86 -0
- meltygui/model/code_model.py +62 -0
- meltygui/model/code_proxy_model.py +876 -0
- meltygui/model/collection_model.py +41 -0
- meltygui/model/color_model.py +127 -0
- meltygui/model/cuda_tensor_model.py +36 -0
- meltygui/model/cuda_texture_model.py +149 -0
- meltygui/model/dropdown_model.py +137 -0
- meltygui/model/file_metadata_model.py +73 -0
- meltygui/model/file_model.py +289 -0
- meltygui/model/format_model.py +390 -0
- meltygui/model/graph_model.py +98 -0
- meltygui/model/icon_model.py +1024 -0
- meltygui/model/import_graph_model.py +468 -0
- meltygui/model/layout_model.py +15 -0
- meltygui/model/lut_model.py +266 -0
- meltygui/model/search_model.py +173 -0
- meltygui/model/tensor_model.py +402 -0
- meltygui/model/terminal_model.py +329 -0
- meltygui/model/texture_model.py +146 -0
- meltygui/model/tile_model.py +24 -0
- meltygui/model/trace_model.py +198 -0
- meltygui/model/trace_report_model.py +146 -0
- meltygui/models/__init__.py +0 -0
- meltygui/models/file_meta.py +613 -0
- meltygui/models/function_console.py +184 -0
- meltygui/models/orchestration.py +48 -0
- meltygui/pbr.py +1576 -0
- meltygui/png_unfilter.c +49 -0
- meltygui/resources/JetBrainsMono-Regular.ttf +0 -0
- meltygui/resources/THIRD_PARTY_NOTICES.md +21 -0
- meltygui/resources/dejavu/DejaVuSans-Bold.ttf +0 -0
- meltygui/resources/dejavu/DejaVuSans-ExtraLight.ttf +0 -0
- meltygui/resources/dejavu/DejaVuSans.ttf +0 -0
- meltygui/resources/dejavu/LICENSE.txt +78 -0
- meltygui/resources/fontawesome-LICENSE.txt +121 -0
- meltygui/resources/fontawesome-webfont.ttf +0 -0
- meltygui/resources/hdri/studio_small_09_1k.hdr +0 -0
- meltygui/resources/jetbrains-weights/JetBrainsMono-Bold.ttf +0 -0
- meltygui/resources/jetbrains-weights/JetBrainsMono-ExtraBold.ttf +0 -0
- meltygui/resources/jetbrains-weights/JetBrainsMono-ExtraLight.ttf +0 -0
- meltygui/resources/jetbrains-weights/JetBrainsMono-Light.ttf +0 -0
- meltygui/resources/jetbrains-weights/JetBrainsMono-Medium.ttf +0 -0
- meltygui/resources/jetbrains-weights/JetBrainsMono-SemiBold.ttf +0 -0
- meltygui/resources/jetbrains-weights/JetBrainsMono-Thin.ttf +0 -0
- meltygui/resources/jetbrains-weights/OFL.txt +93 -0
- meltygui/resources/jetbrains-weights/README.md +2 -0
- meltygui/state/__init__.py +0 -0
- meltygui/state/account_state.py +22 -0
- meltygui/state/animation_state.py +97 -0
- meltygui/state/annotation_state.py +22 -0
- meltygui/state/chat_state.py +36 -0
- meltygui/state/code_state.py +10 -0
- meltygui/state/core_enums.py +59 -0
- meltygui/state/core_markers.py +115 -0
- meltygui/state/core_undo.py +1075 -0
- meltygui/state/file_state.py +75 -0
- meltygui/state/graph_state.py +26 -0
- meltygui/state/inspection_state.py +47 -0
- meltygui/state/menu_state.py +10 -0
- meltygui/state/model_enums.py +11 -0
- meltygui/state/new_core_model.py +2394 -0
- meltygui/state/orchestration_state.py +14 -0
- meltygui/state/query_state.py +24 -0
- meltygui/state/tensor_state.py +10 -0
- meltygui/state/terminal_state.py +23 -0
- meltygui/state/trace_state.py +32 -0
- meltygui/state/voxel_state.py +12 -0
- meltygui/text_index.py +816 -0
- meltygui/utils/__init__.py +0 -0
- meltygui/utils/jump_to_code.py +344 -0
- meltygui/utils/pkl_inspect.py +90 -0
- meltygui/utils/render_utils.py +1419 -0
- meltygui/view/__init__.py +1 -0
- meltygui/view/account_view.py +524 -0
- meltygui/view/action_view.py +73 -0
- meltygui/view/chat_decoration_view.py +112 -0
- meltygui/view/chat_view.py +1703 -0
- meltygui/view/code_view.py +2677 -0
- meltygui/view/collection_view.py +1185 -0
- meltygui/view/color_view.py +824 -0
- meltygui/view/control_view.py +559 -0
- meltygui/view/decoration_view.py +439 -0
- meltygui/view/diagnostic_view.py +177 -0
- meltygui/view/dropdown_view.py +1082 -0
- meltygui/view/file_view.py +1599 -0
- meltygui/view/graph_cuda_view.py +105 -0
- meltygui/view/graph_view.py +882 -0
- meltygui/view/header_view.py +848 -0
- meltygui/view/input_view.py +238 -0
- meltygui/view/inspection_view.py +1783 -0
- meltygui/view/layout_view.py +596 -0
- meltygui/view/lut_view.py +45 -0
- meltygui/view/menu_view.py +212 -0
- meltygui/view/orchestration_view.py +658 -0
- meltygui/view/query_view.py +118 -0
- meltygui/view/search_view.py +342 -0
- meltygui/view/tab_view.py +258 -0
- meltygui/view/tensor_view.py +430 -0
- meltygui/view/terminal_view.py +355 -0
- meltygui/view/text_view.py +8031 -0
- meltygui/view/texture_view.py +480 -0
- meltygui/view/tile_view.py +38 -0
- meltygui/view/trace_view.py +923 -0
- meltygui/view/voxel_cuda_view.py +824 -0
- meltygui/view/voxel_view.py +1860 -0
- meltygui/view/window_view.py +111 -0
- meltygui-0.1.0.dist-info/METADATA +143 -0
- meltygui-0.1.0.dist-info/RECORD +372 -0
- meltygui-0.1.0.dist-info/WHEEL +4 -0
- meltygui-0.1.0.dist-info/licenses/LICENSE +202 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class ModeDefaults:
|
|
5
|
+
|
|
6
|
+
default_mode_from_type = {}
|
|
7
|
+
# (module name, class name) -> mode, for classes in heavy-weight modules (torch) that we
|
|
8
|
+
# don't want to import at startup. Resolved to default_mode_from_type once the module loads.
|
|
9
|
+
_pending = {}
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def set_default_mode(for_type, mode):
|
|
13
|
+
ModeDefaults.default_mode_from_type[for_type] = mode
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def set_default_mode_lazy(module, class_name, mode):
|
|
17
|
+
mod = sys.modules.get(module)
|
|
18
|
+
if mod is not None:
|
|
19
|
+
set_default_mode(getattr(mod, class_name), mode)
|
|
20
|
+
else:
|
|
21
|
+
ModeDefaults._pending[(module, class_name)] = mode
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _resolve_pending():
|
|
25
|
+
for (module, class_name), mode in list(ModeDefaults._pending.items()):
|
|
26
|
+
mod = sys.modules.get(module)
|
|
27
|
+
if mod is not None:
|
|
28
|
+
set_default_mode(getattr(mod, class_name), mode)
|
|
29
|
+
del ModeDefaults._pending[(module, class_name)]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def default_mode_for(for_type, default=None):
|
|
33
|
+
if ModeDefaults._pending:
|
|
34
|
+
_resolve_pending()
|
|
35
|
+
return ModeDefaults.default_mode_from_type.get(for_type, default)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def register_defaults():
|
|
39
|
+
from meltygui.core.rendering.modes import Modes
|
|
40
|
+
|
|
41
|
+
set_default_mode_lazy('torch', 'Tensor', Modes.FILE_TREE)
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"""Symbol access to Mode members without importing core.mode.
|
|
2
|
+
|
|
3
|
+
`Modes.WINDOW` hands back a deferred handle that resolves to the real Mode.WINDOW
|
|
4
|
+
on first USE — never at attribute access. So storing a mode in a decorator, e.g.
|
|
5
|
+
`@window(mode=Modes.WINDOW_AUTO_FIT)`, never imports core.mode and never trips the
|
|
6
|
+
mode <-> render_dispatch import cycle.
|
|
7
|
+
|
|
8
|
+
This module imports NOTHING at top level, so it can be imported literally
|
|
9
|
+
anywhere. The single import (core.mode) is deferred to handle resolution, by
|
|
10
|
+
which point core.mode is fully loaded.
|
|
11
|
+
|
|
12
|
+
The members are generated by CodeGenerator.update_modes().
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class _LazyMode:
|
|
17
|
+
"""Deferred, delegating stand-in for a Mode member.
|
|
18
|
+
|
|
19
|
+
Resolution (importing core.mode) happens on first USE, not on attribute
|
|
20
|
+
access — so referencing Modes.X in a decorator stores this handle without
|
|
21
|
+
importing anything. Once resolved it forwards equality, hashing, str, and
|
|
22
|
+
attribute/method access (.get_config_for, .name, .value, ...) to the real
|
|
23
|
+
member. Mode is used by value, never via isinstance, so this stands in for
|
|
24
|
+
the enum member transparently.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
__slots__ = ("_name", "_member")
|
|
28
|
+
|
|
29
|
+
def __init__(self, name):
|
|
30
|
+
self._name = name
|
|
31
|
+
self._member = None
|
|
32
|
+
|
|
33
|
+
def _resolve(self):
|
|
34
|
+
if self._member is None:
|
|
35
|
+
from meltygui.core.rendering.mode import Mode
|
|
36
|
+
self._member = Mode[self._name]
|
|
37
|
+
return self._member
|
|
38
|
+
|
|
39
|
+
@property
|
|
40
|
+
def __class__(self):
|
|
41
|
+
# Return the resolved Mode's class so `mode.__class__` (and
|
|
42
|
+
# isinstance(mode, Mode)) see the real enum class, not this stand-in.
|
|
43
|
+
# This forces resolution (the core.mode import), which is fine on USE -
|
|
44
|
+
# referencing Modes.X in a decorator otherwise just hands back the
|
|
45
|
+
# unresolved handle. type(handle) is unaffected and still returns
|
|
46
|
+
# _LazyMode, so copy/pickle dispatch (which uses type()) is unchanged.
|
|
47
|
+
return type(self._resolve())
|
|
48
|
+
|
|
49
|
+
def __getattr__(self, item):
|
|
50
|
+
# _name/_member are slots (found normally). Forward real attributes to
|
|
51
|
+
# the resolved member, but never dunders - copy/pickle probes
|
|
52
|
+
# (__deepcopy__, __reduce__, ...) must fall through to default handling
|
|
53
|
+
# rather than triggering resolution (and the core.mode import) early.
|
|
54
|
+
if item.startswith("__") and item.endswith("__"):
|
|
55
|
+
raise AttributeError(item)
|
|
56
|
+
return getattr(self._resolve(), item)
|
|
57
|
+
|
|
58
|
+
def __reduce__(self):
|
|
59
|
+
# Default pickling is broken here BY the lying __class__ property:
|
|
60
|
+
# object.__reduce_ex__ returns __newobj__(type(self), ...) but pickle's
|
|
61
|
+
# sanity check compares that against self.__class__ - the resolved
|
|
62
|
+
# Mode enum class - and raises "args[0] from __newobj__ args has the
|
|
63
|
+
# wrong class". Every parse holding a mode= reference was therefore
|
|
64
|
+
# unpicklable, which silently disabled the cst-dump cache for those
|
|
65
|
+
# files (a multi-second cold parse per session - voxel_view,
|
|
66
|
+
# new_converters, live_view_views, ...). Reduce BY NAME to a fresh
|
|
67
|
+
# unresolved handle; resolution happens on first use in the loading
|
|
68
|
+
# file's module world. Also unbreaks copy.deepcopy (same machinery).
|
|
69
|
+
return (_LazyMode, (self._name,))
|
|
70
|
+
|
|
71
|
+
def __eq__(self, other):
|
|
72
|
+
if isinstance(other, _LazyMode):
|
|
73
|
+
other = other._resolve()
|
|
74
|
+
return self._resolve() == other
|
|
75
|
+
|
|
76
|
+
def __hash__(self):
|
|
77
|
+
return hash(self._resolve())
|
|
78
|
+
|
|
79
|
+
def __str__(self):
|
|
80
|
+
return str(self._resolve())
|
|
81
|
+
|
|
82
|
+
def __repr__(self):
|
|
83
|
+
if self._member is not None:
|
|
84
|
+
return repr(self._member)
|
|
85
|
+
return f"_LazyMode({self._name!r})"
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
class _Modes:
|
|
89
|
+
"""`Modes.WINDOW` -> a deferred handle to Mode.WINDOW, no import required.
|
|
90
|
+
|
|
91
|
+
The members below are generated by CodeGenerator (one _LazyMode per Mode
|
|
92
|
+
member) so IDEs autocomplete Modes.<name>. __getattr__ is the fallback for
|
|
93
|
+
any member added since the last regeneration. Regenerate via
|
|
94
|
+
CodeGenerator.update_modes().
|
|
95
|
+
"""
|
|
96
|
+
CODE = _LazyMode("CODE")
|
|
97
|
+
CODE_INNER_TEXT = _LazyMode("CODE_INNER_TEXT")
|
|
98
|
+
CODE_INNER_UI = _LazyMode("CODE_INNER_UI")
|
|
99
|
+
CODE_PLAIN_TEXT = _LazyMode("CODE_PLAIN_TEXT")
|
|
100
|
+
CODE_UI = _LazyMode("CODE_UI")
|
|
101
|
+
DROPDOWN_WINDOW = _LazyMode("DROPDOWN_WINDOW")
|
|
102
|
+
FILE_META = _LazyMode("FILE_META")
|
|
103
|
+
FILE_TREE = _LazyMode("FILE_TREE")
|
|
104
|
+
FLOATING = _LazyMode("FLOATING")
|
|
105
|
+
MODE_WINDOW = _LazyMode("MODE_WINDOW")
|
|
106
|
+
RUNNING = _LazyMode("RUNNING")
|
|
107
|
+
SORT = _LazyMode("SORT")
|
|
108
|
+
TEXT = _LazyMode("TEXT")
|
|
109
|
+
WINDOW = _LazyMode("WINDOW")
|
|
110
|
+
WINDOW_AUTO_FIT = _LazyMode("WINDOW_AUTO_FIT")
|
|
111
|
+
WINDOW_RESIZABLE = _LazyMode("WINDOW_RESIZABLE")
|
|
112
|
+
WINDOW_CLEAN = _LazyMode("WINDOW_CLEAN")
|
|
113
|
+
WINDOW_MANAGER_SORTED = _LazyMode("WINDOW_MANAGER_SORTED")
|
|
114
|
+
WINDOW_NO_HEADER = _LazyMode("WINDOW_NO_HEADER")
|
|
115
|
+
code_plain_text_auto_load = _LazyMode("code_plain_text_auto_load")
|
|
116
|
+
code_plain_text_params = _LazyMode("code_plain_text_params")
|
|
117
|
+
code_ui_auto_load = _LazyMode("code_ui_auto_load")
|
|
118
|
+
code_ui_params = _LazyMode("code_ui_params")
|
|
119
|
+
draw_text_funcs = _LazyMode("draw_text_funcs")
|
|
120
|
+
|
|
121
|
+
def __getattr__(self, name):
|
|
122
|
+
# Dunders must NOT fabricate a handle. No Mode member is a dunder, and a
|
|
123
|
+
# _LazyMode("__wrapped__") detonates the moment anything probes its
|
|
124
|
+
# __class__ (-> Mode["__wrapped__"] -> KeyError) - which is exactly what
|
|
125
|
+
# inspect.signature(Modes) does (it probes __wrapped__) when the symbol
|
|
126
|
+
# index walks this object. Mirror _LazyMode.__getattr__'s own guard so
|
|
127
|
+
# copy/pickle/unwrap probes fall through to normal AttributeError.
|
|
128
|
+
if name.startswith("__") and name.endswith("__"):
|
|
129
|
+
raise AttributeError(name)
|
|
130
|
+
return _LazyMode(name)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
# Reference Mode members by symbol without importing core.mode:
|
|
134
|
+
# from meltygui.core.rendering.modes import Modes
|
|
135
|
+
# @window(mode=Modes.WINDOW_AUTO_FIT)
|
|
136
|
+
Modes = _Modes()
|