pytron-kit 0.3.12__py3-none-macosx_11_0_universal2.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.
- pytron/__init__.py +112 -0
- pytron/application.py +562 -0
- pytron/apputils/__init__.py +0 -0
- pytron/apputils/chrome_ipc.py +203 -0
- pytron/apputils/codegen.py +261 -0
- pytron/apputils/config.py +303 -0
- pytron/apputils/deadmansswitch.py +47 -0
- pytron/apputils/extras.py +76 -0
- pytron/apputils/native.py +148 -0
- pytron/apputils/shell.py +73 -0
- pytron/apputils/windows.py +286 -0
- pytron/cli.py +384 -0
- pytron/commands/__init__.py +0 -0
- pytron/commands/android.py +28 -0
- pytron/commands/build.py +26 -0
- pytron/commands/doctor.py +221 -0
- pytron/commands/engine.py +23 -0
- pytron/commands/frontend.py +60 -0
- pytron/commands/harvest.py +112 -0
- pytron/commands/helpers.py +239 -0
- pytron/commands/info.py +50 -0
- pytron/commands/init.py +521 -0
- pytron/commands/install.py +294 -0
- pytron/commands/login.py +130 -0
- pytron/commands/package.py +228 -0
- pytron/commands/plugin.py +442 -0
- pytron/commands/run.py +312 -0
- pytron/commands/scan.py +210 -0
- pytron/commands/show.py +23 -0
- pytron/commands/uninstall.py +150 -0
- pytron/commands/utils.py +42 -0
- pytron/commands/workflow.py +95 -0
- pytron/console.py +133 -0
- pytron/core.py +18 -0
- pytron/dependencies/WebView2Loader.dll +0 -0
- pytron/dependencies/__init__.py +1 -0
- pytron/dependencies/pytron_native.so +0 -0
- pytron/engines/chrome/adapter.py +445 -0
- pytron/engines/chrome/engine.py +576 -0
- pytron/engines/chrome/forge.py +147 -0
- pytron/engines/chrome/shell/package.json +8 -0
- pytron/engines/chrome/shell/preload.js +12 -0
- pytron/engines/chrome/shell/shell.js +534 -0
- pytron/exceptions.py +36 -0
- pytron/inspector.py +201 -0
- pytron/inspector_ui.py +512 -0
- pytron/installer/Installation.nsi +236 -0
- pytron/installer/header.bmp +0 -0
- pytron/installer/pytron.ico +0 -0
- pytron/installer/sidebar.bmp +0 -0
- pytron/llms.md +98 -0
- pytron/manifests/README.md +29 -0
- pytron/manifests/windows-utf8.manifest +44 -0
- pytron/menu.py +128 -0
- pytron/nsis-setup.exe +0 -0
- pytron/pack/__init__.py +0 -0
- pytron/pack/assets.py +131 -0
- pytron/pack/compilers.py +289 -0
- pytron/pack/crystal.py +297 -0
- pytron/pack/graph.py +377 -0
- pytron/pack/inference.py +157 -0
- pytron/pack/installers.py +402 -0
- pytron/pack/introspect.py +357 -0
- pytron/pack/metadata.py +213 -0
- pytron/pack/modules.py +618 -0
- pytron/pack/nuitka.py +108 -0
- pytron/pack/pipeline.py +107 -0
- pytron/pack/pyinstaller.py +176 -0
- pytron/pack/rust_engine.py +273 -0
- pytron/pack/secure.py +309 -0
- pytron/pack/secure_loader/bin/pytron_rust_bootloader +0 -0
- pytron/pack/secure_loader/icon.ico +0 -0
- pytron/pack/utils.py +110 -0
- pytron/pack/virtual_root.py +124 -0
- pytron/platforms/__init__.py +0 -0
- pytron/platforms/android/__init__.py +3 -0
- pytron/platforms/android/android.py +103 -0
- pytron/platforms/android/builder.py +736 -0
- pytron/platforms/android/ops/build.py +79 -0
- pytron/platforms/android/ops/init.py +63 -0
- pytron/platforms/android/ops/run.py +79 -0
- pytron/platforms/android/ops/sync.py +770 -0
- pytron/platforms/android/ops/utils.py +8 -0
- pytron/platforms/android/shell/README.md +30 -0
- pytron/platforms/android/shell/app/build.gradle +64 -0
- pytron/platforms/android/shell/app/src/main/AndroidManifest.xml +29 -0
- pytron/platforms/android/shell/app/src/main/assets/python/main.py +86 -0
- pytron/platforms/android/shell/app/src/main/assets/python/python314.zip +0 -0
- pytron/platforms/android/shell/app/src/main/cpp/CMakeLists.txt +25 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/Python.h +155 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/abstract.h +915 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/audit.h +30 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/bltinmodule.h +14 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/boolobject.h +54 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/bytearrayobject.h +44 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/bytesobject.h +66 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/ceval.h +145 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/codecs.h +176 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/compile.h +22 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/complexobject.h +30 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/abstract.h +104 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/audit.h +8 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/bytearrayobject.h +38 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/bytesobject.h +42 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/cellobject.h +50 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/ceval.h +43 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/classobject.h +71 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/code.h +340 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/compile.h +50 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/complexobject.h +33 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/context.h +107 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/critical_section.h +154 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/descrobject.h +62 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/dictobject.h +105 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/fileobject.h +16 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/fileutils.h +16 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/floatobject.h +27 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/frameobject.h +35 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/funcobject.h +185 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/genobject.h +56 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/import.h +30 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/initconfig.h +334 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/listobject.h +53 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/lock.h +74 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/longintrepr.h +184 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/longobject.h +89 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/memoryobject.h +50 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/methodobject.h +66 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/modsupport.h +26 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/monitoring.h +269 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/object.h +493 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/objimpl.h +104 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/odictobject.h +43 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/picklebufobject.h +31 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pthread_stubs.h +105 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyatomic.h +614 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyatomic_gcc.h +615 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyatomic_msc.h +1197 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyatomic_std.h +1112 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyctype.h +39 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pydebug.h +38 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyerrors.h +132 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyfpe.h +15 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyframe.h +45 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyhash.h +54 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pylifecycle.h +89 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pymem.h +84 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pystate.h +275 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pystats.h +194 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pythonrun.h +96 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pythread.h +43 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pytime.h +27 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/setobject.h +71 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/traceback.h +13 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/tracemalloc.h +32 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/tupleobject.h +40 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/unicodeobject.h +773 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/warnings.h +20 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/cpython/weakrefobject.h +66 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/critical_section.h +16 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/datetime.h +267 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/descrobject.h +100 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/dictobject.h +108 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/dynamic_annotations.h +499 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/enumobject.h +17 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/errcode.h +45 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/exports.h +105 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/fileobject.h +41 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/fileutils.h +62 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/floatobject.h +54 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/frameobject.h +20 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/genericaliasobject.h +14 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/import.h +103 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc/atomic.h +392 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc/internal.h +969 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc/prim.h +329 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc/track.h +147 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc/types.h +721 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc.h +565 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_abstract.h +61 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_asdl.h +112 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_ast.h +945 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_ast_state.h +271 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_atexit.h +31 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_audit.h +35 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_backoff.h +133 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_bitutils.h +186 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_blocks_output_buffer.h +321 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_brc.h +73 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_bytes_methods.h +82 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_bytesobject.h +149 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_c_array.h +39 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_call.h +206 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_capsule.h +17 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_cell.h +75 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_ceval.h +390 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_ceval_state.h +48 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_code.h +671 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_codecs.h +76 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_compile.h +230 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_complexobject.h +34 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_condvar.h +93 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_context.h +59 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_critical_section.h +237 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_crossinterp.h +406 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_crossinterp_data_registry.h +41 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_debug_offsets.h +379 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_descrobject.h +28 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_dict.h +410 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_dict_state.h +28 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_dtoa.h +40 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_emscripten_signal.h +30 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_emscripten_trampoline.h +70 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_exceptions.h +40 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_faulthandler.h +100 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_fileutils.h +320 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_fileutils_windows.h +98 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_floatobject.h +49 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_flowgraph.h +47 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_format.h +27 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_frame.h +61 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_freelist.h +111 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_freelist_state.h +70 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_function.h +53 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_gc.h +378 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_genobject.h +43 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_getopt.h +22 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_gil.h +66 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_global_objects.h +34 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_global_objects_fini_generated.h +1592 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_global_strings.h +854 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_hamt.h +113 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_hashtable.h +150 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_import.h +141 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_importdl.h +139 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_index_pool.h +36 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_initconfig.h +197 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_instruction_sequence.h +83 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_instruments.h +127 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_interp.h +109 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_interp_structs.h +977 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_interpframe.h +401 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_interpframe_structs.h +95 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_interpolation.h +26 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_intrinsics.h +51 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_jit.h +29 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_list.h +81 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_llist.h +106 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_lock.h +236 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_long.h +319 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_magic_number.h +305 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_memoryobject.h +20 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_mimalloc.h +69 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_modsupport.h +99 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_moduleobject.h +62 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_namespace.h +21 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_object.h +1029 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_object_alloc.h +71 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_object_deferred.h +32 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_object_stack.h +95 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_object_state.h +49 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_obmalloc.h +702 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_obmalloc_init.h +66 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_opcode_metadata.h +2117 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_opcode_utils.h +90 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_optimizer.h +318 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_parking_lot.h +97 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_parser.h +78 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pathconfig.h +26 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pyarena.h +68 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pyatomic_ft_wrappers.h +174 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pybuffer.h +21 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pyerrors.h +213 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pyhash.h +91 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pylifecycle.h +136 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pymath.h +205 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pymem.h +145 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pymem_init.h +103 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pystate.h +339 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pystats.h +21 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pythonrun.h +68 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pythread.h +172 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_qsbr.h +172 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_range.h +21 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_runtime.h +63 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_runtime_init.h +239 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_runtime_init_generated.h +1589 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_runtime_structs.h +310 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_semaphore.h +67 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_setobject.h +41 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_signal.h +108 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_sliceobject.h +20 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_stackref.h +791 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_stats.h +97 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_strhex.h +39 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_structs.h +88 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_structseq.h +40 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_symtable.h +201 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_sysmodule.h +32 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_template.h +26 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_time.h +334 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_token.h +110 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_traceback.h +111 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_tracemalloc.h +164 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_tstate.h +88 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_tuple.h +75 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_typedefs.h +18 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_typeobject.h +155 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_typevarobject.h +28 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_ucnhash.h +36 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_unicodeobject.h +308 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_unicodeobject_generated.h +3132 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_unionobject.h +26 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_uniqueid.h +57 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_uop_ids.h +335 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_uop_metadata.h +1204 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_warnings.h +21 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_weakref.h +133 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/intrcheck.h +23 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/iterobject.h +24 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/listobject.h +55 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/lock.h +16 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/longobject.h +178 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/marshal.h +31 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/memoryobject.h +34 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/methodobject.h +146 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/modsupport.h +146 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/moduleobject.h +122 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/monitoring.h +18 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/object.h +828 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/objimpl.h +211 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/opcode.h +43 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/opcode_ids.h +259 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/osdefs.h +57 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/osmodule.h +17 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/patchlevel.h +49 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/py_curses.h +117 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pyatomic.h +16 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pybuffer.h +145 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pycapsule.h +58 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pyconfig.h +2088 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pydtrace.h +59 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pyerrors.h +335 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pyexpat.h +62 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pyframe.h +26 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pyhash.h +59 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pylifecycle.h +80 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pymacconfig.h +91 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pymacro.h +243 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pymath.h +65 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pymem.h +110 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pyport.h +710 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pystate.h +132 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pystats.h +28 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pystrcmp.h +23 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pystrtod.h +37 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pythonrun.h +42 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pythread.h +131 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/pytypedefs.h +30 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/rangeobject.h +27 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/refcount.h +555 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/setobject.h +49 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/sliceobject.h +69 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/structmember.h +56 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/structseq.h +46 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/sysmodule.h +27 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/traceback.h +26 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/tupleobject.h +46 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/typeslots.h +96 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/unicodeobject.h +1029 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/warnings.h +45 -0
- pytron/platforms/android/shell/app/src/main/cpp/include/weakrefobject.h +46 -0
- pytron/platforms/android/shell/app/src/main/cpp/pytron_bridge.cpp +224 -0
- pytron/platforms/android/shell/app/src/main/java/com/pytron/shell/MainActivity.kt +208 -0
- pytron/platforms/android/shell/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- pytron/platforms/android/shell/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- pytron/platforms/android/shell/build.gradle +11 -0
- pytron/platforms/android/shell/gradle/wrapper/gradle-wrapper.jar +0 -0
- pytron/platforms/android/shell/gradle/wrapper/gradle-wrapper.properties +5 -0
- pytron/platforms/android/shell/gradle.properties +2 -0
- pytron/platforms/android/shell/gradlew.bat +85 -0
- pytron/platforms/android/shell/settings.gradle +16 -0
- pytron/platforms/darwin.py +82 -0
- pytron/platforms/darwin_ops/libs.py +31 -0
- pytron/platforms/darwin_ops/system.py +182 -0
- pytron/platforms/darwin_ops/utils.py +85 -0
- pytron/platforms/darwin_ops/webview.py +5 -0
- pytron/platforms/darwin_ops/window.py +102 -0
- pytron/platforms/interface.py +152 -0
- pytron/platforms/linux.py +82 -0
- pytron/platforms/linux_ops/libs.py +49 -0
- pytron/platforms/linux_ops/system.py +316 -0
- pytron/platforms/linux_ops/utils.py +19 -0
- pytron/platforms/linux_ops/webview.py +5 -0
- pytron/platforms/linux_ops/window.py +115 -0
- pytron/platforms/windows.py +136 -0
- pytron/platforms/windows_ops/__init__.py +0 -0
- pytron/platforms/windows_ops/constants.py +126 -0
- pytron/platforms/windows_ops/system.py +518 -0
- pytron/platforms/windows_ops/utils.py +3 -0
- pytron/platforms/windows_ops/webview.py +5 -0
- pytron/platforms/windows_ops/window.py +361 -0
- pytron/plugin.py +467 -0
- pytron/rcedit-x64.exe +0 -0
- pytron/router.py +146 -0
- pytron/serializer.py +240 -0
- pytron/shortcuts.py +279 -0
- pytron/state.py +76 -0
- pytron/tray.py +399 -0
- pytron/updater.py +181 -0
- pytron/utf8_hook.py +112 -0
- pytron/utils.py +44 -0
- pytron/webview.py +722 -0
- pytron_kit-0.3.12.dist-info/METADATA +131 -0
- pytron_kit-0.3.12.dist-info/RECORD +419 -0
- pytron_kit-0.3.12.dist-info/WHEEL +5 -0
- pytron_kit-0.3.12.dist-info/entry_points.txt +2 -0
- pytron_kit-0.3.12.dist-info/licenses/LICENSE +201 -0
- pytron_kit-0.3.12.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
; Pytron NSIS Installer Script (polished)
|
|
2
|
+
; - Expects BUILD_DIR to be defined when invoking makensis
|
|
3
|
+
; - Uses assets found in the same directory as this script
|
|
4
|
+
|
|
5
|
+
!include "MUI2.nsh"
|
|
6
|
+
!include "LogicLib.nsh"
|
|
7
|
+
!include "WinMessages.nsh"
|
|
8
|
+
|
|
9
|
+
; ---------------------
|
|
10
|
+
; ---------------------
|
|
11
|
+
; Configurable values
|
|
12
|
+
; ---------------------
|
|
13
|
+
!ifndef NAME
|
|
14
|
+
!define NAME "Pytron"
|
|
15
|
+
!endif
|
|
16
|
+
!ifndef VERSION
|
|
17
|
+
!define VERSION "1.0"
|
|
18
|
+
!endif
|
|
19
|
+
!ifndef COMPANY
|
|
20
|
+
!define COMPANY "Pytron User"
|
|
21
|
+
!endif
|
|
22
|
+
!ifndef DESCRIPTION
|
|
23
|
+
!define DESCRIPTION "${NAME} Installer"
|
|
24
|
+
!endif
|
|
25
|
+
!ifndef COPYRIGHT
|
|
26
|
+
!define COPYRIGHT "Copyright © 2025 ${COMPANY}"
|
|
27
|
+
!endif
|
|
28
|
+
!ifndef BUILD_DIR
|
|
29
|
+
!error "BUILD_DIR must be defined"
|
|
30
|
+
!endif
|
|
31
|
+
!ifndef MAIN_EXE_NAME
|
|
32
|
+
!define MAIN_EXE_NAME "Pytron.exe"
|
|
33
|
+
!endif
|
|
34
|
+
!ifndef OUT_DIR
|
|
35
|
+
!define OUT_DIR "$EXEDIR"
|
|
36
|
+
!endif
|
|
37
|
+
|
|
38
|
+
Name "${NAME}"
|
|
39
|
+
OutFile "${OUT_DIR}\${NAME}_Installer_${VERSION}.exe"
|
|
40
|
+
InstallDir "$PROGRAMFILES\\${NAME}"
|
|
41
|
+
InstallDirRegKey HKLM "Software\${NAME}" "Install_Dir"
|
|
42
|
+
; Explicitly set the installer icon if defined
|
|
43
|
+
!ifdef MUI_ICON
|
|
44
|
+
Icon "${MUI_ICON}"
|
|
45
|
+
!endif
|
|
46
|
+
!ifdef MUI_UNICON
|
|
47
|
+
UninstallIcon "${MUI_UNICON}"
|
|
48
|
+
!endif
|
|
49
|
+
RequestExecutionLevel admin
|
|
50
|
+
|
|
51
|
+
; Version Info for the Installer EXE
|
|
52
|
+
VIProductVersion "${VERSION}.0.0"
|
|
53
|
+
VIAddVersionKey "ProductName" "${NAME}"
|
|
54
|
+
VIAddVersionKey "CompanyName" "${COMPANY}"
|
|
55
|
+
VIAddVersionKey "LegalCopyright" "${COPYRIGHT}"
|
|
56
|
+
VIAddVersionKey "FileDescription" "${DESCRIPTION}"
|
|
57
|
+
VIAddVersionKey "FileVersion" "${VERSION}"
|
|
58
|
+
VIAddVersionKey "ProductVersion" "${VERSION}"
|
|
59
|
+
|
|
60
|
+
; Use ZLIB compression for better AV compatibility (LZMA often flagged)
|
|
61
|
+
SetCompressor /SOLID zlib
|
|
62
|
+
; SetCompressorDictSize 32 ; Not applicable for zlib usually, or default is fine
|
|
63
|
+
|
|
64
|
+
; Welcome/Finish Page Image (Left side)
|
|
65
|
+
!define MUI_WELCOMEFINISHPAGE_BITMAP "sidebar.bmp"
|
|
66
|
+
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "sidebar.bmp"
|
|
67
|
+
|
|
68
|
+
; Finish Page options
|
|
69
|
+
!define MUI_FINISHPAGE_RUN "$INSTDIR\${MAIN_EXE_NAME}"
|
|
70
|
+
!define MUI_FINISHPAGE_RUN_TEXT "Run ${NAME}"
|
|
71
|
+
!define MUI_FINISHPAGE_LINK "Built with Pytron"
|
|
72
|
+
!define MUI_FINISHPAGE_LINK_LOCATION "https://github.com/Ghua8088/pytron"
|
|
73
|
+
|
|
74
|
+
; ---------------------
|
|
75
|
+
; Detect Existing Install
|
|
76
|
+
; ---------------------
|
|
77
|
+
Var IS_UPDATE
|
|
78
|
+
|
|
79
|
+
Function .onInit
|
|
80
|
+
ReadRegStr $R0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "UninstallString"
|
|
81
|
+
${If} $R0 != ""
|
|
82
|
+
StrCpy $IS_UPDATE "1"
|
|
83
|
+
ReadRegStr $INSTDIR HKLM "Software\${NAME}" "Install_Dir"
|
|
84
|
+
|
|
85
|
+
; Check if the application is running
|
|
86
|
+
check_running:
|
|
87
|
+
ClearErrors
|
|
88
|
+
FileOpen $0 "$INSTDIR\${MAIN_EXE_NAME}" "a"
|
|
89
|
+
FileClose $0
|
|
90
|
+
IfErrors 0 not_running
|
|
91
|
+
|
|
92
|
+
MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "${NAME} is still running. Please close it before updating." IDRETRY check_running
|
|
93
|
+
Quit
|
|
94
|
+
${Else}
|
|
95
|
+
StrCpy $IS_UPDATE "0"
|
|
96
|
+
${EndIf}
|
|
97
|
+
not_running:
|
|
98
|
+
FunctionEnd
|
|
99
|
+
|
|
100
|
+
; ---------------------
|
|
101
|
+
; Pages
|
|
102
|
+
; ---------------------
|
|
103
|
+
!define MUI_PAGE_CUSTOMFUNCTION_SHOW WelcomeShow
|
|
104
|
+
!insertmacro MUI_PAGE_WELCOME
|
|
105
|
+
|
|
106
|
+
Function WelcomeShow
|
|
107
|
+
${If} $IS_UPDATE == "1"
|
|
108
|
+
; MUI2 Welcome/Finish pages are special child dialogs (#32770)
|
|
109
|
+
FindWindow $1 "#32770" "" $HWNDPARENT
|
|
110
|
+
; 1000 is the title control, 1001 is the text control
|
|
111
|
+
GetDlgItem $0 $1 1000
|
|
112
|
+
SendMessage $0 ${WM_SETTEXT} 0 "STR:Welcome to the ${NAME} Update/Repair Wizard"
|
|
113
|
+
GetDlgItem $0 $1 1001
|
|
114
|
+
SendMessage $0 ${WM_SETTEXT} 0 "STR:This wizard will guide you through updating or fixing your existing installation of ${NAME}.$\r$\n$\r$\nClick Next to continue."
|
|
115
|
+
${EndIf}
|
|
116
|
+
FunctionEnd
|
|
117
|
+
|
|
118
|
+
; !insertmacro MUI_PAGE_LICENSE "${BUILD_DIR}\\LICENSE.txt" ; Uncomment if you have a license
|
|
119
|
+
!insertmacro MUI_PAGE_DIRECTORY
|
|
120
|
+
!insertmacro MUI_PAGE_INSTFILES
|
|
121
|
+
|
|
122
|
+
!define MUI_PAGE_CUSTOMFUNCTION_SHOW FinishShow
|
|
123
|
+
!insertmacro MUI_PAGE_FINISH
|
|
124
|
+
|
|
125
|
+
Function FinishShow
|
|
126
|
+
${If} $IS_UPDATE == "1"
|
|
127
|
+
FindWindow $1 "#32770" "" $HWNDPARENT
|
|
128
|
+
GetDlgItem $0 $1 1000
|
|
129
|
+
SendMessage $0 ${WM_SETTEXT} 0 "STR:Update/Repair Complete"
|
|
130
|
+
${EndIf}
|
|
131
|
+
FunctionEnd
|
|
132
|
+
|
|
133
|
+
!insertmacro MUI_UNPAGE_WELCOME
|
|
134
|
+
; Custom uninstaller page for data deletion
|
|
135
|
+
Var DeleteAppDataCheckbox
|
|
136
|
+
Var DELETE_APPA_DATA
|
|
137
|
+
UninstPage custom un.ConfirmDataPage un.ConfirmDataPageLeave
|
|
138
|
+
!insertmacro MUI_UNPAGE_CONFIRM
|
|
139
|
+
!insertmacro MUI_UNPAGE_INSTFILES
|
|
140
|
+
!insertmacro MUI_UNPAGE_FINISH
|
|
141
|
+
|
|
142
|
+
!include "nsDialogs.nsh"
|
|
143
|
+
|
|
144
|
+
Function un.ConfirmDataPage
|
|
145
|
+
nsDialogs::Create 1018
|
|
146
|
+
Pop $0
|
|
147
|
+
${If} $0 == error
|
|
148
|
+
Abort
|
|
149
|
+
${EndIf}
|
|
150
|
+
|
|
151
|
+
${NSD_CreateLabel} 0 0 100% 24u "Uninstall ${NAME}"
|
|
152
|
+
${NSD_CreateLabel} 0 30u 100% 24u "Do you want to delete your application data (settings, cache, etc)?$\r$\nThis cannot be undone."
|
|
153
|
+
|
|
154
|
+
${NSD_CreateCheckbox} 0 60u 100% 10u "Delete application data ($LOCALAPPDATA\${NAME})"
|
|
155
|
+
Pop $DeleteAppDataCheckbox
|
|
156
|
+
|
|
157
|
+
nsDialogs::Show
|
|
158
|
+
FunctionEnd
|
|
159
|
+
|
|
160
|
+
Function un.ConfirmDataPageLeave
|
|
161
|
+
${NSD_GetState} $DeleteAppDataCheckbox $0
|
|
162
|
+
StrCpy $DELETE_APPA_DATA $0
|
|
163
|
+
FunctionEnd
|
|
164
|
+
|
|
165
|
+
!insertmacro MUI_LANGUAGE "English"
|
|
166
|
+
|
|
167
|
+
; ---------------------
|
|
168
|
+
; Uninstaller Initialization
|
|
169
|
+
; ---------------------
|
|
170
|
+
Function un.onInit
|
|
171
|
+
; Check if the application is running by trying to open the EXE for writing
|
|
172
|
+
un.check_running:
|
|
173
|
+
ClearErrors
|
|
174
|
+
FileOpen $0 "$INSTDIR\${MAIN_EXE_NAME}" "a"
|
|
175
|
+
FileClose $0
|
|
176
|
+
IfErrors 0 un.not_running
|
|
177
|
+
|
|
178
|
+
MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "${NAME} is still running. Please close it before uninstalling." IDRETRY un.check_running
|
|
179
|
+
Quit
|
|
180
|
+
|
|
181
|
+
un.not_running:
|
|
182
|
+
FunctionEnd
|
|
183
|
+
|
|
184
|
+
; ---------------------
|
|
185
|
+
; Installation section
|
|
186
|
+
; ---------------------
|
|
187
|
+
Section "Install"
|
|
188
|
+
; Ensure the install directory exists and copy all built files
|
|
189
|
+
SetOutPath "$INSTDIR"
|
|
190
|
+
SetOverwrite on
|
|
191
|
+
File /r "${BUILD_DIR}\*.*"
|
|
192
|
+
|
|
193
|
+
; Write useful uninstall registry entries
|
|
194
|
+
WriteRegStr HKLM "Software\${NAME}" "Install_Dir" "$INSTDIR"
|
|
195
|
+
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "DisplayName" "${NAME}"
|
|
196
|
+
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "DisplayVersion" "${VERSION}"
|
|
197
|
+
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "Publisher" "${COMPANY}"
|
|
198
|
+
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "InstallLocation" "$INSTDIR"
|
|
199
|
+
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "UninstallString" "$INSTDIR\\uninstall.exe"
|
|
200
|
+
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}" "DisplayIcon" "$INSTDIR\${MAIN_EXE_NAME}"
|
|
201
|
+
|
|
202
|
+
WriteUninstaller "$INSTDIR\\uninstall.exe"
|
|
203
|
+
|
|
204
|
+
; Shortcuts
|
|
205
|
+
CreateDirectory "$SMPROGRAMS\${NAME}"
|
|
206
|
+
CreateShortCut "$SMPROGRAMS\${NAME}\${NAME}.lnk" "$INSTDIR\${MAIN_EXE_NAME}" "" "$INSTDIR\${MAIN_EXE_NAME}" 0
|
|
207
|
+
CreateShortCut "$DESKTOP\${NAME}.lnk" "$INSTDIR\${MAIN_EXE_NAME}" "" "$INSTDIR\${MAIN_EXE_NAME}" 0
|
|
208
|
+
SectionEnd
|
|
209
|
+
|
|
210
|
+
; ---------------------
|
|
211
|
+
; Uninstaller
|
|
212
|
+
; ---------------------
|
|
213
|
+
Section "Uninstall"
|
|
214
|
+
; Avoid locking the installation directory
|
|
215
|
+
SetOutPath "$TEMP"
|
|
216
|
+
|
|
217
|
+
; Remove shortcuts first
|
|
218
|
+
Delete "$DESKTOP\${NAME}.lnk"
|
|
219
|
+
Delete "$SMPROGRAMS\${NAME}\${NAME}.lnk"
|
|
220
|
+
RMDir "$SMPROGRAMS\${NAME}"
|
|
221
|
+
|
|
222
|
+
; Remove files and install directory
|
|
223
|
+
RMDir /r "$INSTDIR"
|
|
224
|
+
|
|
225
|
+
; Delete AppData if requested
|
|
226
|
+
${If} $DELETE_APPA_DATA == "1"
|
|
227
|
+
DetailPrint "Deleting application data..."
|
|
228
|
+
RMDir /r "$LOCALAPPDATA\${NAME}"
|
|
229
|
+
${EndIf}
|
|
230
|
+
|
|
231
|
+
; Clean up registry
|
|
232
|
+
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${NAME}"
|
|
233
|
+
DeleteRegKey HKLM "Software\\${NAME}"
|
|
234
|
+
SectionEnd
|
|
235
|
+
|
|
236
|
+
; EOF
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
pytron/llms.md
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Pytron AI Guide
|
|
2
|
+
|
|
3
|
+
This guide is intended for AI agents (LLMs) to understand how to interact with, develop, and extend the Pytron framework.
|
|
4
|
+
|
|
5
|
+
## 🚀 Overview
|
|
6
|
+
|
|
7
|
+
Pytron is an Electron-like framework for Python that allows developers to build desktop applications using Python for the backend and modern Web technologies (React, Vue, Vite, etc.) for the frontend.
|
|
8
|
+
|
|
9
|
+
### Core Architecture
|
|
10
|
+
- **Pytron Kit (`pytron`)**: The Python backend that manages application windows, handles IPC, and synchronizes state.
|
|
11
|
+
- **Pytron Client (`pytron-client`)**: A JavaScript/TypeScript library that provides an RPC bridge and state synchronization in the frontend.
|
|
12
|
+
- **Pytron UI (`pytron-ui`)**: A React-based UI component library designed for building native-feeling desktop applications.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 🛠 Backend Development (Python)
|
|
17
|
+
|
|
18
|
+
### 1. The `App` Instance
|
|
19
|
+
The entry point of any Pytron application is the `App` class.
|
|
20
|
+
```python
|
|
21
|
+
from pytron import App
|
|
22
|
+
app = App()
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### 2. Exposing Functions
|
|
26
|
+
Functions can be exposed to the frontend using the `@app.expose` decorator.
|
|
27
|
+
```python
|
|
28
|
+
@app.expose
|
|
29
|
+
def greet(name: str):
|
|
30
|
+
return f"Hello, {name}!"
|
|
31
|
+
```
|
|
32
|
+
*Note: Pytron automatically generates TypeScript definitions for these functions.*
|
|
33
|
+
|
|
34
|
+
### 3. Reactive State
|
|
35
|
+
Pytron maintains a reactive state shared between Python and the frontend via `app.state`.
|
|
36
|
+
```python
|
|
37
|
+
app.state.user = {"name": "Alice", "role": "admin"}
|
|
38
|
+
```
|
|
39
|
+
Any change to `app.state` is automatically synchronized to the frontend.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 🌐 Frontend Development (JS/TS)
|
|
44
|
+
|
|
45
|
+
### 1. Calling Python Functions
|
|
46
|
+
Use the `pytron` client (usually a proxy) to call exposed Python functions.
|
|
47
|
+
```javascript
|
|
48
|
+
import pytron from 'pytron-client';
|
|
49
|
+
|
|
50
|
+
const result = await pytron.greet("Agent");
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 2. Consuming State
|
|
54
|
+
Listen for state updates to react to backend changes.
|
|
55
|
+
```javascript
|
|
56
|
+
pytron.on('pytron:state-update', (change) => {
|
|
57
|
+
console.log("State updated:", change);
|
|
58
|
+
});
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 📁 Project Structure & Key Files
|
|
64
|
+
|
|
65
|
+
- `pytron/application.py`: Main `App` class and window orchestration.
|
|
66
|
+
- `pytron/webview.py`: Integration with system WebView (Edge WebView2, WebKit, etc.).
|
|
67
|
+
- `pytron/state.py`: Reactive state implementation.
|
|
68
|
+
- `pytron/cli.py`: Command line interface for project management.
|
|
69
|
+
- `pyproject.toml`: Package configuration and dependencies.
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## ⌨️ CLI Commands
|
|
74
|
+
|
|
75
|
+
- `pytron init`: Initialize a new project from templates.
|
|
76
|
+
- `pytron run`: Start the application in development mode with hot-reloading.
|
|
77
|
+
- `pytron build`: Package the app into a standalone executable.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 💡 Best Practices for LLMs
|
|
82
|
+
1. **Always use `@app.expose`** for functions you want the UI to call.
|
|
83
|
+
2. **Prefer `app.state`** for data synchronization rather than frequent RPC calls if the data needs to be reactive.
|
|
84
|
+
3. **Check `application.py`** for window management settings (width, height, title, frameless mode).
|
|
85
|
+
4. **Use Type Hints** in Python functions; they are used to generate accurate TypeScript definitions.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## 📱 Android Development
|
|
90
|
+
|
|
91
|
+
Pytron supports building and deploying applications to Android devices.
|
|
92
|
+
|
|
93
|
+
### Commands
|
|
94
|
+
- `pytron android init`: Initialize Android project.
|
|
95
|
+
- `pytron android sync`: Sync python code and frontend to Android project. **Automatically re-compiles C-extensions using NDK.**
|
|
96
|
+
- `pytron android run`: Install and run the app on connected device.
|
|
97
|
+
- `pytron android logcat`: View device logs.
|
|
98
|
+
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Windows UTF-8 Manifest (process opt-in)
|
|
2
|
+
|
|
3
|
+
This folder contains a process manifest that opts an application into Windows' "UTF-8 for worldwide language support" (the UTF-8 code page) for the C runtime.
|
|
4
|
+
|
|
5
|
+
- File: `windows-utf8.manifest`
|
|
6
|
+
|
|
7
|
+
Usage (PyInstaller .spec):
|
|
8
|
+
|
|
9
|
+
Add the manifest to the `EXE()` call in your `.spec` file, for example:
|
|
10
|
+
|
|
11
|
+
```python
|
|
12
|
+
exe = EXE(
|
|
13
|
+
pyz,
|
|
14
|
+
...,
|
|
15
|
+
manifest='pytron/manifests/windows-utf8.manifest',
|
|
16
|
+
...
|
|
17
|
+
)
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Notes:
|
|
21
|
+
- The manifest adds the `<UseUnicodeUTF8>true</UseUnicodeUTF8>` setting for the process. This asks the Microsoft C runtime to treat the ANSI code page as UTF-8 for narrow-character (`char`/`printf`/`fopen`-style) APIs.
|
|
22
|
+
- Behavior depends on OS and CRT version. Test your application on target Windows versions.
|
|
23
|
+
- If you embed the manifest with other tools (e.g. `mt.exe`, `rcedit`, or build systems), pass the manifest as the application's resource/manifest.
|
|
24
|
+
|
|
25
|
+
If you want, I can also update `pytron` packaging helpers to automatically include this manifest when building Windows executables.
|
|
26
|
+
|
|
27
|
+
Note on Installer Compression:
|
|
28
|
+
|
|
29
|
+
- The Windows installer script (`pytron/installer/Installation.nsi`) has been updated to prefer ZLIB compression by default for better compatibility with some antivirus products. If you customize the NSIS script, be aware of the `SetCompressor` directive: newer builds may use `SetCompressor /SOLID zlib` instead of `SetCompressor lzma`.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
2
|
+
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
|
|
3
|
+
<assemblyIdentity type="win32" name="Pytron.App" version="1.0.0.0" processorArchitecture="*"/>
|
|
4
|
+
|
|
5
|
+
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
|
6
|
+
<application>
|
|
7
|
+
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/> <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> </application>
|
|
8
|
+
</compatibility>
|
|
9
|
+
|
|
10
|
+
<dependency>
|
|
11
|
+
<dependentAssembly>
|
|
12
|
+
<assemblyIdentity
|
|
13
|
+
type="win32"
|
|
14
|
+
name="Microsoft.Windows.Common-Controls"
|
|
15
|
+
version="6.0.0.0"
|
|
16
|
+
processorArchitecture="*"
|
|
17
|
+
publicKeyToken="6595b64144ccf1df"
|
|
18
|
+
language="*"
|
|
19
|
+
/>
|
|
20
|
+
</dependentAssembly>
|
|
21
|
+
</dependency>
|
|
22
|
+
|
|
23
|
+
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
|
|
24
|
+
<security>
|
|
25
|
+
<requestedPrivileges>
|
|
26
|
+
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
|
|
27
|
+
</requestedPrivileges>
|
|
28
|
+
</security>
|
|
29
|
+
</trustInfo>
|
|
30
|
+
|
|
31
|
+
<application xmlns="urn:schemas-microsoft-com:asm.v3">
|
|
32
|
+
<windowsSettings>
|
|
33
|
+
<activeCodePage xmlns="http://schemas.microsoft.com/SMI/2019/WindowsSettings">UTF-8</activeCodePage>
|
|
34
|
+
|
|
35
|
+
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
|
|
36
|
+
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
|
|
37
|
+
|
|
38
|
+
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
|
|
39
|
+
|
|
40
|
+
<heapType xmlns="http://schemas.microsoft.com/SMI/2020/WindowsSettings">SegmentHeap</heapType>
|
|
41
|
+
</windowsSettings>
|
|
42
|
+
</application>
|
|
43
|
+
|
|
44
|
+
</assembly>
|
pytron/menu.py
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import ctypes
|
|
2
|
+
from typing import List, Optional, Callable
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Menu:
|
|
6
|
+
"""
|
|
7
|
+
Abstraction for a native system menu.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
def __init__(self, title: str = ""):
|
|
11
|
+
self.title = title
|
|
12
|
+
self.items: List["MenuItem"] = []
|
|
13
|
+
self._hmenu = None
|
|
14
|
+
|
|
15
|
+
def add_item(
|
|
16
|
+
self, label: str, callback: Optional[Callable] = None, shortcut: str = ""
|
|
17
|
+
):
|
|
18
|
+
item = MenuItem(label, callback, shortcut)
|
|
19
|
+
self.items.append(item)
|
|
20
|
+
return item
|
|
21
|
+
|
|
22
|
+
def add_submenu(self, title: str):
|
|
23
|
+
submenu = Menu(title)
|
|
24
|
+
item = MenuItem(title, submenu=submenu)
|
|
25
|
+
self.items.append(item)
|
|
26
|
+
return submenu
|
|
27
|
+
|
|
28
|
+
def add_separator(self):
|
|
29
|
+
item = MenuItem("", is_separator=True)
|
|
30
|
+
self.items.append(item)
|
|
31
|
+
return item
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class MenuItem:
|
|
35
|
+
def __init__(
|
|
36
|
+
self,
|
|
37
|
+
label: str,
|
|
38
|
+
callback: Optional[Callable] = None,
|
|
39
|
+
shortcut: str = "",
|
|
40
|
+
submenu: Optional[Menu] = None,
|
|
41
|
+
is_separator: bool = False,
|
|
42
|
+
):
|
|
43
|
+
self.label = label
|
|
44
|
+
self.callback = callback
|
|
45
|
+
self.shortcut = shortcut
|
|
46
|
+
self.submenu = submenu
|
|
47
|
+
self.is_separator = is_separator
|
|
48
|
+
self.enabled = True
|
|
49
|
+
self.checked = False
|
|
50
|
+
self.id = None # Assigned by the platform when starting
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class MenuBar:
|
|
54
|
+
"""
|
|
55
|
+
A collection of Menus that forms the application's top menu bar.
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
def __init__(self):
|
|
59
|
+
self.menus: List[Menu] = []
|
|
60
|
+
self._id_counter = 1000
|
|
61
|
+
self._callbacks = {}
|
|
62
|
+
|
|
63
|
+
def add_menu(self, menu: Menu):
|
|
64
|
+
self.menus.append(menu)
|
|
65
|
+
return menu
|
|
66
|
+
|
|
67
|
+
def build_for_windows(self, hwnd):
|
|
68
|
+
"""Creates and attaches a Win32 menu to the given HWND."""
|
|
69
|
+
user32 = ctypes.windll.user32
|
|
70
|
+
from .platforms.windows_ops.constants import (
|
|
71
|
+
MF_STRING,
|
|
72
|
+
MF_POPUP,
|
|
73
|
+
MF_SEPARATOR,
|
|
74
|
+
MF_GRAYED,
|
|
75
|
+
MF_CHECKED,
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
h_menubar = user32.CreateMenu()
|
|
79
|
+
|
|
80
|
+
def _build_recursive(menu_obj, is_top=False):
|
|
81
|
+
if is_top:
|
|
82
|
+
h_menu = h_menubar
|
|
83
|
+
else:
|
|
84
|
+
h_menu = user32.CreatePopupMenu() if not is_top else h_menubar
|
|
85
|
+
|
|
86
|
+
for item in menu_obj.items:
|
|
87
|
+
flags = 0
|
|
88
|
+
if item.is_separator:
|
|
89
|
+
user32.AppendMenuW(h_menu, MF_SEPARATOR, 0, None)
|
|
90
|
+
continue
|
|
91
|
+
|
|
92
|
+
if item.submenu:
|
|
93
|
+
h_sub = _build_recursive(item.submenu)
|
|
94
|
+
user32.AppendMenuW(h_menu, MF_STRING | MF_POPUP, h_sub, item.label)
|
|
95
|
+
else:
|
|
96
|
+
self._id_counter += 1
|
|
97
|
+
item.id = self._id_counter
|
|
98
|
+
if item.callback:
|
|
99
|
+
self._callbacks[item.id] = item.callback
|
|
100
|
+
|
|
101
|
+
if not item.enabled:
|
|
102
|
+
flags |= MF_GRAYED
|
|
103
|
+
if item.checked:
|
|
104
|
+
flags |= MF_CHECKED
|
|
105
|
+
|
|
106
|
+
label = item.label
|
|
107
|
+
if item.shortcut:
|
|
108
|
+
label += f"\t{item.shortcut}"
|
|
109
|
+
|
|
110
|
+
user32.AppendMenuW(h_menu, flags | MF_STRING, item.id, label)
|
|
111
|
+
|
|
112
|
+
return h_menu
|
|
113
|
+
|
|
114
|
+
for top_menu in self.menus:
|
|
115
|
+
h_sub = _build_recursive(top_menu)
|
|
116
|
+
user32.AppendMenuW(h_menubar, MF_STRING | MF_POPUP, h_sub, top_menu.title)
|
|
117
|
+
|
|
118
|
+
user32.SetMenu(hwnd, h_menubar)
|
|
119
|
+
return h_menubar
|
|
120
|
+
|
|
121
|
+
def handle_command(self, cmd_id):
|
|
122
|
+
"""Dispatches a menu command to the appropriate callback."""
|
|
123
|
+
if cmd_id in self._callbacks:
|
|
124
|
+
import threading
|
|
125
|
+
|
|
126
|
+
threading.Thread(target=self._callbacks[cmd_id], daemon=True).start()
|
|
127
|
+
return True
|
|
128
|
+
return False
|
pytron/nsis-setup.exe
ADDED
|
Binary file
|
pytron/pack/__init__.py
ADDED
|
File without changes
|
pytron/pack/assets.py
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from ..console import log
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def get_smart_assets(
|
|
7
|
+
script_dir: Path,
|
|
8
|
+
frontend_dist: Path | None = None,
|
|
9
|
+
include_patterns: list | None = None,
|
|
10
|
+
exclude_patterns: list | None = None,
|
|
11
|
+
):
|
|
12
|
+
"""Recursively collect project assets to include with PyInstaller.
|
|
13
|
+
|
|
14
|
+
- Skips known unwanted directories (venv, node_modules, .git, build, dist, etc.)
|
|
15
|
+
- Skips files with Python/source extensions and common dev files
|
|
16
|
+
- respects include_patterns (overrides defaults) and exclude_patterns
|
|
17
|
+
- Skips frontend folder since it's handled separately
|
|
18
|
+
Returns a list of strings in the "abs_path{os.pathsep}rel_path" format
|
|
19
|
+
expected by PyInstaller's `--add-data`.
|
|
20
|
+
"""
|
|
21
|
+
import fnmatch
|
|
22
|
+
|
|
23
|
+
add_data = []
|
|
24
|
+
# Default Excludes
|
|
25
|
+
EXCLUDE_DIRS = {
|
|
26
|
+
"venv",
|
|
27
|
+
".venv",
|
|
28
|
+
"env",
|
|
29
|
+
".env",
|
|
30
|
+
"node_modules",
|
|
31
|
+
".git",
|
|
32
|
+
".vscode",
|
|
33
|
+
".idea",
|
|
34
|
+
"build",
|
|
35
|
+
"dist",
|
|
36
|
+
"__pycache__",
|
|
37
|
+
"site",
|
|
38
|
+
".pytest_cache",
|
|
39
|
+
"installer",
|
|
40
|
+
"frontend",
|
|
41
|
+
}
|
|
42
|
+
EXCLUDE_SUFFIXES = {".py", ".pyc", ".pyo", ".spec", ".md", ".map"}
|
|
43
|
+
EXCLUDE_FILES = {
|
|
44
|
+
".gitignore",
|
|
45
|
+
"package-lock.json",
|
|
46
|
+
"npm-debug.log",
|
|
47
|
+
".DS_Store",
|
|
48
|
+
"thumbs.db",
|
|
49
|
+
"settings.json",
|
|
50
|
+
"pnpm-lock.yaml",
|
|
51
|
+
"bun.lockb",
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
include_patterns = include_patterns or []
|
|
55
|
+
exclude_patterns = exclude_patterns or []
|
|
56
|
+
|
|
57
|
+
root_path = str(script_dir)
|
|
58
|
+
for root, dirs, files in os.walk(root_path):
|
|
59
|
+
# Prune directories we never want to enter
|
|
60
|
+
# We always exclude invalid dirs unless explicitly included
|
|
61
|
+
# But for directories, "including" is tricky in os.walk.
|
|
62
|
+
# We'll stick to default prune for safety, but check user patterns.
|
|
63
|
+
|
|
64
|
+
# Filter dirs in-place
|
|
65
|
+
i = 0
|
|
66
|
+
while i < len(dirs):
|
|
67
|
+
d = dirs[i]
|
|
68
|
+
d_path = os.path.join(root, d)
|
|
69
|
+
d_rel = os.path.relpath(d_path, root_path)
|
|
70
|
+
|
|
71
|
+
# Check user excludes for folders
|
|
72
|
+
is_user_excluded = False
|
|
73
|
+
for pat in exclude_patterns:
|
|
74
|
+
if fnmatch.fnmatch(d, pat) or fnmatch.fnmatch(d_rel, pat):
|
|
75
|
+
is_user_excluded = True
|
|
76
|
+
break
|
|
77
|
+
|
|
78
|
+
if is_user_excluded:
|
|
79
|
+
del dirs[i]
|
|
80
|
+
continue
|
|
81
|
+
|
|
82
|
+
# Default excludes (only if not explicitly included?)
|
|
83
|
+
# For simplicity, we enforce default folder excludes unless strictly needed.
|
|
84
|
+
if d in EXCLUDE_DIRS or d.startswith("."):
|
|
85
|
+
del dirs[i]
|
|
86
|
+
continue
|
|
87
|
+
|
|
88
|
+
i += 1
|
|
89
|
+
|
|
90
|
+
# If this path is part of frontend, skip (we handle frontend separately)
|
|
91
|
+
if frontend_dist and str(frontend_dist) in root:
|
|
92
|
+
continue
|
|
93
|
+
|
|
94
|
+
for filename in files:
|
|
95
|
+
file_path = os.path.join(root, filename)
|
|
96
|
+
rel_path = os.path.relpath(file_path, root_path)
|
|
97
|
+
|
|
98
|
+
# 1. User Exclude (Highest Priority)
|
|
99
|
+
is_user_excluded = False
|
|
100
|
+
for pat in exclude_patterns:
|
|
101
|
+
if fnmatch.fnmatch(filename, pat) or fnmatch.fnmatch(rel_path, pat):
|
|
102
|
+
is_user_excluded = True
|
|
103
|
+
break
|
|
104
|
+
if is_user_excluded:
|
|
105
|
+
continue
|
|
106
|
+
|
|
107
|
+
# 2. User Include (Overrides defaults)
|
|
108
|
+
is_user_included = False
|
|
109
|
+
for pat in include_patterns:
|
|
110
|
+
if fnmatch.fnmatch(filename, pat) or fnmatch.fnmatch(rel_path, pat):
|
|
111
|
+
is_user_included = True
|
|
112
|
+
break
|
|
113
|
+
|
|
114
|
+
if is_user_included:
|
|
115
|
+
add_data.append(f"{file_path}{os.pathsep}{rel_path}")
|
|
116
|
+
log(f"Explicitly included asset: {rel_path}", style="cyan")
|
|
117
|
+
continue
|
|
118
|
+
|
|
119
|
+
# 3. Default Checks
|
|
120
|
+
if filename in EXCLUDE_FILES:
|
|
121
|
+
continue
|
|
122
|
+
|
|
123
|
+
_, ext = os.path.splitext(filename)
|
|
124
|
+
if ext.lower() in EXCLUDE_SUFFIXES:
|
|
125
|
+
continue
|
|
126
|
+
|
|
127
|
+
# If passed all checks
|
|
128
|
+
add_data.append(f"{file_path}{os.pathsep}{rel_path}")
|
|
129
|
+
log(f"Auto-including asset: {rel_path}", style="dim")
|
|
130
|
+
|
|
131
|
+
return add_data
|