Skip to content

Commit

Permalink
Add type hints to generated constructors
Browse files Browse the repository at this point in the history
  • Loading branch information
gentlegiantJGC committed May 7, 2024
1 parent c73424a commit ba74929
Show file tree
Hide file tree
Showing 13 changed files with 79 additions and 36 deletions.
8 changes: 5 additions & 3 deletions src/amulet_editor/application/_splash/_splash.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide6.QtCore import QCoreApplication, QMetaObject, Qt, QEvent
from PySide6.QtWidgets import QDialog, QLabel, QVBoxLayout
from PySide6.QtWidgets import QDialog, QLabel, QVBoxLayout, QWidget


class Ui_Splash(QDialog):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
def __init__(
self, parent: QWidget | None = None, f: Qt.WindowType = Qt.WindowType.Dialog
) -> None:
super().__init__(parent, f)
if not self.objectName():
self.setObjectName("Splash")
self.resize(400, 300)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,17 @@
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide6.QtCore import QCoreApplication, QMetaObject, QEvent
from PySide6.QtCore import QCoreApplication, QMetaObject, Qt, QEvent
from PySide6.QtWidgets import QFrame, QHBoxLayout, QMainWindow, QWidget
from amulet_editor.application.windows._amulet_landing_window._view import ViewContainer
from amulet_editor.models.widgets._toolbar import AToolBar


class Ui_AmuletLandingWindow(QMainWindow):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
def __init__(
self, parent: QWidget | None = None, flags: Qt.WindowType = Qt.WindowType.Window
) -> None:
super().__init__(parent, f)
if not self.objectName():
self.setObjectName("AmuletLandingWindow")
self.resize(800, 600)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@


class Ui_HomePage(QWidget):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
def __init__(
self, parent: QWidget | None = None, f: Qt.WindowType = Qt.WindowType.Widget
) -> None:
super().__init__(parent, f)
if not self.objectName():
self.setObjectName("HomePage")
self.resize(748, 788)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@


class Ui_OpenWorldPage(QWidget):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
def __init__(
self, parent: QWidget | None = None, f: Qt.WindowType = Qt.WindowType.Widget
) -> None:
super().__init__(parent, f)
if not self.objectName():
self.setObjectName("OpenWorldPage")
self.resize(264, 247)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,15 @@
QSpacerItem,
QTextEdit,
QVBoxLayout,
QWidget,
)


class Ui_AmuletTracebackDialog(QDialog):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
def __init__(
self, parent: QWidget | None = None, f: Qt.WindowType = Qt.WindowType.Dialog
) -> None:
super().__init__(parent, f)
if not self.objectName():
self.setObjectName("AmuletTracebackDialog")
self.resize(400, 300)
Expand Down
6 changes: 4 additions & 2 deletions src/builtin_plugins/amulet_team_home_page/home/home/_home.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@


class Ui_HomePage(QWidget):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
def __init__(
self, parent: QWidget | None = None, f: Qt.WindowType = Qt.WindowType.Widget
) -> None:
super().__init__(parent, f)
if not self.objectName():
self.setObjectName("HomePage")
self.resize(748, 788)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,10 @@


