eric7/Plugins/WizardPlugins/SetupWizard/SetupWizardDialog.py

branch
eric7
changeset 8501
7b5f10581c35
parent 8366
2a9f5153c438
child 8757
23b2fe1cd863
equal deleted inserted replaced
8500:e7814dd19115 8501:7b5f10581c35
17 from PyQt6.QtNetwork import QNetworkRequest, QNetworkReply 17 from PyQt6.QtNetwork import QNetworkRequest, QNetworkReply
18 18
19 from EricWidgets.EricApplication import ericApp 19 from EricWidgets.EricApplication import ericApp
20 from EricWidgets import EricMessageBox, EricFileDialog 20 from EricWidgets import EricMessageBox, EricFileDialog
21 from EricWidgets.EricCompleters import EricDirCompleter 21 from EricWidgets.EricCompleters import EricDirCompleter
22 from EricGui.EricOverrideCursor import EricOverrideCursor
23 22
24 from .Ui_SetupWizardDialog import Ui_SetupWizardDialog 23 from .Ui_SetupWizardDialog import Ui_SetupWizardDialog
25 24
26 import UI.PixmapCache 25 import UI.PixmapCache
27 import Utilities 26 import Utilities
55 self.__sourceDirCompleter = EricDirCompleter(self.sourceDirectoryEdit) 54 self.__sourceDirCompleter = EricDirCompleter(self.sourceDirectoryEdit)
56 55
57 self.packageRootDirButton.setIcon(UI.PixmapCache.getIcon("open")) 56 self.packageRootDirButton.setIcon(UI.PixmapCache.getIcon("open"))
58 self.packageDirButton.setIcon(UI.PixmapCache.getIcon("open")) 57 self.packageDirButton.setIcon(UI.PixmapCache.getIcon("open"))
59 self.sourceDirectoryButton.setIcon(UI.PixmapCache.getIcon("open")) 58 self.sourceDirectoryButton.setIcon(UI.PixmapCache.getIcon("open"))
60
61 self.variantComboBox.addItem(self.tr("distutils"), "distutils.core")
62 self.variantComboBox.addItem(self.tr("setuptools"), "setuptools")
63 self.variantComboBox.setCurrentIndex(1)
64 59
65 self.__mandatoryStyleSheet = "QLineEdit {border: 2px solid;}" 60 self.__mandatoryStyleSheet = "QLineEdit {border: 2px solid;}"
66 for lineEdit in [self.nameEdit, self.versionEdit, 61 for lineEdit in [self.nameEdit, self.versionEdit,
67 self.homePageUrlEdit, self.authorEdit, 62 self.homePageUrlEdit, self.authorEdit,
68 self.authorEmailEdit, self.maintainerEdit, 63 self.authorEmailEdit, self.maintainerEdit,
286 code += '__prj__ = "{0}"{1}'.format( 281 code += '__prj__ = "{0}"{1}'.format(
287 self.nameEdit.text(), os.linesep) 282 self.nameEdit.text(), os.linesep)
288 code += os.linesep 283 code += os.linesep
289 284
290 if self.importCheckBox.isChecked(): 285 if self.importCheckBox.isChecked():
291 variant = self.variantComboBox.itemData( 286 additionalImport = ", find_packages"
292 self.variantComboBox.currentIndex()) 287 code += "from setuptools import setup{0}{1}".format(
293 if variant == "setuptools": 288 additionalImport, os.linesep)
294 additionalImport = ", find_packages"
295 else:
296 additionalImport = ""
297 code += "from {0} import setup{1}{2}".format(
298 variant, additionalImport, os.linesep)
299 if code: 289 if code:
300 code += "{0}{0}".format(os.linesep) 290 code += "{0}{0}".format(os.linesep)
301 291
302 if self.descriptionFromFilesCheckBox.isChecked(): 292 if self.descriptionFromFilesCheckBox.isChecked():
303 code += 'def get_long_description():{0}'.format(os.linesep) 293 code += 'def get_long_description():{0}'.format(os.linesep)
392 382
393 if self.keywordsEdit.text(): 383 if self.keywordsEdit.text():
394 code += '{0}keywords="{1}",{2}'.format( 384 code += '{0}keywords="{1}",{2}'.format(
395 istring, self.keywordsEdit.text(), os.linesep) 385 istring, self.keywordsEdit.text(), os.linesep)
396 386
397 if self.variantComboBox.currentIndex() == 0: 387 code += '{0}packages=find_packages('.format(istring)
398 # distutils 388 src = Utilities.fromNativeSeparators(
399 packages = [] 389 self.sourceDirectoryEdit.text())
400 for row in range(self.packagesList.count()): 390 excludePatterns = []
401 packages.append(self.packagesList.item(row).text()) 391 for row in range(self.excludePatternList.count()):
402 if packages: 392 excludePatterns.append(
403 code += '{0}packages=[{1}'.format(istring, os.linesep) 393 self.excludePatternList.item(row).text())
404 code += '{0}"{1}"{2}'.format( 394 if src:
405 i1string, 395 code += '{0}{1}"{2}"'.format(os.linesep, i1string, src)
406 '",{0}{1}"'.format(os.linesep, i1string).join(packages),
407 os.linesep)
408 code += '{0}],{1}'.format(istring, os.linesep)
409 del packages
410 elif self.variantComboBox.currentIndex() == 1:
411 # setuptools
412 code += '{0}packages=find_packages('.format(istring)
413 src = Utilities.fromNativeSeparators(
414 self.sourceDirectoryEdit.text())
415 excludePatterns = []
416 for row in range(self.excludePatternList.count()):
417 excludePatterns.append(
418 self.excludePatternList.item(row).text())
419 if src:
420 code += '{0}{1}"{2}"'.format(os.linesep, i1string, src)
421 if excludePatterns:
422 code += ','
423 else:
424 code += '{0}{1}'.format(os.linesep, istring)
425 if excludePatterns: 396 if excludePatterns:
426 code += '{0}{1}exclude=[{0}'.format(os.linesep, i1string) 397 code += ','
427 code += '{0}"{1}"{2}'.format( 398 else:
428 i2string, 399 code += '{0}{1}'.format(os.linesep, istring)
429 '",{0}{1}"'.format(os.linesep, i2string) 400 if excludePatterns:
430 .join(excludePatterns), 401 code += '{0}{1}exclude=[{0}'.format(os.linesep, i1string)
431 os.linesep) 402 code += '{0}"{1}"{2}'.format(
432 code += '{0}]{1}{2}'.format(i1string, os.linesep, istring) 403 i2string,
433 code += '),{0}'.format(os.linesep) 404 '",{0}{1}"'.format(os.linesep, i2string)
434 405 .join(excludePatterns),
435 if self.includePackageDataCheckBox.isChecked(): 406 os.linesep)
436 code += '{0}include_package_data = True,{1}'.format( 407 code += '{0}]{1}{2}'.format(i1string, os.linesep, istring)
437 istring, os.linesep) 408 code += '),{0}'.format(os.linesep)
409
410 if self.includePackageDataCheckBox.isChecked():
411 code += '{0}include_package_data = True,{1}'.format(
412 istring, os.linesep)
438 413
439 modules = [] 414 modules = []
440 for row in range(self.modulesList.count()): 415 for row in range(self.modulesList.count()):
441 modules.append(self.modulesList.item(row).text()) 416 modules.append(self.modulesList.item(row).text())
442 if modules: 417 if modules:
494 469
495 # prevent overwriting of entries by disabling the button 470 # prevent overwriting of entries by disabling the button
496 self.projectButton.setEnabled(False) 471 self.projectButton.setEnabled(False)
497 472
498 @pyqtSlot() 473 @pyqtSlot()
499 def on_packagesList_itemSelectionChanged(self):
500 """
501 Private slot to handle a change of selected items of the
502 packages list.
503 """
504 self.deletePackageButton.setEnabled(
505 len(self.packagesList.selectedItems()) > 0)
506
507 @pyqtSlot()
508 def on_deletePackageButton_clicked(self):
509 """
510 Private slot to delete the selected package items.
511 """
512 for itm in self.packagesList.selectedItems():
513 self.packagesList.takeItem(
514 self.packagesList.row(itm))
515 del itm
516
517 @pyqtSlot()
518 def on_addPackageButton_clicked(self):
519 """
520 Private slot to add a package to the list.
521 """
522 pkg = Utilities.toNativeSeparators(self.packageEdit.text())
523 self.__addPackage(pkg)
524
525 @pyqtSlot()
526 def on_packageEdit_returnPressed(self):
527 """
528 Private slot handling a press of the return button of the
529 package edit.
530 """
531 self.on_addPackageButton_clicked()
532
533 @pyqtSlot(str)
534 def on_packageEdit_textChanged(self, txt):
535 """
536 Private slot to handle a change of the package text.
537
538 @param txt text of the line edit (string)
539 """
540 self.addPackageButton.setEnabled(bool(txt))
541
542 @pyqtSlot()
543 def on_packageDirButton_clicked(self):
544 """
545 Private slot to select a package directory via a directory
546 selection dialog.
547 """
548 startDir = self.packageEdit.text()
549 if not startDir:
550 startDir = self.packageRootEdit.text() or self.__getStartDir()
551 packageDir = EricFileDialog.getExistingDirectory(
552 self,
553 self.tr("Package Directory"),
554 Utilities.fromNativeSeparators(startDir))
555 if packageDir:
556 self.packageEdit.setText(
557 Utilities.toNativeSeparators(packageDir))
558
559 @pyqtSlot()
560 def on_autodiscoverPackagesButton_clicked(self):
561 """
562 Private slot to discover packages automatically.
563 """
564 with EricOverrideCursor():
565 self.autodiscoverPackagesButton.setEnabled(False)
566 startDir = self.packageRootEdit.text() or self.__getStartDir()
567 if startDir:
568 self.packagesList.clear()
569 for dirpath, _dirnames, filenames in os.walk(startDir):
570 if "__init__.py" in filenames:
571 self.__addPackage(dirpath)
572 self.autodiscoverPackagesButton.setEnabled(True)
573
574 @pyqtSlot()
575 def on_packageRootDirButton_clicked(self): 474 def on_packageRootDirButton_clicked(self):
576 """ 475 """
577 Private slot to select the packages root directory via a 476 Private slot to select the packages root directory via a
578 directory selection dialog. 477 directory selection dialog.
579 """ 478 """
598 """ 497 """
599 projectOpen = ericApp().getObject("Project").isOpen() 498 projectOpen = ericApp().getObject("Project").isOpen()
600 validPackagesRoot = bool(txt) and os.path.exists(txt) 499 validPackagesRoot = bool(txt) and os.path.exists(txt)
601 self.autodiscoverPackagesButton.setEnabled( 500 self.autodiscoverPackagesButton.setEnabled(
602 projectOpen or validPackagesRoot) 501 projectOpen or validPackagesRoot)
603
604 def __addPackage(self, pkgDir):
605 """
606 Private method to add a package to the list.
607
608 @param pkgDir name of the package directory (string)
609 """
610 if pkgDir:
611 if "\\" in pkgDir or "/" in pkgDir:
612 # It is a directory. Check for an __init__.py file.
613 if os.path.isabs(pkgDir):
614 prefix = ""
615 else:
616 prefix = self.packageRootEdit.text()
617 initName = os.path.join(
618 prefix,
619 Utilities.toNativeSeparators(pkgDir),
620 "__init__.py")
621 if not os.path.exists(initName):
622 res = EricMessageBox.information(
623 self,
624 self.tr("Add Package"),
625 self.tr("""<p>The directory <b>{0}</b> is not"""
626 """ a Python package.</p>""")
627 .format(pkgDir),
628 EricMessageBox.Ignore | EricMessageBox.Ok)
629 if res == EricMessageBox.Ok:
630 return
631
632 pkg = pkgDir.replace(
633 Utilities.toNativeSeparators(self.packageRootEdit.text()), "")
634 if pkg.startswith(("\\", "/")):
635 pkg = pkg[1:]
636 if pkg:
637 QListWidgetItem(
638 pkg.replace("\\", ".").replace("/", "."),
639 self.packagesList)
640 self.packageEdit.clear()
641 502
642 def __getStartDir(self): 503 def __getStartDir(self):
643 """ 504 """
644 Private method to get the start directory for selection dialogs. 505 Private method to get the start directory for selection dialogs.
645 506
725 if module: 586 if module:
726 QListWidgetItem(os.path.splitext(module)[0] 587 QListWidgetItem(os.path.splitext(module)[0]
727 .replace("\\", ".").replace("/", "."), 588 .replace("\\", ".").replace("/", "."),
728 self.modulesList) 589 self.modulesList)
729 590
730 @pyqtSlot(int)
731 def on_variantComboBox_currentIndexChanged(self, index):
732 """
733 Private slot handling a change of the setup variant.
734
735 @param index index of the selected entry (integer)
736 """
737 self.packagesStackedWidget.setCurrentIndex(index)
738
739 @pyqtSlot() 591 @pyqtSlot()
740 def on_excludePatternList_itemSelectionChanged(self): 592 def on_excludePatternList_itemSelectionChanged(self):
741 """ 593 """
742 Private slot to handle a change of selected items of the 594 Private slot to handle a change of selected items of the
743 exclude pattern list. 595 exclude pattern list.

eric ide

mercurial