13 import sys |
13 import sys |
14 import shutil |
14 import shutil |
15 import json |
15 import json |
16 import copy |
16 import copy |
17 |
17 |
18 from PyQt5.QtCore import pyqtSlot, QObject |
18 from PyQt5.QtCore import pyqtSlot, pyqtSignal, QObject |
19 from PyQt5.QtWidgets import QDialog |
19 from PyQt5.QtWidgets import QDialog |
20 |
20 |
21 from E5Gui import E5MessageBox |
21 from E5Gui import E5MessageBox |
22 from E5Gui.E5Application import e5App |
22 from E5Gui.E5Application import e5App |
23 |
23 |
25 |
25 |
26 |
26 |
27 class VirtualenvManager(QObject): |
27 class VirtualenvManager(QObject): |
28 """ |
28 """ |
29 Class implementing an object to manage Python virtual environments. |
29 Class implementing an object to manage Python virtual environments. |
|
30 |
|
31 @signal virtualEnvironmentAdded() emitted to indicate the addition of |
|
32 a virtual environment |
|
33 @signal virtualEnvironmentRemoved() emitted to indicate the removal and |
|
34 deletion of a virtual environment |
|
35 @signal virtualEnvironmentChanged(name) emitted to indicate a change of |
|
36 a virtual environment |
30 """ |
37 """ |
31 DefaultKey = "<default>" |
38 DefaultKey = "<default>" |
|
39 |
|
40 virtualEnvironmentAdded = pyqtSignal() |
|
41 virtualEnvironmentRemoved = pyqtSignal() |
|
42 virtualEnvironmentChanged = pyqtSignal(str) |
32 |
43 |
33 def __init__(self, parent=None): |
44 def __init__(self, parent=None): |
34 """ |
45 """ |
35 Constructor |
46 Constructor |
36 |
47 |
232 "exec_path": execPath, |
243 "exec_path": execPath, |
233 } |
244 } |
234 |
245 |
235 self.__saveSettings() |
246 self.__saveSettings() |
236 |
247 |
|
248 self.virtualEnvironmentAdded.emit() |
237 if self.__virtualenvManagerDialog: |
249 if self.__virtualenvManagerDialog: |
238 self.__virtualenvManagerDialog.refresh() |
250 self.__virtualenvManagerDialog.refresh() |
239 |
251 |
240 def setVirtualEnv(self, venvName, venvDirectory, venvInterpreter, |
252 def setVirtualEnv(self, venvName, venvDirectory, venvInterpreter, |
241 venvVariant, isGlobal, isConda, isRemote, |
253 venvVariant, isGlobal, isConda, isRemote, |
281 "exec_path": execPath, |
293 "exec_path": execPath, |
282 } |
294 } |
283 |
295 |
284 self.__saveSettings() |
296 self.__saveSettings() |
285 |
297 |
|
298 self.virtualEnvironmentChanged.emit(venvName) |
286 if self.__virtualenvManagerDialog: |
299 if self.__virtualenvManagerDialog: |
287 self.__virtualenvManagerDialog.refresh() |
300 self.__virtualenvManagerDialog.refresh() |
288 |
301 |
289 def renameVirtualEnv(self, oldVenvName, venvName, venvDirectory, |
302 def renameVirtualEnv(self, oldVenvName, venvName, venvDirectory, |
290 venvInterpreter, venvVariant, isGlobal, isConda, |
303 venvInterpreter, venvVariant, isGlobal, isConda, |
366 True) |
379 True) |
367 del self.__virtualEnvironments[venvName] |
380 del self.__virtualEnvironments[venvName] |
368 |
381 |
369 self.__saveSettings() |
382 self.__saveSettings() |
370 |
383 |
|
384 self.virtualEnvironmentRemoved.emit() |
371 if self.__virtualenvManagerDialog: |
385 if self.__virtualenvManagerDialog: |
372 self.__virtualenvManagerDialog.refresh() |
386 self.__virtualenvManagerDialog.refresh() |
373 |
387 |
374 def __isEnvironmentDeleteable(self, venvName): |
388 def __isEnvironmentDeleteable(self, venvName): |
375 """ |
389 """ |
419 if venvName in self.__virtualEnvironments: |
433 if venvName in self.__virtualEnvironments: |
420 del self.__virtualEnvironments[venvName] |
434 del self.__virtualEnvironments[venvName] |
421 |
435 |
422 self.__saveSettings() |
436 self.__saveSettings() |
423 |
437 |
|
438 self.virtualEnvironmentRemoved.emit() |
424 if self.__virtualenvManagerDialog: |
439 if self.__virtualenvManagerDialog: |
425 self.__virtualenvManagerDialog.refresh() |
440 self.__virtualenvManagerDialog.refresh() |
426 |
441 |
427 def getEnvironmentEntries(self): |
442 def getEnvironmentEntries(self): |
428 """ |
443 """ |