dlg_contact.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. """
  2. """
  3. import logging
  4. import os
  5. import platform
  6. import subprocess
  7. import unittest
  8. from PyQt5 import QtWidgets
  9. from PyQt5 import uic
  10. from PyQt5.QtCore import Qt
  11. from PyQt5.QtGui import QIcon, QPixmap
  12. from PyQt5.QtWidgets import QTextBrowser, QApplication
  13. import coverage
  14. from path import Path
  15. from MnCheck.core.constants import MAIN, LOGDIR, RSCDIR, CONTACT, TESTDIR, COVERAGE_DIR
  16. from qgis.core import QgsProject #@UnresolvedImport
  17. logger = logging.getLogger("mncheck")
  18. Ui_Contact, _ = uic.loadUiType(MAIN / 'ui'/ 'dlg_contact.ui')
  19. class DlgContact(QtWidgets.QDialog):
  20. def __init__(self, parent=None):
  21. super().__init__(parent)
  22. self.createWidgets()
  23. def createWidgets(self):
  24. """ set up the interface """
  25. self.ui = Ui_Contact()
  26. self.ui.setupUi(self)
  27. self.setWindowIcon(QIcon(MAIN / "icon.png"))
  28. self.ui.lbl_mn_logo.setPixmap(QPixmap(RSCDIR / "mn_logo_mini.png"))
  29. self.ui.lbl_warning_logo.setPixmap(QPixmap(RSCDIR / "warning_16.png"))
  30. self.ui.lbl_mail.setText(f"<a href=\"mailto:{CONTACT}\">{CONTACT}</a>")
  31. self.ui.lbl_mail.setTextFormat(Qt.RichText)
  32. self.ui.lbl_mail.setTextInteractionFlags(Qt.TextBrowserInteraction)
  33. self.ui.lbl_mail.setOpenExternalLinks(True)
  34. self.ui.btn_open_log_dir.clicked.connect(self.open_log_dir)
  35. self.ui.btn_test.setVisible(Path(MAIN / "test").isdir())
  36. self.ui.btn_test.clicked.connect(self.run_tests)
  37. self._chk_dlg = QTextBrowser()
  38. self._chk_dlg.setMinimumSize(500, 400)
  39. self._chk_dlg.setWindowTitle("Checkup: Résultats")
  40. def open_log_dir(self):
  41. path = Path(LOGDIR).abspath()
  42. if platform.system() == "Windows":
  43. os.startfile(path)
  44. else:
  45. subprocess.Popen(["open", path])
  46. def run_tests(self):
  47. cov = coverage.Coverage()
  48. cov.start()
  49. _initial_project = QgsProject.instance().absoluteFilePath()
  50. if _initial_project:
  51. QgsProject.instance().write(_initial_project)
  52. QApplication.setOverrideCursor(Qt.WaitCursor)
  53. loader = unittest.TestLoader()
  54. tests = loader.discover(Path(TESTDIR).abspath())
  55. with open(LOGDIR / "checkup.txt", "w+") as f:
  56. runner = unittest.TextTestRunner(stream=f)
  57. runner.run(tests)
  58. cov.stop()
  59. cov.save()
  60. COVERAGE_DIR.mkdir_p()
  61. cov.html_report(directory=COVERAGE_DIR)
  62. if _initial_project:
  63. QgsProject.instance().clear()
  64. QgsProject.instance().read(_initial_project)
  65. QApplication.restoreOverrideCursor()
  66. with open(LOGDIR / "checkup.txt", "r") as f:
  67. self._chk_dlg.setText(f.read())
  68. self._chk_dlg.show()