CxFreeze/CxfreezeExecDialog.py

Sun, 11 Aug 2013 22:17:02 +0200

author
T.Rzepka <Tobias.Rzepka@gmail.com>
date
Sun, 11 Aug 2013 22:17:02 +0200
changeset 56
c8a47a8536b0
parent 47
986f27beaad4
child 60
8bf1407ebc46
permissions
-rw-r--r--

filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process

1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
36
aa766140aff8 Updated copyright for 2013.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 31
diff changeset
3 # Copyright (c) 2010 - 2013 Detlev Offenbach <detlev@die-offenbachs.de>
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a dialog to show the output of the packager process.
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 39
diff changeset
10 from __future__ import unicode_literals # __IGNORE_WARNING__
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 39
diff changeset
11 try:
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 39
diff changeset
12 str = unicode # __IGNORE_WARNING__
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 39
diff changeset
13 except (NameError):
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 39
diff changeset
14 pass
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 39
diff changeset
15
56
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
16 import shutil
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
17 import errno
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
18 import fnmatch
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 import os.path
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
56
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
21 from PyQt4.QtCore import pyqtSlot, QProcess, QTimer, QThread, pyqtSignal
39
27dcfe29985b Changed usage of QMessageBox and QFileDialog to the eric5 equivalents.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
22 from PyQt4.QtGui import QDialog, QDialogButtonBox, QAbstractButton
27dcfe29985b Changed usage of QMessageBox and QFileDialog to the eric5 equivalents.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
23
27dcfe29985b Changed usage of QMessageBox and QFileDialog to the eric5 equivalents.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
24 from E5Gui import E5MessageBox
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 from .Ui_CxfreezeExecDialog import Ui_CxfreezeExecDialog
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 import Preferences
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 class CxfreezeExecDialog(QDialog, Ui_CxfreezeExecDialog):
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 """
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 Module implementing a dialog to show the output of the cxfreeze process.
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 This class starts a QProcess and displays a dialog that
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 shows the output of the packager command process.
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 """
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 39
diff changeset
37 def __init__(self, cmdname, parent=None):
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 Constructor
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @param cmdname name of the packager (string)
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 @param parent parent widget of this dialog (QWidget)
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 """
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 QDialog.__init__(self, parent)
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 self.setupUi(self)
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False)
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True)
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 self.process = None
56
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
51 self.copyProcess = None
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 self.cmdname = cmdname
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53
56
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
54 def start(self, args, parms, ppath, mainscript):
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 """
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 Public slot to start the packager command.
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 @param args commandline arguments for packager program (list of strings)
56
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
59 @param parms parameters got from the config dialog (dict)
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
60 @param ppath project path (string)
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 @param script main script name to be processed by by the packager (string)
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 @return flag indicating the successful start of the process
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 """
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 self.errorGroup.hide()
56
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
65 script = os.path.join(ppath, mainscript)
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 dname = os.path.dirname(script)
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 script = os.path.basename(script)
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68
56
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
69 self.ppath = ppath
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
70 self.additionalFiles = parms.get('additionalFiles', [])
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
71 self.targetDirectory = os.path.join(parms.get('targetDirectory', 'dist'))
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
72
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 self.contents.clear()
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 self.errors.clear()
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 args.append(script)
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 self.process = QProcess()
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 self.process.setWorkingDirectory(dname)
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80
5
de1e980553fa Changed signal code to new style API.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
81 self.process.readyReadStandardOutput.connect(self.__readStdout)
de1e980553fa Changed signal code to new style API.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
82 self.process.readyReadStandardError.connect(self.__readStderr)
56
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
83 self.process.finished.connect(self.__finishedFreeze)
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 self.setWindowTitle(self.trUtf8('{0} - {1}').format(self.cmdname, script))
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 39
diff changeset
86 self.contents.insertPlainText(' '.join(args) + '\n\n')
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 self.contents.ensureCursorVisible()
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 39
diff changeset
89 program = args.pop(0)
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 self.process.start(program, args)
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 procStarted = self.process.waitForStarted()
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 if not procStarted:
39
27dcfe29985b Changed usage of QMessageBox and QFileDialog to the eric5 equivalents.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
93 E5MessageBox.critical(None,
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 self.trUtf8('Process Generation Error'),
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 self.trUtf8(
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 'The process {0} could not be started. '
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 'Ensure, that it is in the search path.'
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 ).format(program))
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 return procStarted
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 @pyqtSlot(QAbstractButton)
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 def on_buttonBox_clicked(self, button):
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 """
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 Private slot called by a button of the button box clicked.
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 @param button button that was clicked (QAbstractButton)
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 """
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 if button == self.buttonBox.button(QDialogButtonBox.Close):
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 self.accept()
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 elif button == self.buttonBox.button(QDialogButtonBox.Cancel):
56
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
111 self.additionalFiles = [] # Skip copying additional files
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 self.__finish()
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 def __finish(self):
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 """
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 Private slot called when the process finished.
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 It is called when the process finished or
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 the user pressed the cancel button.
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 """
56
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
121 if self.process is not None:
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
122 self.process.disconnect(self.__finishedFreeze)
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 self.process.terminate()
5
de1e980553fa Changed signal code to new style API.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
124 QTimer.singleShot(2000, self.process.kill)
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 self.process.waitForFinished(3000)
56
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
126 self.process = None
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127
56
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
128 if self.copyProcess is not None:
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
129 self.copyProcess.terminate()
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
130 self.copyProcess = None
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
131
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
132 self.contents.insertPlainText(
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
133 self.trUtf8('\n{0} aborted.\n').format(self.cmdname))
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
134
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
135 self.__enableButtons()
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
136
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
137 def __finishedFreeze(self):
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
138 """
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
139 Private slot called when the process finished.
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
140
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
141 It is called when the process finished or
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
142 the user pressed the cancel button.
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
143 """
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
144 self.process = None
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
145
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
146 self.contents.insertPlainText(
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
147 self.trUtf8('\n{0} finished.\n').format(self.cmdname))
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
148
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
149 self.copyProcess = copyAdditionalFiles(self)
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
150 self.copyProcess.insertPlainText.connect(self.contents.insertPlainText)
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
151 self.copyProcess.finished.connect(self.__enableButtons)
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
152 self.copyProcess.start()
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
153
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
154 def __enableButtons(self):
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
155 """
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
156 Private slot called when all processes finished.
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
157
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
158 It is called when the process finished or
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
159 the user pressed the cancel button.
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
160 """
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
161 self.copyProcess = None
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True)
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False)
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 self.buttonBox.button(QDialogButtonBox.Close).setDefault(True)
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 self.contents.ensureCursorVisible()
56
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
166
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 def __readStdout(self):
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 """
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 39
diff changeset
169 Private slot to handle the readyReadStandardOutput signal.
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 It reads the output of the process, formats it and inserts it into
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 the contents pane.
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 """
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 self.process.setReadChannel(QProcess.StandardOutput)
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 while self.process.canReadLine():
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 39
diff changeset
177 s = str(self.process.readAllStandardOutput(),
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 39
diff changeset
178 Preferences.getSystem("IOEncoding"),
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 'replace')
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 self.contents.insertPlainText(s)
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 self.contents.ensureCursorVisible()
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 def __readStderr(self):
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 """
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 39
diff changeset
185 Private slot to handle the readyReadStandardError signal.
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 It reads the error output of the process and inserts it into the
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 error pane.
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 """
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 self.process.setReadChannel(QProcess.StandardError)
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 while self.process.canReadLine():
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 self.errorGroup.show()
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 39
diff changeset
194 s = str(self.process.readAllStandardError(),
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 39
diff changeset
195 Preferences.getSystem("IOEncoding"),
1
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 'replace')
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 self.errors.insertPlainText(s)
0b6f3f5600da Ported the cx_freeze plug-in to eric5.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 self.errors.ensureCursorVisible()
56
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
199
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
200
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
201 class copyAdditionalFiles(QThread):
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
202 """
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
203 Thread to copy the distribution dependend files.
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
204
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
205 @signal insertPlainText(text) emitted to inform user about the copy progress
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
206 """
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
207 insertPlainText = pyqtSignal(str)
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
208
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
209 def __init__(self, main):
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
210 """
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
211 Constructor, which stores the needed variables.
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
212
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
213 @param main self-object of the caller
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
214 """
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
215 super(copyAdditionalFiles, self).__init__()
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
216
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
217 self.ppath = main.ppath
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
218 self.additionalFiles = main.additionalFiles
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
219 self.targetDirectory = main.targetDirectory
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
220
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
221 def __copytree(self, src, dst):
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
222 """
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
223 Copies a file or folder. Wildcards allowed. Existing files are overwitten.
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
224
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
225 @param src source file or folder to copy. Wildcards allowed. (str)
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
226 @param dst destination (str)
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
227 """
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
228 def src2dst(srcname, base, dst):
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
229 """
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
230 Combines the relativ path of the source (srcname) with the
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
231 destination folder.
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
232
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
233 @param srcname actual file or folder to copy
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
234 @param base basename of the source folder
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
235 @param dst basename of the destination folder
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
236 @return destination path
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
237 """
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
238 delta = srcname.split(base)[1]
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
239 return os.path.join(dst, delta[1:])
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
240
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
241 base, fileOrFolderName = os.path.split(src)
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
242 initDone = False
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
243 for root, dirs, files in os.walk(base):
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
244 copied = False
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
245 # remove all none matching directorynames, create all others
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
246 for dir in dirs[:]:
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
247 pathname = os.path.join(root, dir)
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
248 if initDone or fnmatch.fnmatch(pathname, src):
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
249 newDir = src2dst(pathname, base, dst)
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
250 # avoid infinit loop
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
251 if fnmatch.fnmatch(newDir, src):
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
252 dirs.remove(dir)
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
253 continue
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
254 try:
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
255 copied = True
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
256 os.makedirs(newDir)
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
257 except OSError as err:
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
258 if err.errno != errno.EEXIST: # it's ok if directory already exists
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
259 raise err
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
260 else:
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
261 dirs.remove(dir)
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
262
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
263 for file in files:
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
264 fn = os.path.join(root, file)
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
265 if initDone or fnmatch.fnmatch(fn, src):
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
266 newFile = src2dst(fn, base, dst)
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
267 # copy files, give errors to caller
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
268 shutil.copy2(fn, newFile)
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
269 copied = True
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
270
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
271 # check if file was found and copied
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
272 if len(files) and not copied:
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
273 raise IOError(errno.ENOENT,
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
274 self.trUtf8("No such file or directory: '{0}'").format(src))
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
275
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
276 initDone = True
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
277
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
278 def run(self):
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
279 """
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
280 QThread entry point to copy the selected additional files and folders.
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
281 """
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
282 self.insertPlainText.emit('----\n')
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
283 os.chdir(self.ppath)
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
284 for fn in self.additionalFiles:
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
285 self.insertPlainText.emit(
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
286 self.trUtf8('\nCopying {0}: ').format(fn))
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
287
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
288 # on linux normpath doesn't replace backslashes to slashes.
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
289 fn = fn.replace('\\', '/')
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
290 fn = os.path.abspath(os.path.normpath(fn))
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
291 dst = os.path.join(self.ppath, self.targetDirectory)
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
292 if fn.startswith(os.path.normpath(self.ppath)):
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
293 dirname = fn.split(self.ppath+os.sep)[1]
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
294 dst = os.path.join(dst, os.path.dirname(dirname))
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
295 try:
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
296 os.makedirs(dst)
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
297 except OSError as err:
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
298 if err.errno != errno.EEXIST: # it's ok if directory already exists
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
299 raise err
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
300
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
301 try:
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
302 self.__copytree(fn, dst)
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
303 self.insertPlainText.emit(self.trUtf8('ok'))
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
304 except IOError as err:
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
305 self.insertPlainText.emit(self.trUtf8('failed: {0}').format(err.strerror))

eric ide

mercurial