Ovh instance management with PySide2
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

GuiManagement.py 6.2 KiB

il y a 3 ans
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. from PySide2.QtWidgets import QMainWindow, QApplication, QDialog
  2. from PySide2.QtCore import QAbstractListModel, QAbstractTableModel, Qt, Slot
  3. from MainApplication import Ui_MainWindow
  4. from UserDialog import Ui_userDialog
  5. import ovh_api
  6. # Abstract models
  7. class UserModel(QAbstractListModel):
  8. def __init__(self, users=[]):
  9. super().__init__()
  10. self.users = users
  11. def data(self, index, role):
  12. if role == Qt.DisplayRole:
  13. return self.users[index.row()][1]
  14. def rowCount(self, index):
  15. return len(self.users)
  16. class InstanceModel(QAbstractTableModel):
  17. def __init__(self, instances=[]):
  18. super().__init__()
  19. self.instances = instances
  20. def data(self, index, role):
  21. if role == Qt.DisplayRole:
  22. # we don't show id's, so +1
  23. return self.instances[index.row()][index.column() + 1]
  24. def rowCount(self, index):
  25. return len(self.instances)
  26. def columnCount(self, index):
  27. # we don't show id's, so -1
  28. if len(self.instances):
  29. return len(self.instances[0]) - 1
  30. return 0
  31. # UI Classes
  32. class UserDialog(QDialog, Ui_userDialog):
  33. """ A dialog to add and edit users"""
  34. def __init__(self, user=None):
  35. super().__init__()
  36. self.setupUi(self)
  37. if user:
  38. self.keyid= user[0]
  39. self.username = user[1]
  40. self.publickey = user[2]
  41. self.name.setText(self.username)
  42. self.key.setPlainText(self.publickey)
  43. @Slot()
  44. def accept(self):
  45. QApplication.setOverrideCursor(Qt.WaitCursor)
  46. if self.windowTitle() == 'Ajout':
  47. ovh_api.add_user(self.name.text(), self.key.toPlainText())
  48. else:
  49. if self.username != self.name.text() or self.publickey != self.key.toPlainText():
  50. ovh_api.delete_user(self.keyid)
  51. ovh_api.add_user(self.name.text(), self.key.toPlainText())
  52. QApplication.restoreOverrideCursor()
  53. super().accept()
  54. class MainWindow(QMainWindow, Ui_MainWindow):
  55. """ The main window"""
  56. def __init__(self, *args, obj=None, **kwargs):
  57. super(MainWindow, self).__init__(*args, **kwargs)
  58. self.setupUi(self)
  59. users = ovh_api.get_users()
  60. self.user_model = UserModel(users=users)
  61. self.userView.setModel(self.user_model)
  62. self.userView.selectionModel().selectionChanged.connect(self.change_user_selection)
  63. self.addButton.pressed.connect(self.add_user)
  64. self.deleteButton.pressed.connect(self.delete_user)
  65. self.editButton.pressed.connect(self.edit_user)
  66. self.instanciateButton.pressed.connect(self.instanciate)
  67. self.regionCombo.addItems(ovh_api.regions)
  68. instances = ovh_api.get_instances()
  69. self.instance_model = InstanceModel(instances=instances)
  70. self.instanceView.setModel(self.instance_model)
  71. self.instanceView.selectionModel().selectionChanged.connect(self.change_instance_selection)
  72. self.destroyButton.pressed.connect(self.destroy_instance)
  73. self.refreshButton.pressed.connect(self.refresh_instances)
  74. self.show()
  75. # Instances management methods
  76. @Slot()
  77. def instanciate(self):
  78. region = self.regionCombo.currentText()
  79. selected_idx = self.userView.selectedIndexes()
  80. QApplication.setOverrideCursor(Qt.WaitCursor)
  81. for usr_idx in selected_idx:
  82. row = usr_idx.row()
  83. user = self.user_model.users[row]
  84. user_id = user[0]
  85. username = user[1]
  86. ovh_api.create_instance(user_id, username, region)
  87. self.refresh_instances()
  88. QApplication.restoreOverrideCursor()
  89. @Slot()
  90. def change_instance_selection(self):
  91. selected_rows = self.instanceView.selectionModel().selectedRows()
  92. destroy_active = True if selected_rows else False
  93. self.destroyButton.setEnabled(destroy_active)
  94. @Slot()
  95. def destroy_instance(self):
  96. QApplication.setOverrideCursor(Qt.WaitCursor)
  97. selected_rows = self.instanceView.selectionModel().selectedRows()
  98. for idx in selected_rows:
  99. row = idx.row()
  100. instance_id = self.instance_model.instances[row][0]
  101. ovh_api.delete_instance(instance_id)
  102. self.refresh_instances()
  103. QApplication.restoreOverrideCursor()
  104. @Slot()
  105. def refresh_instances(self):
  106. QApplication.setOverrideCursor(Qt.WaitCursor)
  107. self.instance_model.instances = ovh_api.get_instances()
  108. self.instance_model.layoutChanged.emit()
  109. QApplication.restoreOverrideCursor()
  110. # Users management methods
  111. @Slot()
  112. def change_user_selection(self):
  113. del_active = False
  114. edit_active = False
  115. instanciate_active = False
  116. sel_idxes = self.userView.selectedIndexes()
  117. if sel_idxes:
  118. del_active = True
  119. instanciate_active = True
  120. if len(sel_idxes) == 1:
  121. edit_active = True
  122. self.deleteButton.setEnabled(del_active)
  123. self.editButton.setEnabled(edit_active)
  124. self.instanciateButton.setEnabled(instanciate_active)
  125. @Slot()
  126. def add_user(self):
  127. dlg = UserDialog()
  128. dlg.setWindowTitle('Ajout')
  129. if dlg.exec_():
  130. self.refresh_users()
  131. @Slot()
  132. def edit_user(self):
  133. usr_idx = self.userView.selectedIndexes()[0]
  134. row = usr_idx.row()
  135. user = self.user_model.users[row]
  136. dlg = UserDialog(user)
  137. dlg.setWindowTitle('Modification')
  138. if dlg.exec_():
  139. self.refresh_users()
  140. @Slot()
  141. def delete_user(self):
  142. # TODO : confirmation
  143. selected_idx = self.userView.selectedIndexes()
  144. QApplication.setOverrideCursor(Qt.WaitCursor)
  145. for usr_idx in selected_idx:
  146. row = usr_idx.row()
  147. user_id = self.user_model.users[row][0]
  148. res = ovh_api.delete_user(user_id)
  149. print(res)
  150. self.refresh_users()
  151. QApplication.restoreOverrideCursor()
  152. def refresh_users(self):
  153. self.user_model.users = ovh_api.get_users()
  154. self.user_model.layoutChanged.emit()
  155. self.userView.clearSelection()
  156. app = QApplication([])
  157. window = MainWindow()
  158. app.exec_()