class Ui_OpenWorldPage(QWidget):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
def __init__(
self, parent: QWidget | None = None, f: Qt.WindowType = Qt.WindowType.Widget
) -> None:
super().__init__(parent, f)
if not self.objectName():
self.setObjectName("OpenWorldPage")
self.resize(264, 247)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide6.QtCore import QCoreApplication, QMetaObject, QEvent
from PySide6.QtCore import QCoreApplication, QMetaObject, Qt, QEvent
from PySide6.QtWidgets import (
QHBoxLayout,
QPlainTextEdit,
Expand All @@ -19,8 +19,10 @@


class Ui_InspectionTool(QWidget):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
def __init__(
self, parent: QWidget | None = None, f: Qt.WindowType = Qt.WindowType.Widget
) -> None:
super().__init__(parent, f)
if not self.objectName():
self.setObjectName("InspectionTool")
self.resize(264, 247)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,17 @@
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide6.QtCore import QCoreApplication, QMetaObject, QEvent
from PySide6.QtCore import QCoreApplication, QMetaObject, Qt, QEvent
from PySide6.QtWidgets import QFrame, QHBoxLayout, QMainWindow, QWidget
from ._view import ViewContainer
from amulet_editor.models.widgets._toolbar import AToolBar


class Ui_AmuletLandingWindow(QMainWindow):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
def __init__(
self, parent: QWidget | None = None, flags: Qt.WindowType = Qt.WindowType.Window
) -> None:
super().__init__(parent, f)
if not self.objectName():
self.setObjectName("AmuletLandingWindow")
self.resize(800, 600)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide6.QtCore import QCoreApplication, QMetaObject, QEvent
from PySide6.QtCore import QCoreApplication, QMetaObject, Qt, QEvent
from PySide6.QtWidgets import (
QComboBox,
QHBoxLayout,
Expand All @@ -21,8 +21,10 @@


class Ui_AmuletMainWindow(QMainWindow):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
def __init__(
self, parent: QWidget | None = None, flags: Qt.WindowType = Qt.WindowType.Window
) -> None:
super().__init__(parent, f)
if not self.objectName():
self.setObjectName("AmuletMainWindow")
self.resize(1129, 792)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,16 @@
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide6.QtCore import QCoreApplication, QMetaObject, QEvent
from PySide6.QtWidgets import QMainWindow
from PySide6.QtCore import QCoreApplication, QMetaObject, Qt, QEvent
from PySide6.QtWidgets import QMainWindow, QWidget
from amulet_team_main_window2._application.tab_engine import RecursiveSplitter


class Ui_AmuletSubWindow(QMainWindow):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
def __init__(
self, parent: QWidget | None = None, flags: Qt.WindowType = Qt.WindowType.Window
) -> None:
super().__init__(parent, f)
if not self.objectName():
self.setObjectName("AmuletSubWindow")
self.resize(1129, 792)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide6.QtCore import QCoreApplication, QMetaObject, QEvent
from PySide6.QtCore import QCoreApplication, QMetaObject, Qt, QEvent
from PySide6.QtWidgets import (
QHBoxLayout,
QLabel,
Expand All @@ -18,8 +18,10 @@


class Ui_SettingsPage(QWidget):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
def __init__(
self, parent: QWidget | None = None, f: Qt.WindowType = Qt.WindowType.Widget
) -> None:
super().__init__(parent, f)
if not self.objectName():
self.setObjectName("SettingsPage")
self.resize(748, 788)
Expand Down
26 changes: 22 additions & 4 deletions tools/compile_ui.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,13 @@ def _get_enums(obj: Any) -> list[EnumType]:
]


InitArgs: dict[str, str] = {
"QWidget": "def __init__(self, parent: QWidget | None = None, f: Qt.WindowType = Qt.WindowType.Widget) -> None:\n super().__init__(parent, f)",
"QDialog": "def __init__(self, parent: QWidget | None = None, f: Qt.WindowType = Qt.WindowType.Dialog) -> None:\n super().__init__(parent, f)",
"QMainWindow": "def __init__(self, parent: QWidget | None = None, flags: Qt.WindowType = Qt.WindowType.Window) -> None:\n super().__init__(parent, f)",
}


def _compile_ui_file(ui_path: str) -> str | None:
py_path = ui_path[:-2] + "py"

Expand All @@ -56,8 +63,11 @@ def _compile_ui_file(ui_path: str) -> str | None:
py = pyf.read()

ui = ET.parse(ui_path)
class_name = ui.find("class").text
super_name = ui.find("widget").attrib["class"]
class_element = ui.find("class")
super_element = ui.find("widget")
assert class_element is not None and super_element is not None
class_name = class_element.text
super_name = super_element.attrib["class"]

# Run some postprocessing
# Remove comments. The ones generated do not add anything
Expand All @@ -69,7 +79,10 @@ def _compile_ui_file(ui_path: str) -> str | None:
# Replace setupUi with constructor
py = re.sub(
f"def setupUi\\(self, {class_name}\\):",
"def __init__(self, *args, **kwargs) -> None:\n super().__init__(*args, **kwargs)",
InitArgs.get(
super_name,
"def __init__(self, *args, **kwargs) -> None:\n super().__init__(*args, **kwargs)"
),
py,
)

Expand Down Expand Up @@ -125,6 +138,7 @@ def _try_compile_ui_file(ui_path: str) -> str | None:
return _compile_ui_file(ui_path)
except Exception:
print(traceback.format_exc())
return None


def main() -> None:
Expand All @@ -136,7 +150,11 @@ def main() -> None:
):
futures.append(executor.submit(_try_compile_ui_file, ui_path))

paths = [f.result() for f in futures]
paths: list[str] = []
for f in futures:
result = f.result()
if result is not None:
paths.append(result)
if paths:
subprocess.run([sys.executable, "-m", "black", *paths])

Expand Down

0 comments on commit ba74929

Please sign in to comment.