dlg_contact.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. """
  2. """
  3. import logging
  4. import os
  5. import platform
  6. from qgis.core import QgsProject
  7. import subprocess
  8. import unittest
  9. from PyQt5 import QtWidgets
  10. from PyQt5 import uic
  11. from PyQt5.QtCore import Qt
  12. from PyQt5.QtGui import QIcon, QPixmap
  13. from PyQt5.QtWidgets import QTextBrowser, QApplication
  14. import coverage
  15. from core.constants import MAIN, LOGDIR, RSCDIR, CONTACT, TESTDIR, COVERAGE_DIR
  16. from path import Path
  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()