Sun, 06 Jun 2021 16:30:37 +0200
Ported the plug-in to PyQt6 for eric7 and adopted it for Pyramid 2.x.
--- a/PKGLIST Tue Jun 01 19:37:46 2021 +0200 +++ b/PKGLIST Sun Jun 06 16:30:37 2021 +0200 @@ -1,20 +1,46 @@ PluginProjectPyramid.py -ProjectPyramid/APIs/Chameleon-2.9.2.api -ProjectPyramid/APIs/Chameleon-2.9.2.bas -ProjectPyramid/APIs/Mako-0.7.2.api -ProjectPyramid/APIs/Mako-0.7.bas -ProjectPyramid/APIs/MarkupSafe-0.15.api -ProjectPyramid/APIs/MarkupSafe-0.bas -ProjectPyramid/APIs/PasteDeploy-1.5.0.api -ProjectPyramid/APIs/PasteDeploy-1.5.bas -ProjectPyramid/APIs/Pyramid-1.3.3.api -ProjectPyramid/APIs/Pyramid-1.3.bas -ProjectPyramid/APIs/Translationstring-1.1.api -ProjectPyramid/APIs/Translationstring-1.bas -ProjectPyramid/APIs/Venusian-1.0a6.api -ProjectPyramid/APIs/Venusian-1.bas -ProjectPyramid/APIs/WebOb-1.2.2.api -ProjectPyramid/APIs/WebOb-1.2.bas +ProjectPyramid/APIs/Chameleon-3.9.1.api +ProjectPyramid/APIs/Chameleon-3.9.1.bas +ProjectPyramid/APIs/Jinja2-3.0.1.api +ProjectPyramid/APIs/Jinja2-3.0.1.bas +ProjectPyramid/APIs/Mako-1.1.4.api +ProjectPyramid/APIs/Mako-1.1.4.bas +ProjectPyramid/APIs/MarkupSafe-2.0.1.api +ProjectPyramid/APIs/MarkupSafe-2.0.1.bas +ProjectPyramid/APIs/PasteDeploy-2.1.1.api +ProjectPyramid/APIs/PasteDeploy-2.1.1.bas +ProjectPyramid/APIs/Pyramid-2.0.api +ProjectPyramid/APIs/Pyramid-2.0.bas +ProjectPyramid/APIs/PyramidDebugToolbar-4.9.api +ProjectPyramid/APIs/PyramidDebugToolbar-4.9.bas +ProjectPyramid/APIs/Pyramid_Chameleon-0.3.api +ProjectPyramid/APIs/Pyramid_Chameleon-0.3.bas +ProjectPyramid/APIs/Pyramid_Jinja2-2.8.api +ProjectPyramid/APIs/Pyramid_Jinja2-2.8.bas +ProjectPyramid/APIs/Pyramid_Mako-1.1.0.api +ProjectPyramid/APIs/Pyramid_Mako-1.1.0.bas +ProjectPyramid/APIs/Pyramid_Retry-2.1.1.api +ProjectPyramid/APIs/Pyramid_Retry-2.1.1.bas +ProjectPyramid/APIs/Pyramid_TM-2.4.api +ProjectPyramid/APIs/Pyramid_TM-2.4.bas +ProjectPyramid/APIs/Pyramid_ZODBConn-0.8.1.api +ProjectPyramid/APIs/Pyramid_ZODBConn-0.8.1.bas +ProjectPyramid/APIs/SQLAlchemy-1.4.17.api +ProjectPyramid/APIs/SQLAlchemy-1.4.17.bas +ProjectPyramid/APIs/TranslationString-1.4.api +ProjectPyramid/APIs/TranslationString-1.4.bas +ProjectPyramid/APIs/Venusian-3.0.0.api +ProjectPyramid/APIs/Venusian-3.0.0.bas +ProjectPyramid/APIs/WebOb-2.0.35.api +ProjectPyramid/APIs/WebOb-2.0.35.bas +ProjectPyramid/APIs/ZEO-5.2.2.api +ProjectPyramid/APIs/ZEO-5.2.2.bas +ProjectPyramid/APIs/ZODB-5.6.0.api +ProjectPyramid/APIs/ZODB-5.6.0.bas +ProjectPyramid/APIs/ZODBPickle-2.0.0.api +ProjectPyramid/APIs/ZODBPickle-2.0.0.bas +ProjectPyramid/APIs/ZODBUri-2.5.0.api +ProjectPyramid/APIs/ZODBUri-2.5.0.bas ProjectPyramid/ConfigurationPage/PyramidPage.py ProjectPyramid/ConfigurationPage/PyramidPage.ui ProjectPyramid/ConfigurationPage/__init__.py @@ -25,6 +51,8 @@ ProjectPyramid/Documentation/LICENSE.GPL3 ProjectPyramid/FormSelectionDialog.py ProjectPyramid/FormSelectionDialog.ui +ProjectPyramid/MigrateSummaryDialog.py +ProjectPyramid/MigrateSummaryDialog.ui ProjectPyramid/Project.py ProjectPyramid/PyramidDialog.py ProjectPyramid/PyramidDialog.ui
--- a/PluginProjectPyramid.py Tue Jun 01 19:37:46 2021 +0200 +++ b/PluginProjectPyramid.py Sun Jun 06 16:30:37 2021 +0200 @@ -435,3 +435,16 @@ return list(self.__menus.keys()) else: return [] + + +def installDependencies(pipInstall): + """ + Function to install dependencies of this plug-in. + + @param pipInstall function to be called with a list of package names. + @type function + """ + try: + import cookiecutter # __IGNORE_WARNING__ + except ImportError: + pipInstall(["cookiecutter"])
--- a/PluginPyramid.epj Tue Jun 01 19:37:46 2021 +0200 +++ b/PluginPyramid.epj Sun Jun 06 16:30:37 2021 +0200 @@ -157,7 +157,8 @@ "ProjectPyramid/DistributionTypeSelectionDialog.ui", "ProjectPyramid/FormSelectionDialog.ui", "ProjectPyramid/PyramidDialog.ui", - "ProjectPyramid/PyramidRoutesDialog.ui" + "ProjectPyramid/PyramidRoutesDialog.ui", + "ProjectPyramid/MigrateSummaryDialog.ui" ], "HASH": "16b809c49f4985b2bd6959b37c5612f6b30e89b4", "IDLPARAMS": { @@ -182,29 +183,55 @@ "ChangeLog", "PKGLIST", "PluginProjectPyramid.zip", - "ProjectPyramid/APIs/Chameleon-2.9.2.api", - "ProjectPyramid/APIs/Chameleon-2.9.2.bas", - "ProjectPyramid/APIs/Mako-0.7.2.api", - "ProjectPyramid/APIs/Mako-0.7.bas", - "ProjectPyramid/APIs/MarkupSafe-0.15.api", - "ProjectPyramid/APIs/MarkupSafe-0.bas", - "ProjectPyramid/APIs/PasteDeploy-1.5.0.api", - "ProjectPyramid/APIs/PasteDeploy-1.5.bas", - "ProjectPyramid/APIs/Pyramid-1.3.3.api", - "ProjectPyramid/APIs/Pyramid-1.3.bas", - "ProjectPyramid/APIs/Translationstring-1.1.api", - "ProjectPyramid/APIs/Translationstring-1.bas", - "ProjectPyramid/APIs/Venusian-1.0a6.api", - "ProjectPyramid/APIs/Venusian-1.bas", - "ProjectPyramid/APIs/WebOb-1.2.2.api", - "ProjectPyramid/APIs/WebOb-1.2.bas", "ProjectPyramid/Documentation/LICENSE.GPL3", "ProjectPyramid/Documentation/source", "ProjectPyramid/icons/pyramid-dark.svg", "ProjectPyramid/icons/pyramid-light.svg", "ProjectPyramid/icons/pyramid64-dark.svg", "ProjectPyramid/icons/pyramid64-light.svg", - "PluginPyramid.epj" + "PluginPyramid.epj", + "ProjectPyramid/APIs/Chameleon-3.9.1.api", + "ProjectPyramid/APIs/Chameleon-3.9.1.bas", + "ProjectPyramid/APIs/Jinja2-3.0.1.api", + "ProjectPyramid/APIs/Jinja2-3.0.1.bas", + "ProjectPyramid/APIs/Mako-1.1.4.api", + "ProjectPyramid/APIs/Mako-1.1.4.bas", + "ProjectPyramid/APIs/MarkupSafe-2.0.1.api", + "ProjectPyramid/APIs/MarkupSafe-2.0.1.bas", + "ProjectPyramid/APIs/PasteDeploy-2.1.1.api", + "ProjectPyramid/APIs/PasteDeploy-2.1.1.bas", + "ProjectPyramid/APIs/Pyramid_Chameleon-0.3.api", + "ProjectPyramid/APIs/Pyramid_Chameleon-0.3.bas", + "ProjectPyramid/APIs/Pyramid_Jinja2-2.8.api", + "ProjectPyramid/APIs/Pyramid_Jinja2-2.8.bas", + "ProjectPyramid/APIs/Pyramid_Mako-1.1.0.api", + "ProjectPyramid/APIs/Pyramid_Mako-1.1.0.bas", + "ProjectPyramid/APIs/Pyramid_Retry-2.1.1.api", + "ProjectPyramid/APIs/Pyramid_Retry-2.1.1.bas", + "ProjectPyramid/APIs/Pyramid_TM-2.4.api", + "ProjectPyramid/APIs/Pyramid_TM-2.4.bas", + "ProjectPyramid/APIs/Pyramid_ZODBConn-0.8.1.api", + "ProjectPyramid/APIs/Pyramid_ZODBConn-0.8.1.bas", + "ProjectPyramid/APIs/Pyramid-2.0.api", + "ProjectPyramid/APIs/Pyramid-2.0.bas", + "ProjectPyramid/APIs/PyramidDebugToolbar-4.9.api", + "ProjectPyramid/APIs/PyramidDebugToolbar-4.9.bas", + "ProjectPyramid/APIs/SQLAlchemy-1.4.17.api", + "ProjectPyramid/APIs/SQLAlchemy-1.4.17.bas", + "ProjectPyramid/APIs/TranslationString-1.4.api", + "ProjectPyramid/APIs/TranslationString-1.4.bas", + "ProjectPyramid/APIs/Venusian-3.0.0.api", + "ProjectPyramid/APIs/Venusian-3.0.0.bas", + "ProjectPyramid/APIs/WebOb-2.0.35.api", + "ProjectPyramid/APIs/WebOb-2.0.35.bas", + "ProjectPyramid/APIs/ZEO-5.2.2.api", + "ProjectPyramid/APIs/ZEO-5.2.2.bas", + "ProjectPyramid/APIs/ZODB-5.6.0.api", + "ProjectPyramid/APIs/ZODB-5.6.0.bas", + "ProjectPyramid/APIs/ZODBPickle-2.0.0.api", + "ProjectPyramid/APIs/ZODBPickle-2.0.0.bas", + "ProjectPyramid/APIs/ZODBUri-2.5.0.api", + "ProjectPyramid/APIs/ZODBUri-2.5.0.bas" ], "OTHERTOOLSPARMS": {}, "PACKAGERSPARMS": {}, @@ -230,7 +257,8 @@ "ProjectPyramid/PyramidDialog.py", "ProjectPyramid/PyramidRoutesDialog.py", "ProjectPyramid/__init__.py", - "__init__.py" + "__init__.py", + "ProjectPyramid/MigrateSummaryDialog.py" ], "SPELLEXCLUDES": "", "SPELLLANGUAGE": "en_US", @@ -245,7 +273,8 @@ "ProjectPyramid/i18n/pyramid_es.qm", "ProjectPyramid/i18n/pyramid_es.ts", "ProjectPyramid/i18n/pyramid_ru.qm", - "ProjectPyramid/i18n/pyramid_ru.ts" + "ProjectPyramid/i18n/pyramid_ru.ts", + "ProjectPyramid/i18n/pyramid_empty.ts" ], "TRANSLATIONSBINPATH": "", "UICPARAMS": {
--- a/ProjectPyramid/CreateParametersDialog.py Tue Jun 01 19:37:46 2021 +0200 +++ b/ProjectPyramid/CreateParametersDialog.py Sun Jun 06 16:30:37 2021 +0200 @@ -7,26 +7,23 @@ Module implementing a dialog for entering the create parameters. """ -from PyQt6.QtCore import pyqtSlot, QProcess +from PyQt6.QtCore import pyqtSlot from PyQt6.QtWidgets import QDialog, QDialogButtonBox -from EricWidgets import EricMessageBox - from .Ui_CreateParametersDialog import Ui_CreateParametersDialog -import Preferences - class CreateParametersDialog(QDialog, Ui_CreateParametersDialog): """ Class implementing a dialog for entering the create parameters. """ - def __init__(self, project, parent=None): + PyramidStarterGH = "gh:Pylons/pyramid-cookiecutter-starter" + PyramidStarter = "pyramid-cookiecutter-starter" + + def __init__(self, parent=None): """ Constructor - @param project reference to the project object - @type Project @param parent reference to the parent widget @type QWidget """ @@ -37,53 +34,27 @@ QDialogButtonBox.StandardButton.Ok) self.__okButton.setEnabled(False) - errMsg = "" - proc = QProcess() - args = [] - args.append(project.getPyramidCommand("pcreate")) - args.append("--list") - proc.start(args[0], args[1:]) - procStarted = proc.waitForStarted() - if procStarted: - finished = proc.waitForFinished(30000) - if finished and proc.exitCode() == 0: - output = str(proc.readAllStandardOutput(), - Preferences.getSystem("IOEncoding"), - 'replace') - else: - if not finished: - errMsg = self.tr( - "The pcreate command did not finish within 30s.") - else: - errMsg = self.tr("Could not start the pcreate executable.") - if not errMsg: - lines = output.splitlines() - self.scaffoldCombo.addItem("") - for line in sorted(lines[1:]): - self.scaffoldCombo.addItem( - self.__prepareScaffoldString(line)) - self.scaffoldCombo.setCurrentIndex(0) - else: - EricMessageBox.critical( - None, - self.tr('Process Generation Error'), - errMsg) + self.templateCombo.addItems([ + "", + CreateParametersDialog.PyramidStarter, + CreateParametersDialog.PyramidStarterGH, + ]) + + self.templateLanguageCombo.addItem("Jinja2", "jinja") + self.templateLanguageCombo.addItem("Chameleon", "chameleon") + self.templateLanguageCombo.addItem("Mako", "mako") + + self.backendCombo.addItem(self.tr("No Database"), "none") + self.backendCombo.addItem("SQLAlchemy", "sqlalchemy") + self.backendCombo.addItem("ZODB", "zodb") + + self.starterGroupBox.setEnabled(False) msh = self.minimumSizeHint() self.resize(max(self.width(), msh.width()), msh.height()) @pyqtSlot(str) - def on_nameEdit_textChanged(self, text): - """ - Private slot to handle changes of the site name. - - @param text text of the site entry - @type str - """ - self.__updateUi() - - @pyqtSlot(str) - def on_scaffoldCombo_currentTextChanged(self, text): + def on_templateCombo_currentTextChanged(self, text): """ Private slot to handle changes of the selected scaffold. @@ -96,37 +67,54 @@ """ Private slot to update the dialog. """ - self.__okButton.setEnabled( - bool(self.scaffoldCombo.currentText()) and - bool(self.nameEdit.text()) - ) - - def __prepareScaffoldString(self, line): - """ - Private method to prepare a scaffold string for the combo box. + template = self.templateCombo.currentText() + + self.__okButton.setEnabled(bool(template)) - @param line output line containing the scaffold name and some - explanatory text - @type str - @return prepared scaffold text - @rtype str - """ - parts = [part.strip() for part in line.split(":", 1)] - return self.tr( - "{0} ({1})", "scaffold name, explanatory text").format(*parts) + self.starterGroupBox.setEnabled( + template in ( + CreateParametersDialog.PyramidStarter, + CreateParametersDialog.PyramidStarterGH, + ) + ) + + self.versionEdit.setEnabled( + template == CreateParametersDialog.PyramidStarterGH) def getData(self): """ Public method to get the data. - @return tuple giving the scaffold, the project name, a flag indicating - to overwrite existing files and a flag indicating to simulate the - creation - @rtype tuple of (str, str, bool, bool) + @return tuple giving the template name, an optional template version, + a flag indicating to overwrite existing files and a dictionary + containing additional context data + @rtype tuple of (str, str, bool) """ + template = self.templateCombo.currentText() + + contextData = ( + { + "project_name": self.projectEdit.text(), + "repo_name": "_".join(self.projectEdit.text().split()).lower(), + "template_language": self.templateLanguageCombo.currentData(), + "backend": self.backendCombo.currentData(), + } + if template in ( + CreateParametersDialog.PyramidStarter, + CreateParametersDialog.PyramidStarterGH, + ) else + {} + ) + + version = ( + self.versionEdit.text() + if template == CreateParametersDialog.PyramidStarterGH else + "" + ) + return ( - self.scaffoldCombo.currentText().split(":")[0], - self.nameEdit.text(), + template, + version, self.overwriteCheckBox.isChecked(), - self.simulateCheckBox.isChecked() + contextData )
--- a/ProjectPyramid/CreateParametersDialog.ui Tue Jun 01 19:37:46 2021 +0200 +++ b/ProjectPyramid/CreateParametersDialog.ui Sun Jun 06 16:30:37 2021 +0200 @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>450</width> - <height>160</height> + <height>281</height> </rect> </property> <property name="windowTitle"> @@ -16,42 +16,109 @@ <property name="sizeGripEnabled"> <bool>true</bool> </property> - <layout class="QGridLayout" name="gridLayout"> - <item row="0" column="0"> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>Project &Name:</string> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <layout class="QGridLayout" name="gridLayout_2"> + <item row="0" column="0"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Template:</string> + </property> + <property name="buddy"> + <cstring>templateCombo</cstring> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QComboBox" name="templateCombo"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="toolTip"> + <string>Enter the template to be used</string> + </property> + <property name="editable"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Template Version:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLineEdit" name="versionEdit"> + <property name="toolTip"> + <string>Enter an optional branch, tag or commit</string> + </property> + <property name="clearButtonEnabled"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QGroupBox" name="starterGroupBox"> + <property name="title"> + <string>CookieCutter Starter Parameters</string> </property> - <property name="buddy"> - <cstring>nameEdit</cstring> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QLineEdit" name="nameEdit"> - <property name="toolTip"> - <string>Enter the name of the Pyramid project to create</string> - </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0"> + <widget class="QLabel" name="label_3"> + <property name="text"> + <string>Project Name:</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="projectEdit"> + <property name="toolTip"> + <string>Enter the name of the Pyramid project</string> + </property> + <property name="clearButtonEnabled"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_4"> + <property name="text"> + <string>Template Language:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QComboBox" name="templateLanguageCombo"> + <property name="toolTip"> + <string>Select the templating language</string> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_5"> + <property name="text"> + <string>Backend:</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QComboBox" name="backendCombo"> + <property name="toolTip"> + <string>Select the database backend</string> + </property> + </widget> + </item> + </layout> </widget> </item> - <item row="1" column="0"> - <widget class="QLabel" name="label"> - <property name="text"> - <string>&Scaffold:</string> - </property> - <property name="buddy"> - <cstring>scaffoldCombo</cstring> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QComboBox" name="scaffoldCombo"> - <property name="toolTip"> - <string>Select the scaffold to be used</string> - </property> - </widget> - </item> - <item row="2" column="0" colspan="2"> + <item> <widget class="QCheckBox" name="overwriteCheckBox"> <property name="toolTip"> <string>Select to overwrite existing files</string> @@ -61,17 +128,7 @@ </property> </widget> </item> - <item row="3" column="0" colspan="2"> - <widget class="QCheckBox" name="simulateCheckBox"> - <property name="toolTip"> - <string>Select to simulate the creation</string> - </property> - <property name="text"> - <string>Simulate Pyramid project creation</string> - </property> - </widget> - </item> - <item row="4" column="0" colspan="2"> + <item> <widget class="QDialogButtonBox" name="buttonBox"> <property name="orientation"> <enum>Qt::Horizontal</enum> @@ -84,11 +141,12 @@ </layout> </widget> <tabstops> - <tabstop>nameEdit</tabstop> - <tabstop>scaffoldCombo</tabstop> + <tabstop>templateCombo</tabstop> + <tabstop>versionEdit</tabstop> + <tabstop>projectEdit</tabstop> + <tabstop>templateLanguageCombo</tabstop> + <tabstop>backendCombo</tabstop> <tabstop>overwriteCheckBox</tabstop> - <tabstop>simulateCheckBox</tabstop> - <tabstop>buttonBox</tabstop> </tabstops> <resources/> <connections>
--- a/ProjectPyramid/DistributionTypeSelectionDialog.py Tue Jun 01 19:37:46 2021 +0200 +++ b/ProjectPyramid/DistributionTypeSelectionDialog.py Sun Jun 06 16:30:37 2021 +0200 @@ -40,7 +40,10 @@ errMsg = "" proc = QProcess() - cmd = project.getPythonCommand() + cmd = project.getPyramidCommand( + "python", + virtualEnv=project.getProjectVirtualEnvironment() + ) args = [] args.append("setup.py") args.append("sdist")
--- a/ProjectPyramid/Documentation/source/Plugin_Project_Pyramid.PluginProjectPyramid.html Tue Jun 01 19:37:46 2021 +0200 +++ b/ProjectPyramid/Documentation/source/Plugin_Project_Pyramid.PluginProjectPyramid.html Sun Jun 06 16:30:37 2021 +0200 @@ -56,6 +56,10 @@ <td>Module function returning data as required by the configuration dialog.</td> </tr> <tr> +<td><a href="#installDependencies">installDependencies</a></td> +<td>Function to install dependencies of this plug-in.</td> +</tr> +<tr> <td><a href="#prepareUninstall">prepareUninstall</a></td> <td>Module function to prepare for an uninstallation.</td> </tr> @@ -504,6 +508,23 @@ <div align="right"><a href="#top">Up</a></div> <hr /> <hr /> +<a NAME="installDependencies" ID="installDependencies"></a> +<h2>installDependencies</h2> +<b>installDependencies</b>(<i>pipInstall</i>) + +<p> + Function to install dependencies of this plug-in. +</p> +<dl> + +<dt><i>pipInstall</i> (function)</dt> +<dd> +function to be called with a list of package names. +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> <a NAME="prepareUninstall" ID="prepareUninstall"></a> <h2>prepareUninstall</h2> <b>prepareUninstall</b>(<i></i>)
--- a/ProjectPyramid/Documentation/source/Plugin_Project_Pyramid.ProjectPyramid.CreateParametersDialog.html Tue Jun 01 19:37:46 2021 +0200 +++ b/ProjectPyramid/Documentation/source/Plugin_Project_Pyramid.ProjectPyramid.CreateParametersDialog.html Sun Jun 06 16:30:37 2021 +0200 @@ -57,7 +57,7 @@ <h3>Class Attributes</h3> <table> -<tr><td>None</td></tr> +<tr><td>PyramidStarter</td></tr><tr><td>PyramidStarterGH</td></tr> </table> <h3>Class Methods</h3> @@ -73,10 +73,6 @@ <td>Constructor</td> </tr> <tr> -<td><a href="#CreateParametersDialog.__prepareScaffoldString">__prepareScaffoldString</a></td> -<td>Private method to prepare a scaffold string for the combo box.</td> -</tr> -<tr> <td><a href="#CreateParametersDialog.__updateUi">__updateUi</a></td> <td>Private slot to update the dialog.</td> </tr> @@ -85,11 +81,7 @@ <td>Public method to get the data.</td> </tr> <tr> -<td><a href="#CreateParametersDialog.on_nameEdit_textChanged">on_nameEdit_textChanged</a></td> -<td>Private slot to handle changes of the site name.</td> -</tr> -<tr> -<td><a href="#CreateParametersDialog.on_scaffoldCombo_currentTextChanged">on_scaffoldCombo_currentTextChanged</a></td> +<td><a href="#CreateParametersDialog.on_templateCombo_currentTextChanged">on_templateCombo_currentTextChanged</a></td> <td>Private slot to handle changes of the selected scaffold.</td> </tr> </table> @@ -101,49 +93,18 @@ <a NAME="CreateParametersDialog.__init__" ID="CreateParametersDialog.__init__"></a> <h4>CreateParametersDialog (Constructor)</h4> -<b>CreateParametersDialog</b>(<i>project, parent=None</i>) +<b>CreateParametersDialog</b>(<i>parent=None</i>) <p> Constructor </p> <dl> -<dt><i>project</i> (Project)</dt> -<dd> -reference to the project object -</dd> <dt><i>parent</i> (QWidget)</dt> <dd> reference to the parent widget </dd> </dl> -<a NAME="CreateParametersDialog.__prepareScaffoldString" ID="CreateParametersDialog.__prepareScaffoldString"></a> -<h4>CreateParametersDialog.__prepareScaffoldString</h4> -<b>__prepareScaffoldString</b>(<i>line</i>) - -<p> - Private method to prepare a scaffold string for the combo box. -</p> -<dl> - -<dt><i>line</i> (str)</dt> -<dd> -output line containing the scaffold name and some - explanatory text -</dd> -</dl> -<dl> -<dt>Return:</dt> -<dd> -prepared scaffold text -</dd> -</dl> -<dl> -<dt>Return Type:</dt> -<dd> -str -</dd> -</dl> <a NAME="CreateParametersDialog.__updateUi" ID="CreateParametersDialog.__updateUi"></a> <h4>CreateParametersDialog.__updateUi</h4> <b>__updateUi</b>(<i></i>) @@ -161,34 +122,20 @@ <dl> <dt>Return:</dt> <dd> -tuple giving the scaffold, the project name, a flag indicating - to overwrite existing files and a flag indicating to simulate the - creation +tuple giving the template name, an optional template version, + a flag indicating to overwrite existing files and a dictionary + containing additional context data </dd> </dl> <dl> <dt>Return Type:</dt> <dd> -tuple of (str, str, bool, bool) +tuple of (str, str, bool) </dd> </dl> -<a NAME="CreateParametersDialog.on_nameEdit_textChanged" ID="CreateParametersDialog.on_nameEdit_textChanged"></a> -<h4>CreateParametersDialog.on_nameEdit_textChanged</h4> -<b>on_nameEdit_textChanged</b>(<i>text</i>) - -<p> - Private slot to handle changes of the site name. -</p> -<dl> - -<dt><i>text</i> (str)</dt> -<dd> -text of the site entry -</dd> -</dl> -<a NAME="CreateParametersDialog.on_scaffoldCombo_currentTextChanged" ID="CreateParametersDialog.on_scaffoldCombo_currentTextChanged"></a> -<h4>CreateParametersDialog.on_scaffoldCombo_currentTextChanged</h4> -<b>on_scaffoldCombo_currentTextChanged</b>(<i>text</i>) +<a NAME="CreateParametersDialog.on_templateCombo_currentTextChanged" ID="CreateParametersDialog.on_templateCombo_currentTextChanged"></a> +<h4>CreateParametersDialog.on_templateCombo_currentTextChanged</h4> +<b>on_templateCombo_currentTextChanged</b>(<i>text</i>) <p> Private slot to handle changes of the selected scaffold.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ProjectPyramid/Documentation/source/Plugin_Project_Pyramid.ProjectPyramid.MigrateSummaryDialog.html Sun Jun 06 16:30:37 2021 +0200 @@ -0,0 +1,201 @@ +<!DOCTYPE html> +<html><head> +<title>Plugin_Project_Pyramid.ProjectPyramid.MigrateSummaryDialog</title> +<meta charset="UTF-8"> +<style> +body { + background: #EDECE6; + margin: 0em 1em 10em 1em; + color: black; +} + +h1 { color: white; background: #85774A; } +h2 { color: white; background: #85774A; } +h3 { color: white; background: #9D936E; } +h4 { color: white; background: #9D936E; } + +a { color: #BA6D36; } + +</style> +</head> +<body> +<a NAME="top" ID="top"></a> +<h1>Plugin_Project_Pyramid.ProjectPyramid.MigrateSummaryDialog</h1> + +<p> +Module implementing a dialog showing a summary of all created.migrations. +</p> +<h3>Global Attributes</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Classes</h3> + +<table> + +<tr> +<td><a href="#MigrateSummaryDialog">MigrateSummaryDialog</a></td> +<td>Class implementing a dialog showing a summary of all created.migrations.</td> +</tr> +</table> +<h3>Functions</h3> + +<table> +<tr><td>None</td></tr> +</table> +<hr /> +<hr /> +<a NAME="MigrateSummaryDialog" ID="MigrateSummaryDialog"></a> +<h2>MigrateSummaryDialog</h2> + +<p> + Class implementing a dialog showing a summary of all created.migrations. +</p> +<h3>Derived from</h3> +QDialog, Ui_MigrateSummaryDialog +<h3>Class Attributes</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Class Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Methods</h3> + +<table> + +<tr> +<td><a href="#MigrateSummaryDialog.__init__">MigrateSummaryDialog</a></td> +<td>Constructor</td> +</tr> +<tr> +<td><a href="#MigrateSummaryDialog.__cancelProcess">__cancelProcess</a></td> +<td>Private slot to terminate the current process.</td> +</tr> +<tr> +<td><a href="#MigrateSummaryDialog.__processOutput">__processOutput</a></td> +<td>Private method to process the flask output and populate the summary list.</td> +</tr> +<tr> +<td><a href="#MigrateSummaryDialog.__selectItem">__selectItem</a></td> +<td>Private method to select an item given its revision.</td> +</tr> +<tr> +<td><a href="#MigrateSummaryDialog.on_buttonBox_clicked">on_buttonBox_clicked</a></td> +<td>Private slot handling a button press of the button box.</td> +</tr> +<tr> +<td><a href="#MigrateSummaryDialog.on_summaryWidget_itemSelectionChanged">on_summaryWidget_itemSelectionChanged</a></td> +<td>Private slot to handle the selection of an entry.</td> +</tr> +<tr> +<td><a href="#MigrateSummaryDialog.on_upDownButton_clicked">on_upDownButton_clicked</a></td> +<td>Private slot to upgrade/downgrade to the selected revision.</td> +</tr> +<tr> +<td><a href="#MigrateSummaryDialog.showSummary">showSummary</a></td> +<td>Public method to show the migrations summary.</td> +</tr> +</table> +<h3>Static Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> + +<a NAME="MigrateSummaryDialog.__init__" ID="MigrateSummaryDialog.__init__"></a> +<h4>MigrateSummaryDialog (Constructor)</h4> +<b>MigrateSummaryDialog</b>(<i>project, parent=None</i>) + +<p> + Constructor +</p> +<dl> + +<dt><i>project</i> (Project)</dt> +<dd> +reference to the project object +</dd> +<dt><i>parent</i> (QWidget)</dt> +<dd> +reference to the parent widget +</dd> +</dl> +<a NAME="MigrateSummaryDialog.__cancelProcess" ID="MigrateSummaryDialog.__cancelProcess"></a> +<h4>MigrateSummaryDialog.__cancelProcess</h4> +<b>__cancelProcess</b>(<i></i>) + +<p> + Private slot to terminate the current process. +</p> +<a NAME="MigrateSummaryDialog.__processOutput" ID="MigrateSummaryDialog.__processOutput"></a> +<h4>MigrateSummaryDialog.__processOutput</h4> +<b>__processOutput</b>(<i>output</i>) + +<p> + Private method to process the flask output and populate the summary + list. +</p> +<dl> + +<dt><i>output</i> (str)</dt> +<dd> +output of the flask process +</dd> +</dl> +<a NAME="MigrateSummaryDialog.__selectItem" ID="MigrateSummaryDialog.__selectItem"></a> +<h4>MigrateSummaryDialog.__selectItem</h4> +<b>__selectItem</b>(<i>revision</i>) + +<p> + Private method to select an item given its revision. +</p> +<dl> + +<dt><i>revision</i> (str)</dt> +<dd> +revision of the item to select +</dd> +</dl> +<a NAME="MigrateSummaryDialog.on_buttonBox_clicked" ID="MigrateSummaryDialog.on_buttonBox_clicked"></a> +<h4>MigrateSummaryDialog.on_buttonBox_clicked</h4> +<b>on_buttonBox_clicked</b>(<i>button</i>) + +<p> + Private slot handling a button press of the button box. +</p> +<dl> + +<dt><i>button</i> (QAbstractButton)</dt> +<dd> +reference to the pressed button +</dd> +</dl> +<a NAME="MigrateSummaryDialog.on_summaryWidget_itemSelectionChanged" ID="MigrateSummaryDialog.on_summaryWidget_itemSelectionChanged"></a> +<h4>MigrateSummaryDialog.on_summaryWidget_itemSelectionChanged</h4> +<b>on_summaryWidget_itemSelectionChanged</b>(<i></i>) + +<p> + Private slot to handle the selection of an entry. +</p> +<a NAME="MigrateSummaryDialog.on_upDownButton_clicked" ID="MigrateSummaryDialog.on_upDownButton_clicked"></a> +<h4>MigrateSummaryDialog.on_upDownButton_clicked</h4> +<b>on_upDownButton_clicked</b>(<i></i>) + +<p> + Private slot to upgrade/downgrade to the selected revision. +</p> +<a NAME="MigrateSummaryDialog.showSummary" ID="MigrateSummaryDialog.showSummary"></a> +<h4>MigrateSummaryDialog.showSummary</h4> +<b>showSummary</b>(<i></i>) + +<p> + Public method to show the migrations summary. +</p> +<div align="right"><a href="#top">Up</a></div> +<hr /> +</body></html> \ No newline at end of file
--- a/ProjectPyramid/Documentation/source/Plugin_Project_Pyramid.ProjectPyramid.Project.html Tue Jun 01 19:37:46 2021 +0200 +++ b/ProjectPyramid/Documentation/source/Plugin_Project_Pyramid.ProjectPyramid.Project.html Sun Jun 06 16:30:37 2021 +0200 @@ -85,10 +85,18 @@ <td>Private method to adjust the working directory in the arguments list.</td> </tr> <tr> +<td><a href="#Project.__assemblePyramidCommand">__assemblePyramidCommand</a></td> +<td>Private method to assemble the full pyramid command for a given virtual environment.</td> +</tr> +<tr> <td><a href="#Project.__buildDistribution">__buildDistribution</a></td> <td>Private slot to build a distribution file for the current Pyramid project.</td> </tr> <tr> +<td><a href="#Project.__createMigration">__createMigration</a></td> +<td>Private slot to create a new database migration.</td> +</tr> +<tr> <td><a href="#Project.__createProject">__createProject</a></td> <td>Private slot to create a new Pyramid project.</td> </tr> @@ -117,6 +125,10 @@ <td>Private method to get the path of the virtual environment.</td> </tr> <tr> +<td><a href="#Project.__initDatabaseActions">__initDatabaseActions</a></td> +<td>Private method to initialize the database related actions.</td> +</tr> +<tr> <td><a href="#Project.__initializeDatabase">__initializeDatabase</a></td> <td>Private slot to initialize the database of the Pyramid project.</td> </tr> @@ -141,10 +153,6 @@ <td>Private slot handling the addition of a new language.</td> </tr> <tr> -<td><a href="#Project.__projectPath">__projectPath</a></td> -<td>Private method to calculate the full path of the Pyramid project.</td> -</tr> -<tr> <td><a href="#Project.__pyramidInfo">__pyramidInfo</a></td> <td>Private slot to show some info about Pyramid.</td> </tr> @@ -153,10 +161,6 @@ <td>Private slot to start the default web browser with the server URL.</td> </tr> <tr> -<td><a href="#Project.__runLoggingServer">__runLoggingServer</a></td> -<td>Private slot to start the Pyramid Web server with logging.</td> -</tr> -<tr> <td><a href="#Project.__runPythonShell">__runPythonShell</a></td> <td>Private slot to start a Python console for a Pyramid project.</td> </tr> @@ -177,10 +181,6 @@ <td>Private slot to set the current project.</td> </tr> <tr> -<td><a href="#Project.__setupDevelop">__setupDevelop</a></td> -<td>Private slot to set up the development environment for the current project.</td> -</tr> -<tr> <td><a href="#Project.__showDocumentation">__showDocumentation</a></td> <td>Private slot to show the helpviewer with the Pyramid documentation.</td> </tr> @@ -189,6 +189,14 @@ <td>Private slot showing all views that would match a given URL.</td> </tr> <tr> +<td><a href="#Project.__showMigrationsHistory">__showMigrationsHistory</a></td> +<td>Private slot to show the full migrations history.</td> +</tr> +<tr> +<td><a href="#Project.__showMigrationsSummary">__showMigrationsSummary</a></td> +<td>Private slot to show a migrations history summary.</td> +</tr> +<tr> <td><a href="#Project.__showRoutes">__showRoutes</a></td> <td>Private slot showing all URL dispatch routes.</td> </tr> @@ -205,10 +213,18 @@ <td>Public method to update the message catalogs.</td> </tr> <tr> +<td><a href="#Project.downgradeDatabase">downgradeDatabase</a></td> +<td>Public slot to downgrade the database to the previous or a given version.</td> +</tr> +<tr> <td><a href="#Project.extractMessages">extractMessages</a></td> <td>Public method to extract the messages catalog template file.</td> </tr> <tr> +<td><a href="#Project.getAlembicCommand">getAlembicCommand</a></td> +<td>Public method to get the path to the alembic executable of the current Pyramid project.</td> +</tr> +<tr> <td><a href="#Project.getMenu">getMenu</a></td> <td>Public method to get a reference to the requested menu.</td> </tr> @@ -217,6 +233,10 @@ <td>Public method to get the names of all menus.</td> </tr> <tr> +<td><a href="#Project.getProjectVirtualEnvironment">getProjectVirtualEnvironment</a></td> +<td>Public method to generate the path of the project virtual environment.</td> +</tr> +<tr> <td><a href="#Project.getPyramidCommand">getPyramidCommand</a></td> <td>Public method to build a Pyramid command.</td> </tr> @@ -245,6 +265,10 @@ <td>Public method to check, if the given console is a spawning console.</td> </tr> <tr> +<td><a href="#Project.migrationsPath">migrationsPath</a></td> +<td>Public method to get the path to the migrations directory of the current Pyramid project.</td> +</tr> +<tr> <td><a href="#Project.newForm">newForm</a></td> <td>Public method to create a new form.</td> </tr> @@ -265,6 +289,10 @@ <td>Public method to add our hook methods.</td> </tr> <tr> +<td><a href="#Project.projectPath">projectPath</a></td> +<td>Public method to calculate the full path of the Pyramid project.</td> +</tr> +<tr> <td><a href="#Project.registerOpenHook">registerOpenHook</a></td> <td>Public method to register the open hook to open a translations file in a translations editor.</td> </tr> @@ -280,6 +308,10 @@ <td><a href="#Project.updateSelectedCatalogs">updateSelectedCatalogs</a></td> <td>Public method to update the message catalogs.</td> </tr> +<tr> +<td><a href="#Project.upgradeDatabase">upgradeDatabase</a></td> +<td>Public slot to upgrade the database to the head or a given version.</td> +</tr> </table> <h3>Static Methods</h3> @@ -327,6 +359,37 @@ working directory </dd> </dl> +<a NAME="Project.__assemblePyramidCommand" ID="Project.__assemblePyramidCommand"></a> +<h4>Project.__assemblePyramidCommand</h4> +<b>__assemblePyramidCommand</b>(<i>cmd, virtualEnv</i>) + +<p> + Private method to assemble the full pyramid command for a given virtual + environment. +</p> +<dl> + +<dt><i>cmd</i> (str)</dt> +<dd> +command +</dd> +<dt><i>virtualEnv</i> (str)</dt> +<dd> +path of the project's Python virtual environment +</dd> +</dl> +<dl> +<dt>Return:</dt> +<dd> +assembled pyramid command +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl> <a NAME="Project.__buildDistribution" ID="Project.__buildDistribution"></a> <h4>Project.__buildDistribution</h4> <b>__buildDistribution</b>(<i></i>) @@ -335,6 +398,13 @@ Private slot to build a distribution file for the current Pyramid project. </p> +<a NAME="Project.__createMigration" ID="Project.__createMigration"></a> +<h4>Project.__createMigration</h4> +<b>__createMigration</b>(<i></i>) + +<p> + Private slot to create a new database migration. +</p> <a NAME="Project.__createProject" ID="Project.__createProject"></a> <h4>Project.__createProject</h4> <b>__createProject</b>(<i></i>) @@ -490,6 +560,13 @@ str </dd> </dl> +<a NAME="Project.__initDatabaseActions" ID="Project.__initDatabaseActions"></a> +<h4>Project.__initDatabaseActions</h4> +<b>__initDatabaseActions</b>(<i></i>) + +<p> + Private method to initialize the database related actions. +</p> <a NAME="Project.__initializeDatabase" ID="Project.__initializeDatabase"></a> <h4>Project.__initializeDatabase</h4> <b>__initializeDatabase</b>(<i></i>) @@ -621,33 +698,6 @@ language code of the new language </dd> </dl> -<a NAME="Project.__projectPath" ID="Project.__projectPath"></a> -<h4>Project.__projectPath</h4> -<b>__projectPath</b>(<i></i>) - -<p> - Private method to calculate the full path of the Pyramid project. -</p> -<dl> -<dt>Return:</dt> -<dd> -path of the project -</dd> -</dl> -<dl> -<dt>Return Type:</dt> -<dd> -str -</dd> -</dl> -<dl> - -<dt>Raises <b>PyramidNoProjectSelectedException</b>:</dt> -<dd> -raised, if no project is - selected -</dd> -</dl> <a NAME="Project.__pyramidInfo" ID="Project.__pyramidInfo"></a> <h4>Project.__pyramidInfo</h4> <b>__pyramidInfo</b>(<i></i>) @@ -662,13 +712,6 @@ <p> Private slot to start the default web browser with the server URL. </p> -<a NAME="Project.__runLoggingServer" ID="Project.__runLoggingServer"></a> -<h4>Project.__runLoggingServer</h4> -<b>__runLoggingServer</b>(<i></i>) - -<p> - Private slot to start the Pyramid Web server with logging. -</p> <a NAME="Project.__runPythonShell" ID="Project.__runPythonShell"></a> <h4>Project.__runPythonShell</h4> <b>__runPythonShell</b>(<i></i>) @@ -678,18 +721,11 @@ </p> <a NAME="Project.__runServer" ID="Project.__runServer"></a> <h4>Project.__runServer</h4> -<b>__runServer</b>(<i>logging=False</i>) +<b>__runServer</b>(<i></i>) <p> Private slot to start the Pyramid Web server. </p> -<dl> - -<dt><i>logging</i> (bool)</dt> -<dd> -flag indicating to enable logging -</dd> -</dl> <a NAME="Project.__selectProject" ID="Project.__selectProject"></a> <h4>Project.__selectProject</h4> <b>__selectProject</b>(<i></i>) @@ -718,14 +754,6 @@ name of the project </dd> </dl> -<a NAME="Project.__setupDevelop" ID="Project.__setupDevelop"></a> -<h4>Project.__setupDevelop</h4> -<b>__setupDevelop</b>(<i></i>) - -<p> - Private slot to set up the development environment for the current - project. -</p> <a NAME="Project.__showDocumentation" ID="Project.__showDocumentation"></a> <h4>Project.__showDocumentation</h4> <b>__showDocumentation</b>(<i></i>) @@ -740,6 +768,20 @@ <p> Private slot showing all views that would match a given URL. </p> +<a NAME="Project.__showMigrationsHistory" ID="Project.__showMigrationsHistory"></a> +<h4>Project.__showMigrationsHistory</h4> +<b>__showMigrationsHistory</b>(<i></i>) + +<p> + Private slot to show the full migrations history. +</p> +<a NAME="Project.__showMigrationsSummary" ID="Project.__showMigrationsSummary"></a> +<h4>Project.__showMigrationsSummary</h4> +<b>__showMigrationsSummary</b>(<i></i>) + +<p> + Private slot to show a migrations history summary. +</p> <a NAME="Project.__showRoutes" ID="Project.__showRoutes"></a> <h4>Project.__showRoutes</h4> <b>__showRoutes</b>(<i></i>) @@ -782,6 +824,21 @@ list of file names </dd> </dl> +<a NAME="Project.downgradeDatabase" ID="Project.downgradeDatabase"></a> +<h4>Project.downgradeDatabase</h4> +<b>downgradeDatabase</b>(<i>revision=None</i>) + +<p> + Public slot to downgrade the database to the previous or a given + version. +</p> +<dl> + +<dt><i>revision</i> (str)</dt> +<dd> +migration revision to downgrade to +</dd> +</dl> <a NAME="Project.extractMessages" ID="Project.extractMessages"></a> <h4>Project.extractMessages</h4> <b>extractMessages</b>(<i></i>) @@ -789,6 +846,26 @@ <p> Public method to extract the messages catalog template file. </p> +<a NAME="Project.getAlembicCommand" ID="Project.getAlembicCommand"></a> +<h4>Project.getAlembicCommand</h4> +<b>getAlembicCommand</b>(<i></i>) + +<p> + Public method to get the path to the alembic executable of the current + Pyramid project. +</p> +<dl> +<dt>Return:</dt> +<dd> +path to the alembic executable +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl> <a NAME="Project.getMenu" ID="Project.getMenu"></a> <h4>Project.getMenu</h4> <b>getMenu</b>(<i>name</i>) @@ -835,9 +912,28 @@ list of str </dd> </dl> +<a NAME="Project.getProjectVirtualEnvironment" ID="Project.getProjectVirtualEnvironment"></a> +<h4>Project.getProjectVirtualEnvironment</h4> +<b>getProjectVirtualEnvironment</b>(<i></i>) + +<p> + Public method to generate the path of the project virtual environment. +</p> +<dl> +<dt>Return:</dt> +<dd> +path of the Pyramid project virtual environment +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl> <a NAME="Project.getPyramidCommand" ID="Project.getPyramidCommand"></a> <h4>Project.getPyramidCommand</h4> -<b>getPyramidCommand</b>(<i>cmd, language=""</i>) +<b>getPyramidCommand</b>(<i>cmd, language="", virtualEnv=""</i>) <p> Public method to build a Pyramid command. @@ -853,6 +949,10 @@ Python variant to get the virtual environment for (one of '' or 'Python3') </dd> +<dt><i>virtualEnv</i> (str)</dt> +<dd> +path of the project's Python virtual environment +</dd> </dl> <dl> <dt>Return:</dt> @@ -976,6 +1076,26 @@ str </dd> </dl> +<a NAME="Project.migrationsPath" ID="Project.migrationsPath"></a> +<h4>Project.migrationsPath</h4> +<b>migrationsPath</b>(<i></i>) + +<p> + Public method to get the path to the migrations directory of the + current Pyramid project. +</p> +<dl> +<dt>Return:</dt> +<dd> +pathof the directory containing the migrations +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl> <a NAME="Project.newForm" ID="Project.newForm"></a> <h4>Project.newForm</h4> <b>newForm</b>(<i>path</i>) @@ -1025,6 +1145,33 @@ <p> Public method to add our hook methods. </p> +<a NAME="Project.projectPath" ID="Project.projectPath"></a> +<h4>Project.projectPath</h4> +<b>projectPath</b>(<i></i>) + +<p> + Public method to calculate the full path of the Pyramid project. +</p> +<dl> +<dt>Return:</dt> +<dd> +path of the project +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl> +<dl> + +<dt>Raises <b>PyramidNoProjectSelectedException</b>:</dt> +<dd> +raised, if no project is + selected +</dd> +</dl> <a NAME="Project.registerOpenHook" ID="Project.registerOpenHook"></a> <h4>Project.registerOpenHook</h4> <b>registerOpenHook</b>(<i></i>) @@ -1080,6 +1227,20 @@ list of filenames </dd> </dl> +<a NAME="Project.upgradeDatabase" ID="Project.upgradeDatabase"></a> +<h4>Project.upgradeDatabase</h4> +<b>upgradeDatabase</b>(<i>revision=None</i>) + +<p> + Public slot to upgrade the database to the head or a given version. +</p> +<dl> + +<dt><i>revision</i> (str)</dt> +<dd> +migration revision to upgrade to +</dd> +</dl> <div align="right"><a href="#top">Up</a></div> <hr /> <hr />
--- a/ProjectPyramid/Documentation/source/Plugin_Project_Pyramid.ProjectPyramid.PyramidDialog.html Tue Jun 01 19:37:46 2021 +0200 +++ b/ProjectPyramid/Documentation/source/Plugin_Project_Pyramid.ProjectPyramid.PyramidDialog.html Sun Jun 06 16:30:37 2021 +0200 @@ -138,7 +138,7 @@ <a NAME="PyramidDialog.__init__" ID="PyramidDialog.__init__"></a> <h4>PyramidDialog (Constructor)</h4> -<b>PyramidDialog</b>(<i>text, fixed=False, linewrap=True, msgSuccess=None, msgError=None, parent=None</i>) +<b>PyramidDialog</b>(<i>text, fixed=False, linewrap=True, msgSuccess=None, msgError=None, combinedOutput=False, parent=None</i>) <p> Constructor @@ -165,6 +165,11 @@ <dd> optional string to show upon unsuccessful execution </dd> +<dt><i>combinedOutput</i> (bool)</dt> +<dd> +flag indicating to combine the output into the + output pane +</dd> <dt><i>parent</i> (QWidget)</dt> <dd> parent widget
--- a/ProjectPyramid/Documentation/source/index-Plugin_Project_Pyramid.ProjectPyramid.html Tue Jun 01 19:37:46 2021 +0200 +++ b/ProjectPyramid/Documentation/source/index-Plugin_Project_Pyramid.ProjectPyramid.html Sun Jun 06 16:30:37 2021 +0200 @@ -50,6 +50,10 @@ <td>Module implementing a dialog to select the template type.</td> </tr> <tr> +<td><a href="Plugin_Project_Pyramid.ProjectPyramid.MigrateSummaryDialog.html">MigrateSummaryDialog</a></td> +<td>Module implementing a dialog showing a summary of all created.migrations.</td> +</tr> +<tr> <td><a href="Plugin_Project_Pyramid.ProjectPyramid.Project.html">Project</a></td> <td>Module implementing the Pyramid project support.</td> </tr>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ProjectPyramid/MigrateSummaryDialog.py Sun Jun 06 16:30:37 2021 +0200 @@ -0,0 +1,232 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2020 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a dialog showing a summary of all created.migrations. +""" + +from PyQt6.QtCore import pyqtSlot, Qt, QProcess, QEventLoop, QTimer +from PyQt6.QtGui import QGuiApplication +from PyQt6.QtWidgets import ( + QDialog, QDialogButtonBox, QAbstractButton, QTreeWidgetItem, + QAbstractItemView +) + +from EricGui.EricOverrideCursor import EricOverrideCursor, EricOverridenCursor +from EricWidgets import EricMessageBox + +from .Ui_MigrateSummaryDialog import Ui_MigrateSummaryDialog + + +class MigrateSummaryDialog(QDialog, Ui_MigrateSummaryDialog): + """ + Class implementing a dialog showing a summary of all created.migrations. + """ + def __init__(self, project, parent=None): + """ + Constructor + + @param project reference to the project object + @type Project + @param parent reference to the parent widget + @type QWidget + """ + super().__init__(parent) + self.setupUi(self) + + self.__refreshButton = self.buttonBox.addButton( + self.tr("Refresh"), QDialogButtonBox.ButtonRole.ActionRole) + self.__refreshButton.clicked.connect(self.showSummary) + + self.__project = project + + self.__process = None + self.__currentItemIndex = 1000000 + self.__currentRevision = "" + + def showSummary(self): + """ + Public method to show the migrations summary. + """ + projectPath = self.__project.projectPath() + + self.show() + self.raise_() + + self.buttonBox.button( + QDialogButtonBox.StandardButton.Close).setEnabled(False) + self.buttonBox.button( + QDialogButtonBox.StandardButton.Cancel).setDefault(True) + self.buttonBox.button( + QDialogButtonBox.StandardButton.Cancel).setEnabled(True) + self.buttonBox.button( + QDialogButtonBox.StandardButton.Cancel).setFocus( + Qt.FocusReason.OtherFocusReason) + QGuiApplication.processEvents( + QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents) + + command = self.__project.getAlembicCommand() + + self.__process = QProcess() + self.__process.setWorkingDirectory(projectPath) + + args = ["-c", "development.ini", "history", "--indicate-current"] + + with EricOverrideCursor(): + self.__process.start(command, args) + ok = self.__process.waitForStarted(10000) + if ok: + ok = self.__process.waitForFinished(10000) + if ok: + out = str(self.__process.readAllStandardOutput(), + "utf-8") + self.__processOutput(out) + self.__selectItem(self.__currentRevision) + else: + with EricOverridenCursor(): + EricMessageBox.critical( + None, + self.tr("Migrations Summary"), + self.tr("""The 'alembic' process did not finish""" + """ within 10 seconds.""")) + else: + with EricOverridenCursor(): + EricMessageBox.critical( + None, + self.tr("Migrations Summary"), + self.tr("""The 'alembic' process could not be""" + """ started.""")) + for column in range(self.summaryWidget.columnCount()): + self.summaryWidget.resizeColumnToContents(column) + + self.buttonBox.button( + QDialogButtonBox.StandardButton.Cancel).setEnabled(False) + self.buttonBox.button( + QDialogButtonBox.StandardButton.Close).setEnabled(True) + self.buttonBox.button( + QDialogButtonBox.StandardButton.Close).setDefault(True) + self.buttonBox.button( + QDialogButtonBox.StandardButton.Close).setFocus( + Qt.FocusReason.OtherFocusReason) + + def __processOutput(self, output): + """ + Private method to process the flask output and populate the summary + list. + + @param output output of the flask process + @type str + """ + self.summaryWidget.clear() + self.upDownButton.setEnabled(False) + self.__currentItemIndex = 1000000 + self.__currentRevision = "" + + lines = output.splitlines() + for line in lines: + isCurrent = False + oldRev, rest = line.split("->") + rest, message = rest.split(",", 1) + newRev, *labels = rest.split() + if labels: + labelList = [ + label.replace("(", "").replace(")", "") + for label in labels + ] + labelsStr = ", ".join(labelList) + if "current" in labelList: + isCurrent = True + else: + labelsStr = "" + + itm = QTreeWidgetItem(self.summaryWidget, [ + oldRev.strip(), + newRev.strip(), + message.strip(), + labelsStr, + ]) + if isCurrent: + font = itm.font(0) + font.setBold(True) + for column in range(self.summaryWidget.columnCount()): + itm.setFont(column, font) + + self.__currentItemIndex = ( + self.summaryWidget.indexOfTopLevelItem(itm) + ) + self.__currentRevision = newRev.strip() + + @pyqtSlot() + def on_summaryWidget_itemSelectionChanged(self): + """ + Private slot to handle the selection of an entry. + """ + items = self.summaryWidget.selectedItems() + if items: + index = self.summaryWidget.indexOfTopLevelItem(items[0]) + if index < self.__currentItemIndex: + self.upDownButton.setText(self.tr("Upgrade")) + elif index > self.__currentItemIndex: + self.upDownButton.setText(self.tr("Downgrade")) + self.upDownButton.setEnabled(index != self.__currentItemIndex) + else: + self.upDownButton.setEnabled(False) + + @pyqtSlot() + def on_upDownButton_clicked(self): + """ + Private slot to upgrade/downgrade to the selected revision. + """ + itm = self.summaryWidget.selectedItems()[0] + rev = itm.text(1) + if self.upDownButton.text() == self.tr("Upgrade"): + self.__project.upgradeDatabase(revision=rev) + else: + self.__project.downgradeDatabase(revision=rev) + self.showSummary() + + @pyqtSlot(QAbstractButton) + def on_buttonBox_clicked(self, button): + """ + Private slot handling a button press of the button box. + + @param button reference to the pressed button + @type QAbstractButton + """ + if button is self.buttonBox.button( + QDialogButtonBox.StandardButton.Cancel + ): + self.__cancelProcess() + + @pyqtSlot() + def __cancelProcess(self): + """ + Private slot to terminate the current process. + """ + if ( + self.__process is not None and + self.__process.state() != QProcess.ProcessState.NotRunning + ): + self.__process.terminate() + QTimer.singleShot(2000, self.__process.kill) + self.__process.waitForFinished(3000) + + self.__process = None + + def __selectItem(self, revision): + """ + Private method to select an item given its revision. + + @param revision revision of the item to select + @type str + """ + if revision: + items = self.summaryWidget.findItems( + revision, Qt.MatchFlag.MatchExactly, 1) + if items: + # select the first item + items[0].setSelected(True) + self.summaryWidget.scrollToItem( + items[0], QAbstractItemView.ScrollHint.PositionAtCenter)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ProjectPyramid/MigrateSummaryDialog.ui Sun Jun 06 16:30:37 2021 +0200 @@ -0,0 +1,127 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>MigrateSummaryDialog</class> + <widget class="QDialog" name="MigrateSummaryDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>800</width> + <height>500</height> + </rect> + </property> + <property name="windowTitle"> + <string>Migrations Summary</string> + </property> + <property name="sizeGripEnabled"> + <bool>true</bool> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QTreeWidget" name="summaryWidget"> + <property name="alternatingRowColors"> + <bool>true</bool> + </property> + <property name="rootIsDecorated"> + <bool>false</bool> + </property> + <property name="itemsExpandable"> + <bool>false</bool> + </property> + <column> + <property name="text"> + <string>Old Revision</string> + </property> + </column> + <column> + <property name="text"> + <string>New Revision</string> + </property> + </column> + <column> + <property name="text"> + <string>Message</string> + </property> + </column> + <column> + <property name="text"> + <string>Labels</string> + </property> + </column> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QPushButton" name="upDownButton"> + <property name="toolTip"> + <string>Press to upgrade or downgrade the database to the selected migration</string> + </property> + <property name="text"> + <string>Upgrade</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Close</set> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>MigrateSummaryDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>227</x> + <y>479</y> + </hint> + <hint type="destinationlabel"> + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>MigrateSummaryDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>295</x> + <y>485</y> + </hint> + <hint type="destinationlabel"> + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui>
--- a/ProjectPyramid/Project.py Tue Jun 01 19:37:46 2021 +0200 +++ b/ProjectPyramid/Project.py Sun Jun 06 16:30:37 2021 +0200 @@ -7,12 +7,17 @@ Module implementing the Pyramid project support. """ +import configparser +import contextlib +import glob import os import re -import configparser -import contextlib +import subprocess # secok +import sys -from PyQt6.QtCore import QObject, QFileInfo, QTimer, QUrl, QIODeviceBase +from PyQt6.QtCore import ( + pyqtSlot, QObject, QFileInfo, QTimer, QUrl, QIODeviceBase +) from PyQt6.QtGui import QDesktopServices from PyQt6.QtWidgets import QMenu, QDialog, QInputDialog, QLineEdit from PyQt6.QtCore import QProcess as QProcessPyQt @@ -125,6 +130,8 @@ self.__serverProc = None self.__pyramidVersion = "" + + self.__migrationSummaryDialog = None def initActions(self): """ @@ -184,21 +191,6 @@ self.runServerAct.triggered.connect(self.__runServer) self.actions.append(self.runServerAct) - self.runLoggingServerAct = EricAction( - self.tr('Run Server with Logging'), - self.tr('Run Server with &Logging'), - 0, 0, - self, 'pyramid_run_logging_server') - self.runLoggingServerAct.setStatusTip(self.tr( - 'Starts the Pyramid Web server with logging')) - self.runLoggingServerAct.setWhatsThis(self.tr( - """<b>Run Server with Logging</b>""" - """<p>Starts the Pyramid Web server with logging using""" - """ "pserve --log-file=server.log --reload development.ini".</p>""" - )) - self.runLoggingServerAct.triggered.connect(self.__runLoggingServer) - self.actions.append(self.runLoggingServerAct) - self.runBrowserAct = EricAction( self.tr('Run Web-Browser'), self.tr('Run &Web-Browser'), @@ -229,45 +221,6 @@ self.runPythonShellAct.triggered.connect(self.__runPythonShell) self.actions.append(self.runPythonShellAct) - ############################## - ## setup actions below ## - ############################## - - self.setupDevelopAct = EricAction( - self.tr('Setup Development Environment'), - self.tr('Setup &Development Environment'), - 0, 0, - self, 'pyramid_setup_development') - self.setupDevelopAct.setStatusTip(self.tr( - 'Setup the Pyramid project in development mode')) - self.setupDevelopAct.setWhatsThis(self.tr( - """<b>Setup Development Environment</b>""" - """<p>Setup the Pyramid project in development mode using""" - """ "python setup.py develop".</p>""" - )) - self.setupDevelopAct.triggered.connect(self.__setupDevelop) - self.actions.append(self.setupDevelopAct) - - ############################### - ## database actions below ## - ############################### - - self.initializeDbAct = EricAction( - self.tr('Initialize Database'), - self.tr('Initialize &Database'), - 0, 0, - self, 'pyramid_initialize_database') - self.initializeDbAct.setStatusTip(self.tr( - 'Initializes (or re-initializes) the database of the current' - ' Pyramid project')) - self.initializeDbAct.setWhatsThis(self.tr( - """<b>Initialize Database</b>""" - """<p>Initializes (or re-initializes) the database of the""" - """ current Pyramid project.</p>""" - )) - self.initializeDbAct.triggered.connect(self.__initializeDatabase) - self.actions.append(self.initializeDbAct) - ############################### ## show actions below ## ############################### @@ -372,8 +325,120 @@ self.aboutPyramidAct.triggered.connect(self.__pyramidInfo) self.actions.append(self.aboutPyramidAct) + self.__initDatabaseActions() + self.__setCurrentProject(None) + def __initDatabaseActions(self): + """ + Private method to initialize the database related actions. + """ + self.initializeDbAct = EricAction( + self.tr('Initialize Database'), + self.tr('Initialize &Database'), + 0, 0, + self, 'pyramid_initialize_database') + self.initializeDbAct.setStatusTip(self.tr( + 'Initializes (or re-initializes) the database of the current' + ' Pyramid project')) + self.initializeDbAct.setWhatsThis(self.tr( + """<b>Initialize Database</b>""" + """<p>Initializes (or re-initializes) the database of the""" + """ current Pyramid project.</p>""" + )) + self.initializeDbAct.triggered.connect(self.__initializeDatabase) + self.actions.append(self.initializeDbAct) + + ######################################################### + ## action to create a new database migration + ######################################################### + + self.migrateCreateAct = EricAction( + self.tr('Create Migration'), + self.tr('&Create Migration'), + 0, 0, + self, 'flask_create_migration') + self.migrateCreateAct.setStatusTip(self.tr( + 'Create a new migration for the current database')) + self.migrateCreateAct.setWhatsThis(self.tr( + """<b>Create Migration</b>""" + """<p>Creates a new migration for the current database""" + """ and stores it in the configured migrations directory.</p>""" + )) + self.migrateCreateAct.triggered.connect( + self.__createMigration) + self.actions.append(self.migrateCreateAct) + + ######################################################### + ## action to up- and downgrade a databse + ######################################################### + + self.upgradeDatabaseAct = EricAction( + self.tr('Upgrade Database'), + self.tr('&Upgrade Database'), + 0, 0, + self, 'flask_upgrade_database') + self.upgradeDatabaseAct.setStatusTip(self.tr( + 'Upgrade the database to the current migration')) + self.upgradeDatabaseAct.setWhatsThis(self.tr( + """<b>Upgrade Database</b>""" + """<p>Upgrades the database to the current migration.</p>""" + )) + self.upgradeDatabaseAct.triggered.connect( + self.upgradeDatabase) + self.actions.append(self.upgradeDatabaseAct) + + self.downgradeDatabaseAct = EricAction( + self.tr('Downgrade Database'), + self.tr('&Downgrade Database'), + 0, 0, + self, 'flask_downgrade_database') + self.downgradeDatabaseAct.setStatusTip(self.tr( + 'Downgrade the database to the previous version')) + self.downgradeDatabaseAct.setWhatsThis(self.tr( + """<b>Downgrade Database</b>""" + """<p>Downgrades the database to the previous version.</p>""" + )) + self.downgradeDatabaseAct.triggered.connect( + self.downgradeDatabase) + self.actions.append(self.downgradeDatabaseAct) + + ######################################################### + ## actions to show migrations history information + ######################################################### + + self.migrationSummaryAct = EricAction( + self.tr('Show Migrations Summary'), + self.tr('Show Migrations &Summary'), + 0, 0, + self, 'flask_show_migrations_summary') + self.migrationSummaryAct.setStatusTip(self.tr( + 'Show a summary of the created database migrations')) + self.migrationSummaryAct.setWhatsThis(self.tr( + """<b>Show Migrations Summary</b>""" + """<p>Shows a summary list of the created database""" + """ migrations.</p>""" + )) + self.migrationSummaryAct.triggered.connect( + self.__showMigrationsSummary) + self.actions.append(self.migrationSummaryAct) + + self.migrationHistoryAct = EricAction( + self.tr('Show Migrations History'), + self.tr('Show Migrations &History'), + 0, 0, + self, 'flask_show_migrations_history') + self.migrationHistoryAct.setStatusTip(self.tr( + 'Show the full history of the created database migrations')) + self.migrationHistoryAct.setWhatsThis(self.tr( + """<b>Show Migrations History</b>""" + """<p>Shows the full history of the created database""" + """ migrations.</p>""" + )) + self.migrationHistoryAct.triggered.connect( + self.__showMigrationsHistory) + self.actions.append(self.migrationHistoryAct) + def initMenu(self): """ Public slot to initialize the Pyramid menu. @@ -383,27 +448,39 @@ """ self.__menus = {} # clear menus references + # Database menu + dbMenu = QMenu(self.tr("Database")) + dbMenu.setTearOffEnabled(True) + + dbMenu.addAction(self.initializeDbAct) + dbMenu.addSeparator() + dbMenu.addAction(self.migrateCreateAct) + dbMenu.addSeparator() + dbMenu.addAction(self.upgradeDatabaseAct) + dbMenu.addAction(self.downgradeDatabaseAct) + dbMenu.addSeparator() + dbMenu.addAction(self.migrationSummaryAct) + dbMenu.addAction(self.migrationHistoryAct) + + # main Pyramid menu menu = QMenu(self.tr('P&yramid'), self.__ui) menu.setTearOffEnabled(True) menu.addAction(self.selectProjectAct) menu.addSeparator() menu.addAction(self.runServerAct) - menu.addAction(self.runLoggingServerAct) menu.addAction(self.runBrowserAct) menu.addSeparator() + menu.addAction(self.runPythonShellAct) + menu.addSeparator() menu.addAction(self.createProjectAct) menu.addSeparator() - menu.addAction(self.setupDevelopAct) - menu.addSeparator() - menu.addAction(self.initializeDbAct) + menu.addMenu(dbMenu) menu.addSeparator() menu.addAction(self.showViewsAct) menu.addAction(self.showRoutesAct) menu.addAction(self.showTweensAct) menu.addSeparator() - menu.addAction(self.runPythonShellAct) - menu.addSeparator() menu.addAction(self.buildDistroAct) menu.addSeparator() menu.addAction(self.documentationAct) @@ -411,6 +488,9 @@ menu.addAction(self.aboutPyramidAct) self.__menus["main"] = menu + self.__menus["database"] = dbMenu + + self.__setCurrentProject(None) return menu @@ -581,6 +661,10 @@ if self.__serverProc is not None: self.__serverProcFinished() self.__setCurrentProject(None) + + for dlg in (self.__migrationSummaryDialog,): + if dlg is not None: + dlg.close() def __getExecutablePaths(self, file): """ @@ -626,8 +710,7 @@ @rtype list of str """ variants = [] - # TODO: that doesn't exist anymore - cmd = "pcreate" + cmd = "cookiecutter" for variant in ['Python3']: virtEnv = self.__getVirtualEnvironment(variant) @@ -737,7 +820,16 @@ return "" - def getPyramidCommand(self, cmd, language=""): + def getProjectVirtualEnvironment(self): + """ + Public method to generate the path of the project virtual environment. + + @return path of the Pyramid project virtual environment + @rtype str + """ + return os.path.join(self.projectPath(), "env") + + def getPyramidCommand(self, cmd, language="", virtualEnv=""): """ Public method to build a Pyramid command. @@ -746,15 +838,18 @@ @param language Python variant to get the virtual environment for (one of '' or 'Python3') @type str + @param virtualEnv path of the project's Python virtual environment + @type str @return full pyramid command @rtype str """ if not language: language = self.__ericProject.getProjectLanguage() - virtualEnv = self.__getVirtualEnvironment(language) - if isWindowsPlatform() and not virtualEnv: - virtualEnv = self.__getDebugEnvironment(language) + if not virtualEnv: + virtualEnv = self.__getVirtualEnvironment(language) + if not virtualEnv: + virtualEnv = self.__getDebugEnvironment(language) if isWindowsPlatform(): fullCmds = [ os.path.join(virtualEnv, "Scripts", cmd + '.exe'), @@ -776,6 +871,24 @@ break return cmd + def __assemblePyramidCommand(self, cmd, virtualEnv): + """ + Private method to assemble the full pyramid command for a given virtual + environment. + + @param cmd command + @type str + @param virtualEnv path of the project's Python virtual environment + @type str + @return assembled pyramid command + @rtype str + """ + return ( + os.path.join(virtualEnv, "Scripts", cmd + '.exe') + if isWindowsPlatform() else + os.path.join(virtualEnv, "bin", cmd) + ) + def getPythonCommand(self): """ Public method to build the Python command. @@ -835,19 +948,18 @@ @rtype str """ if not self.__pyramidVersion: - # TODO: that doesn't exist anymore - cmd = self.getPyramidCommand("pcreate") - if isWindowsPlatform(): - cmd = os.path.join(os.path.dirname(cmd), "pcreate-script.py") + cmd = self.getPyramidCommand( + "pdistreport", + virtualEnv=self.getProjectVirtualEnvironment() + ) try: - with open(cmd, 'r', encoding="utf-8") as f: - lines = f.read().splitlines() - for line in lines: - if line.startswith("__requires__"): - #- sample: __requires__ = 'pyramid==1.4' - vers = line.strip().split()[-1][1:-1].split("==")[1] - self.__pyramidVersion = vers - except OSError: + output = subprocess.check_output([cmd]) # secok + outputLines = output.decode().splitlines() + for line in outputLines: + if line.startswith("Pyramid version:"): + self.__pyramidVersion = line.rsplit(None, 1)[1] + break + except (OSError, subprocess.CalledProcessError): self.__pyramidVersion = "" return self.__pyramidVersion @@ -913,32 +1025,31 @@ """ from .CreateParametersDialog import CreateParametersDialog - dlg = CreateParametersDialog(self) + dlg = CreateParametersDialog(self.__ui) if dlg.exec() == QDialog.DialogCode.Accepted: - scaffold, project, overwrite, simulate = dlg.getData() + template, version, overwrite, contextData = dlg.getData() - # TODO: that doesn't exist anymore - cmd = self.getPyramidCommand("pcreate") - args = [] + cmd = self.getPyramidCommand("cookiecutter") + args = ["--no-input"] if overwrite: - args.append("--overwrite") - else: - args.append("--interactive") - if simulate: - args.append("--simulate") - args.append("--scaffold={0}".format(scaffold)) - args.append(project) + args.append("--overwrite-if-exists") + if version: + args += ["--checkout", version] + args.append(template) + for context, data in contextData.items(): + args.append("{0}={1}".format(context, data)) dlg = PyramidDialog(self.tr("Create Pyramid Project"), linewrap=False, parent=self.__ui) if dlg.startProcess( cmd, args, self.__ericProject.getProjectPath() ): dlg.exec() - if dlg.normalExit() and not simulate: - # search for files created by pcreate and add them to the - # project + if dlg.normalExit() and "repo_name" in contextData: + # search for files created by cookiecutter and add them + # to the project projectPath = os.path.join( - self.__ericProject.getProjectPath(), project) + self.__ericProject.getProjectPath(), + contextData["repo_name"]) for entry in os.walk(projectPath): for fileName in entry[2]: fullName = os.path.join(entry[0], fileName) @@ -946,12 +1057,63 @@ # create the base directory for translations i18nPath = os.path.join( - projectPath, project.lower(), "i18n") + projectPath, contextData["repo_name"].lower(), + "i18n") if not os.path.exists(i18nPath): os.makedirs(i18nPath) self.__ericProject.setDirty(True) - self.__setCurrentProject(project) + combinedOutput = False + argsLists = [] + + # 1. create a Python virtual environment for the project + argsLists.append([sys.executable, "-m", "venv", "env"]) + # 2. upgrade packaging tools + python = self.__assemblePyramidCommand( + "python", os.path.join(projectPath, "env")) + argsLists.append([python, "-m", "pip", "install", + "--upgrade", "pip", "setuptools"]) + # 3. install project in editable mode with testing + argsLists.append([python, "-m", "pip", "install", "-e", + ".[testing]"]) + + if ( + "backend" in contextData and + contextData["backend"] == "sqlalchemy" + ): + # only SQLAlchemy needs initialization of alembic + combinedOutput = True + + # 4. initialize database + alembic = self.__assemblePyramidCommand( + "alembic", os.path.join(projectPath, "env")) + argsLists.append([alembic, "-c", "development.ini", + "revision", "--autogenerate", + "--message", "initialized database"]) + # 5. upgrade database to initial version + argsLists.append([alembic, "-c", "development.ini", + "upgrade", "head"]) + + dlg = PyramidDialog( + self.tr("Initializing Pyramid Project"), + linewrap=False, combinedOutput=combinedOutput, + parent=self.__ui) + if dlg.startBatchProcesses(argsLists, + workingDir=projectPath): + dlg.exec() + + self.__setCurrentProject(contextData["repo_name"]) + + if ( + "backend" in contextData and + contextData["backend"] == "sqlalchemy" + ): + # add the alembic files created above to the project + migrationsPath = self.migrationsPath() + for entry in os.walk(migrationsPath): + for fileName in entry[2]: + fullName = os.path.join(entry[0], fileName) + self.__ericProject.appendFile(fullName) ################################################################## ## methods below implement site related functions @@ -973,7 +1135,7 @@ os.path.isdir(os.path.join(ppath, entry)) ): projects.append(entry) - return projects + return sorted(projects) def __selectProject(self): """ @@ -1002,9 +1164,9 @@ projects = None self.__setCurrentProject(project) - def __projectPath(self): + def projectPath(self): """ - Private method to calculate the full path of the Pyramid project. + Public method to calculate the full path of the Pyramid project. @return path of the project @rtype str @@ -1045,7 +1207,7 @@ else: lowerProject = self.__project().lower() config = configparser.ConfigParser() - config.read(os.path.join(self.__projectPath(), "setup.cfg")) + config.read(os.path.join(self.projectPath(), "setup.cfg")) try: outputDir = config.get("init_catalog", "output_dir") except (configparser.NoOptionError, configparser.NoSectionError): @@ -1061,9 +1223,16 @@ if self.__currentProject is None: self.initializeDbAct.setEnabled(False) + with contextlib.suppress(KeyError): + self.__menus["database"].setEnabled(False) else: initCmd = self.__getInitDbCommand() self.initializeDbAct.setEnabled(os.path.exists(initCmd)) + + alembicDir = os.path.join( + self.projectPath(), self.__currentProject, + "alembic", "versions") + self.__menus["database"].setEnabled(os.path.exists(alembicDir)) def __project(self): """ @@ -1086,18 +1255,15 @@ ## slots below implement run functions ################################################################## - def __runServer(self, logging=False): + def __runServer(self): """ Private slot to start the Pyramid Web server. - - @param logging flag indicating to enable logging - @type bool """ consoleCmd = self.isSpawningConsole( self.__plugin.getPreferences("ConsoleCommand"))[1] if consoleCmd: try: - projectPath = self.__projectPath() + projectPath = self.projectPath() except PyramidNoProjectSelectedException: EricMessageBox.warning( self.__ui, @@ -1108,9 +1274,10 @@ args = Utilities.parseOptionString(consoleCmd) args[0] = Utilities.getExecutablePath(args[0]) - args.append(self.getPyramidCommand("pserve")) - if logging: - args.append("--log-file=server.log") + args.append(self.getPyramidCommand( + "pserve", + virtualEnv=self.getProjectVirtualEnvironment() + )) args.append("--reload") args.append(os.path.join(projectPath, "development.ini")) @@ -1132,12 +1299,6 @@ self.tr('Process Generation Error'), self.tr('The Pyramid server could not be started.')) - def __runLoggingServer(self): - """ - Private slot to start the Pyramid Web server with logging. - """ - self.__runServer(True) - def __serverProcFinished(self): """ Private slot connected to the finished signal. @@ -1156,7 +1317,7 @@ Private slot to start the default web browser with the server URL. """ try: - projectPath = self.__projectPath() + projectPath = self.projectPath() except PyramidNoProjectSelectedException: EricMessageBox.warning( self.__ui, @@ -1168,10 +1329,10 @@ config = configparser.ConfigParser() config.read(os.path.join(projectPath, "development.ini")) try: - port = config.get("server:main", "port") + listen = config.get("server:main", "listen") except (configparser.NoOptionError, configparser.NoSectionError): - port = "8080" - url = "http://localhost:{0}".format(port) + listen = "localhost:6543" + url = "http://{0}".format(listen) if self.__plugin.getPreferences("UseExternalBrowser"): res = QDesktopServices.openUrl(QUrl(url)) if not res: @@ -1191,7 +1352,7 @@ self.__plugin.getPreferences("ConsoleCommand"))[1] if consoleCmd: try: - projectPath = self.__projectPath() + projectPath = self.projectPath() except PyramidNoProjectSelectedException: EricMessageBox.warning( self.__ui, @@ -1202,7 +1363,10 @@ args = Utilities.parseOptionString(consoleCmd) args[0] = Utilities.getExecutablePath(args[0]) - args.append(self.getPyramidCommand("pshell")) + args.append(self.getPyramidCommand( + "pshell", + virtualEnv=self.getProjectVirtualEnvironment() + )) consoleType = self.__plugin.getPreferences("Python3ConsoleType") args.append("--python-shell={0}".format(consoleType)) args.append(os.path.join(projectPath, "development.ini")) @@ -1218,41 +1382,6 @@ ' started.')) ################################################################## - ## slots below implement setup functions - ################################################################## - - def __setupDevelop(self): - """ - Private slot to set up the development environment for the current - project. - """ - title = self.tr("Setup Development Environment") - try: - wd = self.__projectPath() - except PyramidNoProjectSelectedException: - EricMessageBox.warning( - self.__ui, - title, - self.tr('No current Pyramid project selected or no Pyramid' - ' project created yet. Aborting...')) - return - - cmd = self.getPythonCommand() - args = [] - args.append("setup.py") - args.append("develop") - - dia = PyramidDialog( - title, - msgSuccess=self.tr("Pyramid development environment setup" - " successfully.")) - res = dia.startProcess(cmd, args, wd) - if res: - dia.exec() - initCmd = self.__getInitDbCommand() - self.initializeDbAct.setEnabled(os.path.exists(initCmd)) - - ################################################################## ## slots below implement distribution functions ################################################################## @@ -1263,7 +1392,7 @@ """ title = self.tr("Build Distribution File") try: - projectPath = self.__projectPath() + projectPath = self.projectPath() except PyramidNoProjectSelectedException: EricMessageBox.warning( self.__ui, @@ -1279,7 +1408,10 @@ dlg = DistributionTypeSelectionDialog(self, projectPath, self.__ui) if dlg.exec() == QDialog.DialogCode.Accepted: formats = dlg.getFormats() - cmd = self.getPythonCommand() + cmd = self.getPyramidCommand( + "python", + virtualEnv=self.getProjectVirtualEnvironment() + ) args = [] args.append("setup.py") args.append("sdist") @@ -1295,54 +1427,6 @@ dia.exec() ################################################################## - ## slots below implement database functions - ################################################################## - - def __getInitDbCommand(self): - """ - Private method to create the path to the initialization script. - - @return path to the initialization script - @rtype str - """ - try: - cmd = "initialize_{0}_db".format(self.__project()) - return self.getPyramidCommand(cmd) - except PyramidNoProjectSelectedException: - EricMessageBox.warning( - self.__ui, - self.tr("Initialize Database"), - self.tr('No current Pyramid project selected or no Pyramid' - ' project created yet. Aborting...')) - return "" - - def __initializeDatabase(self): - """ - Private slot to initialize the database of the Pyramid project. - """ - title = self.tr("Initialize Database") - try: - projectPath = self.__projectPath() - except PyramidNoProjectSelectedException: - EricMessageBox.warning( - self.__ui, - title, - self.tr('No current Pyramid project selected or no Pyramid' - ' project created yet. Aborting...')) - return - - cmd = self.__getInitDbCommand() - args = [] - args.append("development.ini") - - dia = PyramidDialog( - title, - msgSuccess=self.tr("Database initialized successfully.")) - res = dia.startProcess(cmd, args, projectPath) - if res: - dia.exec() - - ################################################################## ## slots below implement various debugging functions ################################################################## @@ -1352,7 +1436,7 @@ """ title = self.tr("Show Matching Views") try: - projectPath = self.__projectPath() + projectPath = self.projectPath() except PyramidNoProjectSelectedException: EricMessageBox.warning( self.__ui, @@ -1370,7 +1454,10 @@ if not ok or url == "": return - cmd = self.getPyramidCommand("pviews") + cmd = self.getPyramidCommand( + "pviews", + virtualEnv=self.getProjectVirtualEnvironment() + ) args = [] args.append("development.ini") args.append(url) @@ -1386,7 +1473,7 @@ """ title = self.tr("Show Routes") try: - projectPath = self.__projectPath() + projectPath = self.projectPath() except PyramidNoProjectSelectedException: EricMessageBox.warning( self.__ui, @@ -1408,7 +1495,7 @@ """ title = self.tr("Show Tween Objects") try: - projectPath = self.__projectPath() + projectPath = self.projectPath() except PyramidNoProjectSelectedException: EricMessageBox.warning( self.__ui, @@ -1417,7 +1504,10 @@ ' project created yet. Aborting...')) return - cmd = self.getPyramidCommand("ptweens") + cmd = self.getPyramidCommand( + "ptweens", + virtualEnv=self.getProjectVirtualEnvironment() + ) args = [] args.append("development.ini") @@ -1505,7 +1595,7 @@ """ title = self.tr("Extract messages") try: - projectPath = self.__projectPath() + projectPath = self.projectPath() except PyramidNoProjectSelectedException: EricMessageBox.warning( self.__ui, @@ -1559,7 +1649,7 @@ title = self.tr( "Initializing message catalog for '{0}'").format(code) try: - projectPath = self.__projectPath() + projectPath = self.projectPath() except PyramidNoProjectSelectedException: EricMessageBox.warning( self.__ui, @@ -1596,7 +1686,7 @@ """ title = self.tr("Compiling message catalogs") try: - projectPath = self.__projectPath() + projectPath = self.projectPath() except PyramidNoProjectSelectedException: EricMessageBox.warning( self.__ui, @@ -1633,7 +1723,7 @@ """ title = self.tr("Compiling message catalogs") try: - projectPath = self.__projectPath() + projectPath = self.projectPath() except PyramidNoProjectSelectedException: EricMessageBox.warning( self.__ui, @@ -1686,7 +1776,7 @@ """ title = self.tr("Updating message catalogs") try: - projectPath = self.__projectPath() + projectPath = self.projectPath() except PyramidNoProjectSelectedException: EricMessageBox.warning( self.__ui, @@ -1716,7 +1806,7 @@ """ title = self.tr("Updating message catalogs") try: - projectPath = self.__projectPath() + projectPath = self.projectPath() except PyramidNoProjectSelectedException: EricMessageBox.warning( self.__ui, @@ -1763,7 +1853,7 @@ editor = self.__plugin.getPreferences("TranslationsEditor") if poFile.endswith(".po") and editor: try: - wd = self.__projectPath() + wd = self.projectPath() except PyramidNoProjectSelectedException: wd = "" started, pid = QProcess.startDetached(editor, [poFile], wd) @@ -1774,3 +1864,199 @@ self.tr('The translations editor process ({0}) could' ' not be started.').format( os.path.basename(editor))) + + ####################################################################### + ## database related methods and slots below + ####################################################################### + + def getAlembicCommand(self): + """ + Public method to get the path to the alembic executable of the current + Pyramid project. + + @return path to the alembic executable + @rtype str + """ + return self.getPyramidCommand( + "alembic", + virtualEnv=self.getProjectVirtualEnvironment() + ) + + def migrationsPath(self): + """ + Public method to get the path to the migrations directory of the + current Pyramid project. + + @return pathof the directory containing the migrations + @rtype str + """ + return os.path.join(self.projectPath(), self.__currentProject, + "alembic", "versions") + + def __getInitDbCommand(self): + """ + Private method to create the path to the initialization script. + + @return path to the initialization script + @rtype str + """ + try: + cmd = "initialize_{0}_db".format(self.__project()) + return self.getPyramidCommand( + cmd, + virtualEnv=self.getProjectVirtualEnvironment() + ) + except PyramidNoProjectSelectedException: + EricMessageBox.warning( + self.__ui, + self.tr("Initialize Database"), + self.tr('No current Pyramid project selected or no Pyramid' + ' project created yet. Aborting...')) + return "" + + @pyqtSlot() + def __initializeDatabase(self): + """ + Private slot to initialize the database of the Pyramid project. + """ + title = self.tr("Initialize Database") + try: + projectPath = self.projectPath() + except PyramidNoProjectSelectedException: + EricMessageBox.warning( + self.__ui, + title, + self.tr('No current Pyramid project selected or no Pyramid' + ' project created yet. Aborting...')) + return + + cmd = self.__getInitDbCommand() + args = [] + args.append("development.ini") + + dia = PyramidDialog( + title, + msgSuccess=self.tr("Database initialized successfully.")) + res = dia.startProcess(cmd, args, projectPath) + if res: + dia.exec() + + @pyqtSlot() + def __createMigration(self): + """ + Private slot to create a new database migration. + """ + title = self.tr("Create Migration") + projectPath = self.projectPath() + migrations = self.migrationsPath() + + message, ok = QInputDialog.getText( + None, + title, + self.tr("Enter a short message for the migration:"), + QLineEdit.EchoMode.Normal) + if ok: + args = ["-c", "development.ini", "revision", "--autogenerate"] + if migrations: + args += ["--version-path", migrations] + if message: + args += ["--message", message] + + dlg = PyramidDialog( + title, + msgSuccess=self.tr("\nMigration created successfully."), + linewrap=False, combinedOutput=True, + parent=self.__ui + ) + if dlg.startProcess(self.getAlembicCommand(), args, + workingDir=projectPath): + dlg.exec() + if dlg.normalExit(): + versionsPattern = os.path.join(migrations, "*.py") + for fileName in glob.iglob(versionsPattern): + self.__ericProject.appendFile(fileName) + + @pyqtSlot() + def upgradeDatabase(self, revision=None): + """ + Public slot to upgrade the database to the head or a given version. + + @param revision migration revision to upgrade to + @type str + """ + title = self.tr("Upgrade Database") + projectPath = self.projectPath() + + args = ["-c", "development.ini", "upgrade"] + if revision: + args.append(revision) + else: + args.append("head") + + dlg = PyramidDialog( + title, + msgSuccess=self.tr("\nDatabase upgraded successfully."), + linewrap=False, combinedOutput=True, parent=self.__ui + ) + if dlg.startProcess(self.getAlembicCommand(), args, + workingDir=projectPath): + dlg.exec() + + @pyqtSlot() + def downgradeDatabase(self, revision=None): + """ + Public slot to downgrade the database to the previous or a given + version. + + @param revision migration revision to downgrade to + @type str + """ + title = self.tr("Downgrade Database") + projectPath = self.projectPath() + + args = ["-c", "development.ini", "downgrade"] + if revision: + args.append(revision) + else: + args.append("-1") + + dlg = PyramidDialog( + title, + msgSuccess=self.tr("\nDatabase downgraded successfully."), + linewrap=False, combinedOutput=True, parent=self.__ui + ) + if dlg.startProcess(self.getAlembicCommand(), args, + workingDir=projectPath): + dlg.exec() + + @pyqtSlot() + def __showMigrationsSummary(self): + """ + Private slot to show a migrations history summary. + """ + from .MigrateSummaryDialog import MigrateSummaryDialog + + if self.__migrationSummaryDialog is None: + self.__migrationSummaryDialog = MigrateSummaryDialog( + self, parent=self.__ui) + + self.__migrationSummaryDialog.showSummary() + + @pyqtSlot() + def __showMigrationsHistory(self): + """ + Private slot to show the full migrations history. + """ + title = self.tr("Migrations History") + projectPath = self.projectPath() + + args = ["-c", "development.ini", "history", "--indicate-current", + "--verbose"] + + dlg = PyramidDialog( + title, + linewrap=False, combinedOutput=True, parent=self.__ui + ) + if dlg.startProcess(self.getAlembicCommand(), args, + workingDir=projectPath): + dlg.exec()
--- a/ProjectPyramid/PyramidDialog.py Tue Jun 01 19:37:46 2021 +0200 +++ b/ProjectPyramid/PyramidDialog.py Sun Jun 06 16:30:37 2021 +0200 @@ -30,7 +30,7 @@ """ def __init__(self, text, fixed=False, linewrap=True, msgSuccess=None, msgError=None, - parent=None): + combinedOutput=False, parent=None): """ Constructor @@ -44,6 +44,9 @@ @type str @param msgError optional string to show upon unsuccessful execution @type str + @param combinedOutput flag indicating to combine the output into the + output pane + @type bool @param parent parent widget @type QWidget """ @@ -55,11 +58,13 @@ self.buttonBox.button( QDialogButtonBox.StandardButton.Cancel).setDefault(True) - self.proc = None - self.argsLists = [] - self.workingDir = None - self.msgSuccess = msgSuccess - self.msgError = msgError + self.__proc = None + self.__argsLists = [] + self.__workingDir = None + self.__msgSuccess = msgSuccess + self.__msgError = msgError + self.__combinedOutput = combinedOutput + self.__batchMode = False self.outputGroup.setTitle(text) @@ -83,17 +88,17 @@ button. """ if ( - self.proc is not None and - self.proc.state() != QProcess.ProcessState.NotRunning + self.__proc is not None and + self.__proc.state() != QProcess.ProcessState.NotRunning ): - self.proc.terminate() - QTimer.singleShot(2000, self.proc.kill) - self.proc.waitForFinished(3000) + self.__proc.terminate() + QTimer.singleShot(2000, self.__proc.kill) + self.__proc.waitForFinished(3000) self.inputGroup.setEnabled(False) self.inputGroup.hide() - self.proc = None + self.__proc = None self.buttonBox.button( QDialogButtonBox.StandardButton.Close).setEnabled(True) @@ -105,10 +110,9 @@ QDialogButtonBox.StandardButton.Close).setFocus( Qt.FocusReason.OtherFocusReason) - if self.argsLists: - args = self.argsLists[0][:] - del self.argsLists[0] - self.startProcess(args[0], args[1:], self.workingDir) + if self.__argsLists: + args = self.__argsLists.pop(0)[:] + self.startProcess(args[0], args[1:], self.__workingDir) def on_buttonBox_clicked(self, button): """ @@ -141,10 +145,10 @@ ) self.finish() - if self.normal and self.msgSuccess: - self.resultbox.insertPlainText(self.msgSuccess) - elif not self.normal and self.msgError: - self.resultbox.insertPlainText(self.msgError) + if self.normal and self.__msgSuccess: + self.resultbox.insertPlainText(self.__msgSuccess) + elif not self.normal and self.__msgError: + self.resultbox.insertPlainText(self.__msgError) self.resultbox.ensureCursorVisible() def startProcess(self, command, args, workingDir=None, showArgs=True): @@ -176,20 +180,26 @@ QDialogButtonBox.StandardButton.Cancel).setFocus( Qt.FocusReason.OtherFocusReason) + if self.__batchMode: + self.resultbox.append(80 * '#') + if showArgs: self.resultbox.append(command + ' ' + ' '.join(args)) self.resultbox.append('') - self.proc = QProcess() + self.__proc = QProcess() + if self.__combinedOutput: + self.__proc.setProcessChannelMode( + QProcess.ProcessChannelMode.MergedChannels) - self.proc.finished.connect(self.__procFinished) - self.proc.readyReadStandardOutput.connect(self.__readStdout) - self.proc.readyReadStandardError.connect(self.__readStderr) + self.__proc.finished.connect(self.__procFinished) + self.__proc.readyReadStandardOutput.connect(self.__readStdout) + self.__proc.readyReadStandardError.connect(self.__readStderr) if workingDir: - self.proc.setWorkingDirectory(workingDir) - self.proc.start(command, args) - procStarted = self.proc.waitForStarted() + self.__proc.setWorkingDirectory(workingDir) + self.__proc.start(command, args) + procStarted = self.__proc.waitForStarted() if not procStarted: self.buttonBox.setFocus() self.inputGroup.setEnabled(False) @@ -216,15 +226,15 @@ @return flag indicating a successful start of the first process @rtype bool """ - self.argsLists = argsLists[:] - self.workingDir = workingDir + self.__argsLists = argsLists[:] + self.__workingDir = workingDir + self.__batchMode = True # start the first process - args = self.argsLists[0][:] - del self.argsLists[0] - res = self.startProcess(args[0], args[1:], self.workingDir) + args = self.__argsLists.pop(0)[:] + res = self.startProcess(args[0], args[1:], self.__workingDir) if not res: - self.argsLists = [] + self.__argsLists = [] return res @@ -254,8 +264,8 @@ It reads the output of the process, formats it and inserts it into the contents pane. """ - if self.proc is not None: - out = str(self.proc.readAllStandardOutput(), + if self.__proc is not None: + out = str(self.__proc.readAllStandardOutput(), Preferences.getSystem("IOEncoding"), 'replace') self.resultbox.insertPlainText(out) @@ -270,8 +280,8 @@ It reads the error output of the process and inserts it into the error pane. """ - if self.proc is not None: - err = str(self.proc.readAllStandardError(), + if self.__proc is not None: + err = str(self.__proc.readAllStandardError(), Preferences.getSystem("IOEncoding"), 'replace') self.errorGroup.show() @@ -307,7 +317,7 @@ self.resultbox.insertPlainText(inputTxt) self.resultbox.ensureCursorVisible() - self.proc.write(strToQByteArray(inputTxt)) + self.__proc.write(strToQByteArray(inputTxt)) self.passwordCheckBox.setChecked(False) self.input.clear()
--- a/ProjectPyramid/PyramidRoutesDialog.py Tue Jun 01 19:37:46 2021 +0200 +++ b/ProjectPyramid/PyramidRoutesDialog.py Sun Jun 06 16:30:37 2021 +0200 @@ -174,7 +174,10 @@ self.proc.readyReadStandardOutput.connect(self.__readStdout) self.proc.readyReadStandardError.connect(self.__readStderr) - cmd = self.__project.getPyramidCommand("proutes") + cmd = self.__project.getPyramidCommand( + "proutes", + virtualEnv=self.__project.getProjectVirtualEnvironment() + ) args = [] args.append("development.ini")
--- a/ProjectPyramid/i18n/pyramid_de.ts Tue Jun 01 19:37:46 2021 +0200 +++ b/ProjectPyramid/i18n/pyramid_de.ts Sun Jun 06 16:30:37 2021 +0200 @@ -4,25 +4,9 @@ <context> <name>CreateParametersDialog</name> <message> - <location filename="../CreateParametersDialog.py" line="55" /> - <source>The pcreate command did not finish within 30s.</source> - <translation>Das pcreate Kommando endete nicht innerhalb von 30s.</translation> - </message> - <message> - <location filename="../CreateParametersDialog.py" line="58" /> - <source>Could not start the pcreate executable.</source> - <translation>Der pcreate Prozess konnte nicht gestartet werden.</translation> - </message> - <message> - <location filename="../CreateParametersDialog.py" line="69" /> - <source>Process Generation Error</source> - <translation>Fehler bei der Prozessgenerierung</translation> - </message> - <message> - <location filename="../CreateParametersDialog.py" line="115" /> - <source>{0} ({1})</source> - <comment>scaffold name, explanatory text</comment> - <translation>{0} ({1})</translation> + <location filename="../CreateParametersDialog.py" line="47" /> + <source>No Database</source> + <translation>Keine Datenbank</translation> </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> @@ -31,23 +15,58 @@ </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> - <source>Project &Name:</source> - <translation>Projekt&name:</translation> + <source>Template:</source> + <translation>Vorlage:</translation> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Enter the template to be used</source> + <translation>Gib die zu verwendende Vorlage ein</translation> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Template Version:</source> + <translation>Version der Vorlage:</translation> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Enter an optional branch, tag or commit</source> + <translation>Gib einen optionalen Zweig, eine Marke oder eine Revision ein</translation> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>CookieCutter Starter Parameters</source> + <translation>CookieCutter Starter Parameter</translation> </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> - <source>Enter the name of the Pyramid project to create</source> - <translation>Gib den Namen des zu erstellenden Pyramid Projektes ein</translation> + <source>Project Name:</source> + <translation>Projektname:</translation> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Enter the name of the Pyramid project</source> + <translation>Gib den Namen des Pyramidprojektes ein</translation> </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> - <source>&Scaffold:</source> - <translation>&Vorlage:</translation> + <source>Template Language:</source> + <translation>Vorlagensprache:</translation> </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> - <source>Select the scaffold to be used</source> - <translation>Wähle die zu verwendende Vorlage aus</translation> + <source>Select the templating language</source> + <translation>Wähle die Sprache der Vorlagen</translation> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Backend:</source> + <translation>Datenbank:</translation> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Select the database backend</source> + <translation>Wähle die Datenbankanbindung</translation> </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> @@ -59,16 +78,6 @@ <source>Overwrite existing files</source> <translation>Existierende Dateien überschreiben</translation> </message> - <message> - <location filename="../CreateParametersDialog.ui" line="0" /> - <source>Select to simulate the creation</source> - <translation>Auswählen, um die Erstellung zu simulieren</translation> - </message> - <message> - <location filename="../CreateParametersDialog.ui" line="0" /> - <source>Simulate Pyramid project creation</source> - <translation>Pyramid Projekterstellung simulieren</translation> - </message> </context> <context> <name>DistributionTypeSelectionDialog</name> @@ -152,522 +161,681 @@ </message> </context> <context> + <name>MigrateSummaryDialog</name> + <message> + <location filename="../MigrateSummaryDialog.py" line="40" /> + <source>Refresh</source> + <translation>Erneuern</translation> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <location filename="../MigrateSummaryDialog.py" line="98" /> + <location filename="../MigrateSummaryDialog.py" line="91" /> + <source>Migrations Summary</source> + <translation>Zusammenfassung der Migrationen</translation> + </message> + <message> + <location filename="../MigrateSummaryDialog.py" line="92" /> + <source>The 'alembic' process did not finish within 10 seconds.</source> + <translation>Der 'alembic' Prozess wurde nicht innerhalb 10 Sekunden beendet.</translation> + </message> + <message> + <location filename="../MigrateSummaryDialog.py" line="99" /> + <source>The 'alembic' process could not be started.</source> + <translation>Der 'alembic' Prozess konnte nicht gestartet werden.</translation> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <location filename="../MigrateSummaryDialog.py" line="184" /> + <location filename="../MigrateSummaryDialog.py" line="170" /> + <source>Upgrade</source> + <translation>Db Aktualisierung</translation> + </message> + <message> + <location filename="../MigrateSummaryDialog.py" line="172" /> + <source>Downgrade</source> + <translation>Db Rückstufung</translation> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>Old Revision</source> + <translation>Alte Version</translation> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>New Revision</source> + <translation>Neue Version</translation> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>Message</source> + <translation>Bezeichnung</translation> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>Labels</source> + <translation>Label</translation> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>Press to upgrade or downgrade the database to the selected migration</source> + <translation>Drücken, um die Datenbank auf die ausgewählte Migration zu aktualisieren oder rückzustufen</translation> + </message> + </context> + <context> <name>Project</name> <message> - <location filename="../Project.py" line="136" /> + <location filename="../Project.py" line="143" /> <source>Current Pyramid Project</source> <translation>Aktuelles Pyramid Projekt</translation> </message> <message> - <location filename="../Project.py" line="140" /> + <location filename="../Project.py" line="147" /> <source>Selects the current Pyramid project</source> <translation>Wählt das aktuelle Pyramid Projekt aus</translation> </message> <message> - <location filename="../Project.py" line="142" /> + <location filename="../Project.py" line="149" /> <source><b>Current Pyramid Project</b><p>Selects the Pyramid project. Used for multi-project Pyramid projects to switch between the projects.</p></source> <translation><b>Aktuelles Pyramid Projekt</b><p>Wählt das Pyramid Projekt aus. Wird bei Multiprojekt Pyramid Projekten eingesetzt, um zwischen den Projekten umzuschalten.</p></translation> </message> <message> - <location filename="../Project.py" line="931" /> - <location filename="../Project.py" line="155" /> + <location filename="../Project.py" line="1041" /> + <location filename="../Project.py" line="162" /> <source>Create Pyramid Project</source> <translation>Pyramid Projekt erstellen</translation> </message> <message> - <location filename="../Project.py" line="156" /> + <location filename="../Project.py" line="163" /> <source>Create Pyramid &Project</source> <translation>Pyramid &Projekt erstellen</translation> </message> <message> - <location filename="../Project.py" line="159" /> + <location filename="../Project.py" line="166" /> <source>Creates a new Pyramid project</source> <translation>Erstellt ein neues Pyramid Projekt</translation> </message> <message> - <location filename="../Project.py" line="161" /> + <location filename="../Project.py" line="168" /> <source><b>Create Pyramid Project</b><p>Creates a new Pyramid project using "pcreate".</p></source> <translation><b>Pyramid Projekt erstellen</b><p>Erstellt ein neues Pyramid Projekt mittels "pcreate".</p></translation> </message> <message> - <location filename="../Project.py" line="1104" /> - <location filename="../Project.py" line="173" /> + <location filename="../Project.py" line="1270" /> + <location filename="../Project.py" line="180" /> <source>Run Server</source> <translation>Server starten</translation> </message> <message> - <location filename="../Project.py" line="174" /> + <location filename="../Project.py" line="181" /> <source>Run &Server</source> <translation>&Server starten</translation> </message> <message> - <location filename="../Project.py" line="177" /> + <location filename="../Project.py" line="184" /> <source>Starts the Pyramid Web server</source> <translation>Startet den Pyramid Web Server</translation> </message> <message> - <location filename="../Project.py" line="179" /> + <location filename="../Project.py" line="186" /> <source><b>Run Server</b><p>Starts the Pyramid Web server using "pserve --reload development.ini".</p></source> <translation><b>Server starten</b><p>Startet den Pyramid Web Server mittels "pserve --reload development.ini".</p></translation> </message> <message> - <location filename="../Project.py" line="188" /> - <source>Run Server with Logging</source> - <translation>Server mit Logging starten</translation> - </message> - <message> - <location filename="../Project.py" line="189" /> - <source>Run Server with &Logging</source> - <translation>Server mit &Logging starten</translation> - </message> - <message> - <location filename="../Project.py" line="192" /> - <source>Starts the Pyramid Web server with logging</source> - <translation>Startet den Pyramid Web Server mit Logging</translation> - </message> - <message> - <location filename="../Project.py" line="194" /> - <source><b>Run Server with Logging</b><p>Starts the Pyramid Web server with logging using "pserve --log-file=server.log --reload development.ini".</p></source> - <translation><b>Server mit Logging starten</b><p>Startet den Pyramid Web Server mit Logging mittels "pserve --log-file=server.log --reload development.ini".</p></translation> - </message> - <message> - <location filename="../Project.py" line="1180" /> - <location filename="../Project.py" line="1163" /> - <location filename="../Project.py" line="203" /> + <location filename="../Project.py" line="1341" /> + <location filename="../Project.py" line="1324" /> + <location filename="../Project.py" line="195" /> <source>Run Web-Browser</source> <translation>Web-Browser starten</translation> </message> <message> - <location filename="../Project.py" line="204" /> + <location filename="../Project.py" line="196" /> <source>Run &Web-Browser</source> <translation>Web-&Browser starten</translation> </message> <message> - <location filename="../Project.py" line="207" /> + <location filename="../Project.py" line="199" /> <source>Starts the default Web-Browser with the URL of the Pyramid Web server</source> <translation>Startet den Standard Web-Browser mit der URL des Pyramid Web-Servers</translation> </message> <message> - <location filename="../Project.py" line="210" /> + <location filename="../Project.py" line="202" /> <source><b>Run Web-Browser</b><p>Starts the default Web-Browser with the URL of the Pyramid Web server.</p></source> <translation><b>Web-Browser starten</b><p>Startet den Standard Web-Browser mit der URL des Pyramid Web-Servers.</p></translation> </message> <message> - <location filename="../Project.py" line="1198" /> - <location filename="../Project.py" line="219" /> + <location filename="../Project.py" line="1359" /> + <location filename="../Project.py" line="211" /> <source>Start Pyramid Python Console</source> <translation>Starte Pyramid Python Konsole</translation> </message> <message> - <location filename="../Project.py" line="220" /> + <location filename="../Project.py" line="212" /> <source>Start Pyramid &Python Console</source> <translation>Starte Pyramid &Python Konsole</translation> </message> <message> - <location filename="../Project.py" line="223" /> + <location filename="../Project.py" line="215" /> <source>Starts an interactive Python interpreter</source> <translation>Startet einen interaktiven Python Interpreter</translation> </message> <message> - <location filename="../Project.py" line="225" /> + <location filename="../Project.py" line="217" /> <source><b>Start Pyramid Python Console</b><p>Starts an interactive Python interpreter.</p></source> <translation><b>Starte Pyramid Python Konsole</b><p>Startet einen interaktiven Python Interpreter</p></translation> </message> <message> - <location filename="../Project.py" line="1229" /> - <location filename="../Project.py" line="237" /> - <source>Setup Development Environment</source> - <translation>Entwicklungsumgebung einrichten</translation> - </message> - <message> - <location filename="../Project.py" line="238" /> - <source>Setup &Development Environment</source> - <translation>Entwicklungs&umgebung einrichten</translation> - </message> - <message> - <location filename="../Project.py" line="241" /> - <source>Setup the Pyramid project in development mode</source> - <translation>Richtet das Pyramid Projekt im Entwicklungsmodus ein</translation> - </message> - <message> - <location filename="../Project.py" line="243" /> - <source><b>Setup Development Environment</b><p>Setup the Pyramid project in development mode using "python setup.py develop".</p></source> - <translation><b>Entwicklungsumgebung einrichten</b><p>Richtet das Pyramid Projekt im Entwicklungsmodus mittels "python setup.py develop" ein.</p></translation> - </message> - <message> - <location filename="../Project.py" line="1323" /> - <location filename="../Project.py" line="1314" /> - <location filename="../Project.py" line="256" /> - <source>Initialize Database</source> - <translation>Datenbank initialisieren</translation> - </message> - <message> - <location filename="../Project.py" line="257" /> - <source>Initialize &Database</source> - <translation>&Datenbank initialisieren</translation> - </message> - <message> - <location filename="../Project.py" line="260" /> - <source>Initializes (or re-initializes) the database of the current Pyramid project</source> - <translation>Initialisiert (oder reinitialisiert) die Datenbank des aktuellen Pyramid Projektes</translation> - </message> - <message> - <location filename="../Project.py" line="263" /> - <source><b>Initialize Database</b><p>Initializes (or re-initializes) the database of the current Pyramid project.</p></source> - <translation><b>Datenbank initialisieren</b><p>Initialisiert (oder reinitialisiert) die Datenbank des aktuellen Pyramid Projektes.</p></translation> - </message> - <message> - <location filename="../Project.py" line="1366" /> - <location filename="../Project.py" line="1353" /> - <location filename="../Project.py" line="276" /> + <location filename="../Project.py" line="1447" /> + <location filename="../Project.py" line="1434" /> + <location filename="../Project.py" line="229" /> <source>Show Matching Views</source> <translation>Passende Ansichten anzeigen</translation> </message> <message> - <location filename="../Project.py" line="277" /> + <location filename="../Project.py" line="230" /> <source>Show Matching &Views</source> <translation>Passende &Ansichten anzeigen</translation> </message> <message> - <location filename="../Project.py" line="280" /> + <location filename="../Project.py" line="233" /> <source>Show views matching a given URL</source> <translation>Zeigt Ansichten zu einer gegebenen URL an</translation> </message> <message> - <location filename="../Project.py" line="282" /> + <location filename="../Project.py" line="235" /> <source><b>Show Matching Views</b><p>Show views matching a given URL.</p></source> <translation><b>Passende Ansichten anzeigen</b><p>Zeigt Ansichten zu einer gegebenen URL an.</p></translation> </message> <message> - <location filename="../Project.py" line="1387" /> - <location filename="../Project.py" line="290" /> + <location filename="../Project.py" line="1471" /> + <location filename="../Project.py" line="243" /> <source>Show Routes</source> <translation>Routen anzeigen</translation> </message> <message> - <location filename="../Project.py" line="291" /> + <location filename="../Project.py" line="244" /> <source>Show &Routes</source> <translation>&Routen anzeigen</translation> </message> <message> - <location filename="../Project.py" line="294" /> + <location filename="../Project.py" line="247" /> <source>Show all URL dispatch routes used by a Pyramid application</source> <translation>Zeigt alle durch eine Pyramid Anwendung verwendete URL Routen an</translation> </message> <message> - <location filename="../Project.py" line="296" /> + <location filename="../Project.py" line="249" /> <source><b>Show Routes</b><p>Show all URL dispatch routes used by a Pyramid application in the order in which they are evaluated.</p></source> <translation><b>Routen anzeigen</b><p>Zeigt alle durch eine Pyramid Anwendung verwendete URL Routen in der Reihenfolge ihrer Auswertung an.</p></translation> </message> <message> - <location filename="../Project.py" line="1409" /> - <location filename="../Project.py" line="305" /> + <location filename="../Project.py" line="1493" /> + <location filename="../Project.py" line="258" /> <source>Show Tween Objects</source> <translation>Tween Objekte anzeigen</translation> </message> <message> - <location filename="../Project.py" line="306" /> + <location filename="../Project.py" line="259" /> <source>Show &Tween Objects</source> <translation>&Tween Objekte anzeigen</translation> </message> <message> - <location filename="../Project.py" line="309" /> + <location filename="../Project.py" line="262" /> <source>Show all implicit and explicit tween objects used by a Pyramid application</source> <translation>Zeigt alle von einer Pyramid Anwendung verwendeten impliziten und expliziten Tween Objekte an</translation> </message> <message> - <location filename="../Project.py" line="312" /> + <location filename="../Project.py" line="265" /> <source><b>Show Tween Objects</b><p>Show all implicit and explicit tween objects used by a Pyramid application.</p></source> <translation><b>Tween Objekte anzeigen</b><p>Zeigt alle von einer Pyramid Anwendung verwendeten impliziten und expliziten Tween Objekte an.</p></translation> </message> <message> - <location filename="../Project.py" line="325" /> + <location filename="../Project.py" line="278" /> <source>Build Distribution</source> <translation>Distribution erzeugen</translation> </message> <message> - <location filename="../Project.py" line="326" /> + <location filename="../Project.py" line="279" /> <source>Build &Distribution</source> <translation>&Distribution erzeugen</translation> </message> <message> - <location filename="../Project.py" line="329" /> + <location filename="../Project.py" line="282" /> <source>Builds a distribution file for the Pyramid project</source> <translation>Erzeugt Dateien zur Distribution eines Pyramid Projektes</translation> </message> <message> - <location filename="../Project.py" line="331" /> + <location filename="../Project.py" line="284" /> <source><b>Build Distribution</b><p>Builds a distribution file for the Pyramid project using "python setup.py sdist".</p></source> <translation><b>Distribution erzeugen</b><p>Erzeugt Dateien zur Distribution eines Pyramid Projektes mittels "python setup.py sdist".</p></translation> </message> <message> - <location filename="../Project.py" line="344" /> + <location filename="../Project.py" line="297" /> <source>Documentation</source> <translation>Dokumentation</translation> </message> <message> - <location filename="../Project.py" line="345" /> + <location filename="../Project.py" line="298" /> <source>D&ocumentation</source> <translation>D&okumentation</translation> </message> <message> - <location filename="../Project.py" line="348" /> + <location filename="../Project.py" line="301" /> <source>Shows the help viewer with the Pyramid documentation</source> <translation>Zeigt die Hilfeanzeige mit der Pyramid Dokumentation</translation> </message> <message> - <location filename="../Project.py" line="350" /> + <location filename="../Project.py" line="303" /> <source><b>Documentation</b><p>Shows the help viewer with the Pyramid documentation.</p></source> <translation><b>Dokumentation</b><p>Zeigt die Hilfeanzeige mit der Pyramid Dokumentation.</p></translation> </message> <message> - <location filename="../Project.py" line="811" /> - <location filename="../Project.py" line="362" /> + <location filename="../Project.py" line="924" /> + <location filename="../Project.py" line="315" /> <source>About Pyramid</source> <translation>Über Pyramid</translation> </message> <message> - <location filename="../Project.py" line="363" /> + <location filename="../Project.py" line="316" /> <source>About P&yramid</source> <translation>Über P&yramid</translation> </message> <message> - <location filename="../Project.py" line="366" /> + <location filename="../Project.py" line="319" /> <source>Shows some information about Pyramid</source> <translation>Zeigt einige Informationen über Pyramid an</translation> </message> <message> - <location filename="../Project.py" line="368" /> + <location filename="../Project.py" line="321" /> <source><b>About Pyramid</b><p>Shows some information about Pyramid.</p></source> <translation><b>Über Pyramid</b><p>Zeigt einige Informationen über Pyramid an.</p></translation> </message> <message> - <location filename="../Project.py" line="386" /> + <location filename="../Project.py" line="1919" /> + <location filename="../Project.py" line="1909" /> + <location filename="../Project.py" line="337" /> + <source>Initialize Database</source> + <translation>Datenbank initialisieren</translation> + </message> + <message> + <location filename="../Project.py" line="338" /> + <source>Initialize &Database</source> + <translation>&Datenbank initialisieren</translation> + </message> + <message> + <location filename="../Project.py" line="341" /> + <source>Initializes (or re-initializes) the database of the current Pyramid project</source> + <translation>Initialisiert (oder reinitialisiert) die Datenbank des aktuellen Pyramid Projektes</translation> + </message> + <message> + <location filename="../Project.py" line="344" /> + <source><b>Initialize Database</b><p>Initializes (or re-initializes) the database of the current Pyramid project.</p></source> + <translation><b>Datenbank initialisieren</b><p>Initialisiert (oder reinitialisiert) die Datenbank des aktuellen Pyramid Projektes.</p></translation> + </message> + <message> + <location filename="../Project.py" line="1946" /> + <location filename="../Project.py" line="357" /> + <source>Create Migration</source> + <translation>Migration erzeugen</translation> + </message> + <message> + <location filename="../Project.py" line="358" /> + <source>&Create Migration</source> + <translation>Migration &erzeugen</translation> + </message> + <message> + <location filename="../Project.py" line="361" /> + <source>Create a new migration for the current database</source> + <translation>Erzeugt eine neue Migration für die aktuelle Datenbank</translation> + </message> + <message> + <location filename="../Project.py" line="363" /> + <source><b>Create Migration</b><p>Creates a new migration for the current database and stores it in the configured migrations directory.</p></source> + <translation><b>Migration erzeugen</b><p>Erzeugt eine neue Migration für die aktuelle Datenbank und speichert sie im konfigurierten Migrationsverzeichnis.</p></translation> + </message> + <message> + <location filename="../Project.py" line="1984" /> + <location filename="../Project.py" line="377" /> + <source>Upgrade Database</source> + <translation>Datenbank aktualisieren</translation> + </message> + <message> + <location filename="../Project.py" line="378" /> + <source>&Upgrade Database</source> + <translation>Datenbank &aktualisieren</translation> + </message> + <message> + <location filename="../Project.py" line="381" /> + <source>Upgrade the database to the current migration</source> + <translation>Aktualisiert die Datenbank auf die aktuelle Migrationsstufe</translation> + </message> + <message> + <location filename="../Project.py" line="383" /> + <source><b>Upgrade Database</b><p>Upgrades the database to the current migration.</p></source> + <translation><b>Datenbank aktualisieren</b><p>Aktualisiert die Datenbank auf die aktuelle Migrationsstufe.</p></translation> + </message> + <message> + <location filename="../Project.py" line="2011" /> + <location filename="../Project.py" line="392" /> + <source>Downgrade Database</source> + <translation>Datenbank rückstufen</translation> + </message> + <message> + <location filename="../Project.py" line="393" /> + <source>&Downgrade Database</source> + <translation>Datenbank &rückstufen</translation> + </message> + <message> + <location filename="../Project.py" line="396" /> + <source>Downgrade the database to the previous version</source> + <translation>Stuft die Datenbank auf die vorherige Version zurück</translation> + </message> + <message> + <location filename="../Project.py" line="398" /> + <source><b>Downgrade Database</b><p>Downgrades the database to the previous version.</p></source> + <translation><b>Datenbank rückstufen</b><p>Stuft die Datenbank auf die vorherige Version zurück.</p></translation> + </message> + <message> + <location filename="../Project.py" line="411" /> + <source>Show Migrations Summary</source> + <translation>Zusammenfassung der Migrationen</translation> + </message> + <message> + <location filename="../Project.py" line="412" /> + <source>Show Migrations &Summary</source> + <translation>&Zusammenfassung der Migrationen</translation> + </message> + <message> + <location filename="../Project.py" line="415" /> + <source>Show a summary of the created database migrations</source> + <translation>Zeigt eine Übersicht der erzeugten Datenbankmigrationen an</translation> + </message> + <message> + <location filename="../Project.py" line="417" /> + <source><b>Show Migrations Summary</b><p>Shows a summary list of the created database migrations.</p></source> + <translation><b>Zusammenfassung der Migrationen</b><p>Zeigt eine Übersicht der erzeugten Datenbankmigrationen an.</p></translation> + </message> + <message> + <location filename="../Project.py" line="427" /> + <source>Show Migrations History</source> + <translation>Verlauf der Migrationen</translation> + </message> + <message> + <location filename="../Project.py" line="428" /> + <source>Show Migrations &History</source> + <translation>&Verlauf der Migrationen</translation> + </message> + <message> + <location filename="../Project.py" line="431" /> + <source>Show the full history of the created database migrations</source> + <translation>Zeigt den vollständigen Verlauf der erzeugten Datenbankmigrationen</translation> + </message> + <message> + <location filename="../Project.py" line="433" /> + <source><b>Show Migrations History</b><p>Shows the full history of the created database migrations.</p></source> + <translation><b>Verlauf der Migrationen</b><p>Zeigt den vollständigen Verlauf der erzeugten Datenbankmigrationen.</p></translation> + </message> + <message> + <location filename="../Project.py" line="452" /> + <source>Database</source> + <translation>Datenbank</translation> + </message> + <message> + <location filename="../Project.py" line="466" /> <source>P&yramid</source> <translation>P&yramid</translation> </message> <message> - <location filename="../Project.py" line="451" /> + <location filename="../Project.py" line="531" /> <source>Open with {0}</source> <translation>Mit {0} öffnen</translation> </message> <message> - <location filename="../Project.py" line="465" /> + <location filename="../Project.py" line="545" /> <source>New template...</source> <translation>Neues Template...</translation> </message> <message> - <location filename="../Project.py" line="474" /> + <location filename="../Project.py" line="554" /> <source>Extract Messages</source> <translation>Texte extrahieren</translation> </message> <message> - <location filename="../Project.py" line="477" /> + <location filename="../Project.py" line="557" /> <source>Compile All Catalogs</source> <translation>Alle Kataloge übersetzen</translation> </message> <message> - <location filename="../Project.py" line="480" /> + <location filename="../Project.py" line="560" /> <source>Compile Selected Catalogs</source> <translation>Ausgewählte Kataloge übersetzen</translation> </message> <message> - <location filename="../Project.py" line="483" /> + <location filename="../Project.py" line="563" /> <source>Update All Catalogs</source> <translation>Alle Kataloge aktualisieren</translation> </message> <message> - <location filename="../Project.py" line="486" /> + <location filename="../Project.py" line="566" /> <source>Update Selected Catalogs</source> <translation>Ausgewählte Kataloge aktualisieren</translation> </message> <message> - <location filename="../Project.py" line="525" /> + <location filename="../Project.py" line="605" /> <source>Chameleon Templates (*.pt);;Chameleon Text Templates (*.txt);;Mako Templates (*.mako);;Mako Templates (*.mak);;HTML Files (*.html);;HTML Files (*.htm);;All Files (*)</source> <translation>Chameleon Templates (*.pt);;Chameleon Text Templates (*.txt);;Mako Templates (*.mako);;Mako Templates (*.mak);;HTML Dateien (*.html);;HTML Dateien (*.htm);;Alle Dateien (*)</translation> </message> <message> - <location filename="../Project.py" line="564" /> - <location filename="../Project.py" line="550" /> - <location filename="../Project.py" line="535" /> + <location filename="../Project.py" line="644" /> + <location filename="../Project.py" line="630" /> + <location filename="../Project.py" line="615" /> <source>New Form</source> <translation>Neues Formular</translation> </message> <message> - <location filename="../Project.py" line="551" /> + <location filename="../Project.py" line="631" /> <source>The file already exists! Overwrite it?</source> <translation>Die Datei existiert bereits. Überschreiben?</translation> </message> <message> - <location filename="../Project.py" line="565" /> + <location filename="../Project.py" line="645" /> <source><p>The new form file <b>{0}</b> could not be created.<br/> Problem: {1}</p></source> <translation><p>Die neue Formulardatei <b>{0}</b> konnte nicht erstellt werden.<br/> Problem: {1}</p></translation> </message> <message> - <location filename="../Project.py" line="812" /> + <location filename="../Project.py" line="925" /> <source><p>Pyramid is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.</p><p><table><tr><td>Version:</td><td>{0}</td></tr><tr><td>URL:</td><td><a href="{1}">{1}</a></td></tr></table></p></source> <translation><p>Pyramid ist ein Python Web-Framework, das eine schnelle Entwicklung und ein klares, pragmatisches Design fördert.</p><table><tr><td>Version:</td><td>{0}</td></tr><tr><td>URL:</td><td><a href="{1}">{1}</a></td></tr></table></p></translation> </message> <message> - <location filename="../Project.py" line="997" /> + <location filename="../Project.py" line="1098" /> + <source>Initializing Pyramid Project</source> + <translation>Initialisiere Pyramid Projekt</translation> + </message> + <message> + <location filename="../Project.py" line="1159" /> <source>Select Pyramid Project</source> <translation>Pyramid Projekt auswählen</translation> </message> <message> - <location filename="../Project.py" line="998" /> + <location filename="../Project.py" line="1160" /> <source>Select the Pyramid project to work with.</source> <translation>Wähle das Pyramid Projekt aus, mit dem gearbeitet werden soll.</translation> </message> <message> - <location filename="../Project.py" line="1036" /> + <location filename="../Project.py" line="1198" /> <source>None</source> <translation>keines</translation> </message> <message> - <location filename="../Project.py" line="1041" /> + <location filename="../Project.py" line="1203" /> <source>&Current Pyramid Project ({0})</source> <translation>&Aktuelles Pyramid Projekt ({0})</translation> </message> <message> - <location filename="../Project.py" line="1724" /> - <location filename="../Project.py" line="1694" /> - <location filename="../Project.py" line="1641" /> - <location filename="../Project.py" line="1604" /> - <location filename="../Project.py" line="1567" /> - <location filename="../Project.py" line="1513" /> - <location filename="../Project.py" line="1416" /> - <location filename="../Project.py" line="1394" /> + <location filename="../Project.py" line="1926" /> + <location filename="../Project.py" line="1910" /> + <location filename="../Project.py" line="1811" /> + <location filename="../Project.py" line="1781" /> + <location filename="../Project.py" line="1728" /> + <location filename="../Project.py" line="1691" /> + <location filename="../Project.py" line="1654" /> + <location filename="../Project.py" line="1600" /> + <location filename="../Project.py" line="1500" /> + <location filename="../Project.py" line="1478" /> + <location filename="../Project.py" line="1441" /> + <location filename="../Project.py" line="1400" /> <location filename="../Project.py" line="1360" /> - <location filename="../Project.py" line="1330" /> - <location filename="../Project.py" line="1315" /> + <location filename="../Project.py" line="1325" /> <location filename="../Project.py" line="1271" /> - <location filename="../Project.py" line="1236" /> - <location filename="../Project.py" line="1199" /> - <location filename="../Project.py" line="1164" /> - <location filename="../Project.py" line="1105" /> <source>No current Pyramid project selected or no Pyramid project created yet. Aborting...</source> <translation>Kein aktuelles Pyramid Projekt ausgewählt oder noch keines erstellt. Abbruch...</translation> </message> <message> - <location filename="../Project.py" line="1773" /> - <location filename="../Project.py" line="1216" /> - <location filename="../Project.py" line="1132" /> + <location filename="../Project.py" line="1860" /> + <location filename="../Project.py" line="1380" /> + <location filename="../Project.py" line="1299" /> <source>Process Generation Error</source> <translation>Fehler bei der Prozessgenerierung</translation> </message> <message> - <location filename="../Project.py" line="1133" /> + <location filename="../Project.py" line="1300" /> <source>The Pyramid server could not be started.</source> <translation>Der Pyramid Server konnte nicht gestartet werden.</translation> </message> <message> - <location filename="../Project.py" line="1181" /> + <location filename="../Project.py" line="1342" /> <source>Could not start the web-browser for the URL "{0}".</source> <translation>Der Web-Browser konnte nicht für die URL "{0}" gestartet werden.</translation> </message> <message> - <location filename="../Project.py" line="1217" /> + <location filename="../Project.py" line="1381" /> <source>The Pyramid Shell process could not be started.</source> <translation>Der Pyramid Konsolenprozess konnte nicht gestartet werden.</translation> </message> <message> - <location filename="../Project.py" line="1247" /> - <source>Pyramid development environment setup successfully.</source> - <translation>Die Pyramid Entwicklungsumgebung wurde erfolgreich eingerichtet.</translation> - </message> - <message> - <location filename="../Project.py" line="1264" /> + <location filename="../Project.py" line="1393" /> <source>Build Distribution File</source> <translation>Distributionsdateien erzeugen</translation> </message> <message> - <location filename="../Project.py" line="1291" /> + <location filename="../Project.py" line="1420" /> <source>Python distribution file built successfully.</source> <translation>Python Distributionsdateien erfolgreich erzeugt.</translation> </message> <message> - <location filename="../Project.py" line="1340" /> - <source>Database initialized successfully.</source> - <translation>Datenbank erfolgreich initialisiert.</translation> - </message> - <message> - <location filename="../Project.py" line="1367" /> + <location filename="../Project.py" line="1448" /> <source>Enter the URL to be matched:</source> <translation>Gib die zu überprüfende URL ein:</translation> </message> <message> - <location filename="../Project.py" line="1506" /> + <location filename="../Project.py" line="1593" /> <source>Extract messages</source> <translation>Texte extrahieren</translation> </message> <message> - <location filename="../Project.py" line="1525" /> + <location filename="../Project.py" line="1612" /> <source>No setup.cfg found or no "extract_messages" section found in setup.cfg.</source> <translation>Keine setup.cfg gefunden bzw. keine Sektion "extract_messages" in setup.cfg vorhanden.</translation> </message> <message> - <location filename="../Project.py" line="1532" /> + <location filename="../Project.py" line="1619" /> <source>No "output_file" option found in setup.cfg.</source> <translation>Keine Option "output_file" in setup.cfg vorhanden.</translation> </message> <message> - <location filename="../Project.py" line="1546" /> + <location filename="../Project.py" line="1633" /> <source> Messages extracted successfully.</source> <translation> Texte erfolgreich extrahiert.</translation> </message> <message> - <location filename="../Project.py" line="1559" /> + <location filename="../Project.py" line="1646" /> <source>Initializing message catalog for '{0}'</source> <translation>Initialisiere Textkatalog für '{0}'</translation> </message> <message> - <location filename="../Project.py" line="1580" /> + <location filename="../Project.py" line="1667" /> <source> Message catalog initialized successfully.</source> <translation> Textkatalog erfolgreich initialisiert.</translation> </message> <message> - <location filename="../Project.py" line="1634" /> - <location filename="../Project.py" line="1597" /> + <location filename="../Project.py" line="1721" /> + <location filename="../Project.py" line="1684" /> <source>Compiling message catalogs</source> <translation>Übersetze Textkataloge</translation> </message> <message> - <location filename="../Project.py" line="1668" /> - <location filename="../Project.py" line="1615" /> + <location filename="../Project.py" line="1755" /> + <location filename="../Project.py" line="1702" /> <source> Message catalogs compiled successfully.</source> <translation> Textkataloge erfolgreich übersetzt.</translation> </message> <message> - <location filename="../Project.py" line="1746" /> - <location filename="../Project.py" line="1663" /> + <location filename="../Project.py" line="1833" /> + <location filename="../Project.py" line="1750" /> <source>No locales detected. Aborting...</source> <translation>Keine Sprachen erkannt. Abbruch...</translation> </message> <message> - <location filename="../Project.py" line="1717" /> - <location filename="../Project.py" line="1687" /> + <location filename="../Project.py" line="1804" /> + <location filename="../Project.py" line="1774" /> <source>Updating message catalogs</source> <translation>Aktualisiere Textkataloge</translation> </message> <message> - <location filename="../Project.py" line="1751" /> - <location filename="../Project.py" line="1705" /> + <location filename="../Project.py" line="1838" /> + <location filename="../Project.py" line="1792" /> <source> Message catalogs updated successfully.</source> <translation> Textkataloge erfolgreich aktualisiert.</translation> </message> <message> - <location filename="../Project.py" line="1774" /> + <location filename="../Project.py" line="1861" /> <source>The translations editor process ({0}) could not be started.</source> <translation>Der Prozess für den Übersetzungseditor ({0}) konnte nicht gestartet werden.</translation> </message> + <message> + <location filename="../Project.py" line="1936" /> + <source>Database initialized successfully.</source> + <translation>Datenbank erfolgreich initialisiert.</translation> + </message> + <message> + <location filename="../Project.py" line="1953" /> + <source>Enter a short message for the migration:</source> + <translation>Gib eine Kurzbeschreibung für die Migration ein:</translation> + </message> + <message> + <location filename="../Project.py" line="1964" /> + <source> +Migration created successfully.</source> + <translation> +Migration erfolgreich erzeugt.</translation> + </message> + <message> + <location filename="../Project.py" line="1995" /> + <source> +Database upgraded successfully.</source> + <translation> +Datenbankaktualisierung erfolgreich durchgeführt.</translation> + </message> + <message> + <location filename="../Project.py" line="2022" /> + <source> +Database downgraded successfully.</source> + <translation> +Datenbankrückstufung erfolgreich durchgeführt.</translation> + </message> + <message> + <location filename="../Project.py" line="2047" /> + <source>Migrations History</source> + <translation>Migrationsverlauf</translation> + </message> </context> <context> <name>ProjectPyramidPlugin</name> @@ -682,12 +850,12 @@ <context> <name>PyramidDialog</name> <message> - <location filename="../PyramidDialog.py" line="198" /> + <location filename="../PyramidDialog.py" line="208" /> <source>Process Generation Error</source> <translation>Fehler bei der Prozessgenerierung</translation> </message> <message> - <location filename="../PyramidDialog.py" line="199" /> + <location filename="../PyramidDialog.py" line="209" /> <source>The process {0} could not be started. Ensure, that it is in the search path.</source> <translation>Der Prozess {0} konnte nicht gestartet werden. Bitte stellen sie sicher, dass er sich im Suchpfad befindet.</translation> </message> @@ -933,12 +1101,12 @@ <translation>Ermittle Routen...</translation> </message> <message> - <location filename="../PyramidRoutesDialog.py" line="190" /> + <location filename="../PyramidRoutesDialog.py" line="193" /> <source>Process Generation Error</source> <translation>Fehler bei der Prozessgenerierung</translation> </message> <message> - <location filename="../PyramidRoutesDialog.py" line="191" /> + <location filename="../PyramidRoutesDialog.py" line="194" /> <source>The process {0} could not be started. Ensure, that it is in the search path.</source> <translation>Der Prozess {0} konnte nicht gestartet werden. Bitte stellen sie sicher, dass er sich im Suchpfad befindet.</translation> </message>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ProjectPyramid/i18n/pyramid_empty.ts Sun Jun 06 16:30:37 2021 +0200 @@ -0,0 +1,1107 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1"> + <context> + <name>CreateParametersDialog</name> + <message> + <location filename="../CreateParametersDialog.py" line="47" /> + <source>No Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Create Parameters</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Template:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Enter the template to be used</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Template Version:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Enter an optional branch, tag or commit</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>CookieCutter Starter Parameters</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Project Name:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Enter the name of the Pyramid project</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Template Language:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Select the templating language</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Backend:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Select the database backend</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Select to overwrite existing files</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Overwrite existing files</source> + <translation type="unfinished" /> + </message> + </context> + <context> + <name>DistributionTypeSelectionDialog</name> + <message> + <location filename="../DistributionTypeSelectionDialog.ui" line="0" /> + <source>Distribution Type</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../DistributionTypeSelectionDialog.ui" line="0" /> + <source>Select the distribution file formats below:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../DistributionTypeSelectionDialog.ui" line="0" /> + <source>Check the distribution file formats that should be generated</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../DistributionTypeSelectionDialog.py" line="59" /> + <source>The python setup.py command did not finish within 30s.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../DistributionTypeSelectionDialog.py" line="63" /> + <source>Could not start the python executable.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../DistributionTypeSelectionDialog.py" line="78" /> + <source>Process Generation Error</source> + <translation type="unfinished" /> + </message> + </context> + <context> + <name>FormSelectionDialog</name> + <message> + <location filename="../FormSelectionDialog.ui" line="0" /> + <source>Template Type Selection</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../FormSelectionDialog.ui" line="0" /> + <source>Template &Type:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../FormSelectionDialog.ui" line="0" /> + <source>Select the template type</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../FormSelectionDialog.ui" line="0" /> + <source>Preview:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../FormSelectionDialog.ui" line="0" /> + <source>Shows the text of the selected template</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../FormSelectionDialog.py" line="32" /> + <source>Standard HTML 5 template</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../FormSelectionDialog.py" line="45" /> + <source>Standard HTML template</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../FormSelectionDialog.py" line="59" /> + <source>Chameleon template</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../FormSelectionDialog.py" line="115" /> + <source>Mako template with sections</source> + <translation type="unfinished" /> + </message> + </context> + <context> + <name>MigrateSummaryDialog</name> + <message> + <location filename="../MigrateSummaryDialog.py" line="40" /> + <source>Refresh</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <location filename="../MigrateSummaryDialog.py" line="98" /> + <location filename="../MigrateSummaryDialog.py" line="91" /> + <source>Migrations Summary</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.py" line="92" /> + <source>The 'alembic' process did not finish within 10 seconds.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.py" line="99" /> + <source>The 'alembic' process could not be started.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <location filename="../MigrateSummaryDialog.py" line="184" /> + <location filename="../MigrateSummaryDialog.py" line="170" /> + <source>Upgrade</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.py" line="172" /> + <source>Downgrade</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>Old Revision</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>New Revision</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>Message</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>Labels</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>Press to upgrade or downgrade the database to the selected migration</source> + <translation type="unfinished" /> + </message> + </context> + <context> + <name>Project</name> + <message> + <location filename="../Project.py" line="143" /> + <source>Current Pyramid Project</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="147" /> + <source>Selects the current Pyramid project</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="149" /> + <source><b>Current Pyramid Project</b><p>Selects the Pyramid project. Used for multi-project Pyramid projects to switch between the projects.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1041" /> + <location filename="../Project.py" line="162" /> + <source>Create Pyramid Project</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="163" /> + <source>Create Pyramid &Project</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="166" /> + <source>Creates a new Pyramid project</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="168" /> + <source><b>Create Pyramid Project</b><p>Creates a new Pyramid project using "pcreate".</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1270" /> + <location filename="../Project.py" line="180" /> + <source>Run Server</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="181" /> + <source>Run &Server</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="184" /> + <source>Starts the Pyramid Web server</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="186" /> + <source><b>Run Server</b><p>Starts the Pyramid Web server using "pserve --reload development.ini".</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1341" /> + <location filename="../Project.py" line="1324" /> + <location filename="../Project.py" line="195" /> + <source>Run Web-Browser</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="196" /> + <source>Run &Web-Browser</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="199" /> + <source>Starts the default Web-Browser with the URL of the Pyramid Web server</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="202" /> + <source><b>Run Web-Browser</b><p>Starts the default Web-Browser with the URL of the Pyramid Web server.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1359" /> + <location filename="../Project.py" line="211" /> + <source>Start Pyramid Python Console</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="212" /> + <source>Start Pyramid &Python Console</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="215" /> + <source>Starts an interactive Python interpreter</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="217" /> + <source><b>Start Pyramid Python Console</b><p>Starts an interactive Python interpreter.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1447" /> + <location filename="../Project.py" line="1434" /> + <location filename="../Project.py" line="229" /> + <source>Show Matching Views</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="230" /> + <source>Show Matching &Views</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="233" /> + <source>Show views matching a given URL</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="235" /> + <source><b>Show Matching Views</b><p>Show views matching a given URL.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1471" /> + <location filename="../Project.py" line="243" /> + <source>Show Routes</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="244" /> + <source>Show &Routes</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="247" /> + <source>Show all URL dispatch routes used by a Pyramid application</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="249" /> + <source><b>Show Routes</b><p>Show all URL dispatch routes used by a Pyramid application in the order in which they are evaluated.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1493" /> + <location filename="../Project.py" line="258" /> + <source>Show Tween Objects</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="259" /> + <source>Show &Tween Objects</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="262" /> + <source>Show all implicit and explicit tween objects used by a Pyramid application</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="265" /> + <source><b>Show Tween Objects</b><p>Show all implicit and explicit tween objects used by a Pyramid application.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="278" /> + <source>Build Distribution</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="279" /> + <source>Build &Distribution</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="282" /> + <source>Builds a distribution file for the Pyramid project</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="284" /> + <source><b>Build Distribution</b><p>Builds a distribution file for the Pyramid project using "python setup.py sdist".</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="297" /> + <source>Documentation</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="298" /> + <source>D&ocumentation</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="301" /> + <source>Shows the help viewer with the Pyramid documentation</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="303" /> + <source><b>Documentation</b><p>Shows the help viewer with the Pyramid documentation.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="924" /> + <location filename="../Project.py" line="315" /> + <source>About Pyramid</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="316" /> + <source>About P&yramid</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="319" /> + <source>Shows some information about Pyramid</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="321" /> + <source><b>About Pyramid</b><p>Shows some information about Pyramid.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1919" /> + <location filename="../Project.py" line="1909" /> + <location filename="../Project.py" line="337" /> + <source>Initialize Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="338" /> + <source>Initialize &Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="341" /> + <source>Initializes (or re-initializes) the database of the current Pyramid project</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="344" /> + <source><b>Initialize Database</b><p>Initializes (or re-initializes) the database of the current Pyramid project.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1946" /> + <location filename="../Project.py" line="357" /> + <source>Create Migration</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="358" /> + <source>&Create Migration</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="361" /> + <source>Create a new migration for the current database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="363" /> + <source><b>Create Migration</b><p>Creates a new migration for the current database and stores it in the configured migrations directory.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1984" /> + <location filename="../Project.py" line="377" /> + <source>Upgrade Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="378" /> + <source>&Upgrade Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="381" /> + <source>Upgrade the database to the current migration</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="383" /> + <source><b>Upgrade Database</b><p>Upgrades the database to the current migration.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="2011" /> + <location filename="../Project.py" line="392" /> + <source>Downgrade Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="393" /> + <source>&Downgrade Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="396" /> + <source>Downgrade the database to the previous version</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="398" /> + <source><b>Downgrade Database</b><p>Downgrades the database to the previous version.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="411" /> + <source>Show Migrations Summary</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="412" /> + <source>Show Migrations &Summary</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="415" /> + <source>Show a summary of the created database migrations</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="417" /> + <source><b>Show Migrations Summary</b><p>Shows a summary list of the created database migrations.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="427" /> + <source>Show Migrations History</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="428" /> + <source>Show Migrations &History</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="431" /> + <source>Show the full history of the created database migrations</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="433" /> + <source><b>Show Migrations History</b><p>Shows the full history of the created database migrations.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="452" /> + <source>Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="466" /> + <source>P&yramid</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="531" /> + <source>Open with {0}</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="545" /> + <source>New template...</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="554" /> + <source>Extract Messages</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="557" /> + <source>Compile All Catalogs</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="560" /> + <source>Compile Selected Catalogs</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="563" /> + <source>Update All Catalogs</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="566" /> + <source>Update Selected Catalogs</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="605" /> + <source>Chameleon Templates (*.pt);;Chameleon Text Templates (*.txt);;Mako Templates (*.mako);;Mako Templates (*.mak);;HTML Files (*.html);;HTML Files (*.htm);;All Files (*)</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="644" /> + <location filename="../Project.py" line="630" /> + <location filename="../Project.py" line="615" /> + <source>New Form</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="631" /> + <source>The file already exists! Overwrite it?</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="645" /> + <source><p>The new form file <b>{0}</b> could not be created.<br/> Problem: {1}</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="925" /> + <source><p>Pyramid is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.</p><p><table><tr><td>Version:</td><td>{0}</td></tr><tr><td>URL:</td><td><a href="{1}">{1}</a></td></tr></table></p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1098" /> + <source>Initializing Pyramid Project</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1159" /> + <source>Select Pyramid Project</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1160" /> + <source>Select the Pyramid project to work with.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1198" /> + <source>None</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1203" /> + <source>&Current Pyramid Project ({0})</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1926" /> + <location filename="../Project.py" line="1910" /> + <location filename="../Project.py" line="1811" /> + <location filename="../Project.py" line="1781" /> + <location filename="../Project.py" line="1728" /> + <location filename="../Project.py" line="1691" /> + <location filename="../Project.py" line="1654" /> + <location filename="../Project.py" line="1600" /> + <location filename="../Project.py" line="1500" /> + <location filename="../Project.py" line="1478" /> + <location filename="../Project.py" line="1441" /> + <location filename="../Project.py" line="1400" /> + <location filename="../Project.py" line="1360" /> + <location filename="../Project.py" line="1325" /> + <location filename="../Project.py" line="1271" /> + <source>No current Pyramid project selected or no Pyramid project created yet. Aborting...</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1860" /> + <location filename="../Project.py" line="1380" /> + <location filename="../Project.py" line="1299" /> + <source>Process Generation Error</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1300" /> + <source>The Pyramid server could not be started.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1342" /> + <source>Could not start the web-browser for the URL "{0}".</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1381" /> + <source>The Pyramid Shell process could not be started.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1393" /> + <source>Build Distribution File</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1420" /> + <source>Python distribution file built successfully.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1448" /> + <source>Enter the URL to be matched:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1593" /> + <source>Extract messages</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1612" /> + <source>No setup.cfg found or no "extract_messages" section found in setup.cfg.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1619" /> + <source>No "output_file" option found in setup.cfg.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1633" /> + <source> +Messages extracted successfully.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1646" /> + <source>Initializing message catalog for '{0}'</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1667" /> + <source> +Message catalog initialized successfully.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1721" /> + <location filename="../Project.py" line="1684" /> + <source>Compiling message catalogs</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1755" /> + <location filename="../Project.py" line="1702" /> + <source> +Message catalogs compiled successfully.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1833" /> + <location filename="../Project.py" line="1750" /> + <source>No locales detected. Aborting...</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1804" /> + <location filename="../Project.py" line="1774" /> + <source>Updating message catalogs</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1838" /> + <location filename="../Project.py" line="1792" /> + <source> +Message catalogs updated successfully.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1861" /> + <source>The translations editor process ({0}) could not be started.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1936" /> + <source>Database initialized successfully.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1953" /> + <source>Enter a short message for the migration:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1964" /> + <source> +Migration created successfully.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1995" /> + <source> +Database upgraded successfully.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="2022" /> + <source> +Database downgraded successfully.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="2047" /> + <source>Migrations History</source> + <translation type="unfinished" /> + </message> + </context> + <context> + <name>ProjectPyramidPlugin</name> + <message> + <location filename="../../PluginProjectPyramid.py" line="407" /> + <location filename="../../PluginProjectPyramid.py" line="187" /> + <location filename="../../PluginProjectPyramid.py" line="71" /> + <source>Pyramid</source> + <translation type="unfinished" /> + </message> + </context> + <context> + <name>PyramidDialog</name> + <message> + <location filename="../PyramidDialog.py" line="208" /> + <source>Process Generation Error</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidDialog.py" line="209" /> + <source>The process {0} could not be started. Ensure, that it is in the search path.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidDialog.ui" line="0" /> + <source>Pyramid</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidDialog.ui" line="0" /> + <source>Output</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidDialog.ui" line="0" /> + <source>Errors</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidDialog.ui" line="0" /> + <source>Input</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidDialog.ui" line="0" /> + <source>Press to send the input to the Pyramid process</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidDialog.ui" line="0" /> + <source>&Send</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidDialog.ui" line="0" /> + <source>Alt+S</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidDialog.ui" line="0" /> + <source>Enter data to be sent to the Pyramid process</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidDialog.ui" line="0" /> + <source>Select to switch the input field to password mode</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidDialog.ui" line="0" /> + <source>&Password Mode</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidDialog.ui" line="0" /> + <source>Alt+P</source> + <translation type="unfinished" /> + </message> + </context> + <context> + <name>PyramidPage</name> + <message> + <location filename="../ConfigurationPage/PyramidPage.ui" line="0" /> + <source><b>Configure Pyramid</b></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.ui" line="0" /> + <source>Console Command</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.ui" line="0" /> + <source>Console Command:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.ui" line="0" /> + <source>Enter the console command</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.ui" line="0" /> + <source><b>Note:</b> The console command for a console, that is spawning (i.e. exits before the console window is closed), should be prefixed by an '@' character.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.ui" line="0" /> + <source>Web-Browser</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.ui" line="0" /> + <source>Select to use an external web-browser</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.ui" line="0" /> + <source>Use external web-browser</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.ui" line="0" /> + <source>Python 3</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.ui" line="0" /> + <source>Pyramid Virtual Environment</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.ui" line="0" /> + <source>Select the Virtual Environment to be used with Pyramid</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.ui" line="0" /> + <source>Pyramid Python Console:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.ui" line="0" /> + <source>Select the Python console type</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.ui" line="0" /> + <source>Pyramid Documentation</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.ui" line="0" /> + <source>URL:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.ui" line="0" /> + <source>Enter the URL of the Pyramid documentation</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.ui" line="0" /> + <source>Press to reset the URL to the default URL</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.ui" line="0" /> + <source>Translations Editor</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.ui" line="0" /> + <source>Enter the path of an editor to use to do the translations. Leave empty to disable this feature.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.ui" line="0" /> + <source>Enter the path of the translations editor</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.py" line="59" /> + <source>Plain Python</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.py" line="60" /> + <source>IPython</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.py" line="61" /> + <source>bpython</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PyramidPage.py" line="70" /> + <source>All Files (*)</source> + <translation type="unfinished" /> + </message> + </context> + <context> + <name>PyramidRoutesDialog</name> + <message> + <location filename="../PyramidRoutesDialog.ui" line="0" /> + <source>Pyramid</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidRoutesDialog.ui" line="0" /> + <source>Errors</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidRoutesDialog.ui" line="0" /> + <source>Input</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidRoutesDialog.ui" line="0" /> + <source>Press to send the input to the Pyramid process</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidRoutesDialog.ui" line="0" /> + <source>&Send</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidRoutesDialog.ui" line="0" /> + <source>Alt+S</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidRoutesDialog.ui" line="0" /> + <source>Enter data to be sent to the Pyramid process</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidRoutesDialog.ui" line="0" /> + <source>Select to switch the input field to password mode</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidRoutesDialog.ui" line="0" /> + <source>&Password Mode</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidRoutesDialog.ui" line="0" /> + <source>Alt+P</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidRoutesDialog.py" line="120" /> + <source>No routes found.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidRoutesDialog.py" line="154" /> + <source>Getting routes...</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidRoutesDialog.py" line="193" /> + <source>Process Generation Error</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PyramidRoutesDialog.py" line="194" /> + <source>The process {0} could not be started. Ensure, that it is in the search path.</source> + <translation type="unfinished" /> + </message> + </context> +</TS>
--- a/ProjectPyramid/i18n/pyramid_en.ts Tue Jun 01 19:37:46 2021 +0200 +++ b/ProjectPyramid/i18n/pyramid_en.ts Sun Jun 06 16:30:37 2021 +0200 @@ -4,24 +4,8 @@ <context> <name>CreateParametersDialog</name> <message> - <location filename="../CreateParametersDialog.py" line="55" /> - <source>The pcreate command did not finish within 30s.</source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../CreateParametersDialog.py" line="58" /> - <source>Could not start the pcreate executable.</source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../CreateParametersDialog.py" line="69" /> - <source>Process Generation Error</source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../CreateParametersDialog.py" line="115" /> - <source>{0} ({1})</source> - <comment>scaffold name, explanatory text</comment> + <location filename="../CreateParametersDialog.py" line="47" /> + <source>No Database</source> <translation type="unfinished" /> </message> <message> @@ -31,22 +15,57 @@ </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> - <source>Project &Name:</source> + <source>Template:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Enter the template to be used</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Template Version:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Enter an optional branch, tag or commit</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>CookieCutter Starter Parameters</source> <translation type="unfinished" /> </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> - <source>Enter the name of the Pyramid project to create</source> + <source>Project Name:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Enter the name of the Pyramid project</source> <translation type="unfinished" /> </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> - <source>&Scaffold:</source> + <source>Template Language:</source> <translation type="unfinished" /> </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> - <source>Select the scaffold to be used</source> + <source>Select the templating language</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Backend:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Select the database backend</source> <translation type="unfinished" /> </message> <message> @@ -59,16 +78,6 @@ <source>Overwrite existing files</source> <translation type="unfinished" /> </message> - <message> - <location filename="../CreateParametersDialog.ui" line="0" /> - <source>Select to simulate the creation</source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../CreateParametersDialog.ui" line="0" /> - <source>Simulate Pyramid project creation</source> - <translation type="unfinished" /> - </message> </context> <context> <name>DistributionTypeSelectionDialog</name> @@ -152,518 +161,674 @@ </message> </context> <context> + <name>MigrateSummaryDialog</name> + <message> + <location filename="../MigrateSummaryDialog.py" line="40" /> + <source>Refresh</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <location filename="../MigrateSummaryDialog.py" line="98" /> + <location filename="../MigrateSummaryDialog.py" line="91" /> + <source>Migrations Summary</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.py" line="92" /> + <source>The 'alembic' process did not finish within 10 seconds.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.py" line="99" /> + <source>The 'alembic' process could not be started.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <location filename="../MigrateSummaryDialog.py" line="184" /> + <location filename="../MigrateSummaryDialog.py" line="170" /> + <source>Upgrade</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.py" line="172" /> + <source>Downgrade</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>Old Revision</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>New Revision</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>Message</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>Labels</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>Press to upgrade or downgrade the database to the selected migration</source> + <translation type="unfinished" /> + </message> + </context> + <context> <name>Project</name> <message> - <location filename="../Project.py" line="136" /> + <location filename="../Project.py" line="143" /> <source>Current Pyramid Project</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="140" /> + <location filename="../Project.py" line="147" /> <source>Selects the current Pyramid project</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="142" /> + <location filename="../Project.py" line="149" /> <source><b>Current Pyramid Project</b><p>Selects the Pyramid project. Used for multi-project Pyramid projects to switch between the projects.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="931" /> - <location filename="../Project.py" line="155" /> + <location filename="../Project.py" line="1041" /> + <location filename="../Project.py" line="162" /> <source>Create Pyramid Project</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="156" /> + <location filename="../Project.py" line="163" /> <source>Create Pyramid &Project</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="159" /> + <location filename="../Project.py" line="166" /> <source>Creates a new Pyramid project</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="161" /> + <location filename="../Project.py" line="168" /> <source><b>Create Pyramid Project</b><p>Creates a new Pyramid project using "pcreate".</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1104" /> - <location filename="../Project.py" line="173" /> + <location filename="../Project.py" line="1270" /> + <location filename="../Project.py" line="180" /> <source>Run Server</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="174" /> + <location filename="../Project.py" line="181" /> <source>Run &Server</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="177" /> + <location filename="../Project.py" line="184" /> <source>Starts the Pyramid Web server</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="179" /> + <location filename="../Project.py" line="186" /> <source><b>Run Server</b><p>Starts the Pyramid Web server using "pserve --reload development.ini".</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="188" /> - <source>Run Server with Logging</source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../Project.py" line="189" /> - <source>Run Server with &Logging</source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../Project.py" line="192" /> - <source>Starts the Pyramid Web server with logging</source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../Project.py" line="194" /> - <source><b>Run Server with Logging</b><p>Starts the Pyramid Web server with logging using "pserve --log-file=server.log --reload development.ini".</p></source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../Project.py" line="1180" /> - <location filename="../Project.py" line="1163" /> - <location filename="../Project.py" line="203" /> + <location filename="../Project.py" line="1341" /> + <location filename="../Project.py" line="1324" /> + <location filename="../Project.py" line="195" /> <source>Run Web-Browser</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="204" /> + <location filename="../Project.py" line="196" /> <source>Run &Web-Browser</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="207" /> + <location filename="../Project.py" line="199" /> <source>Starts the default Web-Browser with the URL of the Pyramid Web server</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="210" /> + <location filename="../Project.py" line="202" /> <source><b>Run Web-Browser</b><p>Starts the default Web-Browser with the URL of the Pyramid Web server.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1198" /> - <location filename="../Project.py" line="219" /> + <location filename="../Project.py" line="1359" /> + <location filename="../Project.py" line="211" /> <source>Start Pyramid Python Console</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="220" /> + <location filename="../Project.py" line="212" /> <source>Start Pyramid &Python Console</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="223" /> + <location filename="../Project.py" line="215" /> <source>Starts an interactive Python interpreter</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="225" /> + <location filename="../Project.py" line="217" /> <source><b>Start Pyramid Python Console</b><p>Starts an interactive Python interpreter.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1229" /> - <location filename="../Project.py" line="237" /> - <source>Setup Development Environment</source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../Project.py" line="238" /> - <source>Setup &Development Environment</source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../Project.py" line="241" /> - <source>Setup the Pyramid project in development mode</source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../Project.py" line="243" /> - <source><b>Setup Development Environment</b><p>Setup the Pyramid project in development mode using "python setup.py develop".</p></source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../Project.py" line="1323" /> - <location filename="../Project.py" line="1314" /> - <location filename="../Project.py" line="256" /> - <source>Initialize Database</source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../Project.py" line="257" /> - <source>Initialize &Database</source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../Project.py" line="260" /> - <source>Initializes (or re-initializes) the database of the current Pyramid project</source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../Project.py" line="263" /> - <source><b>Initialize Database</b><p>Initializes (or re-initializes) the database of the current Pyramid project.</p></source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../Project.py" line="1366" /> - <location filename="../Project.py" line="1353" /> - <location filename="../Project.py" line="276" /> + <location filename="../Project.py" line="1447" /> + <location filename="../Project.py" line="1434" /> + <location filename="../Project.py" line="229" /> <source>Show Matching Views</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="277" /> + <location filename="../Project.py" line="230" /> <source>Show Matching &Views</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="280" /> + <location filename="../Project.py" line="233" /> <source>Show views matching a given URL</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="282" /> + <location filename="../Project.py" line="235" /> <source><b>Show Matching Views</b><p>Show views matching a given URL.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1387" /> - <location filename="../Project.py" line="290" /> + <location filename="../Project.py" line="1471" /> + <location filename="../Project.py" line="243" /> <source>Show Routes</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="291" /> + <location filename="../Project.py" line="244" /> <source>Show &Routes</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="294" /> + <location filename="../Project.py" line="247" /> <source>Show all URL dispatch routes used by a Pyramid application</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="296" /> + <location filename="../Project.py" line="249" /> <source><b>Show Routes</b><p>Show all URL dispatch routes used by a Pyramid application in the order in which they are evaluated.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1409" /> - <location filename="../Project.py" line="305" /> + <location filename="../Project.py" line="1493" /> + <location filename="../Project.py" line="258" /> <source>Show Tween Objects</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="306" /> + <location filename="../Project.py" line="259" /> <source>Show &Tween Objects</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="309" /> + <location filename="../Project.py" line="262" /> <source>Show all implicit and explicit tween objects used by a Pyramid application</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="312" /> + <location filename="../Project.py" line="265" /> <source><b>Show Tween Objects</b><p>Show all implicit and explicit tween objects used by a Pyramid application.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="325" /> + <location filename="../Project.py" line="278" /> <source>Build Distribution</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="326" /> + <location filename="../Project.py" line="279" /> <source>Build &Distribution</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="329" /> + <location filename="../Project.py" line="282" /> <source>Builds a distribution file for the Pyramid project</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="331" /> + <location filename="../Project.py" line="284" /> <source><b>Build Distribution</b><p>Builds a distribution file for the Pyramid project using "python setup.py sdist".</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="344" /> + <location filename="../Project.py" line="297" /> <source>Documentation</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="345" /> + <location filename="../Project.py" line="298" /> <source>D&ocumentation</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="348" /> + <location filename="../Project.py" line="301" /> <source>Shows the help viewer with the Pyramid documentation</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="350" /> + <location filename="../Project.py" line="303" /> <source><b>Documentation</b><p>Shows the help viewer with the Pyramid documentation.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="811" /> - <location filename="../Project.py" line="362" /> + <location filename="../Project.py" line="924" /> + <location filename="../Project.py" line="315" /> <source>About Pyramid</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="363" /> + <location filename="../Project.py" line="316" /> <source>About P&yramid</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="366" /> + <location filename="../Project.py" line="319" /> <source>Shows some information about Pyramid</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="368" /> + <location filename="../Project.py" line="321" /> <source><b>About Pyramid</b><p>Shows some information about Pyramid.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="386" /> + <location filename="../Project.py" line="1919" /> + <location filename="../Project.py" line="1909" /> + <location filename="../Project.py" line="337" /> + <source>Initialize Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="338" /> + <source>Initialize &Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="341" /> + <source>Initializes (or re-initializes) the database of the current Pyramid project</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="344" /> + <source><b>Initialize Database</b><p>Initializes (or re-initializes) the database of the current Pyramid project.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1946" /> + <location filename="../Project.py" line="357" /> + <source>Create Migration</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="358" /> + <source>&Create Migration</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="361" /> + <source>Create a new migration for the current database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="363" /> + <source><b>Create Migration</b><p>Creates a new migration for the current database and stores it in the configured migrations directory.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1984" /> + <location filename="../Project.py" line="377" /> + <source>Upgrade Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="378" /> + <source>&Upgrade Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="381" /> + <source>Upgrade the database to the current migration</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="383" /> + <source><b>Upgrade Database</b><p>Upgrades the database to the current migration.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="2011" /> + <location filename="../Project.py" line="392" /> + <source>Downgrade Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="393" /> + <source>&Downgrade Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="396" /> + <source>Downgrade the database to the previous version</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="398" /> + <source><b>Downgrade Database</b><p>Downgrades the database to the previous version.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="411" /> + <source>Show Migrations Summary</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="412" /> + <source>Show Migrations &Summary</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="415" /> + <source>Show a summary of the created database migrations</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="417" /> + <source><b>Show Migrations Summary</b><p>Shows a summary list of the created database migrations.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="427" /> + <source>Show Migrations History</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="428" /> + <source>Show Migrations &History</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="431" /> + <source>Show the full history of the created database migrations</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="433" /> + <source><b>Show Migrations History</b><p>Shows the full history of the created database migrations.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="452" /> + <source>Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="466" /> <source>P&yramid</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="451" /> + <location filename="../Project.py" line="531" /> <source>Open with {0}</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="465" /> + <location filename="../Project.py" line="545" /> <source>New template...</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="474" /> + <location filename="../Project.py" line="554" /> <source>Extract Messages</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="477" /> + <location filename="../Project.py" line="557" /> <source>Compile All Catalogs</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="480" /> + <location filename="../Project.py" line="560" /> <source>Compile Selected Catalogs</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="483" /> + <location filename="../Project.py" line="563" /> <source>Update All Catalogs</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="486" /> + <location filename="../Project.py" line="566" /> <source>Update Selected Catalogs</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="525" /> + <location filename="../Project.py" line="605" /> <source>Chameleon Templates (*.pt);;Chameleon Text Templates (*.txt);;Mako Templates (*.mako);;Mako Templates (*.mak);;HTML Files (*.html);;HTML Files (*.htm);;All Files (*)</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="564" /> - <location filename="../Project.py" line="550" /> - <location filename="../Project.py" line="535" /> + <location filename="../Project.py" line="644" /> + <location filename="../Project.py" line="630" /> + <location filename="../Project.py" line="615" /> <source>New Form</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="551" /> + <location filename="../Project.py" line="631" /> <source>The file already exists! Overwrite it?</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="565" /> + <location filename="../Project.py" line="645" /> <source><p>The new form file <b>{0}</b> could not be created.<br/> Problem: {1}</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="812" /> + <location filename="../Project.py" line="925" /> <source><p>Pyramid is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.</p><p><table><tr><td>Version:</td><td>{0}</td></tr><tr><td>URL:</td><td><a href="{1}">{1}</a></td></tr></table></p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="997" /> + <location filename="../Project.py" line="1098" /> + <source>Initializing Pyramid Project</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1159" /> <source>Select Pyramid Project</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="998" /> + <location filename="../Project.py" line="1160" /> <source>Select the Pyramid project to work with.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1036" /> + <location filename="../Project.py" line="1198" /> <source>None</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1041" /> + <location filename="../Project.py" line="1203" /> <source>&Current Pyramid Project ({0})</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1724" /> - <location filename="../Project.py" line="1694" /> - <location filename="../Project.py" line="1641" /> - <location filename="../Project.py" line="1604" /> - <location filename="../Project.py" line="1567" /> - <location filename="../Project.py" line="1513" /> - <location filename="../Project.py" line="1416" /> - <location filename="../Project.py" line="1394" /> + <location filename="../Project.py" line="1926" /> + <location filename="../Project.py" line="1910" /> + <location filename="../Project.py" line="1811" /> + <location filename="../Project.py" line="1781" /> + <location filename="../Project.py" line="1728" /> + <location filename="../Project.py" line="1691" /> + <location filename="../Project.py" line="1654" /> + <location filename="../Project.py" line="1600" /> + <location filename="../Project.py" line="1500" /> + <location filename="../Project.py" line="1478" /> + <location filename="../Project.py" line="1441" /> + <location filename="../Project.py" line="1400" /> <location filename="../Project.py" line="1360" /> - <location filename="../Project.py" line="1330" /> - <location filename="../Project.py" line="1315" /> + <location filename="../Project.py" line="1325" /> <location filename="../Project.py" line="1271" /> - <location filename="../Project.py" line="1236" /> - <location filename="../Project.py" line="1199" /> - <location filename="../Project.py" line="1164" /> - <location filename="../Project.py" line="1105" /> <source>No current Pyramid project selected or no Pyramid project created yet. Aborting...</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1773" /> - <location filename="../Project.py" line="1216" /> - <location filename="../Project.py" line="1132" /> + <location filename="../Project.py" line="1860" /> + <location filename="../Project.py" line="1380" /> + <location filename="../Project.py" line="1299" /> <source>Process Generation Error</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1133" /> + <location filename="../Project.py" line="1300" /> <source>The Pyramid server could not be started.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1181" /> + <location filename="../Project.py" line="1342" /> <source>Could not start the web-browser for the URL "{0}".</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1217" /> + <location filename="../Project.py" line="1381" /> <source>The Pyramid Shell process could not be started.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1247" /> - <source>Pyramid development environment setup successfully.</source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../Project.py" line="1264" /> + <location filename="../Project.py" line="1393" /> <source>Build Distribution File</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1291" /> + <location filename="../Project.py" line="1420" /> <source>Python distribution file built successfully.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1340" /> - <source>Database initialized successfully.</source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../Project.py" line="1367" /> + <location filename="../Project.py" line="1448" /> <source>Enter the URL to be matched:</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1506" /> + <location filename="../Project.py" line="1593" /> <source>Extract messages</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1525" /> + <location filename="../Project.py" line="1612" /> <source>No setup.cfg found or no "extract_messages" section found in setup.cfg.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1532" /> + <location filename="../Project.py" line="1619" /> <source>No "output_file" option found in setup.cfg.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1546" /> + <location filename="../Project.py" line="1633" /> <source> Messages extracted successfully.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1559" /> + <location filename="../Project.py" line="1646" /> <source>Initializing message catalog for '{0}'</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1580" /> + <location filename="../Project.py" line="1667" /> <source> Message catalog initialized successfully.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1634" /> - <location filename="../Project.py" line="1597" /> + <location filename="../Project.py" line="1721" /> + <location filename="../Project.py" line="1684" /> <source>Compiling message catalogs</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1668" /> - <location filename="../Project.py" line="1615" /> + <location filename="../Project.py" line="1755" /> + <location filename="../Project.py" line="1702" /> <source> Message catalogs compiled successfully.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1746" /> - <location filename="../Project.py" line="1663" /> + <location filename="../Project.py" line="1833" /> + <location filename="../Project.py" line="1750" /> <source>No locales detected. Aborting...</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1717" /> - <location filename="../Project.py" line="1687" /> + <location filename="../Project.py" line="1804" /> + <location filename="../Project.py" line="1774" /> <source>Updating message catalogs</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1751" /> - <location filename="../Project.py" line="1705" /> + <location filename="../Project.py" line="1838" /> + <location filename="../Project.py" line="1792" /> <source> Message catalogs updated successfully.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Project.py" line="1774" /> + <location filename="../Project.py" line="1861" /> <source>The translations editor process ({0}) could not be started.</source> <translation type="unfinished" /> </message> + <message> + <location filename="../Project.py" line="1936" /> + <source>Database initialized successfully.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1953" /> + <source>Enter a short message for the migration:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1964" /> + <source> +Migration created successfully.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1995" /> + <source> +Database upgraded successfully.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="2022" /> + <source> +Database downgraded successfully.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="2047" /> + <source>Migrations History</source> + <translation type="unfinished" /> + </message> </context> <context> <name>ProjectPyramidPlugin</name> @@ -678,12 +843,12 @@ <context> <name>PyramidDialog</name> <message> - <location filename="../PyramidDialog.py" line="198" /> + <location filename="../PyramidDialog.py" line="208" /> <source>Process Generation Error</source> <translation type="unfinished" /> </message> <message> - <location filename="../PyramidDialog.py" line="199" /> + <location filename="../PyramidDialog.py" line="209" /> <source>The process {0} could not be started. Ensure, that it is in the search path.</source> <translation type="unfinished" /> </message> @@ -929,12 +1094,12 @@ <translation type="unfinished" /> </message> <message> - <location filename="../PyramidRoutesDialog.py" line="190" /> + <location filename="../PyramidRoutesDialog.py" line="193" /> <source>Process Generation Error</source> <translation type="unfinished" /> </message> <message> - <location filename="../PyramidRoutesDialog.py" line="191" /> + <location filename="../PyramidRoutesDialog.py" line="194" /> <source>The process {0} could not be started. Ensure, that it is in the search path.</source> <translation type="unfinished" /> </message>
--- a/ProjectPyramid/i18n/pyramid_es.ts Tue Jun 01 19:37:46 2021 +0200 +++ b/ProjectPyramid/i18n/pyramid_es.ts Sun Jun 06 16:30:37 2021 +0200 @@ -4,25 +4,9 @@ <context> <name>CreateParametersDialog</name> <message> - <location filename="../CreateParametersDialog.py" line="55" /> - <source>The pcreate command did not finish within 30s.</source> - <translation>El comando pcreate no ha terminado en 30s o menos.</translation> - </message> - <message> - <location filename="../CreateParametersDialog.py" line="58" /> - <source>Could not start the pcreate executable.</source> - <translation>No se ha podido iniciar el ejecutable de pcreate.</translation> - </message> - <message> - <location filename="../CreateParametersDialog.py" line="69" /> - <source>Process Generation Error</source> - <translation>Error de Generación de Proceso</translation> - </message> - <message> - <location filename="../CreateParametersDialog.py" line="115" /> - <source>{0} ({1})</source> - <comment>scaffold name, explanatory text</comment> - <translation>{0} ({1})</translation> + <location filename="../CreateParametersDialog.py" line="47" /> + <source>No Database</source> + <translation type="unfinished" /> </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> @@ -31,23 +15,58 @@ </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> - <source>Project &Name:</source> - <translation>&Nombre del Proyecto:</translation> + <source>Template:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Enter the template to be used</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Template Version:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Enter an optional branch, tag or commit</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>CookieCutter Starter Parameters</source> + <translation type="unfinished" /> </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> - <source>Enter the name of the Pyramid project to create</source> - <translation>Introducir el nombre del proyecto Piramid a crear</translation> + <source>Project Name:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Enter the name of the Pyramid project</source> + <translation type="unfinished" /> </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> - <source>&Scaffold:</source> - <translation>&Scaffold:</translation> + <source>Template Language:</source> + <translation type="unfinished" /> </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> - <source>Select the scaffold to be used</source> - <translation>Seleccionar el scaffold a utilizar</translation> + <source>Select the templating language</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Backend:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Select the database backend</source> + <translation type="unfinished" /> </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> @@ -60,14 +79,45 @@ <translation>Sobreescribir archivos existentes</translation> </message> <message> - <location filename="../CreateParametersDialog.ui" line="0" /> - <source>Select to simulate the creation</source> - <translation>Seleccionar para simular la creación</translation> + <source>The pcreate command did not finish within 30s.</source> + <translation type="vanished">El comando pcreate no ha terminado en 30s o menos.</translation> + </message> + <message> + <source>Could not start the pcreate executable.</source> + <translation type="vanished">No se ha podido iniciar el ejecutable de pcreate.</translation> + </message> + <message> + <source>Process Generation Error</source> + <translation type="vanished">Error de Generación de Proceso</translation> + </message> + <message> + <source>{0} ({1})</source> + <comment>scaffold name, explanatory text</comment> + <translation type="vanished">{0} ({1})</translation> </message> <message> - <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Project &Name:</source> + <translation type="vanished">&Nombre del Proyecto:</translation> + </message> + <message> + <source>Enter the name of the Pyramid project to create</source> + <translation type="vanished">Introducir el nombre del proyecto Piramid a crear</translation> + </message> + <message> + <source>&Scaffold:</source> + <translation type="vanished">&Scaffold:</translation> + </message> + <message> + <source>Select the scaffold to be used</source> + <translation type="vanished">Seleccionar el scaffold a utilizar</translation> + </message> + <message> + <source>Select to simulate the creation</source> + <translation type="vanished">Seleccionar para simular la creación</translation> + </message> + <message> <source>Simulate Pyramid project creation</source> - <translation>Simular creación de proyecto Piramid</translation> + <translation type="vanished">Simular creación de proyecto Piramid</translation> </message> </context> <context> @@ -152,519 +202,711 @@ </message> </context> <context> + <name>MigrateSummaryDialog</name> + <message> + <location filename="../MigrateSummaryDialog.py" line="40" /> + <source>Refresh</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <location filename="../MigrateSummaryDialog.py" line="98" /> + <location filename="../MigrateSummaryDialog.py" line="91" /> + <source>Migrations Summary</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.py" line="92" /> + <source>The 'alembic' process did not finish within 10 seconds.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.py" line="99" /> + <source>The 'alembic' process could not be started.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <location filename="../MigrateSummaryDialog.py" line="184" /> + <location filename="../MigrateSummaryDialog.py" line="170" /> + <source>Upgrade</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.py" line="172" /> + <source>Downgrade</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>Old Revision</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>New Revision</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>Message</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>Labels</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>Press to upgrade or downgrade the database to the selected migration</source> + <translation type="unfinished" /> + </message> + </context> + <context> <name>Project</name> <message> - <location filename="../Project.py" line="136" /> + <location filename="../Project.py" line="143" /> <source>Current Pyramid Project</source> <translation>Proyecto Pyramid Actual</translation> </message> <message> - <location filename="../Project.py" line="140" /> + <location filename="../Project.py" line="147" /> <source>Selects the current Pyramid project</source> <translation>Selecciona el proyecto Piramid actual</translation> </message> <message> - <location filename="../Project.py" line="142" /> + <location filename="../Project.py" line="149" /> <source><b>Current Pyramid Project</b><p>Selects the Pyramid project. Used for multi-project Pyramid projects to switch between the projects.</p></source> <translation><b>Proyecto Pyramid Actual</b><p>Seleciona el proyecto Pyramid. Se utiliza en proyectos Pyramid multi-proyecto Pyramid projects para cambiar entre proyectos.</p></translation> </message> <message> - <location filename="../Project.py" line="931" /> - <location filename="../Project.py" line="155" /> + <location filename="../Project.py" line="1041" /> + <location filename="../Project.py" line="162" /> <source>Create Pyramid Project</source> <translation>Crear Proyecto Pyramid</translation> </message> <message> - <location filename="../Project.py" line="156" /> + <location filename="../Project.py" line="163" /> <source>Create Pyramid &Project</source> <translation>Crear &Proyecto Pyramid</translation> </message> <message> - <location filename="../Project.py" line="159" /> + <location filename="../Project.py" line="166" /> <source>Creates a new Pyramid project</source> <translation>Crea un nuevo proyecto Pyramid</translation> </message> <message> - <location filename="../Project.py" line="161" /> + <location filename="../Project.py" line="168" /> <source><b>Create Pyramid Project</b><p>Creates a new Pyramid project using "pcreate".</p></source> <translation><b>Crear Proyecto Pyramid </b><p>Crea un nuevo proyecto Pyramid usando "pcreate".</p></translation> </message> <message> - <location filename="../Project.py" line="1104" /> - <location filename="../Project.py" line="173" /> + <location filename="../Project.py" line="1270" /> + <location filename="../Project.py" line="180" /> <source>Run Server</source> <translation>Lanzar Servidor</translation> </message> <message> - <location filename="../Project.py" line="174" /> + <location filename="../Project.py" line="181" /> <source>Run &Server</source> <translation>Lanzar &Servidor</translation> </message> <message> - <location filename="../Project.py" line="177" /> + <location filename="../Project.py" line="184" /> <source>Starts the Pyramid Web server</source> <translation>Inicia el servidor Web de Pyramid</translation> </message> <message> - <location filename="../Project.py" line="179" /> + <location filename="../Project.py" line="186" /> <source><b>Run Server</b><p>Starts the Pyramid Web server using "pserve --reload development.ini".</p></source> <translation><b>Lanzar Servidor</b><p>Inicia el servidor Web de Pyramid usando "pserve --reload development.ini".</p></translation> </message> <message> - <location filename="../Project.py" line="188" /> - <source>Run Server with Logging</source> - <translation>Lanzar Servidor con Log</translation> - </message> - <message> - <location filename="../Project.py" line="189" /> - <source>Run Server with &Logging</source> - <translation>Lanzar Servidor con &Log</translation> - </message> - <message> - <location filename="../Project.py" line="192" /> - <source>Starts the Pyramid Web server with logging</source> - <translation>Inicia el servidor Web de Pyramid con log</translation> - </message> - <message> - <location filename="../Project.py" line="194" /> - <source><b>Run Server with Logging</b><p>Starts the Pyramid Web server with logging using "pserve --log-file=server.log --reload development.ini".</p></source> - <translation><b>Lanzar Servidor con Log</b><p>Inicia el servidor Web de Pyramid con log usando "pserve --log-file=server.log --reload development.ini".</p></translation> - </message> - <message> - <location filename="../Project.py" line="1180" /> - <location filename="../Project.py" line="1163" /> - <location filename="../Project.py" line="203" /> + <location filename="../Project.py" line="1341" /> + <location filename="../Project.py" line="1324" /> + <location filename="../Project.py" line="195" /> <source>Run Web-Browser</source> <translation>Lanzar Navegador Web</translation> </message> <message> - <location filename="../Project.py" line="204" /> + <location filename="../Project.py" line="196" /> <source>Run &Web-Browser</source> <translation>Lanzar Navegador &Web</translation> </message> <message> - <location filename="../Project.py" line="207" /> + <location filename="../Project.py" line="199" /> <source>Starts the default Web-Browser with the URL of the Pyramid Web server</source> <translation>Inicia el Navegador Web por defecto con la URL del servidor Web de Pyramid</translation> </message> <message> - <location filename="../Project.py" line="210" /> + <location filename="../Project.py" line="202" /> <source><b>Run Web-Browser</b><p>Starts the default Web-Browser with the URL of the Pyramid Web server.</p></source> <translation><b>Lanzar Navegador Web</b><p>Inicia el Navegador Web por defecto con la URL del servidor Web de Pyramid.</p></translation> </message> <message> - <location filename="../Project.py" line="1198" /> - <location filename="../Project.py" line="219" /> + <location filename="../Project.py" line="1359" /> + <location filename="../Project.py" line="211" /> <source>Start Pyramid Python Console</source> <translation>Iniciar Consola Python de Pyramid</translation> </message> <message> - <location filename="../Project.py" line="220" /> + <location filename="../Project.py" line="212" /> <source>Start Pyramid &Python Console</source> <translation>Iniciar Consola &Python de Pyramid</translation> </message> <message> - <location filename="../Project.py" line="223" /> + <location filename="../Project.py" line="215" /> <source>Starts an interactive Python interpreter</source> <translation>Inicia un intérprete interactivo de Python</translation> </message> <message> - <location filename="../Project.py" line="225" /> + <location filename="../Project.py" line="217" /> <source><b>Start Pyramid Python Console</b><p>Starts an interactive Python interpreter.</p></source> <translation><b>Iniciar Consola Python de Pyramid</b><p>Inicia un intérprete interactivo de Python.</p></translation> </message> <message> - <location filename="../Project.py" line="1229" /> - <location filename="../Project.py" line="237" /> - <source>Setup Development Environment</source> - <translation>Configurar Entorno de Desarrollo</translation> - </message> - <message> - <location filename="../Project.py" line="238" /> - <source>Setup &Development Environment</source> - <translation>Configurar Entorno de &Desarrollo</translation> - </message> - <message> - <location filename="../Project.py" line="241" /> - <source>Setup the Pyramid project in development mode</source> - <translation>Configurar el proyecto Pyramid en modo de desarrollo</translation> - </message> - <message> - <location filename="../Project.py" line="243" /> - <source><b>Setup Development Environment</b><p>Setup the Pyramid project in development mode using "python setup.py develop".</p></source> - <translation><b>Configurar Entorno de Desarrollo</b><p>Configurar el proyecto Pyramid en modo de desarrollo usando "python setup.py develop".</p></translation> - </message> - <message> - <location filename="../Project.py" line="1323" /> - <location filename="../Project.py" line="1314" /> - <location filename="../Project.py" line="256" /> - <source>Initialize Database</source> - <translation>Inicializar Base de Datos</translation> - </message> - <message> - <location filename="../Project.py" line="257" /> - <source>Initialize &Database</source> - <translation>Inicializar Base de &Datos</translation> - </message> - <message> - <location filename="../Project.py" line="260" /> - <source>Initializes (or re-initializes) the database of the current Pyramid project</source> - <translation>Inicializa (o reinicializa) la base de datos del proyecto Pyramid actual</translation> - </message> - <message> - <location filename="../Project.py" line="263" /> - <source><b>Initialize Database</b><p>Initializes (or re-initializes) the database of the current Pyramid project.</p></source> - <translation><b>Inicializar Base de Datos</b><p>Inicializa (o reinicializa) la base de datos del proyecto Pyramid actual.</p></translation> - </message> - <message> - <location filename="../Project.py" line="1366" /> - <location filename="../Project.py" line="1353" /> - <location filename="../Project.py" line="276" /> + <location filename="../Project.py" line="1447" /> + <location filename="../Project.py" line="1434" /> + <location filename="../Project.py" line="229" /> <source>Show Matching Views</source> <translation>Mostrar Vistas Concordantes</translation> </message> <message> - <location filename="../Project.py" line="277" /> + <location filename="../Project.py" line="230" /> <source>Show Matching &Views</source> <translation>Mostrar &Vistas Concordantes</translation> </message> <message> - <location filename="../Project.py" line="280" /> + <location filename="../Project.py" line="233" /> <source>Show views matching a given URL</source> <translation>Mostrar vistas que concuerdan con una URL dada</translation> </message> <message> - <location filename="../Project.py" line="282" /> + <location filename="../Project.py" line="235" /> <source><b>Show Matching Views</b><p>Show views matching a given URL.</p></source> <translation><b>Mostrar Vistas Concordantes</b><p>Mostrar vistas que concuerdan con una URL dada.</p></translation> </message> <message> - <location filename="../Project.py" line="1387" /> - <location filename="../Project.py" line="290" /> + <location filename="../Project.py" line="1471" /> + <location filename="../Project.py" line="243" /> <source>Show Routes</source> <translation>Mostrar Rutas</translation> </message> <message> - <location filename="../Project.py" line="291" /> + <location filename="../Project.py" line="244" /> <source>Show &Routes</source> <translation>Mostrar &Rutas</translation> </message> <message> - <location filename="../Project.py" line="294" /> + <location filename="../Project.py" line="247" /> <source>Show all URL dispatch routes used by a Pyramid application</source> <translation>Mostrar todas las rutas URL de despacho usadas por una aplicación Pyramid</translation> </message> <message> - <location filename="../Project.py" line="296" /> + <location filename="../Project.py" line="249" /> <source><b>Show Routes</b><p>Show all URL dispatch routes used by a Pyramid application in the order in which they are evaluated.</p></source> <translation><b>Mostrar Rutas</b><p>Mostrar todas las rutas URL de despacho usadas por una aplicación Pyramid en el orden en que son evaluadas.</p></translation> </message> <message> - <location filename="../Project.py" line="1409" /> - <location filename="../Project.py" line="305" /> + <location filename="../Project.py" line="1493" /> + <location filename="../Project.py" line="258" /> <source>Show Tween Objects</source> <translation>Mostrar Objetos Gemelos</translation> </message> <message> - <location filename="../Project.py" line="306" /> + <location filename="../Project.py" line="259" /> <source>Show &Tween Objects</source> <translation>Mos&trar Objetos Gemelos</translation> </message> <message> - <location filename="../Project.py" line="309" /> + <location filename="../Project.py" line="262" /> <source>Show all implicit and explicit tween objects used by a Pyramid application</source> <translation>Mostrar todos los objetos gemelos implícitos y explícitos usados por una aplicación Pyramid</translation> </message> <message> - <location filename="../Project.py" line="312" /> + <location filename="../Project.py" line="265" /> <source><b>Show Tween Objects</b><p>Show all implicit and explicit tween objects used by a Pyramid application.</p></source> <translation><b>Mostrar Objetos Gemelos</b><p>Mostrar todos los objetos gemelos implícitos y explícitos usados por una aplicación Pyramid.</p></translation> </message> <message> - <location filename="../Project.py" line="325" /> + <location filename="../Project.py" line="278" /> <source>Build Distribution</source> <translation>Construir Distribución</translation> </message> <message> - <location filename="../Project.py" line="326" /> + <location filename="../Project.py" line="279" /> <source>Build &Distribution</source> <translation>Construir &Distribución</translation> </message> <message> - <location filename="../Project.py" line="329" /> + <location filename="../Project.py" line="282" /> <source>Builds a distribution file for the Pyramid project</source> <translation>Construye un archivo de distribución para el proyecto Pyramid</translation> </message> <message> - <location filename="../Project.py" line="331" /> + <location filename="../Project.py" line="284" /> <source><b>Build Distribution</b><p>Builds a distribution file for the Pyramid project using "python setup.py sdist".</p></source> <translation><b>Construir Distribución</b><p>Construye un archivo de distribución para el proyecto Pyramid usando "python setup.py sdist".</p></translation> </message> <message> - <location filename="../Project.py" line="344" /> + <location filename="../Project.py" line="297" /> <source>Documentation</source> <translation>Documentación</translation> </message> <message> - <location filename="../Project.py" line="345" /> + <location filename="../Project.py" line="298" /> <source>D&ocumentation</source> <translation>D&ocumentación</translation> </message> <message> - <location filename="../Project.py" line="348" /> + <location filename="../Project.py" line="301" /> <source>Shows the help viewer with the Pyramid documentation</source> <translation>Muestra el visor de ayuda con la documentación de Pyramid</translation> </message> <message> - <location filename="../Project.py" line="350" /> + <location filename="../Project.py" line="303" /> <source><b>Documentation</b><p>Shows the help viewer with the Pyramid documentation.</p></source> <translation><b>Documentación</b><p>Muestra el visor de ayuda con la documentación de Pyramid.</p></translation> </message> <message> - <location filename="../Project.py" line="811" /> - <location filename="../Project.py" line="362" /> + <location filename="../Project.py" line="924" /> + <location filename="../Project.py" line="315" /> <source>About Pyramid</source> <translation>Acerca de Pyramid</translation> </message> <message> - <location filename="../Project.py" line="363" /> + <location filename="../Project.py" line="316" /> <source>About P&yramid</source> <translation>Acerca de P&yramid</translation> </message> <message> - <location filename="../Project.py" line="366" /> + <location filename="../Project.py" line="319" /> <source>Shows some information about Pyramid</source> <translation>Muestra información sobre Pyramid</translation> </message> <message> - <location filename="../Project.py" line="368" /> + <location filename="../Project.py" line="321" /> <source><b>About Pyramid</b><p>Shows some information about Pyramid.</p></source> <translation><b>Acerca de Pyramid</b><p>Muestra información acerca de Pyramid.</p></translation> </message> <message> - <location filename="../Project.py" line="386" /> + <location filename="../Project.py" line="1919" /> + <location filename="../Project.py" line="1909" /> + <location filename="../Project.py" line="337" /> + <source>Initialize Database</source> + <translation>Inicializar Base de Datos</translation> + </message> + <message> + <location filename="../Project.py" line="338" /> + <source>Initialize &Database</source> + <translation>Inicializar Base de &Datos</translation> + </message> + <message> + <location filename="../Project.py" line="341" /> + <source>Initializes (or re-initializes) the database of the current Pyramid project</source> + <translation>Inicializa (o reinicializa) la base de datos del proyecto Pyramid actual</translation> + </message> + <message> + <location filename="../Project.py" line="344" /> + <source><b>Initialize Database</b><p>Initializes (or re-initializes) the database of the current Pyramid project.</p></source> + <translation><b>Inicializar Base de Datos</b><p>Inicializa (o reinicializa) la base de datos del proyecto Pyramid actual.</p></translation> + </message> + <message> + <location filename="../Project.py" line="1946" /> + <location filename="../Project.py" line="357" /> + <source>Create Migration</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="358" /> + <source>&Create Migration</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="361" /> + <source>Create a new migration for the current database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="363" /> + <source><b>Create Migration</b><p>Creates a new migration for the current database and stores it in the configured migrations directory.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1984" /> + <location filename="../Project.py" line="377" /> + <source>Upgrade Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="378" /> + <source>&Upgrade Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="381" /> + <source>Upgrade the database to the current migration</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="383" /> + <source><b>Upgrade Database</b><p>Upgrades the database to the current migration.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="2011" /> + <location filename="../Project.py" line="392" /> + <source>Downgrade Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="393" /> + <source>&Downgrade Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="396" /> + <source>Downgrade the database to the previous version</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="398" /> + <source><b>Downgrade Database</b><p>Downgrades the database to the previous version.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="411" /> + <source>Show Migrations Summary</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="412" /> + <source>Show Migrations &Summary</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="415" /> + <source>Show a summary of the created database migrations</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="417" /> + <source><b>Show Migrations Summary</b><p>Shows a summary list of the created database migrations.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="427" /> + <source>Show Migrations History</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="428" /> + <source>Show Migrations &History</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="431" /> + <source>Show the full history of the created database migrations</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="433" /> + <source><b>Show Migrations History</b><p>Shows the full history of the created database migrations.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="452" /> + <source>Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="466" /> <source>P&yramid</source> <translation>P&yramid</translation> </message> <message> - <location filename="../Project.py" line="451" /> + <location filename="../Project.py" line="531" /> <source>Open with {0}</source> <translation>Abrir con {0}</translation> </message> <message> - <location filename="../Project.py" line="465" /> + <location filename="../Project.py" line="545" /> <source>New template...</source> <translation>Nueva Plantilla...</translation> </message> <message> - <location filename="../Project.py" line="474" /> + <location filename="../Project.py" line="554" /> <source>Extract Messages</source> <translation>Extraer Mensajes</translation> </message> <message> - <location filename="../Project.py" line="477" /> + <location filename="../Project.py" line="557" /> <source>Compile All Catalogs</source> <translation>Compilar Todos los Catálogos</translation> </message> <message> - <location filename="../Project.py" line="480" /> + <location filename="../Project.py" line="560" /> <source>Compile Selected Catalogs</source> <translation>Compilar Catálogos Seleccionados</translation> </message> <message> - <location filename="../Project.py" line="483" /> + <location filename="../Project.py" line="563" /> <source>Update All Catalogs</source> <translation>Actualizar Todos los Catálogos</translation> </message> <message> - <location filename="../Project.py" line="486" /> + <location filename="../Project.py" line="566" /> <source>Update Selected Catalogs</source> <translation>Actualizar Catálogos Seleccionados</translation> </message> <message> - <location filename="../Project.py" line="525" /> + <location filename="../Project.py" line="605" /> <source>Chameleon Templates (*.pt);;Chameleon Text Templates (*.txt);;Mako Templates (*.mako);;Mako Templates (*.mak);;HTML Files (*.html);;HTML Files (*.htm);;All Files (*)</source> <translation>Plantillas Chameleon (*.pt);;Plantillas de Texto Chameleon (*.txt);;Plantillas Mako (*.mako);;Plantillas Mako (*.mak);;Archivos HTML (*.html);;Archivos HTML (*.htm);;Todos los Archivos (*)</translation> </message> <message> - <location filename="../Project.py" line="564" /> - <location filename="../Project.py" line="550" /> - <location filename="../Project.py" line="535" /> + <location filename="../Project.py" line="644" /> + <location filename="../Project.py" line="630" /> + <location filename="../Project.py" line="615" /> <source>New Form</source> <translation>Nuevo Formulario</translation> </message> <message> - <location filename="../Project.py" line="551" /> + <location filename="../Project.py" line="631" /> <source>The file already exists! Overwrite it?</source> <translation>¡El archivo ya existe!¿Sobreescribirlo?</translation> </message> <message> - <location filename="../Project.py" line="565" /> + <location filename="../Project.py" line="645" /> <source><p>The new form file <b>{0}</b> could not be created.<br/> Problem: {1}</p></source> <translation><p>No se ha podido crear el nuevo archivo de formulario <b>{0}</b>.<br/>Problema: {1}</p></translation> </message> <message> - <location filename="../Project.py" line="812" /> + <location filename="../Project.py" line="925" /> <source><p>Pyramid is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.</p><p><table><tr><td>Version:</td><td>{0}</td></tr><tr><td>URL:</td><td><a href="{1}">{1}</a></td></tr></table></p></source> <translation><p>Pyramid es un framework Web de alto nivel para Python que promueve desarrollo rápido, y diseño pragmático y limpio.</p><p><table><tr><td>Versión:</td><td>{0}</td></tr><tr><td>URL:</td><td><a href="{1}">{1}</a></td></tr></table></p></translation> </message> <message> - <location filename="../Project.py" line="997" /> + <location filename="../Project.py" line="1098" /> + <source>Initializing Pyramid Project</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1159" /> <source>Select Pyramid Project</source> <translation>Seleccionar Proyecto Pyramid</translation> </message> <message> - <location filename="../Project.py" line="998" /> + <location filename="../Project.py" line="1160" /> <source>Select the Pyramid project to work with.</source> <translation>Seleccionar el proyecto Pyramid con el que trabajar.</translation> </message> <message> - <location filename="../Project.py" line="1036" /> + <location filename="../Project.py" line="1198" /> <source>None</source> <translation>Ninguno</translation> </message> <message> - <location filename="../Project.py" line="1041" /> + <location filename="../Project.py" line="1203" /> <source>&Current Pyramid Project ({0})</source> <translation>Proyecto Pyramid A&ctual ({0})</translation> </message> <message> - <location filename="../Project.py" line="1724" /> - <location filename="../Project.py" line="1694" /> - <location filename="../Project.py" line="1641" /> - <location filename="../Project.py" line="1604" /> - <location filename="../Project.py" line="1567" /> - <location filename="../Project.py" line="1513" /> - <location filename="../Project.py" line="1416" /> - <location filename="../Project.py" line="1394" /> + <location filename="../Project.py" line="1926" /> + <location filename="../Project.py" line="1910" /> + <location filename="../Project.py" line="1811" /> + <location filename="../Project.py" line="1781" /> + <location filename="../Project.py" line="1728" /> + <location filename="../Project.py" line="1691" /> + <location filename="../Project.py" line="1654" /> + <location filename="../Project.py" line="1600" /> + <location filename="../Project.py" line="1500" /> + <location filename="../Project.py" line="1478" /> + <location filename="../Project.py" line="1441" /> + <location filename="../Project.py" line="1400" /> <location filename="../Project.py" line="1360" /> - <location filename="../Project.py" line="1330" /> - <location filename="../Project.py" line="1315" /> + <location filename="../Project.py" line="1325" /> <location filename="../Project.py" line="1271" /> - <location filename="../Project.py" line="1236" /> - <location filename="../Project.py" line="1199" /> - <location filename="../Project.py" line="1164" /> - <location filename="../Project.py" line="1105" /> <source>No current Pyramid project selected or no Pyramid project created yet. Aborting...</source> <translation>No se ha seleccionado proyecto Pyramid actual o no hay creado todavía ningún proyecto Pyramid. Abortando...</translation> </message> <message> - <location filename="../Project.py" line="1773" /> - <location filename="../Project.py" line="1216" /> - <location filename="../Project.py" line="1132" /> + <location filename="../Project.py" line="1860" /> + <location filename="../Project.py" line="1380" /> + <location filename="../Project.py" line="1299" /> <source>Process Generation Error</source> <translation>Error de Generación de Proceso</translation> </message> <message> - <location filename="../Project.py" line="1133" /> + <location filename="../Project.py" line="1300" /> <source>The Pyramid server could not be started.</source> <translation>No se ha podido iniciar el servidor de Pyramid.</translation> </message> <message> - <location filename="../Project.py" line="1181" /> + <location filename="../Project.py" line="1342" /> <source>Could not start the web-browser for the URL "{0}".</source> <translation>No se ha podido inicialr el navegador web para la URL "{0}".</translation> </message> <message> - <location filename="../Project.py" line="1217" /> + <location filename="../Project.py" line="1381" /> <source>The Pyramid Shell process could not be started.</source> <translation>No se ha podido iniciar el proceso Shell de Pyramid.</translation> </message> <message> - <location filename="../Project.py" line="1247" /> - <source>Pyramid development environment setup successfully.</source> - <translation>Entorno de desarrollo de Pyramid configurado con éxito.</translation> - </message> - <message> - <location filename="../Project.py" line="1264" /> + <location filename="../Project.py" line="1393" /> <source>Build Distribution File</source> <translation>Construir Archivo de Distribución</translation> </message> <message> - <location filename="../Project.py" line="1291" /> + <location filename="../Project.py" line="1420" /> <source>Python distribution file built successfully.</source> <translation>Archivo de distribución Python construido con éxito.</translation> </message> <message> - <location filename="../Project.py" line="1340" /> - <source>Database initialized successfully.</source> - <translation>Base de Datos inicializada con éxito.</translation> - </message> - <message> - <location filename="../Project.py" line="1367" /> + <location filename="../Project.py" line="1448" /> <source>Enter the URL to be matched:</source> <translation>Introducir la URL a ser concordada:</translation> </message> <message> - <location filename="../Project.py" line="1506" /> + <location filename="../Project.py" line="1593" /> <source>Extract messages</source> <translation>Extraer mensajes</translation> </message> <message> - <location filename="../Project.py" line="1525" /> + <location filename="../Project.py" line="1612" /> <source>No setup.cfg found or no "extract_messages" section found in setup.cfg.</source> <translation>No se ha encontrado setup.cfg o no se ha encontrado la sección 'extract_messages' de setup.cfg.</translation> </message> <message> - <location filename="../Project.py" line="1532" /> + <location filename="../Project.py" line="1619" /> <source>No "output_file" option found in setup.cfg.</source> <translation>No se ha encontrado opción "output_file" en setup.cfg.</translation> </message> <message> - <location filename="../Project.py" line="1546" /> + <location filename="../Project.py" line="1633" /> <source> Messages extracted successfully.</source> <translation>Mensajes extraídos con éxito.</translation> </message> <message> - <location filename="../Project.py" line="1559" /> + <location filename="../Project.py" line="1646" /> <source>Initializing message catalog for '{0}'</source> <translation>Inicializando catálogo de mensajes para '{0}'</translation> </message> <message> - <location filename="../Project.py" line="1580" /> + <location filename="../Project.py" line="1667" /> <source> Message catalog initialized successfully.</source> <translation>Catálogo de Mensajes inicializado con éxito.</translation> </message> <message> - <location filename="../Project.py" line="1634" /> - <location filename="../Project.py" line="1597" /> + <location filename="../Project.py" line="1721" /> + <location filename="../Project.py" line="1684" /> <source>Compiling message catalogs</source> <translation>Compilando catálogos de mensajes</translation> </message> <message> - <location filename="../Project.py" line="1668" /> - <location filename="../Project.py" line="1615" /> + <location filename="../Project.py" line="1755" /> + <location filename="../Project.py" line="1702" /> <source> Message catalogs compiled successfully.</source> <translation>Catálogo de Mensajes compilado con éxito.</translation> </message> <message> - <location filename="../Project.py" line="1746" /> - <location filename="../Project.py" line="1663" /> + <location filename="../Project.py" line="1833" /> + <location filename="../Project.py" line="1750" /> <source>No locales detected. Aborting...</source> <translation>No se han detectado traducciones. Abortando...</translation> </message> <message> - <location filename="../Project.py" line="1717" /> - <location filename="../Project.py" line="1687" /> + <location filename="../Project.py" line="1804" /> + <location filename="../Project.py" line="1774" /> <source>Updating message catalogs</source> <translation>Actualizando catálogos de mensajes</translation> </message> <message> - <location filename="../Project.py" line="1751" /> - <location filename="../Project.py" line="1705" /> + <location filename="../Project.py" line="1838" /> + <location filename="../Project.py" line="1792" /> <source> Message catalogs updated successfully.</source> <translation>Catálogo de Mensajes actualizado con éxito.</translation> </message> <message> - <location filename="../Project.py" line="1774" /> + <location filename="../Project.py" line="1861" /> <source>The translations editor process ({0}) could not be started.</source> <translation>El proceso de edición de traducciones ({0}) no ha podido ser iniciado.</translation> </message> + <message> + <location filename="../Project.py" line="1936" /> + <source>Database initialized successfully.</source> + <translation>Base de Datos inicializada con éxito.</translation> + </message> + <message> + <location filename="../Project.py" line="1953" /> + <source>Enter a short message for the migration:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1964" /> + <source> +Migration created successfully.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1995" /> + <source> +Database upgraded successfully.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="2022" /> + <source> +Database downgraded successfully.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="2047" /> + <source>Migrations History</source> + <translation type="unfinished" /> + </message> + <message> + <source>Run Server with Logging</source> + <translation type="vanished">Lanzar Servidor con Log</translation> + </message> + <message> + <source>Run Server with &Logging</source> + <translation type="vanished">Lanzar Servidor con &Log</translation> + </message> + <message> + <source>Starts the Pyramid Web server with logging</source> + <translation type="vanished">Inicia el servidor Web de Pyramid con log</translation> + </message> + <message> + <source><b>Run Server with Logging</b><p>Starts the Pyramid Web server with logging using "pserve --log-file=server.log --reload development.ini".</p></source> + <translation type="vanished"><b>Lanzar Servidor con Log</b><p>Inicia el servidor Web de Pyramid con log usando "pserve --log-file=server.log --reload development.ini".</p></translation> + </message> + <message> + <source>Setup Development Environment</source> + <translation type="vanished">Configurar Entorno de Desarrollo</translation> + </message> + <message> + <source>Setup &Development Environment</source> + <translation type="vanished">Configurar Entorno de &Desarrollo</translation> + </message> + <message> + <source>Setup the Pyramid project in development mode</source> + <translation type="vanished">Configurar el proyecto Pyramid en modo de desarrollo</translation> + </message> + <message> + <source><b>Setup Development Environment</b><p>Setup the Pyramid project in development mode using "python setup.py develop".</p></source> + <translation type="vanished"><b>Configurar Entorno de Desarrollo</b><p>Configurar el proyecto Pyramid en modo de desarrollo usando "python setup.py develop".</p></translation> + </message> + <message> + <source>Pyramid development environment setup successfully.</source> + <translation type="vanished">Entorno de desarrollo de Pyramid configurado con éxito.</translation> + </message> </context> <context> <name>ProjectPyramidPlugin</name> @@ -679,12 +921,12 @@ <context> <name>PyramidDialog</name> <message> - <location filename="../PyramidDialog.py" line="198" /> + <location filename="../PyramidDialog.py" line="208" /> <source>Process Generation Error</source> <translation>Error de Generación de Proceso</translation> </message> <message> - <location filename="../PyramidDialog.py" line="199" /> + <location filename="../PyramidDialog.py" line="209" /> <source>The process {0} could not be started. Ensure, that it is in the search path.</source> <translation>No se ha podido iniciar el proceso {0}. Asegúrese de que está en la ruta de búsqueda.</translation> </message> @@ -930,12 +1172,12 @@ <translation>Obteniendo rutas...</translation> </message> <message> - <location filename="../PyramidRoutesDialog.py" line="190" /> + <location filename="../PyramidRoutesDialog.py" line="193" /> <source>Process Generation Error</source> <translation>Error de Generación de Proceso</translation> </message> <message> - <location filename="../PyramidRoutesDialog.py" line="191" /> + <location filename="../PyramidRoutesDialog.py" line="194" /> <source>The process {0} could not be started. Ensure, that it is in the search path.</source> <translation>No se ha podido iniciar el proceso {0}. Asegúrese de que está en la ruta de búsqueda.</translation> </message>
--- a/ProjectPyramid/i18n/pyramid_ru.ts Tue Jun 01 19:37:46 2021 +0200 +++ b/ProjectPyramid/i18n/pyramid_ru.ts Sun Jun 06 16:30:37 2021 +0200 @@ -4,25 +4,9 @@ <context> <name>CreateParametersDialog</name> <message> - <location filename="../CreateParametersDialog.py" line="55" /> - <source>The pcreate command did not finish within 30s.</source> - <translation>Команда pcreate не завершилась за 30 сек.</translation> - </message> - <message> - <location filename="../CreateParametersDialog.py" line="58" /> - <source>Could not start the pcreate executable.</source> - <translation>Не удается запустить исполняемый файл pcreate.</translation> - </message> - <message> - <location filename="../CreateParametersDialog.py" line="69" /> - <source>Process Generation Error</source> - <translation>Ошибка при запуске процесса</translation> - </message> - <message> - <location filename="../CreateParametersDialog.py" line="115" /> - <source>{0} ({1})</source> - <comment>scaffold name, explanatory text</comment> - <translation>{0} ({1})</translation> + <location filename="../CreateParametersDialog.py" line="47" /> + <source>No Database</source> + <translation type="unfinished" /> </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> @@ -31,23 +15,58 @@ </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> - <source>Project &Name:</source> - <translation>&Имя проекта:</translation> + <source>Template:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Enter the template to be used</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Template Version:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Enter an optional branch, tag or commit</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>CookieCutter Starter Parameters</source> + <translation type="unfinished" /> </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> - <source>Enter the name of the Pyramid project to create</source> - <translation>Введите имя Pyramid проекта для его создания</translation> + <source>Project Name:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Enter the name of the Pyramid project</source> + <translation type="unfinished" /> </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> - <source>&Scaffold:</source> - <translation>&Каркас:</translation> + <source>Template Language:</source> + <translation type="unfinished" /> </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> - <source>Select the scaffold to be used</source> - <translation>Выберите каркас представления для использования</translation> + <source>Select the templating language</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Backend:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Select the database backend</source> + <translation type="unfinished" /> </message> <message> <location filename="../CreateParametersDialog.ui" line="0" /> @@ -60,14 +79,45 @@ <translation>Переписывать существующие файлы</translation> </message> <message> - <location filename="../CreateParametersDialog.ui" line="0" /> - <source>Select to simulate the creation</source> - <translation>Разрешить имитацию создания проекта</translation> + <source>The pcreate command did not finish within 30s.</source> + <translation type="vanished">Команда pcreate не завершилась за 30 сек.</translation> + </message> + <message> + <source>Could not start the pcreate executable.</source> + <translation type="vanished">Не удается запустить исполняемый файл pcreate.</translation> + </message> + <message> + <source>Process Generation Error</source> + <translation type="vanished">Ошибка при запуске процесса</translation> + </message> + <message> + <source>{0} ({1})</source> + <comment>scaffold name, explanatory text</comment> + <translation type="vanished">{0} ({1})</translation> </message> <message> - <location filename="../CreateParametersDialog.ui" line="0" /> + <source>Project &Name:</source> + <translation type="vanished">&Имя проекта:</translation> + </message> + <message> + <source>Enter the name of the Pyramid project to create</source> + <translation type="vanished">Введите имя Pyramid проекта для его создания</translation> + </message> + <message> + <source>&Scaffold:</source> + <translation type="vanished">&Каркас:</translation> + </message> + <message> + <source>Select the scaffold to be used</source> + <translation type="vanished">Выберите каркас представления для использования</translation> + </message> + <message> + <source>Select to simulate the creation</source> + <translation type="vanished">Разрешить имитацию создания проекта</translation> + </message> + <message> <source>Simulate Pyramid project creation</source> - <translation>Имитировать создание Pyramid проекта</translation> + <translation type="vanished">Имитировать создание Pyramid проекта</translation> </message> </context> <context> @@ -152,522 +202,714 @@ </message> </context> <context> + <name>MigrateSummaryDialog</name> + <message> + <location filename="../MigrateSummaryDialog.py" line="40" /> + <source>Refresh</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <location filename="../MigrateSummaryDialog.py" line="98" /> + <location filename="../MigrateSummaryDialog.py" line="91" /> + <source>Migrations Summary</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.py" line="92" /> + <source>The 'alembic' process did not finish within 10 seconds.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.py" line="99" /> + <source>The 'alembic' process could not be started.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <location filename="../MigrateSummaryDialog.py" line="184" /> + <location filename="../MigrateSummaryDialog.py" line="170" /> + <source>Upgrade</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.py" line="172" /> + <source>Downgrade</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>Old Revision</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>New Revision</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>Message</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>Labels</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../MigrateSummaryDialog.ui" line="0" /> + <source>Press to upgrade or downgrade the database to the selected migration</source> + <translation type="unfinished" /> + </message> + </context> + <context> <name>Project</name> <message> - <location filename="../Project.py" line="136" /> + <location filename="../Project.py" line="143" /> <source>Current Pyramid Project</source> <translation>Текущий Pyramid проект</translation> </message> <message> - <location filename="../Project.py" line="140" /> + <location filename="../Project.py" line="147" /> <source>Selects the current Pyramid project</source> <translation>Выбор текущего Pyramid проекта</translation> </message> <message> - <location filename="../Project.py" line="142" /> + <location filename="../Project.py" line="149" /> <source><b>Current Pyramid Project</b><p>Selects the Pyramid project. Used for multi-project Pyramid projects to switch between the projects.</p></source> <translation><b>Текущий Pyramid проект</b><p>Выбор Pyramid проекта. Используется в мультипроектных Pyramid-проектах для переключения между проектами.</p></translation> </message> <message> - <location filename="../Project.py" line="931" /> - <location filename="../Project.py" line="155" /> + <location filename="../Project.py" line="1041" /> + <location filename="../Project.py" line="162" /> <source>Create Pyramid Project</source> <translation>Создать Pyramid проект</translation> </message> <message> - <location filename="../Project.py" line="156" /> + <location filename="../Project.py" line="163" /> <source>Create Pyramid &Project</source> <translation>Создать Pyramid &проект</translation> </message> <message> - <location filename="../Project.py" line="159" /> + <location filename="../Project.py" line="166" /> <source>Creates a new Pyramid project</source> <translation>Создание нового Pyramid проекта</translation> </message> <message> - <location filename="../Project.py" line="161" /> + <location filename="../Project.py" line="168" /> <source><b>Create Pyramid Project</b><p>Creates a new Pyramid project using "pcreate".</p></source> <translation><b>Создание Pyramid проекта</b><p>Создание нового Pyramid-проекта посредством команды "pcreate".</p></translation> </message> <message> - <location filename="../Project.py" line="1104" /> - <location filename="../Project.py" line="173" /> + <location filename="../Project.py" line="1270" /> + <location filename="../Project.py" line="180" /> <source>Run Server</source> <translation>Сервер разработки</translation> </message> <message> - <location filename="../Project.py" line="174" /> + <location filename="../Project.py" line="181" /> <source>Run &Server</source> <translation>&Сервер разработки</translation> </message> <message> - <location filename="../Project.py" line="177" /> + <location filename="../Project.py" line="184" /> <source>Starts the Pyramid Web server</source> <translation>Запуск Pyramid Web сервера разработки</translation> </message> <message> - <location filename="../Project.py" line="179" /> + <location filename="../Project.py" line="186" /> <source><b>Run Server</b><p>Starts the Pyramid Web server using "pserve --reload development.ini".</p></source> <translation><b>Сервер разработки</b><p>Запуск Pyramid Web сервера разработки посредством команды "pserve --reload development.ini".</p></translation> </message> <message> - <location filename="../Project.py" line="188" /> - <source>Run Server with Logging</source> - <translation>Сервер разработки с ведением журнала</translation> - </message> - <message> - <location filename="../Project.py" line="189" /> - <source>Run Server with &Logging</source> - <translation>Сервер разработки с ведением &журнала</translation> - </message> - <message> - <location filename="../Project.py" line="192" /> - <source>Starts the Pyramid Web server with logging</source> - <translation>Запуск Pyramid Web сервера разработки с ведением журнала</translation> - </message> - <message> - <location filename="../Project.py" line="194" /> - <source><b>Run Server with Logging</b><p>Starts the Pyramid Web server with logging using "pserve --log-file=server.log --reload development.ini".</p></source> - <translation><b>Сервер с ведением журнала</b><p>Запуск Pyramid Web сервера разработки с ведением журнала посредством команды "pserve --log-file=server.log --reload development.ini".</p></translation> - </message> - <message> - <location filename="../Project.py" line="1180" /> - <location filename="../Project.py" line="1163" /> - <location filename="../Project.py" line="203" /> + <location filename="../Project.py" line="1341" /> + <location filename="../Project.py" line="1324" /> + <location filename="../Project.py" line="195" /> <source>Run Web-Browser</source> <translation>Запуск Web-браузера для администрирования</translation> </message> <message> - <location filename="../Project.py" line="204" /> + <location filename="../Project.py" line="196" /> <source>Run &Web-Browser</source> <translation>Запуск &Web-браузера</translation> </message> <message> - <location filename="../Project.py" line="207" /> + <location filename="../Project.py" line="199" /> <source>Starts the default Web-Browser with the URL of the Pyramid Web server</source> <translation>Запуск стандартного Web-браузера с URL Pyramid Web сервера (администрирование)</translation> </message> <message> - <location filename="../Project.py" line="210" /> + <location filename="../Project.py" line="202" /> <source><b>Run Web-Browser</b><p>Starts the default Web-Browser with the URL of the Pyramid Web server.</p></source> <translation><b>Запуск Web-браузера</b><p>Запуск стандартного Web-браузера с URL Pyramid Web сервера.</p></translation> </message> <message> - <location filename="../Project.py" line="1198" /> - <location filename="../Project.py" line="219" /> + <location filename="../Project.py" line="1359" /> + <location filename="../Project.py" line="211" /> <source>Start Pyramid Python Console</source> <translation>Запуск консоли Pyramid Python</translation> </message> <message> - <location filename="../Project.py" line="220" /> + <location filename="../Project.py" line="212" /> <source>Start Pyramid &Python Console</source> <translation>Запуск Pyramid &Python консоли</translation> </message> <message> - <location filename="../Project.py" line="223" /> + <location filename="../Project.py" line="215" /> <source>Starts an interactive Python interpreter</source> <translation>Запуск интерактивного интерпретатора Python</translation> </message> <message> - <location filename="../Project.py" line="225" /> + <location filename="../Project.py" line="217" /> <source><b>Start Pyramid Python Console</b><p>Starts an interactive Python interpreter.</p></source> <translation><b>Запуск Pyramid Python консоли</b><p>Запуск интерактивного интерпретатора Python.</p></translation> </message> <message> - <location filename="../Project.py" line="1229" /> - <location filename="../Project.py" line="237" /> - <source>Setup Development Environment</source> - <translation>Настройка среды разработки</translation> - </message> - <message> - <location filename="../Project.py" line="238" /> - <source>Setup &Development Environment</source> - <translation>Настройка среды &разработки</translation> - </message> - <message> - <location filename="../Project.py" line="241" /> - <source>Setup the Pyramid project in development mode</source> - <translation>Настройка Pyramid проекта в режиме разработки</translation> - </message> - <message> - <location filename="../Project.py" line="243" /> - <source><b>Setup Development Environment</b><p>Setup the Pyramid project in development mode using "python setup.py develop".</p></source> - <translation><b>Настройка среды разработки</b><p>Настройка Pyramid проекта в режиме разработки посредством "python setup.py develop".</p></translation> - </message> - <message> - <location filename="../Project.py" line="1323" /> - <location filename="../Project.py" line="1314" /> - <location filename="../Project.py" line="256" /> - <source>Initialize Database</source> - <translation>Инициализация базы данных</translation> - </message> - <message> - <location filename="../Project.py" line="257" /> - <source>Initialize &Database</source> - <translation>Инициализация &базы данных</translation> - </message> - <message> - <location filename="../Project.py" line="260" /> - <source>Initializes (or re-initializes) the database of the current Pyramid project</source> - <translation>Инициализация (или ре-инициализация) базы данных текущего Pyramid проекта</translation> - </message> - <message> - <location filename="../Project.py" line="263" /> - <source><b>Initialize Database</b><p>Initializes (or re-initializes) the database of the current Pyramid project.</p></source> - <translation><b>Инициализация базы данных</b><p>Инициализация (или ре-инициализация) базы данных текущего Pyramid проекта.</p></translation> - </message> - <message> - <location filename="../Project.py" line="1366" /> - <location filename="../Project.py" line="1353" /> - <location filename="../Project.py" line="276" /> + <location filename="../Project.py" line="1447" /> + <location filename="../Project.py" line="1434" /> + <location filename="../Project.py" line="229" /> <source>Show Matching Views</source> <translation>Показ сопоставленных видов</translation> </message> <message> - <location filename="../Project.py" line="277" /> + <location filename="../Project.py" line="230" /> <source>Show Matching &Views</source> <translation>Показ сопоставленных &видов</translation> </message> <message> - <location filename="../Project.py" line="280" /> + <location filename="../Project.py" line="233" /> <source>Show views matching a given URL</source> <translation>Показ видов, сопоставленных заданному URL</translation> </message> <message> - <location filename="../Project.py" line="282" /> + <location filename="../Project.py" line="235" /> <source><b>Show Matching Views</b><p>Show views matching a given URL.</p></source> <translation><b>Показ сопоставленных видов</b><p>Отображение видов, сопоставленных заданным URL.</p></translation> </message> <message> - <location filename="../Project.py" line="1387" /> - <location filename="../Project.py" line="290" /> + <location filename="../Project.py" line="1471" /> + <location filename="../Project.py" line="243" /> <source>Show Routes</source> <translation>Показ маршрутов</translation> </message> <message> - <location filename="../Project.py" line="291" /> + <location filename="../Project.py" line="244" /> <source>Show &Routes</source> <translation>Показ &маршрутов</translation> </message> <message> - <location filename="../Project.py" line="294" /> + <location filename="../Project.py" line="247" /> <source>Show all URL dispatch routes used by a Pyramid application</source> <translation>Отображение всех URL dispatch маршрутов, используемых Pyramid приложением</translation> </message> <message> - <location filename="../Project.py" line="296" /> + <location filename="../Project.py" line="249" /> <source><b>Show Routes</b><p>Show all URL dispatch routes used by a Pyramid application in the order in which they are evaluated.</p></source> <translation><b>Показ маршрутов</b><p>Отображение всех URL dispatch маршрутов, используемых Pyramid приложением, в том порядке, в котором они выполняются.</p></translation> </message> <message> - <location filename="../Project.py" line="1409" /> - <location filename="../Project.py" line="305" /> + <location filename="../Project.py" line="1493" /> + <location filename="../Project.py" line="258" /> <source>Show Tween Objects</source> <translation>Показ Tween объектов</translation> </message> <message> - <location filename="../Project.py" line="306" /> + <location filename="../Project.py" line="259" /> <source>Show &Tween Objects</source> <translation>Показ &Tween объектов</translation> </message> <message> - <location filename="../Project.py" line="309" /> + <location filename="../Project.py" line="262" /> <source>Show all implicit and explicit tween objects used by a Pyramid application</source> <translation>Показ всех явных и неявных tween-объектов, используемых Pyramid приложением</translation> </message> <message> - <location filename="../Project.py" line="312" /> + <location filename="../Project.py" line="265" /> <source><b>Show Tween Objects</b><p>Show all implicit and explicit tween objects used by a Pyramid application.</p></source> <translation><b>Показ Tween объектов</b><p>Отображение всех явных и неявных tween-объектов, используемых Pyramid приложением.</p></translation> </message> <message> - <location filename="../Project.py" line="325" /> + <location filename="../Project.py" line="278" /> <source>Build Distribution</source> <translation>Создать дистрибутив</translation> </message> <message> - <location filename="../Project.py" line="326" /> + <location filename="../Project.py" line="279" /> <source>Build &Distribution</source> <translation>Создать &дистрибутив</translation> </message> <message> - <location filename="../Project.py" line="329" /> + <location filename="../Project.py" line="282" /> <source>Builds a distribution file for the Pyramid project</source> <translation>Создание файла дистрибутива для Pyramid проекта</translation> </message> <message> - <location filename="../Project.py" line="331" /> + <location filename="../Project.py" line="284" /> <source><b>Build Distribution</b><p>Builds a distribution file for the Pyramid project using "python setup.py sdist".</p></source> <translation><b>Создать дистрибутив</b><p>Создание файла дистрибутива для Pyramid проекта посредством команды "python setup.py sdist".</p></translation> </message> <message> - <location filename="../Project.py" line="344" /> + <location filename="../Project.py" line="297" /> <source>Documentation</source> <translation>Документация</translation> </message> <message> - <location filename="../Project.py" line="345" /> + <location filename="../Project.py" line="298" /> <source>D&ocumentation</source> <translation>Д&окументация</translation> </message> <message> - <location filename="../Project.py" line="348" /> + <location filename="../Project.py" line="301" /> <source>Shows the help viewer with the Pyramid documentation</source> <translation>Отображение справочника с документацией Pyramid</translation> </message> <message> - <location filename="../Project.py" line="350" /> + <location filename="../Project.py" line="303" /> <source><b>Documentation</b><p>Shows the help viewer with the Pyramid documentation.</p></source> <translation><b>Документация</b><p>Отображение справочника с документацией Pyramid.</p></translation> </message> <message> - <location filename="../Project.py" line="811" /> - <location filename="../Project.py" line="362" /> + <location filename="../Project.py" line="924" /> + <location filename="../Project.py" line="315" /> <source>About Pyramid</source> <translation>О Pyramid</translation> </message> <message> - <location filename="../Project.py" line="363" /> + <location filename="../Project.py" line="316" /> <source>About P&yramid</source> <translation>О P&yramid</translation> </message> <message> - <location filename="../Project.py" line="366" /> + <location filename="../Project.py" line="319" /> <source>Shows some information about Pyramid</source> <translation>Отображение информации о Pyramid</translation> </message> <message> - <location filename="../Project.py" line="368" /> + <location filename="../Project.py" line="321" /> <source><b>About Pyramid</b><p>Shows some information about Pyramid.</p></source> <translation><b>О Pyramid</b><p>Отображение информации о Pyramid.</p></translation> </message> <message> - <location filename="../Project.py" line="386" /> + <location filename="../Project.py" line="1919" /> + <location filename="../Project.py" line="1909" /> + <location filename="../Project.py" line="337" /> + <source>Initialize Database</source> + <translation>Инициализация базы данных</translation> + </message> + <message> + <location filename="../Project.py" line="338" /> + <source>Initialize &Database</source> + <translation>Инициализация &базы данных</translation> + </message> + <message> + <location filename="../Project.py" line="341" /> + <source>Initializes (or re-initializes) the database of the current Pyramid project</source> + <translation>Инициализация (или ре-инициализация) базы данных текущего Pyramid проекта</translation> + </message> + <message> + <location filename="../Project.py" line="344" /> + <source><b>Initialize Database</b><p>Initializes (or re-initializes) the database of the current Pyramid project.</p></source> + <translation><b>Инициализация базы данных</b><p>Инициализация (или ре-инициализация) базы данных текущего Pyramid проекта.</p></translation> + </message> + <message> + <location filename="../Project.py" line="1946" /> + <location filename="../Project.py" line="357" /> + <source>Create Migration</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="358" /> + <source>&Create Migration</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="361" /> + <source>Create a new migration for the current database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="363" /> + <source><b>Create Migration</b><p>Creates a new migration for the current database and stores it in the configured migrations directory.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1984" /> + <location filename="../Project.py" line="377" /> + <source>Upgrade Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="378" /> + <source>&Upgrade Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="381" /> + <source>Upgrade the database to the current migration</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="383" /> + <source><b>Upgrade Database</b><p>Upgrades the database to the current migration.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="2011" /> + <location filename="../Project.py" line="392" /> + <source>Downgrade Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="393" /> + <source>&Downgrade Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="396" /> + <source>Downgrade the database to the previous version</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="398" /> + <source><b>Downgrade Database</b><p>Downgrades the database to the previous version.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="411" /> + <source>Show Migrations Summary</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="412" /> + <source>Show Migrations &Summary</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="415" /> + <source>Show a summary of the created database migrations</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="417" /> + <source><b>Show Migrations Summary</b><p>Shows a summary list of the created database migrations.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="427" /> + <source>Show Migrations History</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="428" /> + <source>Show Migrations &History</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="431" /> + <source>Show the full history of the created database migrations</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="433" /> + <source><b>Show Migrations History</b><p>Shows the full history of the created database migrations.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="452" /> + <source>Database</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="466" /> <source>P&yramid</source> <translation>P&yramid</translation> </message> <message> - <location filename="../Project.py" line="451" /> + <location filename="../Project.py" line="531" /> <source>Open with {0}</source> <translation>Открыть с помощью {0}</translation> </message> <message> - <location filename="../Project.py" line="465" /> + <location filename="../Project.py" line="545" /> <source>New template...</source> <translation>Новый шаблон...</translation> </message> <message> - <location filename="../Project.py" line="474" /> + <location filename="../Project.py" line="554" /> <source>Extract Messages</source> <translation>Извлечь сообщения</translation> </message> <message> - <location filename="../Project.py" line="477" /> + <location filename="../Project.py" line="557" /> <source>Compile All Catalogs</source> <translation>Компилировать все каталоги</translation> </message> <message> - <location filename="../Project.py" line="480" /> + <location filename="../Project.py" line="560" /> <source>Compile Selected Catalogs</source> <translation>Компилировать выбранные каталоги</translation> </message> <message> - <location filename="../Project.py" line="483" /> + <location filename="../Project.py" line="563" /> <source>Update All Catalogs</source> <translation>Обновить все каталоги</translation> </message> <message> - <location filename="../Project.py" line="486" /> + <location filename="../Project.py" line="566" /> <source>Update Selected Catalogs</source> <translation>Обновить выбранные каталоги</translation> </message> <message> - <location filename="../Project.py" line="525" /> + <location filename="../Project.py" line="605" /> <source>Chameleon Templates (*.pt);;Chameleon Text Templates (*.txt);;Mako Templates (*.mako);;Mako Templates (*.mak);;HTML Files (*.html);;HTML Files (*.htm);;All Files (*)</source> <translation>Шаблоны Chameleon (*.pt);;Шаблоны Chameleon Text (*.txt);;Шаблоны Mako (*.mako);;Mako Шаблоны (*.mak);;Файлы HTML (*.html);;Файлы HTML (*.htm);;Все файлы (*)</translation> </message> <message> - <location filename="../Project.py" line="564" /> - <location filename="../Project.py" line="550" /> - <location filename="../Project.py" line="535" /> + <location filename="../Project.py" line="644" /> + <location filename="../Project.py" line="630" /> + <location filename="../Project.py" line="615" /> <source>New Form</source> <translation>Новая форма</translation> </message> <message> - <location filename="../Project.py" line="551" /> + <location filename="../Project.py" line="631" /> <source>The file already exists! Overwrite it?</source> <translation>Файл уже существует! Переписать его?</translation> </message> <message> - <location filename="../Project.py" line="565" /> + <location filename="../Project.py" line="645" /> <source><p>The new form file <b>{0}</b> could not be created.<br/> Problem: {1}</p></source> <translation><p>Новый файл формы <b>{0}</b> не может быть создан.<br/> Проблема: {1}</p></translation> </message> <message> - <location filename="../Project.py" line="812" /> + <location filename="../Project.py" line="925" /> <source><p>Pyramid is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.</p><p><table><tr><td>Version:</td><td>{0}</td></tr><tr><td>URL:</td><td><a href="{1}">{1}</a></td></tr></table></p></source> <translation><p>Pyramid это высокоуровневый веб-фреймворк, созданный на Python, воодушевляющий к развитому, чистому и практичному дизайну.</p><p><table><tr><td>Версия:</td><td>{0}</td></tr><tr><td>URL:</td><td><a href="{1}">{1}</a></td></tr></table></p></translation> </message> <message> - <location filename="../Project.py" line="997" /> + <location filename="../Project.py" line="1098" /> + <source>Initializing Pyramid Project</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1159" /> <source>Select Pyramid Project</source> <translation>Выбор Pyramid проекта</translation> </message> <message> - <location filename="../Project.py" line="998" /> + <location filename="../Project.py" line="1160" /> <source>Select the Pyramid project to work with.</source> <translation>Выберите Pyramid проект для работы.</translation> </message> <message> - <location filename="../Project.py" line="1036" /> + <location filename="../Project.py" line="1198" /> <source>None</source> <translation>None</translation> </message> <message> - <location filename="../Project.py" line="1041" /> + <location filename="../Project.py" line="1203" /> <source>&Current Pyramid Project ({0})</source> <translation>&Текущий Pyramid проект ({0})</translation> </message> <message> - <location filename="../Project.py" line="1724" /> - <location filename="../Project.py" line="1694" /> - <location filename="../Project.py" line="1641" /> - <location filename="../Project.py" line="1604" /> - <location filename="../Project.py" line="1567" /> - <location filename="../Project.py" line="1513" /> - <location filename="../Project.py" line="1416" /> - <location filename="../Project.py" line="1394" /> + <location filename="../Project.py" line="1926" /> + <location filename="../Project.py" line="1910" /> + <location filename="../Project.py" line="1811" /> + <location filename="../Project.py" line="1781" /> + <location filename="../Project.py" line="1728" /> + <location filename="../Project.py" line="1691" /> + <location filename="../Project.py" line="1654" /> + <location filename="../Project.py" line="1600" /> + <location filename="../Project.py" line="1500" /> + <location filename="../Project.py" line="1478" /> + <location filename="../Project.py" line="1441" /> + <location filename="../Project.py" line="1400" /> <location filename="../Project.py" line="1360" /> - <location filename="../Project.py" line="1330" /> - <location filename="../Project.py" line="1315" /> + <location filename="../Project.py" line="1325" /> <location filename="../Project.py" line="1271" /> - <location filename="../Project.py" line="1236" /> - <location filename="../Project.py" line="1199" /> - <location filename="../Project.py" line="1164" /> - <location filename="../Project.py" line="1105" /> <source>No current Pyramid project selected or no Pyramid project created yet. Aborting...</source> <translation>Не выбран текущий Pyramid проект, или Pyramid проект еще не создан. Отмена...</translation> </message> <message> - <location filename="../Project.py" line="1773" /> - <location filename="../Project.py" line="1216" /> - <location filename="../Project.py" line="1132" /> + <location filename="../Project.py" line="1860" /> + <location filename="../Project.py" line="1380" /> + <location filename="../Project.py" line="1299" /> <source>Process Generation Error</source> <translation>Ошибка при запуске процесса</translation> </message> <message> - <location filename="../Project.py" line="1133" /> + <location filename="../Project.py" line="1300" /> <source>The Pyramid server could not be started.</source> <translation>Невозможно запустить Pyramid сервер.</translation> </message> <message> - <location filename="../Project.py" line="1181" /> + <location filename="../Project.py" line="1342" /> <source>Could not start the web-browser for the URL "{0}".</source> <translation>Невозможно запустить web-браузер с URL "{0}".</translation> </message> <message> - <location filename="../Project.py" line="1217" /> + <location filename="../Project.py" line="1381" /> <source>The Pyramid Shell process could not be started.</source> <translation>Невозможно запустить процесс Pyramid Shell.</translation> </message> <message> - <location filename="../Project.py" line="1247" /> - <source>Pyramid development environment setup successfully.</source> - <translation>Среда разработки Pyramid успешно настроена.</translation> - </message> - <message> - <location filename="../Project.py" line="1264" /> + <location filename="../Project.py" line="1393" /> <source>Build Distribution File</source> <translation>Создание файла дистрибутива</translation> </message> <message> - <location filename="../Project.py" line="1291" /> + <location filename="../Project.py" line="1420" /> <source>Python distribution file built successfully.</source> <translation>Файл дистрибутива Python успешно создан.</translation> </message> <message> - <location filename="../Project.py" line="1340" /> - <source>Database initialized successfully.</source> - <translation>База данных успешно инициализирована.</translation> - </message> - <message> - <location filename="../Project.py" line="1367" /> + <location filename="../Project.py" line="1448" /> <source>Enter the URL to be matched:</source> <translation>Введите URL для сопоставления:</translation> </message> <message> - <location filename="../Project.py" line="1506" /> + <location filename="../Project.py" line="1593" /> <source>Extract messages</source> <translation>Извлечь сообщения</translation> </message> <message> - <location filename="../Project.py" line="1525" /> + <location filename="../Project.py" line="1612" /> <source>No setup.cfg found or no "extract_messages" section found in setup.cfg.</source> <translation>Не найден файл setup.cfg или не найдена "extract_messages" секция в setup.cfg.</translation> </message> <message> - <location filename="../Project.py" line="1532" /> + <location filename="../Project.py" line="1619" /> <source>No "output_file" option found in setup.cfg.</source> <translation>Опция "output_file" не найдена в setup.cfg.</translation> </message> <message> - <location filename="../Project.py" line="1546" /> + <location filename="../Project.py" line="1633" /> <source> Messages extracted successfully.</source> <translation> Сообщения успешно извлечены.</translation> </message> <message> - <location filename="../Project.py" line="1559" /> + <location filename="../Project.py" line="1646" /> <source>Initializing message catalog for '{0}'</source> <translation>Инициализация каталога сообщений для '{0}'</translation> </message> <message> - <location filename="../Project.py" line="1580" /> + <location filename="../Project.py" line="1667" /> <source> Message catalog initialized successfully.</source> <translation> Каталог сообщений успешно инициализирован.</translation> </message> <message> - <location filename="../Project.py" line="1634" /> - <location filename="../Project.py" line="1597" /> + <location filename="../Project.py" line="1721" /> + <location filename="../Project.py" line="1684" /> <source>Compiling message catalogs</source> <translation>Компиляция каталогов сообщений</translation> </message> <message> - <location filename="../Project.py" line="1668" /> - <location filename="../Project.py" line="1615" /> + <location filename="../Project.py" line="1755" /> + <location filename="../Project.py" line="1702" /> <source> Message catalogs compiled successfully.</source> <translation> Каталоги сообщений успешно компилированы.</translation> </message> <message> - <location filename="../Project.py" line="1746" /> - <location filename="../Project.py" line="1663" /> + <location filename="../Project.py" line="1833" /> + <location filename="../Project.py" line="1750" /> <source>No locales detected. Aborting...</source> <translation>Локали не найдены. Прерывание выполнения...</translation> </message> <message> - <location filename="../Project.py" line="1717" /> - <location filename="../Project.py" line="1687" /> + <location filename="../Project.py" line="1804" /> + <location filename="../Project.py" line="1774" /> <source>Updating message catalogs</source> <translation>Обновление каталогов сообщений</translation> </message> <message> - <location filename="../Project.py" line="1751" /> - <location filename="../Project.py" line="1705" /> + <location filename="../Project.py" line="1838" /> + <location filename="../Project.py" line="1792" /> <source> Message catalogs updated successfully.</source> <translation> Каталоги сообщений успешно обновлены.</translation> </message> <message> - <location filename="../Project.py" line="1774" /> + <location filename="../Project.py" line="1861" /> <source>The translations editor process ({0}) could not be started.</source> <translation>Невозможен запуск редактора переводов ({0}).</translation> </message> + <message> + <location filename="../Project.py" line="1936" /> + <source>Database initialized successfully.</source> + <translation>База данных успешно инициализирована.</translation> + </message> + <message> + <location filename="../Project.py" line="1953" /> + <source>Enter a short message for the migration:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1964" /> + <source> +Migration created successfully.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="1995" /> + <source> +Database upgraded successfully.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="2022" /> + <source> +Database downgraded successfully.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Project.py" line="2047" /> + <source>Migrations History</source> + <translation type="unfinished" /> + </message> + <message> + <source>Run Server with Logging</source> + <translation type="vanished">Сервер разработки с ведением журнала</translation> + </message> + <message> + <source>Run Server with &Logging</source> + <translation type="vanished">Сервер разработки с ведением &журнала</translation> + </message> + <message> + <source>Starts the Pyramid Web server with logging</source> + <translation type="vanished">Запуск Pyramid Web сервера разработки с ведением журнала</translation> + </message> + <message> + <source><b>Run Server with Logging</b><p>Starts the Pyramid Web server with logging using "pserve --log-file=server.log --reload development.ini".</p></source> + <translation type="vanished"><b>Сервер с ведением журнала</b><p>Запуск Pyramid Web сервера разработки с ведением журнала посредством команды "pserve --log-file=server.log --reload development.ini".</p></translation> + </message> + <message> + <source>Setup Development Environment</source> + <translation type="vanished">Настройка среды разработки</translation> + </message> + <message> + <source>Setup &Development Environment</source> + <translation type="vanished">Настройка среды &разработки</translation> + </message> + <message> + <source>Setup the Pyramid project in development mode</source> + <translation type="vanished">Настройка Pyramid проекта в режиме разработки</translation> + </message> + <message> + <source><b>Setup Development Environment</b><p>Setup the Pyramid project in development mode using "python setup.py develop".</p></source> + <translation type="vanished"><b>Настройка среды разработки</b><p>Настройка Pyramid проекта в режиме разработки посредством "python setup.py develop".</p></translation> + </message> + <message> + <source>Pyramid development environment setup successfully.</source> + <translation type="vanished">Среда разработки Pyramid успешно настроена.</translation> + </message> </context> <context> <name>ProjectPyramidPlugin</name> @@ -682,12 +924,12 @@ <context> <name>PyramidDialog</name> <message> - <location filename="../PyramidDialog.py" line="198" /> + <location filename="../PyramidDialog.py" line="208" /> <source>Process Generation Error</source> <translation>Ошибка при запуске процесса</translation> </message> <message> - <location filename="../PyramidDialog.py" line="199" /> + <location filename="../PyramidDialog.py" line="209" /> <source>The process {0} could not be started. Ensure, that it is in the search path.</source> <translation>Процесс {0} не может быть запущен. Убедитесь, что к нему указан путь доступа.</translation> </message> @@ -933,12 +1175,12 @@ <translation>Получение маршрутов...</translation> </message> <message> - <location filename="../PyramidRoutesDialog.py" line="190" /> + <location filename="../PyramidRoutesDialog.py" line="193" /> <source>Process Generation Error</source> <translation>Ошибка при запуске процесса</translation> </message> <message> - <location filename="../PyramidRoutesDialog.py" line="191" /> + <location filename="../PyramidRoutesDialog.py" line="194" /> <source>The process {0} could not be started. Ensure, that it is in the search path.</source> <translation>Процесс {0} не может быть запущен. Убедитесь, что к нему указан путь доступа.</translation> </message>