Changed the communication with the generator client in CreateDialogCodeDialog.py to use sys.stderr and surround the data with a guard string (see issue462). eric7

Sun, 04 Dec 2022 14:20:53 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 04 Dec 2022 14:20:53 +0100
branch
eric7
changeset 9560
abffba70297f
parent 9559
34fc53e6159d
child 9561
f7bb5739c35a

Changed the communication with the generator client in CreateDialogCodeDialog.py to use sys.stderr and surround the data with a guard string (see issue462).

src/eric7/Project/CreateDialogCodeDialog.py file | annotate | diff | comparison | revisions
src/eric7/Project/UicLoadUi5.py file | annotate | diff | comparison | revisions
src/eric7/Project/UicLoadUi6.py file | annotate | diff | comparison | revisions
--- a/src/eric7/Project/CreateDialogCodeDialog.py	Sun Dec 04 11:58:37 2022 +0100
+++ b/src/eric7/Project/CreateDialogCodeDialog.py	Sun Dec 04 14:20:53 2022 +0100
@@ -215,8 +215,11 @@
         started = proc.waitForStarted(5000)
         finished = proc.waitForFinished(30000)
         if started and finished:
-            output = proc.readAllStandardOutput()
+            output = proc.readAllStandardError()
             outText = str(output, "utf-8", "replace")
+            if "@@eric_start@@" in outText and "@@eric_end@@" in outText:
+                # it is something we sent via UicLoadUi[56].py
+                outText = outText.split("@@eric_start@@")[1].split("@@eric_end@@")[0]
             if proc.exitCode() == 0:
                 ok = True
                 uicText = outText.strip()
--- a/src/eric7/Project/UicLoadUi5.py	Sun Dec 04 11:58:37 2022 +0100
+++ b/src/eric7/Project/UicLoadUi5.py	Sun Dec 04 14:20:53 2022 +0100
@@ -12,15 +12,25 @@
 import sys
 import xml.etree.ElementTree  # secok
 
+
+def _printout(dataString):
+    """
+    Function to print the given string to sys.stdout with a guard string.
+
+    @param dataString string to be printed
+    @type str
+    """
+    print("@@eric_start@@{0}@@eric_end@@".format(dataString), file=sys.stderr)
+
 try:
     from PyQt5 import uic
     from PyQt5.QtCore import QByteArray, QMetaMethod
     from PyQt5.QtWidgets import QAction, QApplication, QWidget
 except ModuleNotFoundError:
-    print("PyQt5 could not be found.")
+    _printout("PyQt5 could not be found.")
     sys.exit(1)
 except ImportError as err:
-    print("PyQt5 could not be imported. Issue: {0}".format(str(err)))
+    _printout("PyQt5 could not be imported. Issue: {0}".format(str(err)))
     sys.exit(1)
 
 with contextlib.suppress(ImportError):
@@ -41,10 +51,10 @@
     app = QApplication([])  # __IGNORE_WARNING__
     try:
         dlg = uic.loadUi(formFile, package=projectPath)
-        print(dlg.objectName())
+        _printout(dlg.objectName())
         sys.exit(0)
     except (AttributeError, ImportError, xml.etree.ElementTree.ParseError) as err:
-        print(str(err))
+        _printout(str(err))
         sys.exit(1)
 
 
@@ -62,10 +72,10 @@
     app = QApplication([])  # __IGNORE_WARNING__
     try:
         dlg = uic.loadUi(formFile, package=projectPath)
-        print(dlg.metaObject().className())
+        _printout(dlg.metaObject().className())
         sys.exit(0)
     except (AttributeError, ImportError, xml.etree.ElementTree.ParseError) as err:
-        print(str(err))
+        _printout(str(err))
         sys.exit(1)
 
 
@@ -190,16 +200,16 @@
 
             objectsList.append(objectDict)
 
-        print(json.dumps(objectsList))
+        _printout(json.dumps(objectsList))
         sys.exit(0)
     except (AttributeError, ImportError, xml.etree.ElementTree.ParseError) as err:
-        print(str(err))
+        _printout(str(err))
         sys.exit(1)
 
 
 if __name__ == "__main__":
     if len(sys.argv) != 4:
-        print("Wrong number of arguments.")
+        _printout("Wrong number of arguments.")
         sys.exit(1)
 
     if sys.argv[1] == "object_name":
@@ -209,7 +219,7 @@
     elif sys.argv[1] == "signatures":
         signatures(sys.argv[2], sys.argv[3])
     else:
-        print("Unknow operation given.")
+        _printout("Unknow operation given.")
         sys.exit(1)
 
 #
--- a/src/eric7/Project/UicLoadUi6.py	Sun Dec 04 11:58:37 2022 +0100
+++ b/src/eric7/Project/UicLoadUi6.py	Sun Dec 04 14:20:53 2022 +0100
@@ -13,16 +13,26 @@
 import sys
 import xml.etree.ElementTree  # secok
 
+
+def _printout(dataString):
+    """
+    Function to print the given string to sys.stdout with a guard string.
+
+    @param dataString string to be printed
+    @type str
+    """
+    print("@@eric_start@@{0}@@eric_end@@".format(dataString), file=sys.stderr)
+
 try:
     from PyQt6 import uic
     from PyQt6.QtCore import QByteArray, QMetaMethod
     from PyQt6.QtGui import QAction
     from PyQt6.QtWidgets import QApplication, QWidget
 except ModuleNotFoundError:
-    print("PyQt6 could not be found.")
+    _printout("PyQt6 could not be found.")
     sys.exit(1)
 except ImportError as err:
-    print("PyQt6 could not be imported. Issue: {0}".format(str(err)))
+    _printout("PyQt6 could not be imported. Issue: {0}".format(str(err)))
     sys.exit(1)
 
 with contextlib.suppress(ImportError):
@@ -46,10 +56,10 @@
     app = QApplication([])  # __IGNORE_WARNING__
     try:
         dlg = uic.loadUi(formFile, package=projectPath)
-        print(dlg.objectName())
+        _printout(dlg.objectName())
         sys.exit(0)
     except (AttributeError, ImportError, xml.etree.ElementTree.ParseError) as err:
-        print(str(err))
+        _printout(str(err))
         sys.exit(1)
 
 
@@ -67,10 +77,10 @@
     app = QApplication([])  # __IGNORE_WARNING__
     try:
         dlg = uic.loadUi(formFile, package=projectPath)
-        print(dlg.metaObject().className())
+        _printout(dlg.metaObject().className())
         sys.exit(0)
     except (AttributeError, ImportError, xml.etree.ElementTree.ParseError) as err:
-        print(str(err))
+        _printout(str(err))
         sys.exit(1)
 
 
@@ -195,16 +205,16 @@
 
             objectsList.append(objectDict)
 
-        print(json.dumps(objectsList))
+        _printout(json.dumps(objectsList))
         sys.exit(0)
     except (AttributeError, ImportError, xml.etree.ElementTree.ParseError) as err:
-        print(str(err))
+        _printout(str(err))
         sys.exit(1)
 
 
 if __name__ == "__main__":
     if len(sys.argv) != 4:
-        print("Wrong number of arguments.")
+        _printout("Wrong number of arguments.")
         sys.exit(1)
 
     if sys.argv[1] == "object_name":
@@ -214,7 +224,7 @@
     elif sys.argv[1] == "signatures":
         signatures(sys.argv[2], sys.argv[3])
     else:
-        print("Unknow operation given.")
+        _printout("Unknow operation given.")
         sys.exit(1)
 
 #

eric ide

mercurial