26 from .PipDialog import PipDialog |
26 from .PipDialog import PipDialog |
27 from . import DefaultIndexUrlXml |
27 from . import DefaultIndexUrlXml |
28 |
28 |
29 import Preferences |
29 import Preferences |
30 import Globals |
30 import Globals |
31 |
31 ## |
32 import UI.PixmapCache |
32 ##import UI.PixmapCache |
33 |
33 |
34 |
34 |
35 class Pip(QObject): |
35 class Pip(QObject): |
36 """ |
36 """ |
37 Class implementing the pip GUI logic. |
37 Class implementing the pip GUI logic. |
38 """ |
38 """ |
39 def __init__(self, plugin, parent=None): |
39 def __init__(self, parent=None): |
40 """ |
40 """ |
41 Constructor |
41 Constructor |
42 |
42 |
43 @param plugin reference to the plugin object |
|
44 @type PipInterfacePlugin |
|
45 @param parent parent |
43 @param parent parent |
46 @type QObject |
44 @type QObject |
47 """ |
45 """ |
48 super(Pip, self).__init__(parent) |
46 super(Pip, self).__init__(parent) |
49 |
47 |
50 self.__plugin = plugin |
|
51 self.__ui = parent |
|
52 |
|
53 self.__virtualenvManager = e5App().getObject("VirtualEnvManager") |
48 self.__virtualenvManager = e5App().getObject("VirtualEnvManager") |
54 self.__project = e5App().getObject("Project") |
49 ## self.__project = e5App().getObject("Project") |
55 |
50 |
56 self.__menus = {} # dictionary with references to menus |
51 self.__menus = {} # dictionary with references to menus |
57 |
52 |
58 self.__plugin.currentEnvironmentChanged.connect( |
53 ## self.__plugin.currentEnvironmentChanged.connect( |
59 self.__handleTearOffMenu) |
54 ## self.__handleTearOffMenu) |
60 |
55 |
61 def initActions(self): |
56 def initActions(self): |
62 """ |
57 """ |
63 Public method to define the actions. |
58 Public method to define the actions. |
64 """ |
59 """ |
77 """</p>""" |
72 """</p>""" |
78 )) |
73 )) |
79 self.selectEnvironmentAct.triggered.connect(self.__selectPipVirtualenv) |
74 self.selectEnvironmentAct.triggered.connect(self.__selectPipVirtualenv) |
80 self.actions.append(self.selectEnvironmentAct) |
75 self.actions.append(self.selectEnvironmentAct) |
81 |
76 |
82 ############################################## |
77 ## ############################################## |
83 ## Actions for listing packages |
78 ## ## Actions for listing packages |
84 ############################################## |
79 ## ############################################## |
85 |
80 ## |
86 self.listPackagesAct = E5Action( |
81 ## self.listPackagesAct = E5Action( |
87 self.tr('List Installed Packages'), |
82 ## self.tr('List Installed Packages'), |
88 self.tr('&List Installed Packages...'), |
83 ## self.tr('&List Installed Packages...'), |
89 0, 0, |
84 ## 0, 0, |
90 self, 'pip_list_packages') |
85 ## self, 'pip_list_packages') |
91 self.listPackagesAct.setStatusTip(self.tr( |
86 ## self.listPackagesAct.setStatusTip(self.tr( |
92 'List all installed packages with versions')) |
87 ## 'List all installed packages with versions')) |
93 self.listPackagesAct.setWhatsThis(self.tr( |
88 ## self.listPackagesAct.setWhatsThis(self.tr( |
94 """<b>List Installed Packages</b>""" |
89 ## """<b>List Installed Packages</b>""" |
95 """<p>This lists all the installed packages together""" |
90 ## """<p>This lists all the installed packages together""" |
96 """ with their versions.</p>""" |
91 ## """ with their versions.</p>""" |
97 )) |
92 ## )) |
98 self.listPackagesAct.triggered.connect(self.__listPackages) |
93 ## self.listPackagesAct.triggered.connect(self.__listPackages) |
99 self.actions.append(self.listPackagesAct) |
94 ## self.actions.append(self.listPackagesAct) |
100 |
95 ## |
101 self.listUptodatePackagesAct = E5Action( |
96 ## self.listUptodatePackagesAct = E5Action( |
102 self.tr('List Up-to-date Packages'), |
97 ## self.tr('List Up-to-date Packages'), |
103 self.tr('List Up-to-&date Packages...'), |
98 ## self.tr('List Up-to-&date Packages...'), |
104 0, 0, |
99 ## 0, 0, |
105 self, 'pip_list_uptodate_packages') |
100 ## self, 'pip_list_uptodate_packages') |
106 self.listUptodatePackagesAct.setStatusTip(self.tr( |
101 ## self.listUptodatePackagesAct.setStatusTip(self.tr( |
107 'List all installed, up-to-date packages with versions')) |
102 ## 'List all installed, up-to-date packages with versions')) |
108 self.listUptodatePackagesAct.setWhatsThis(self.tr( |
103 ## self.listUptodatePackagesAct.setWhatsThis(self.tr( |
109 """<b>List Up-to-date Packages</b>""" |
104 ## """<b>List Up-to-date Packages</b>""" |
110 """<p>This lists all the installed, up-to-date packages together""" |
105 ## """<p>This lists all the installed, up-to-date packages together""" |
111 """ with their versions.</p>""" |
106 ## """ with their versions.</p>""" |
112 )) |
107 ## )) |
113 self.listUptodatePackagesAct.triggered.connect( |
108 ## self.listUptodatePackagesAct.triggered.connect( |
114 self.__listUptodatePackages) |
109 ## self.__listUptodatePackages) |
115 self.actions.append(self.listUptodatePackagesAct) |
110 ## self.actions.append(self.listUptodatePackagesAct) |
116 |
111 ## |
117 self.listOutdatedPackagesAct = E5Action( |
112 ## self.listOutdatedPackagesAct = E5Action( |
118 self.tr('List Outdated Packages'), |
113 ## self.tr('List Outdated Packages'), |
119 self.tr('List &Outdated Packages...'), |
114 ## self.tr('List &Outdated Packages...'), |
120 0, 0, |
115 ## 0, 0, |
121 self, 'pip_list_outdated_packages') |
116 ## self, 'pip_list_outdated_packages') |
122 self.listOutdatedPackagesAct.setStatusTip(self.tr( |
117 ## self.listOutdatedPackagesAct.setStatusTip(self.tr( |
123 'List all installed, outdated packages with versions')) |
118 ## 'List all installed, outdated packages with versions')) |
124 self.listOutdatedPackagesAct.setWhatsThis(self.tr( |
119 ## self.listOutdatedPackagesAct.setWhatsThis(self.tr( |
125 """<b>List Up-to-date Packages</b>""" |
120 ## """<b>List Up-to-date Packages</b>""" |
126 """<p>This lists all the installed, outdated packages together""" |
121 ## """<p>This lists all the installed, outdated packages together""" |
127 """ with their current and latest versions.</p>""" |
122 ## """ with their current and latest versions.</p>""" |
128 )) |
123 ## )) |
129 self.listOutdatedPackagesAct.triggered.connect( |
124 ## self.listOutdatedPackagesAct.triggered.connect( |
130 self.__listOutdatedPackages) |
125 ## self.__listOutdatedPackages) |
131 self.actions.append(self.listOutdatedPackagesAct) |
126 ## self.actions.append(self.listOutdatedPackagesAct) |
132 |
127 ## |
133 ############################################## |
128 ############################################## |
134 ## Actions for installing packages |
129 ## Actions for installing packages |
135 ############################################## |
130 ############################################## |
136 |
131 |
137 self.installPackagesAct = E5Action( |
132 self.installPackagesAct = E5Action( |
365 @return the menu generated |
360 @return the menu generated |
366 @rtype QMenu |
361 @rtype QMenu |
367 """ |
362 """ |
368 self.__menus = {} # clear menus references |
363 self.__menus = {} # clear menus references |
369 |
364 |
370 menu = QMenu(self.tr('P&ython Package Management'), self.__ui) |
365 menu = QMenu() |
371 menu.setTearOffEnabled(True) |
366 ## menu.setTearOffEnabled(True) |
372 menu.setIcon(UI.PixmapCache.getIcon("pypi.png")) |
367 ## menu.setIcon(UI.PixmapCache.getIcon("pypi.png")) |
373 |
368 |
374 menu.addAction(self.selectEnvironmentAct) |
369 menu.addAction(self.selectEnvironmentAct) |
375 menu.addSeparator() |
370 menu.addSeparator() |
376 menu.addAction(self.listPackagesAct) |
371 ## menu.addAction(self.listPackagesAct) |
377 menu.addAction(self.listUptodatePackagesAct) |
372 ## menu.addAction(self.listUptodatePackagesAct) |
378 menu.addAction(self.listOutdatedPackagesAct) |
373 ## menu.addAction(self.listOutdatedPackagesAct) |
379 menu.addSeparator() |
374 ## menu.addSeparator() |
380 menu.addAction(self.installPipAct) |
375 menu.addAction(self.installPipAct) |
381 menu.addSeparator() |
376 menu.addSeparator() |
382 menu.addAction(self.installPackagesAct) |
377 menu.addAction(self.installPackagesAct) |
383 menu.addAction(self.installLocalPackageAct) |
378 menu.addAction(self.installLocalPackageAct) |
384 menu.addAction(self.installRequirementsAct) |
379 menu.addAction(self.installRequirementsAct) |
385 menu.addSeparator() |
380 menu.addSeparator() |
386 menu.addAction(self.upgradePipAct) |
381 menu.addAction(self.upgradePipAct) |
387 menu.addAction(self.upgradePackagesAct) |
382 ## menu.addAction(self.upgradePackagesAct) |
388 menu.addSeparator() |
383 menu.addSeparator() |
389 menu.addAction(self.uninstallPackagesAct) |
384 ## menu.addAction(self.uninstallPackagesAct) |
390 menu.addAction(self.uninstallRequirementsAct) |
385 menu.addAction(self.uninstallRequirementsAct) |
391 menu.addSeparator() |
386 menu.addSeparator() |
392 menu.addAction(self.generateRequirementsAct) |
387 menu.addAction(self.generateRequirementsAct) |
393 menu.addSeparator() |
388 menu.addSeparator() |
394 menu.addAction(self.searchPyPIAct) |
389 ## menu.addAction(self.searchPyPIAct) |
395 menu.addSeparator() |
390 ## menu.addSeparator() |
396 menu.addAction(self.repairPipAct) |
391 menu.addAction(self.repairPipAct) |
397 menu.addSeparator() |
392 menu.addSeparator() |
398 menu.addAction(self.editUserConfigAct) |
393 menu.addAction(self.editUserConfigAct) |
399 menu.addAction(self.editVirtualenvConfigAct) |
394 menu.addAction(self.editVirtualenvConfigAct) |
400 menu.addSeparator() |
395 menu.addSeparator() |
637 self.tr("Virtual Environment for pip"), |
636 self.tr("Virtual Environment for pip"), |
638 self.tr("Select the virtual environment to be used:"), |
637 self.tr("Select the virtual environment to be used:"), |
639 environments, index, False) |
638 environments, index, False) |
640 |
639 |
641 if ok and environment: |
640 if ok and environment: |
642 self.__plugin.setPreferences("CurrentEnvironment", |
641 Preferences.getPip("CurrentEnvironment", environment) |
643 environment) |
|
644 else: |
642 else: |
645 E5MessageBox.warning( |
643 E5MessageBox.warning( |
646 None, |
644 None, |
647 self.tr("Virtual Environment for pip"), |
645 self.tr("Virtual Environment for pip"), |
648 self.tr("""No virtual environments have been configured yet.""" |
646 self.tr("""No virtual environments have been configured yet.""" |
649 """ Please use the Virtualenv Manager to do that.""")) |
647 """ Please use the Virtualenv Manager to do that.""")) |
650 |
648 |
|
649 # TODO: move these three to the widget |
651 def __listPackages(self): |
650 def __listPackages(self): |
652 """ |
651 """ |
653 Private slot to list all installed packages. |
652 Private slot to list all installed packages. |
654 """ |
653 """ |
655 from .PipListDialog import PipListDialog |
654 from .PipListDialog import PipListDialog |
656 self.__listDialog = PipListDialog( |
655 self.__listDialog = PipListDialog( |
657 self, "list", self.__plugin.getPreferences("PipSearchIndex"), |
656 self, "list", Preferences.getPip("PipSearchIndex"), |
658 self.tr("Installed Packages")) |
657 self.tr("Installed Packages")) |
659 self.__listDialog.show() |
658 self.__listDialog.show() |
660 self.__listDialog.start() |
659 self.__listDialog.start() |
661 |
660 |
662 def __listUptodatePackages(self): |
661 def __listUptodatePackages(self): |
663 """ |
662 """ |
664 Private slot to list all installed, up-to-date packages. |
663 Private slot to list all installed, up-to-date packages. |
665 """ |
664 """ |
666 from .PipListDialog import PipListDialog |
665 from .PipListDialog import PipListDialog |
667 self.__listUptodateDialog = PipListDialog( |
666 self.__listUptodateDialog = PipListDialog( |
668 self, "uptodate", self.__plugin.getPreferences("PipSearchIndex"), |
667 self, "uptodate", Preferences.getPip("PipSearchIndex"), |
669 self.tr("Up-to-date Packages")) |
668 self.tr("Up-to-date Packages")) |
670 self.__listUptodateDialog.show() |
669 self.__listUptodateDialog.show() |
671 self.__listUptodateDialog.start() |
670 self.__listUptodateDialog.start() |
672 |
671 |
673 def __listOutdatedPackages(self): |
672 def __listOutdatedPackages(self): |
674 """ |
673 """ |
675 Private slot to list all installed, up-to-date packages. |
674 Private slot to list all installed, up-to-date packages. |
676 """ |
675 """ |
677 from .PipListDialog import PipListDialog |
676 from .PipListDialog import PipListDialog |
678 self.__listOutdatedDialog = PipListDialog( |
677 self.__listOutdatedDialog = PipListDialog( |
679 self, "outdated", self.__plugin.getPreferences("PipSearchIndex"), |
678 self, "outdated", Preferences.getPip("PipSearchIndex"), |
680 self.tr("Outdated Packages")) |
679 self.tr("Outdated Packages")) |
681 self.__listOutdatedDialog.show() |
680 self.__listOutdatedDialog.show() |
682 self.__listOutdatedDialog.start() |
681 self.__listOutdatedDialog.start() |
683 |
682 |
684 def __editUserConfiguration(self): |
683 def __editUserConfiguration(self): |
768 dia = PipDialog(self.tr('Install PIP')) |
769 dia = PipDialog(self.tr('Install PIP')) |
769 if userSite: |
770 if userSite: |
770 commands = [(interpreter, ["-m", "ensurepip", "--user"])] |
771 commands = [(interpreter, ["-m", "ensurepip", "--user"])] |
771 else: |
772 else: |
772 commands = [(interpreter, ["-m", "ensurepip"])] |
773 commands = [(interpreter, ["-m", "ensurepip"])] |
773 if self.__plugin.getPreferences("PipSearchIndex"): |
774 if Preferences.getPip("PipSearchIndex"): |
774 indexUrl = \ |
775 indexUrl = Preferences.getPip("PipSearchIndex") + "/simple" |
775 self.__plugin.getPreferences("PipSearchIndex") + "/simple" |
|
776 args = ["-m", "pip", "install", "--index-url", indexUrl, |
776 args = ["-m", "pip", "install", "--index-url", indexUrl, |
777 "--upgrade"] |
777 "--upgrade"] |
778 else: |
778 else: |
779 args = ["-m", "pip", "install", "--upgrade"] |
779 args = ["-m", "pip", "install", "--upgrade"] |
780 if userSite: |
780 if userSite: |