Skip to content

Commit 1534cac

Browse files
committed
defaut config setting
1 parent e57db8b commit 1534cac

7 files changed

Lines changed: 788 additions & 48 deletions

File tree

AUTOSAVE_CONFIG_GUIDE.md

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
The `EngineConfigHelper` now features **automatic configuration persistence**:
66

7+
- ✅ Each engine defines its own default configuration
8+
- ✅ Auto-creates configuration on first access (if missing)
79
- ✅ Auto-loads configuration on first access
810
- ✅ Auto-saves configuration on every change
911
- ✅ No manual save() calls needed
@@ -12,19 +14,29 @@ The `EngineConfigHelper` now features **automatic configuration persistence**:
1214

1315
## How It Works
1416

15-
### Auto-Load
17+
### Engine-Specific Defaults
1618

17-
Configuration is automatically loaded from disk on first access:
19+
Each engine defines its own default configuration:
1820

1921
```python
2022
from engine_sdk import EngineConfigHelper
2123

2224
class MyEngine(CompilerEngine):
2325
def __init__(self):
24-
self.config = EngineConfigHelper(self.id)
26+
# Define engine-specific default configuration
27+
self.config = EngineConfigHelper(
28+
self.id,
29+
default_config={
30+
"output_dir": "dist",
31+
"timeout": 30,
32+
"optimization_level": 2,
33+
# ... other engine-specific settings
34+
}
35+
)
2536

2637
def preflight(self, gui, file: str) -> bool:
2738
# Configuration is auto-loaded on first access
39+
# If no config exists, default_config is used and saved
2840
timeout = self.config.get(gui, "timeout", default=30)
2941
# ✅ Configuration loaded from disk automatically
3042
return True

ENGINES/cx_freeze/engine.py

Lines changed: 41 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
from engine_sdk import (
3535
CompilerEngine,
3636
EngineConfigHelper,
37+
UIAutoSaveHelper,
3738
SysDependencyManager,
3839
pip_executable,
3940
pip_install,
@@ -53,9 +54,40 @@ class CxFreezeEngine(CompilerEngine):
5354
required_sdk_version = "1.0.0"
5455

5556
def __init__(self):
56-
"""Initialize engine with configuration helper."""
57+
"""Initialize engine with configuration helper and cx_Freeze-specific defaults."""
5758
super().__init__()
58-
self.config = EngineConfigHelper(self.id)
59+
self.config = EngineConfigHelper(
60+
self.id,
61+
default_config={
62+
# Build output settings
63+
"output_dir": "dist",
64+
"target_name": "",
65+
66+
# cx_Freeze options
67+
"base": "Console", # Console or Win32GUI (Windows only)
68+
"optimize": 2,
69+
"compress": True,
70+
"include_msvcr": False,
71+
72+
# Module settings
73+
"includes": [],
74+
"excludes": [],
75+
"packages": [],
76+
"replace_paths": [],
77+
78+
# Zip settings
79+
"include_files": [],
80+
"zip_include_packages": [],
81+
"zip_exclude_packages": [],
82+
83+
# Build options
84+
"silent": False,
85+
"build_exe": "",
86+
87+
# Environment
88+
"env_vars": {},
89+
}
90+
)
5991

6092
def _resolve_venv_root(self, gui) -> Optional[str]:
6193
"""Resolve project venv root."""
@@ -375,7 +407,7 @@ def environment(self, gui, file: str) -> Optional[dict[str, str]]:
375407
return None
376408

377409
def create_tab(self, gui):
378-
"""Create configuration tab."""
410+
"""Create configuration tab with auto-save."""
379411
try:
380412
from PySide6.QtWidgets import QWidget
381413

@@ -391,7 +423,6 @@ def create_tab(self, gui):
391423
QLabel,
392424
QLineEdit,
393425
QComboBox,
394-
QPushButton,
395426
)
396427

397428
tab = QWidget()
@@ -400,11 +431,15 @@ def create_tab(self, gui):
400431
# Load configuration
401432
self.config.load(gui)
402433

434+
# Create auto-save helper
435+
auto_save = UIAutoSaveHelper(self.config, gui)
436+
403437
# Output directory
404438
row1 = QHBoxLayout()
405439
row1.addWidget(QLabel("Output Directory:"))
406440
output_edit = QLineEdit()
407441
output_edit.setText(self.config.get(gui, "output_dir", default="dist"))
442+
auto_save.connect_line_edit(output_edit, "output_dir")
408443
row1.addWidget(output_edit)
409444
layout.addLayout(row1)
410445

@@ -413,6 +448,7 @@ def create_tab(self, gui):
413448
row2.addWidget(QLabel("Target Name:"))
414449
target_edit = QLineEdit()
415450
target_edit.setText(self.config.get(gui, "target_name", default=""))
451+
auto_save.connect_line_edit(target_edit, "target_name")
416452
row2.addWidget(target_edit)
417453
layout.addLayout(row2)
418454

@@ -425,24 +461,10 @@ def create_tab(self, gui):
425461
base_combo.setCurrentText(
426462
self.config.get(gui, "base", default="Console")
427463
)
464+
auto_save.connect_combobox(base_combo, "base")
428465
row3.addWidget(base_combo)
429466
layout.addLayout(row3)
430-
else:
431-
base_combo = None
432-
433-
# Save button
434-
save_btn = QPushButton("Save Configuration")
435-
436-
def _save_config():
437-
self.config.set(gui, "output_dir", output_edit.text())
438-
self.config.set(gui, "target_name", target_edit.text())
439-
if base_combo:
440-
self.config.set(gui, "base", base_combo.currentText())
441-
self.config.save(gui)
442-
safe_log(gui, "✅ cx_Freeze configuration saved")
443467

444-
save_btn.clicked.connect(_save_config)
445-
layout.addWidget(save_btn)
446468
layout.addStretch()
447469

448470
return tab, "cx_Freeze"

ENGINES/nuitka/engine.py

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,39 @@ class NuitkaEngine(CompilerEngine):
5353
required_sdk_version = "1.0.0"
5454

5555
def __init__(self):
56-
"""Initialize engine with configuration helper."""
56+
"""Initialize engine with configuration helper and Nuitka-specific defaults."""
5757
super().__init__()
58-
self.config = EngineConfigHelper(self.id)
58+
self.config = EngineConfigHelper(
59+
self.id,
60+
default_config={
61+
# Build output settings
62+
"output_dir": "dist",
63+
64+
# Nuitka compilation options
65+
"standalone": True,
66+
"one_file": False,
67+
"onefile": False,
68+
"optimization": 0,
69+
70+
# Platform-specific
71+
"windows_disable_console": False,
72+
"windows_icon_from_ico": "",
73+
74+
# Plugin and import settings
75+
"enable_plugins": [],
76+
"include_package": [],
77+
"follow_imports": True,
78+
"nofollow_imports": [],
79+
80+
# Advanced options
81+
"remove_output": True,
82+
"python_flag": [],
83+
"jobs": 0, # 0 = auto
84+
85+
# Environment
86+
"env_vars": {},
87+
}
88+
)
5989

6090
def _resolve_venv_root(self, gui) -> Optional[str]:
6191
"""Resolve project venv root."""
@@ -376,7 +406,7 @@ def environment(self, gui, file: str) -> Optional[dict[str, str]]:
376406
return None
377407

378408
def create_tab(self, gui):
379-
"""Create configuration tab."""
409+
"""Create configuration tab with auto-save."""
380410
try:
381411
from PySide6.QtWidgets import QWidget
382412

@@ -393,7 +423,6 @@ def create_tab(self, gui):
393423
QLineEdit,
394424
QCheckBox,
395425
QSpinBox,
396-
QPushButton,
397426
)
398427

399428
tab = QWidget()
@@ -402,17 +431,22 @@ def create_tab(self, gui):
402431
# Load configuration
403432
self.config.load(gui)
404433

434+
# Create auto-save helper
435+
auto_save = UIAutoSaveHelper(self.config, gui)
436+
405437
# Output directory
406438
row1 = QHBoxLayout()
407439
row1.addWidget(QLabel("Output Directory:"))
408440
output_edit = QLineEdit()
409441
output_edit.setText(self.config.get(gui, "output_dir", default="dist"))
442+
auto_save.connect_line_edit(output_edit, "output_dir")
410443
row1.addWidget(output_edit)
411444
layout.addLayout(row1)
412445

413446
# One file option
414447
one_file_check = QCheckBox("One File")
415448
one_file_check.setChecked(self.config.get(gui, "one_file", default=False))
449+
auto_save.connect_checkbox(one_file_check, "one_file")
416450
layout.addWidget(one_file_check)
417451

418452
# Optimization level
@@ -421,21 +455,10 @@ def create_tab(self, gui):
421455
opt_spin = QSpinBox()
422456
opt_spin.setMaximum(2)
423457
opt_spin.setValue(self.config.get(gui, "optimization", default=0))
458+
auto_save.connect_spinbox(opt_spin, "optimization")
424459
row2.addWidget(opt_spin)
425460
layout.addLayout(row2)
426461

427-
# Save button
428-
save_btn = QPushButton("Save Configuration")
429-
430-
def _save_config():
431-
self.config.set(gui, "output_dir", output_edit.text())
432-
self.config.set(gui, "one_file", one_file_check.isChecked())
433-
self.config.set(gui, "optimization", opt_spin.value())
434-
self.config.save(gui)
435-
safe_log(gui, "✅ Nuitka configuration saved")
436-
437-
save_btn.clicked.connect(_save_config)
438-
layout.addWidget(save_btn)
439462
layout.addStretch()
440463

441464
return tab, "Nuitka"

ENGINES/pyinstaller/engine.py

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,35 @@ class PyInstallerEngine(CompilerEngine):
5454
required_sdk_version = "1.0.0"
5555

5656
def __init__(self):
57-
"""Initialize engine with configuration helper."""
57+
"""Initialize engine with configuration helper and PyInstaller-specific defaults."""
5858
super().__init__()
59-
self.config = EngineConfigHelper(self.id)
59+
self.config = EngineConfigHelper(
60+
self.id,
61+
default_config={
62+
# Build output settings
63+
"output_dir": "dist",
64+
65+
# PyInstaller options
66+
"one_file": False,
67+
"console": True,
68+
"windowed": False,
69+
"icon_path": "",
70+
"upx_dir": "",
71+
"clean": False,
72+
"debug": "all",
73+
"optimization_level": 2,
74+
"strip": False,
75+
76+
# Module settings
77+
"exclude_modules": [],
78+
"hidden_imports": [],
79+
"additional_hooks_dir": "",
80+
"runtime_hooks": [],
81+
82+
# Environment
83+
"env_vars": {},
84+
}
85+
)
6086

6187
def _resolve_venv_root(self, gui) -> Optional[str]:
6288
"""Resolve project venv root."""

0 commit comments

Comments
 (0)