PipInterface/Pip.py

branch
pypi
changeset 6795
6e2ed2aac325
parent 6793
cca6a35f3ad2
child 6798
3985c1a67fa2
equal deleted inserted replaced
6793:cca6a35f3ad2 6795:6e2ed2aac325
55 ## self.__menus = {} # dictionary with references to menus 55 ## self.__menus = {} # dictionary with references to menus
56 ## 56 ##
57 ## self.__plugin.currentEnvironmentChanged.connect( 57 ## self.__plugin.currentEnvironmentChanged.connect(
58 ## self.__handleTearOffMenu) 58 ## self.__handleTearOffMenu)
59 59
60 def initActions(self): 60 ## def initActions(self):
61 """ 61 ## """
62 Public method to define the actions. 62 ## Public method to define the actions.
63 """ 63 ## """
64 self.actions = [] 64 ## self.actions = []
65 65 ##
66 ## self.selectEnvironmentAct = E5Action( 66 ## self.selectEnvironmentAct = E5Action(
67 ## self.tr('Virtual Environment for pip'), 67 ## self.tr('Virtual Environment for pip'),
68 ## self.tr('&Virtual Environment for pip'), 68 ## self.tr('&Virtual Environment for pip'),
69 ## 0, 0, 69 ## 0, 0,
70 ## self, 'pip_select_environment') 70 ## self, 'pip_select_environment')
127 ## )) 127 ## ))
128 ## self.listOutdatedPackagesAct.triggered.connect( 128 ## self.listOutdatedPackagesAct.triggered.connect(
129 ## self.__listOutdatedPackages) 129 ## self.__listOutdatedPackages)
130 ## self.actions.append(self.listOutdatedPackagesAct) 130 ## self.actions.append(self.listOutdatedPackagesAct)
131 ## 131 ##
132 ############################################## 132 ## ##############################################
133 ## Actions for installing packages 133 ## ## Actions for installing packages
134 ############################################## 134 ## ##############################################
135 135 ##
136 self.installPackagesAct = E5Action( 136 ## self.installPackagesAct = E5Action(
137 self.tr('Install Packages'), 137 ## self.tr('Install Packages'),
138 self.tr('&Install Packages'), 138 ## self.tr('&Install Packages'),
139 0, 0, 139 ## 0, 0,
140 self, 'pip_install_packages') 140 ## self, 'pip_install_packages')
141 self.installPackagesAct.setStatusTip(self.tr( 141 ## self.installPackagesAct.setStatusTip(self.tr(
142 'Install packages according to user input')) 142 ## 'Install packages according to user input'))
143 self.installPackagesAct.setWhatsThis(self.tr( 143 ## self.installPackagesAct.setWhatsThis(self.tr(
144 """<b>Install Packages</b>""" 144 ## """<b>Install Packages</b>"""
145 """<p>This installs packages according to user input.</p>""" 145 ## """<p>This installs packages according to user input.</p>"""
146 )) 146 ## ))
147 self.installPackagesAct.triggered.connect(self.__installPackages) 147 ## self.installPackagesAct.triggered.connect(self.__installPackages)
148 self.actions.append(self.installPackagesAct) 148 ## self.actions.append(self.installPackagesAct)
149 149 ##
150 self.installLocalPackageAct = E5Action( 150 ## self.installLocalPackageAct = E5Action(
151 self.tr('Install Local Package'), 151 ## self.tr('Install Local Package'),
152 self.tr('Install Local Package'), 152 ## self.tr('Install Local Package'),
153 0, 0, 153 ## 0, 0,
154 self, 'pip_install_local_package') 154 ## self, 'pip_install_local_package')
155 self.installLocalPackageAct.setStatusTip(self.tr( 155 ## self.installLocalPackageAct.setStatusTip(self.tr(
156 'Install a package from local storage')) 156 ## 'Install a package from local storage'))
157 self.installLocalPackageAct.setWhatsThis(self.tr( 157 ## self.installLocalPackageAct.setWhatsThis(self.tr(
158 """<b>Install Local Package</b>""" 158 ## """<b>Install Local Package</b>"""
159 """<p>This installs a package available on local storage.</p>""" 159 ## """<p>This installs a package available on local storage.</p>"""
160 )) 160 ## ))
161 self.installLocalPackageAct.triggered.connect( 161 ## self.installLocalPackageAct.triggered.connect(
162 self.__installLocalPackage) 162 ## self.__installLocalPackage)
163 self.actions.append(self.installLocalPackageAct) 163 ## self.actions.append(self.installLocalPackageAct)
164 164 ##
165 self.installRequirementsAct = E5Action( 165 ## self.installRequirementsAct = E5Action(
166 self.tr('Install Requirements'), 166 ## self.tr('Install Requirements'),
167 self.tr('Install Requirements'), 167 ## self.tr('Install Requirements'),
168 0, 0, 168 ## 0, 0,
169 self, 'pip_install_requirements') 169 ## self, 'pip_install_requirements')
170 self.installRequirementsAct.setStatusTip(self.tr( 170 ## self.installRequirementsAct.setStatusTip(self.tr(
171 'Install packages according to a requirements file')) 171 ## 'Install packages according to a requirements file'))
172 self.installRequirementsAct.setWhatsThis(self.tr( 172 ## self.installRequirementsAct.setWhatsThis(self.tr(
173 """<b>Install Requirements</b>""" 173 ## """<b>Install Requirements</b>"""
174 """<p>This installs packages according to a requirements""" 174 ## """<p>This installs packages according to a requirements"""
175 """ file.</p>""" 175 ## """ file.</p>"""
176 )) 176 ## ))
177 self.installRequirementsAct.triggered.connect( 177 ## self.installRequirementsAct.triggered.connect(
178 self.__installRequirements) 178 ## self.__installRequirements)
179 self.actions.append(self.installRequirementsAct) 179 ## self.actions.append(self.installRequirementsAct)
180 180 ##
181 self.installPipAct = E5Action( 181 ## self.installPipAct = E5Action(
182 self.tr('Install Pip'), 182 ## self.tr('Install Pip'),
183 self.tr('Install Pip'), 183 ## self.tr('Install Pip'),
184 0, 0, 184 ## 0, 0,
185 self, 'pip_install_pip') 185 ## self, 'pip_install_pip')
186 self.installPipAct.setStatusTip(self.tr( 186 ## self.installPipAct.setStatusTip(self.tr(
187 'Install the pip package itself')) 187 ## 'Install the pip package itself'))
188 self.installPipAct.setWhatsThis(self.tr( 188 ## self.installPipAct.setWhatsThis(self.tr(
189 """<b>Install Pip</b>""" 189 ## """<b>Install Pip</b>"""
190 """<p>This installs the pip package itself.</p>""" 190 ## """<p>This installs the pip package itself.</p>"""
191 )) 191 ## ))
192 self.installPipAct.triggered.connect(self.__installPip) 192 ## self.installPipAct.triggered.connect(self.__installPip)
193 self.actions.append(self.installPipAct) 193 ## self.actions.append(self.installPipAct)
194 194 ##
195 self.repairPipAct = E5Action( 195 ## self.repairPipAct = E5Action(
196 self.tr('Repair Pip'), 196 ## self.tr('Repair Pip'),
197 self.tr('Repair Pip'), 197 ## self.tr('Repair Pip'),
198 0, 0, 198 ## 0, 0,
199 self, 'pip_repair_pip') 199 ## self, 'pip_repair_pip')
200 self.repairPipAct.setStatusTip(self.tr( 200 ## self.repairPipAct.setStatusTip(self.tr(
201 'Repair the pip package')) 201 ## 'Repair the pip package'))
202 self.repairPipAct.setWhatsThis(self.tr( 202 ## self.repairPipAct.setWhatsThis(self.tr(
203 """<b>Repair Pip</b>""" 203 ## """<b>Repair Pip</b>"""
204 """<p>This repairs the pip package by re-installing it.</p>""" 204 ## """<p>This repairs the pip package by re-installing it.</p>"""
205 )) 205 ## ))
206 self.repairPipAct.triggered.connect(self.__repairPip) 206 ## self.repairPipAct.triggered.connect(self.__repairPip)
207 self.actions.append(self.repairPipAct) 207 ## self.actions.append(self.repairPipAct)
208 208 ##
209 self.upgradePipAct = E5Action( 209 ## self.upgradePipAct = E5Action(
210 self.tr('Upgrade Pip'), 210 ## self.tr('Upgrade Pip'),
211 self.tr('Upgrade &Pip'), 211 ## self.tr('Upgrade &Pip'),
212 0, 0, 212 ## 0, 0,
213 self, 'pip_upgrade_pip') 213 ## self, 'pip_upgrade_pip')
214 self.upgradePipAct.setStatusTip(self.tr( 214 ## self.upgradePipAct.setStatusTip(self.tr(
215 'Upgrade the pip package itself')) 215 ## 'Upgrade the pip package itself'))
216 self.upgradePipAct.setWhatsThis(self.tr( 216 ## self.upgradePipAct.setWhatsThis(self.tr(
217 """<b>Upgrade Pip</b>""" 217 ## """<b>Upgrade Pip</b>"""
218 """<p>This upgrades the pip package itself.</p>""" 218 ## """<p>This upgrades the pip package itself.</p>"""
219 )) 219 ## ))
220 self.upgradePipAct.triggered.connect(self.upgradePip) 220 ## self.upgradePipAct.triggered.connect(self.upgradePip)
221 self.actions.append(self.upgradePipAct) 221 ## self.actions.append(self.upgradePipAct)
222 222 ##
223 self.upgradePackagesAct = E5Action( 223 ## self.upgradePackagesAct = E5Action(
224 self.tr('Upgrade Packages'), 224 ## self.tr('Upgrade Packages'),
225 self.tr('&Upgrade Packages'), 225 ## self.tr('&Upgrade Packages'),
226 0, 0, 226 ## 0, 0,
227 self, 'pip_upgrade_packages') 227 ## self, 'pip_upgrade_packages')
228 self.upgradePackagesAct.setStatusTip(self.tr( 228 ## self.upgradePackagesAct.setStatusTip(self.tr(
229 'Upgrade packages according to user input')) 229 ## 'Upgrade packages according to user input'))
230 self.upgradePackagesAct.setWhatsThis(self.tr( 230 ## self.upgradePackagesAct.setWhatsThis(self.tr(
231 """<b>Upgrade Packages</b>""" 231 ## """<b>Upgrade Packages</b>"""
232 """<p>This upgrades packages according to user input.</p>""" 232 ## """<p>This upgrades packages according to user input.</p>"""
233 )) 233 ## ))
234 self.upgradePackagesAct.triggered.connect(self.__upgradePackages) 234 ## self.upgradePackagesAct.triggered.connect(self.__upgradePackages)
235 self.actions.append(self.upgradePackagesAct) 235 ## self.actions.append(self.upgradePackagesAct)
236 236 ##
237 ############################################## 237 ## ##############################################
238 ## Actions for uninstalling packages 238 ## ## Actions for uninstalling packages
239 ############################################## 239 ## ##############################################
240 240 ##
241 self.uninstallPackagesAct = E5Action( 241 ## self.uninstallPackagesAct = E5Action(
242 self.tr('Uninstall Packages'), 242 ## self.tr('Uninstall Packages'),
243 self.tr('Uninstall Packages'), 243 ## self.tr('Uninstall Packages'),
244 0, 0, 244 ## 0, 0,
245 self, 'pip_uninstall_packages') 245 ## self, 'pip_uninstall_packages')
246 self.uninstallPackagesAct.setStatusTip(self.tr( 246 ## self.uninstallPackagesAct.setStatusTip(self.tr(
247 'Uninstall packages according to user input')) 247 ## 'Uninstall packages according to user input'))
248 self.uninstallPackagesAct.setWhatsThis(self.tr( 248 ## self.uninstallPackagesAct.setWhatsThis(self.tr(
249 """<b>Uninstall Packages</b>""" 249 ## """<b>Uninstall Packages</b>"""
250 """<p>This uninstalls packages according to user input.</p>""" 250 ## """<p>This uninstalls packages according to user input.</p>"""
251 )) 251 ## ))
252 self.uninstallPackagesAct.triggered.connect(self.__uninstallPackages) 252 ## self.uninstallPackagesAct.triggered.connect(self.__uninstallPackages)
253 self.actions.append(self.uninstallPackagesAct) 253 ## self.actions.append(self.uninstallPackagesAct)
254 254 ##
255 self.uninstallRequirementsAct = E5Action( 255 ## self.uninstallRequirementsAct = E5Action(
256 self.tr('Uninstall Requirements'), 256 ## self.tr('Uninstall Requirements'),
257 self.tr('Uninstall Requirements'), 257 ## self.tr('Uninstall Requirements'),
258 0, 0, 258 ## 0, 0,
259 self, 'pip_uninstall_requirements') 259 ## self, 'pip_uninstall_requirements')
260 self.uninstallRequirementsAct.setStatusTip(self.tr( 260 ## self.uninstallRequirementsAct.setStatusTip(self.tr(
261 'Uninstall packages according to a requirements file')) 261 ## 'Uninstall packages according to a requirements file'))
262 self.uninstallRequirementsAct.setWhatsThis(self.tr( 262 ## self.uninstallRequirementsAct.setWhatsThis(self.tr(
263 """<b>Uninstall Requirements</b>""" 263 ## """<b>Uninstall Requirements</b>"""
264 """<p>This uninstalls packages according to a requirements""" 264 ## """<p>This uninstalls packages according to a requirements"""
265 """ file.</p>""" 265 ## """ file.</p>"""
266 )) 266 ## ))
267 self.uninstallRequirementsAct.triggered.connect( 267 ## self.uninstallRequirementsAct.triggered.connect(
268 self.__uninstallRequirements) 268 ## self.__uninstallRequirements)
269 self.actions.append(self.uninstallRequirementsAct) 269 ## self.actions.append(self.uninstallRequirementsAct)
270 270 ##
271 ############################################## 271 ## ##############################################
272 ## Actions for generating requirements files 272 ## ## Actions for generating requirements files
273 ############################################## 273 ## ##############################################
274 274 ##
275 self.generateRequirementsAct = E5Action( 275 ## self.generateRequirementsAct = E5Action(
276 self.tr('Generate Requirements'), 276 ## self.tr('Generate Requirements'),
277 self.tr('&Generate Requirements...'), 277 ## self.tr('&Generate Requirements...'),
278 0, 0, 278 ## 0, 0,
279 self, 'pip_generate_requirements') 279 ## self, 'pip_generate_requirements')
280 self.generateRequirementsAct.setStatusTip(self.tr( 280 ## self.generateRequirementsAct.setStatusTip(self.tr(
281 'Generate the contents of a requirements file')) 281 ## 'Generate the contents of a requirements file'))
282 self.generateRequirementsAct.setWhatsThis(self.tr( 282 ## self.generateRequirementsAct.setWhatsThis(self.tr(
283 """<b>Generate Requirements</b>""" 283 ## """<b>Generate Requirements</b>"""
284 """<p>This generates the contents of a requirements file.</p>""" 284 ## """<p>This generates the contents of a requirements file.</p>"""
285 )) 285 ## ))
286 self.generateRequirementsAct.triggered.connect( 286 ## self.generateRequirementsAct.triggered.connect(
287 self.__generateRequirements) 287 ## self.__generateRequirements)
288 self.actions.append(self.generateRequirementsAct) 288 ## self.actions.append(self.generateRequirementsAct)
289 289 ##
290 ## ############################################## 290 ## ##############################################
291 ## ## Actions for generating requirements files 291 ## ## Actions for generating requirements files
292 ## ############################################## 292 ## ##############################################
293 ## 293 ##
294 ## self.searchPyPIAct = E5Action( 294 ## self.searchPyPIAct = E5Action(
304 ## """ Index.</p>""" 304 ## """ Index.</p>"""
305 ## )) 305 ## ))
306 ## self.searchPyPIAct.triggered.connect(self.__searchPyPI) 306 ## self.searchPyPIAct.triggered.connect(self.__searchPyPI)
307 ## self.actions.append(self.searchPyPIAct) 307 ## self.actions.append(self.searchPyPIAct)
308 ## 308 ##
309 ############################################## 309 ## ##############################################
310 ## Actions for editing configuration files 310 ## ## Actions for editing configuration files
311 ############################################## 311 ## ##############################################
312 312 ##
313 self.editUserConfigAct = E5Action( 313 ## self.editUserConfigAct = E5Action(
314 self.tr('Edit User Configuration'), 314 ## self.tr('Edit User Configuration'),
315 self.tr('Edit User Configuration...'), 315 ## self.tr('Edit User Configuration...'),
316 0, 0, 316 ## 0, 0,
317 self, 'pip_edit_user_config') 317 ## self, 'pip_edit_user_config')
318 self.editUserConfigAct.setStatusTip(self.tr( 318 ## self.editUserConfigAct.setStatusTip(self.tr(
319 'Open the per user configuration file in an editor')) 319 ## 'Open the per user configuration file in an editor'))
320 self.editUserConfigAct.setWhatsThis(self.tr( 320 ## self.editUserConfigAct.setWhatsThis(self.tr(
321 """<b>Edit User Configuration</b>""" 321 ## """<b>Edit User Configuration</b>"""
322 """<p>This opens the per user configuration file in an editor.""" 322 ## """<p>This opens the per user configuration file in an editor."""
323 """</p>""" 323 ## """</p>"""
324 )) 324 ## ))
325 self.editUserConfigAct.triggered.connect(self.__editUserConfiguration) 325 ## self.editUserConfigAct.triggered.connect(self.__editUserConfiguration)
326 self.actions.append(self.editUserConfigAct) 326 ## self.actions.append(self.editUserConfigAct)
327 327 ##
328 self.editVirtualenvConfigAct = E5Action( 328 ## self.editVirtualenvConfigAct = E5Action(
329 self.tr('Edit Current Virtualenv Configuration'), 329 ## self.tr('Edit Current Virtualenv Configuration'),
330 self.tr('Edit Current Virtualenv Configuration...'), 330 ## self.tr('Edit Current Virtualenv Configuration...'),
331 0, 0, 331 ## 0, 0,
332 self, 'pip_edit_virtualenv_config') 332 ## self, 'pip_edit_virtualenv_config')
333 self.editVirtualenvConfigAct.setStatusTip(self.tr( 333 ## self.editVirtualenvConfigAct.setStatusTip(self.tr(
334 'Open the current virtualenv configuration file in an editor')) 334 ## 'Open the current virtualenv configuration file in an editor'))
335 self.editVirtualenvConfigAct.setWhatsThis(self.tr( 335 ## self.editVirtualenvConfigAct.setWhatsThis(self.tr(
336 """<b>Edit Current Virtualenv Configuration</b>""" 336 ## """<b>Edit Current Virtualenv Configuration</b>"""
337 """<p>This opens the current virtualenv configuration file in""" 337 ## """<p>This opens the current virtualenv configuration file in"""
338 """ an editor. </p>""" 338 ## """ an editor. </p>"""
339 )) 339 ## ))
340 self.editVirtualenvConfigAct.triggered.connect( 340 ## self.editVirtualenvConfigAct.triggered.connect(
341 self.__editVirtualenvConfiguration) 341 ## self.__editVirtualenvConfiguration)
342 self.actions.append(self.editVirtualenvConfigAct) 342 ## self.actions.append(self.editVirtualenvConfigAct)
343 343 ##
344 self.pipConfigAct = E5Action( 344 ## self.pipConfigAct = E5Action(
345 self.tr('Configure'), 345 ## self.tr('Configure'),
346 self.tr('Configure...'), 346 ## self.tr('Configure...'),
347 0, 0, self, 'pip_configure') 347 ## 0, 0, self, 'pip_configure')
348 self.pipConfigAct.setStatusTip(self.tr( 348 ## self.pipConfigAct.setStatusTip(self.tr(
349 'Show the configuration dialog with the Python Package Management' 349 ## 'Show the configuration dialog with the Python Package Management'
350 ' page selected' 350 ## ' page selected'
351 )) 351 ## ))
352 self.pipConfigAct.setWhatsThis(self.tr( 352 ## self.pipConfigAct.setWhatsThis(self.tr(
353 """<b>Configure</b>""" 353 ## """<b>Configure</b>"""
354 """<p>Show the configuration dialog with the Python Package""" 354 ## """<p>Show the configuration dialog with the Python Package"""
355 """ Management page selected.</p>""" 355 ## """ Management page selected.</p>"""
356 )) 356 ## ))
357 self.pipConfigAct.triggered.connect(self.__pipConfigure) 357 ## self.pipConfigAct.triggered.connect(self.__pipConfigure)
358 self.actions.append(self.pipConfigAct) 358 ## self.actions.append(self.pipConfigAct)
359 359 ##
360 def initMenu(self): 360 ## def initMenu(self):
361 """ 361 ## """
362 Public slot to initialize the menu. 362 ## Public slot to initialize the menu.
363 363 ##
364 @return the menu generated 364 ## @return the menu generated
365 @rtype QMenu 365 ## @rtype QMenu
366 """ 366 ## """
367 ## self.__menus = {} # clear menus references 367 ## self.__menus = {} # clear menus references
368 ## 368 ##
369 menu = QMenu() 369 ## menu = QMenu()
370 ## menu.setTearOffEnabled(True) 370 ## menu.setTearOffEnabled(True)
371 ## menu.setIcon(UI.PixmapCache.getIcon("pypi.png")) 371 ## menu.setIcon(UI.PixmapCache.getIcon("pypi.png"))
372 ## 372 ##
373 ## menu.addAction(self.selectEnvironmentAct) 373 ## menu.addAction(self.selectEnvironmentAct)
374 ## menu.addSeparator() 374 ## menu.addSeparator()
375 ## menu.addAction(self.listPackagesAct) 375 ## menu.addAction(self.listPackagesAct)
376 ## menu.addAction(self.listUptodatePackagesAct) 376 ## menu.addAction(self.listUptodatePackagesAct)
377 ## menu.addAction(self.listOutdatedPackagesAct) 377 ## menu.addAction(self.listOutdatedPackagesAct)
378 ## menu.addSeparator() 378 ## menu.addSeparator()
379 menu.addAction(self.installPipAct) 379 ## menu.addAction(self.installPipAct)
380 menu.addSeparator() 380 ## menu.addSeparator()
381 menu.addAction(self.installPackagesAct) 381 ## menu.addAction(self.installPackagesAct)
382 menu.addAction(self.installLocalPackageAct) 382 ## menu.addAction(self.installLocalPackageAct)
383 menu.addAction(self.installRequirementsAct) 383 ## menu.addAction(self.installRequirementsAct)
384 menu.addSeparator() 384 ## menu.addSeparator()
385 menu.addAction(self.upgradePipAct) 385 ## menu.addAction(self.upgradePipAct)
386 ## menu.addAction(self.upgradePackagesAct) 386 ## menu.addAction(self.upgradePackagesAct)
387 menu.addSeparator() 387 ## menu.addSeparator()
388 ## menu.addAction(self.uninstallPackagesAct) 388 ## menu.addAction(self.uninstallPackagesAct)
389 menu.addAction(self.uninstallRequirementsAct) 389 ## menu.addAction(self.uninstallRequirementsAct)
390 menu.addSeparator() 390 ## menu.addSeparator()
391 menu.addAction(self.generateRequirementsAct) 391 ## menu.addAction(self.generateRequirementsAct)
392 menu.addSeparator() 392 ## menu.addSeparator()
393 ## menu.addAction(self.searchPyPIAct) 393 ## menu.addAction(self.searchPyPIAct)
394 ## menu.addSeparator() 394 ## menu.addSeparator()
395 menu.addAction(self.repairPipAct) 395 ## menu.addAction(self.repairPipAct)
396 menu.addSeparator() 396 ## menu.addSeparator()
397 menu.addAction(self.editUserConfigAct) 397 ## menu.addAction(self.editUserConfigAct)
398 menu.addAction(self.editVirtualenvConfigAct) 398 ## menu.addAction(self.editVirtualenvConfigAct)
399 menu.addSeparator() 399 ## menu.addSeparator()
400 menu.addAction(self.pipConfigAct) 400 ## menu.addAction(self.pipConfigAct)
401 401 ##
402 ## self.__menus["main"] = menu 402 ## self.__menus["main"] = menu
403 ## 403 ##
404 menu.aboutToShow.connect(self.__aboutToShowMenu) 404 ## menu.aboutToShow.connect(self.__aboutToShowMenu)
405 405 ##
406 return menu 406 ## return menu
407 407 ##
408 def __aboutToShowMenu(self): 408 ## def __aboutToShowMenu(self):
409 """ 409 ## """
410 Private slot to set the action enabled status. 410 ## Private slot to set the action enabled status.
411 """ 411 ## """
412 enable = bool(Preferences.getPip("CurrentEnvironment")) 412 ## enable = bool(Preferences.getPip("CurrentEnvironment"))
413 for act in self.actions: 413 ## for act in self.actions:
414 if act not in [self.selectEnvironmentAct, 414 ## if act not in [self.selectEnvironmentAct,
415 self.installPipAct, 415 ## self.installPipAct,
416 self.editUserConfigAct, 416 ## self.editUserConfigAct,
417 self.editVirtualenvConfigAct, 417 ## self.editVirtualenvConfigAct,
418 self.pipConfigAct]: 418 ## self.pipConfigAct]:
419 act.setEnabled(enable) 419 ## act.setEnabled(enable)
420 ## 420 ##
421 ## def getMenu(self, name): 421 ## def getMenu(self, name):
422 ## """ 422 ## """
423 ## Public method to get a reference to the requested menu. 423 ## Public method to get a reference to the requested menu.
424 ## 424 ##
536 @rtype str 536 @rtype str
537 """ 537 """
538 # Unix, OS X: $VIRTUAL_ENV/pip.conf 538 # Unix, OS X: $VIRTUAL_ENV/pip.conf
539 # Windows: %VIRTUAL_ENV%\pip.ini 539 # Windows: %VIRTUAL_ENV%\pip.ini
540 540
541 # TODO: modify to use venvName
541 if Globals.isWindowsPlatform(): 542 if Globals.isWindowsPlatform():
542 pip = "pip.ini" 543 pip = "pip.ini"
543 else: 544 else:
544 pip = "pip.conf" 545 pip = "pip.conf"
545 try: 546 try:
686 ## self, "outdated", Preferences.getPip("PipSearchIndex"), 687 ## self, "outdated", Preferences.getPip("PipSearchIndex"),
687 ## self.tr("Outdated Packages")) 688 ## self.tr("Outdated Packages"))
688 ## self.__listOutdatedDialog.show() 689 ## self.__listOutdatedDialog.show()
689 ## self.__listOutdatedDialog.start() 690 ## self.__listOutdatedDialog.start()
690 ## 691 ##
691 def __editUserConfiguration(self): 692 ## def __editUserConfiguration(self):
692 """ 693 ## """
693 Private slot to edit the user configuration. 694 ## Private slot to edit the user configuration.
694 """ 695 ## """
695 self.__editConfiguration() 696 ## self.__editConfiguration()
696 697 ##
697 def __editVirtualenvConfiguration(self): 698 ## def __editVirtualenvConfiguration(self):
698 """ 699 ## """
699 Private slot to edit the current virtualenv configuration. 700 ## Private slot to edit the current virtualenv configuration.
700 """ 701 ## """
701 self.__editConfiguration(virtualenv=True) 702 ## self.__editConfiguration(virtualenv=True)
702 703 ##
703 def __editConfiguration(self, virtualenv=False): 704 ## def __editConfiguration(self, virtualenv=False):
704 """ 705 ## """
705 Private method to edit a configuration. 706 ## Private method to edit a configuration.
706 707 ##
707 @param virtualenv flag indicating to edit the current virtualenv 708 ## @param virtualenv flag indicating to edit the current virtualenv
708 configuration file 709 ## configuration file
709 @type bool 710 ## @type bool
710 """ 711 ## """
711 from QScintilla.MiniEditor import MiniEditor 712 ## from QScintilla.MiniEditor import MiniEditor
712 if virtualenv: 713 ## if virtualenv:
713 cfgFile = self.__getVirtualenvConfig() 714 ## cfgFile = self.__getVirtualenvConfig()
714 if not cfgFile: 715 ## if not cfgFile:
715 return 716 ## return
716 else: 717 ## else:
717 cfgFile = self.__getUserConfig() 718 ## cfgFile = self.__getUserConfig()
718 cfgDir = os.path.dirname(cfgFile) 719 ## cfgDir = os.path.dirname(cfgFile)
719 if not cfgDir: 720 ## if not cfgDir:
720 E5MessageBox.critical( 721 ## E5MessageBox.critical(
721 None, 722 ## None,
722 self.tr("Edit Configuration"), 723 ## self.tr("Edit Configuration"),
723 self.tr("""No valid configuration path determined.""" 724 ## self.tr("""No valid configuration path determined."""
724 """ Is a virtual environment selected? Aborting""")) 725 ## """ Is a virtual environment selected? Aborting"""))
725 return 726 ## return
726 727 ##
727 try: 728 ## try:
728 if not os.path.isdir(cfgDir): 729 ## if not os.path.isdir(cfgDir):
729 os.makedirs(cfgDir) 730 ## os.makedirs(cfgDir)
730 except OSError: 731 ## except OSError:
731 E5MessageBox.critical( 732 ## E5MessageBox.critical(
732 None, 733 ## None,
733 self.tr("Edit Configuration"), 734 ## self.tr("Edit Configuration"),
734 self.tr("""No valid configuration path determined.""" 735 ## self.tr("""No valid configuration path determined."""
735 """ Is a virtual environment selected? Aborting""")) 736 ## """ Is a virtual environment selected? Aborting"""))
736 return 737 ## return
737 738 ##
738 if not os.path.exists(cfgFile): 739 ## if not os.path.exists(cfgFile):
739 try: 740 ## try:
740 f = open(cfgFile, "w") 741 ## f = open(cfgFile, "w")
741 f.write("[global]\n") 742 ## f.write("[global]\n")
742 f.close() 743 ## f.close()
743 except (IOError, OSError): 744 ## except (IOError, OSError):
744 # ignore these 745 ## # ignore these
745 pass 746 ## pass
746 747 ##
747 # check, if the destination is writeable 748 ## # check, if the destination is writeable
748 if not os.access(cfgFile, os.W_OK): 749 ## if not os.access(cfgFile, os.W_OK):
749 E5MessageBox.critical( 750 ## E5MessageBox.critical(
750 None, 751 ## None,
751 self.tr("Edit Configuration"), 752 ## self.tr("Edit Configuration"),
752 self.tr("""No valid configuartion path determined.""" 753 ## self.tr("""No valid configuartion path determined."""
753 """ Is a virtual environment selected? Aborting""")) 754 ## """ Is a virtual environment selected? Aborting"""))
754 return 755 ## return
755 756 ##
756 self.__editor = MiniEditor(cfgFile, "Properties") 757 ## self.__editor = MiniEditor(cfgFile, "Properties")
757 self.__editor.show() 758 ## self.__editor.show()
758 759 ##
759 def __installPip(self, userSite=False): 760 def installPip(self, venvName, userSite=False):
760 """ 761 """
761 Private slot to install pip. 762 Public method to install pip.
762 763
764 @param venvName name of the environment to install pip into
765 @type str
763 @param userSite flag indicating an install to the user install 766 @param userSite flag indicating an install to the user install
764 directory 767 directory
765 @type bool 768 @type bool
766 """ 769 """
767 from .PipSelectionDialog import PipSelectionDialog
768 dlg = PipSelectionDialog(self)
769 if dlg.exec_() != QDialog.Accepted:
770 return
771
772 venvName, userSite = dlg.getData()
773 interpreter = self.getVirtualenvInterpreter(venvName) 770 interpreter = self.getVirtualenvInterpreter(venvName)
774 if not interpreter: 771 if not interpreter:
775 return 772 return
776 773
777 dia = PipDialog(self.tr('Install PIP')) 774 dia = PipDialog(self.tr('Install PIP'))
792 789
793 res = dia.startProcesses(commands) 790 res = dia.startProcesses(commands)
794 if res: 791 if res:
795 dia.exec_() 792 dia.exec_()
796 793
794 ## @pyqtSlot()
795 ## def upgradePip(self, venvName="", userSite=False):
796 ## """
797 ## Public method to upgrade pip itself.
798 ##
799 ## @param venvName name of the virtual environment to be used
800 ## @type str
801 ## @param userSite flag indicating an install to the user install
802 ## directory
803 ## @type bool
804 ## @return flag indicating a successful execution
805 ## @rtype bool
806 ## """
807 ## # Upgrading pip needs to be treated specially because
808 ## # it must be done using the python executable
809 ##
810 ## if not venvName:
811 ## from .PipSelectionDialog import PipSelectionDialog
812 ## dlg = PipSelectionDialog(self)
813 ## if dlg.exec_() != QDialog.Accepted:
814 ## return
815 ##
816 ## venvName, userSite = dlg.getData()
817 ##
818 ## interpreter = self.getVirtualenvInterpreter(venvName)
819 ## if not interpreter:
820 ## return
821 ##
822 ## if Preferences.getPip("PipSearchIndex"):
823 ## indexUrl = Preferences.getPip("PipSearchIndex") + "/simple"
824 ## args = ["-m", "pip", "install", "--index-url", indexUrl,
825 ## "--upgrade"]
826 ## else:
827 ## args = ["-m", "pip", "install", "--upgrade"]
828 ## if userSite:
829 ## args.append("--user")
830 ## args.append("pip")
831 ##
832 ## dia = PipDialog(self.tr('Upgrade PIP'))
833 ## res = dia.startProcess(interpreter, args)
834 ## if res:
835 ## dia.exec_()
836 ## return res
837 ##
797 @pyqtSlot() 838 @pyqtSlot()
798 def upgradePip(self, venvName="", userSite=False): 839 def repairPip(self, venvName):
799 """ 840 """
800 Public method to upgrade pip itself. 841 Public method to repair the pip installation.
801 842
802 @param venvName name of the virtual environment to be used 843 @param venvName name of the environment to install pip into
803 @type str 844 @type str
804 @param userSite flag indicating an install to the user install
805 directory
806 @type bool
807 @return flag indicating a successful execution 845 @return flag indicating a successful execution
808 @rtype bool 846 @rtype bool
809 """ 847 """
810 # Upgrading pip needs to be treated specially because
811 # it must be done using the python executable
812
813 if not venvName:
814 from .PipSelectionDialog import PipSelectionDialog
815 dlg = PipSelectionDialog(self)
816 if dlg.exec_() != QDialog.Accepted:
817 return
818
819 venvName, userSite = dlg.getData()
820
821 interpreter = self.getVirtualenvInterpreter(venvName)
822 if not interpreter:
823 return
824
825 if Preferences.getPip("PipSearchIndex"):
826 indexUrl = Preferences.getPip("PipSearchIndex") + "/simple"
827 args = ["-m", "pip", "install", "--index-url", indexUrl,
828 "--upgrade"]
829 else:
830 args = ["-m", "pip", "install", "--upgrade"]
831 if userSite:
832 args.append("--user")
833 args.append("pip")
834
835 dia = PipDialog(self.tr('Upgrade PIP'))
836 res = dia.startProcess(interpreter, args)
837 if res:
838 dia.exec_()
839 return res
840
841 @pyqtSlot()
842 def __repairPip(self):
843 """
844 Private method to repair the pip installation.
845
846 @return flag indicating a successful execution
847 @rtype bool
848 """
849 from .PipSelectionDialog import PipSelectionDialog
850 dlg = PipSelectionDialog(self)
851 if dlg.exec_() != QDialog.Accepted:
852 return False
853
854 venvName, userSite = dlg.getData()
855 interpreter = self.getVirtualenvInterpreter(venvName) 848 interpreter = self.getVirtualenvInterpreter(venvName)
856 if not interpreter: 849 if not interpreter:
857 return 850 return
858 851
859 # python -m pip install --ignore-installed pip 852 # python -m pip install --ignore-installed pip
861 indexUrl = Preferences.getPip("PipSearchIndex") + "/simple" 854 indexUrl = Preferences.getPip("PipSearchIndex") + "/simple"
862 args = ["-m", "pip", "install", "--index-url", indexUrl, 855 args = ["-m", "pip", "install", "--index-url", indexUrl,
863 "--ignore-installed"] 856 "--ignore-installed"]
864 else: 857 else:
865 args = ["-m", "pip", "install", "--ignore-installed"] 858 args = ["-m", "pip", "install", "--ignore-installed"]
866 if userSite:
867 args.append("--user")
868 args.append("pip") 859 args.append("pip")
869 860
870 dia = PipDialog(self.tr('Repair PIP')) 861 dia = PipDialog(self.tr('Repair PIP'))
871 res = dia.startProcess(interpreter, args) 862 res = dia.startProcess(interpreter, args)
872 if res: 863 if res:
976 args += packages 967 args += packages
977 dia = PipDialog(self.tr('Install Packages')) 968 dia = PipDialog(self.tr('Install Packages'))
978 res = dia.startProcess(interpreter, args) 969 res = dia.startProcess(interpreter, args)
979 if res: 970 if res:
980 dia.exec_() 971 dia.exec_()
981 972 ##
982 def __installPackages(self): 973 ## def __installPackages(self):
983 """ 974 ## """
984 Private slot to install packages to be given by the user. 975 ## Private slot to install packages to be given by the user.
985 """ 976 ## """
986 from .PipPackagesInputDialog import PipPackagesInputDialog 977 ## from .PipPackagesInputDialog import PipPackagesInputDialog
987 dlg = PipPackagesInputDialog( 978 ## dlg = PipPackagesInputDialog(
988 self, self.tr("Install Packages")) 979 ## self, self.tr("Install Packages"))
989 if dlg.exec_() == QDialog.Accepted: 980 ## if dlg.exec_() == QDialog.Accepted:
990 venvName, packages, user = dlg.getData() 981 ## venvName, packages, user = dlg.getData()
991 if packages: 982 ## if packages:
992 self.installPackages(packages, venvName=venvName, 983 ## self.installPackages(packages, venvName=venvName,
993 userSite=user) 984 ## userSite=user)
994 985 ##
995 def __installLocalPackage(self): 986 ## def __installLocalPackage(self):
996 """ 987 ## """
997 Private slot to install a package available on local storage. 988 ## Private slot to install a package available on local storage.
998 """ 989 ## """
999 from .PipFileSelectionDialog import PipFileSelectionDialog 990 ## from .PipFileSelectionDialog import PipFileSelectionDialog
1000 dlg = PipFileSelectionDialog(self, "package") 991 ## dlg = PipFileSelectionDialog(self, "package")
1001 if dlg.exec_() == QDialog.Accepted: 992 ## if dlg.exec_() == QDialog.Accepted:
1002 venvName, package, user = dlg.getData() 993 ## venvName, package, user = dlg.getData()
1003 if package and os.path.exists(package): 994 ## if package and os.path.exists(package):
1004 self.installPackages([package], venvName=venvName, 995 ## self.installPackages([package], venvName=venvName,
1005 userSite=user) 996 ## userSite=user)
1006 997
1007 def __installRequirements(self): 998 def __installRequirements(self):
1008 """ 999 """
1009 Private slot to install packages as given in a requirements file. 1000 Private slot to install packages as given in a requirements file.
1010 """ 1001 """
1062 res = dia.startProcess(interpreter, args) 1053 res = dia.startProcess(interpreter, args)
1063 if res: 1054 if res:
1064 dia.exec_() 1055 dia.exec_()
1065 return res 1056 return res
1066 1057
1067 def __uninstallPackages(self): 1058 ## def __uninstallPackages(self):
1068 """ 1059 ## """
1069 Private slot to uninstall packages to be given by the user. 1060 ## Private slot to uninstall packages to be given by the user.
1070 """ 1061 ## """
1071 from .PipPackagesInputDialog import PipPackagesInputDialog 1062 ## from .PipPackagesInputDialog import PipPackagesInputDialog
1072 dlg = PipPackagesInputDialog( 1063 ## dlg = PipPackagesInputDialog(
1073 self, self.tr("Uninstall Packages"), install=False) 1064 ## self, self.tr("Uninstall Packages"), install=False)
1074 if dlg.exec_() == QDialog.Accepted: 1065 ## if dlg.exec_() == QDialog.Accepted:
1075 venvName, packages, _user = dlg.getData() 1066 ## venvName, packages, _user = dlg.getData()
1076 if packages: 1067 ## if packages:
1077 self.uninstallPackages(packages, venvName=venvName) 1068 ## self.uninstallPackages(packages, venvName=venvName)
1078 1069 ##
1079 def __uninstallRequirements(self): 1070 def __uninstallRequirements(self):
1080 """ 1071 """
1081 Private slot to uninstall packages as given in a requirements file. 1072 Private slot to uninstall packages as given in a requirements file.
1082 """ 1073 """
1083 from .PipFileSelectionDialog import PipFileSelectionDialog 1074 from .PipFileSelectionDialog import PipFileSelectionDialog
1113 self.tr('Uninstall Packages from Requirements')) 1104 self.tr('Uninstall Packages from Requirements'))
1114 res = dia.startProcess(interpreter, args) 1105 res = dia.startProcess(interpreter, args)
1115 if res: 1106 if res:
1116 dia.exec_() 1107 dia.exec_()
1117 1108
1118 def __generateRequirements(self): 1109 ## def __generateRequirements(self):
1119 """ 1110 ## """
1120 Private slot to generate the contents for a requirements file. 1111 ## Private slot to generate the contents for a requirements file.
1121 """ 1112 ## """
1122 from .PipFreezeDialog import PipFreezeDialog 1113 ## from .PipFreezeDialog import PipFreezeDialog
1123 self.__freezeDialog = PipFreezeDialog(self) 1114 ## self.__freezeDialog = PipFreezeDialog(self)
1124 self.__freezeDialog.show() 1115 ## self.__freezeDialog.show()
1125 self.__freezeDialog.start() 1116 ## self.__freezeDialog.start()
1126 1117 ##
1127 ## def __searchPyPI(self): 1118 ## def __searchPyPI(self):
1128 ## """ 1119 ## """
1129 ## Private slot to search the Python Package Index. 1120 ## Private slot to search the Python Package Index.
1130 ## """ 1121 ## """
1131 ## from .PipSearchDialog import PipSearchDialog 1122 ## from .PipSearchDialog import PipSearchDialog
1278 package["version"], 1269 package["version"],
1279 package["latest_version"], 1270 package["latest_version"],
1280 )) 1271 ))
1281 1272
1282 return packages 1273 return packages
1283 1274 ##
1284 def __pipConfigure(self): 1275 ## def __pipConfigure(self):
1285 """ 1276 ## """
1286 Private slot to open the configuration page. 1277 ## Private slot to open the configuration page.
1287 """ 1278 ## """
1288 e5App().getObject("UserInterface").showPreferences("pipPage") 1279 ## e5App().getObject("UserInterface").showPreferences("pipPage")

eric ide

mercurial