Ovh instance management with PySide2
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

GuiManagement.py 6.2 KiB

3 anos atrás
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_()