Tue, 18 Mar 2025 18:20:04 +0100
Regenerated the source code documentation.
2969
0e1af1313b8b
Regenerated source docu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
1 | #!/usr/bin/env python3 |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | # -*- coding: utf-8 -*- |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
3 | |
11090
f5f5f5803935
Updated copyright for 2025.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10439
diff
changeset
|
4 | # Copyright (c) 2009 - 2025 Detlev Offenbach <detlev@die-offenbachs.de> |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | # |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | """ |
7960
e8fc383322f7
Harmonized some user visible strings and changed the term 'eric6' to the more generic 'eric'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7923
diff
changeset
|
8 | Script for eric to compile all .ui files to Python source. |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10 | |
9209
b99e7fd55fd3
Reorganized the project structure to use the source layout in order to support up-to-date build systems with "pyproject.toml".
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8881
diff
changeset
|
11 | import os |
4435
9f6555d3c3c0
Fixed some code style issues and removed code no longer needed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
12 | |
9986 | 13 | from functools import partial |
14 | ||
15 | from PyQt6.uic import compileUi | |
4435
9f6555d3c3c0
Fixed some code style issues and removed code no longer needed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
16 | |
9f6555d3c3c0
Fixed some code style issues and removed code no longer needed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
17 | |
9f6555d3c3c0
Fixed some code style issues and removed code no longer needed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
18 | def __pyName(py_dir, py_file): |
9f6555d3c3c0
Fixed some code style issues and removed code no longer needed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
19 | """ |
9f6555d3c3c0
Fixed some code style issues and removed code no longer needed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
20 | Local function to create the Python source file name for the compiled |
9f6555d3c3c0
Fixed some code style issues and removed code no longer needed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
21 | .ui file. |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
22 | |
10420
5ac83a87954d
Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10331
diff
changeset
|
23 | @param py_dir suggested name of the directory |
5ac83a87954d
Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10331
diff
changeset
|
24 | @type str |
5ac83a87954d
Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10331
diff
changeset
|
25 | @param py_file suggested name for the compile source file |
5ac83a87954d
Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10331
diff
changeset
|
26 | @type str |
5ac83a87954d
Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10331
diff
changeset
|
27 | @return tuple of directory name (string) and source file name |
5ac83a87954d
Converted some source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10331
diff
changeset
|
28 | @rtype str |
4435
9f6555d3c3c0
Fixed some code style issues and removed code no longer needed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
29 | """ |
9f6555d3c3c0
Fixed some code style issues and removed code no longer needed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
30 | return py_dir, "Ui_{0}".format(py_file) |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
791
diff
changeset
|
32 | |
9986 | 33 | def __compileOneUi(ui_path, mapFunc=None, execute=False, indent=4): |
34 | """ | |
35 | Function to compile a single form file to Python code. | |
36 | ||
37 | @param ui_path path of the Qt form file | |
38 | @type str | |
39 | @param mapFunc function to change directory and/or name of the resulting Python file | |
40 | (defaults to None) | |
41 | @type func (optional) | |
42 | @param execute flag indicating to generate code to execute the form in standalone | |
43 | mode (defaults to False) | |
44 | @type bool (optional) | |
45 | @param indent indentation width using spaces (defaults to 4) | |
46 | @type int (optional) | |
47 | """ | |
48 | py_dir, py_file = os.path.split(ui_path[:-3] + ".py") | |
49 | ||
50 | # Allow the caller to change the name of the .py file or generate | |
51 | # it in a different directory. | |
52 | if mapFunc is not None: | |
53 | py_dir, py_file = mapFunc(py_dir, py_file) | |
54 | ||
55 | # Make sure the destination directory exists. | |
56 | os.makedirs(py_dir, exist_ok=True) | |
57 | ||
58 | py_path = os.path.join(py_dir, py_file) | |
59 | ||
60 | with open(py_path, "w", encoding="utf-8") as py_file: | |
61 | compileUi(ui_path, py_file, execute=execute, indent=indent) | |
62 | ||
63 | ||
64 | def compileUiDir(root, recurse=False, mapFunc=None, workers=1, execute=False, indent=4): | |
65 | """ | |
66 | Function to compile all Qt form files of a directory or directory tree | |
67 | to Python code. | |
68 | ||
69 | @param root directory to scan for Qt form files (i.e. files ending with '.ui' | |
70 | @type str | |
71 | @param recurse flag indicating to recurse into sub-directories (defaults to False) | |
72 | @type bool (optional) | |
73 | @param mapFunc function to change directory and/or name of the resulting Python file | |
74 | (defaults to None) | |
75 | @type func (optional) | |
76 | @param workers number of worker processes to be used to compile (defaults to 1) | |
77 | @type int (optional) | |
78 | @param execute flag indicating to generate code to execute the form in standalone | |
79 | mode (defaults to False) | |
80 | @type bool (optional) | |
81 | @param indent indentation width using spaces (defaults to 4) | |
82 | @type int (optional) | |
83 | """ | |
84 | if recurse: | |
85 | ui_files = [] | |
86 | for rootDir, _, files in os.walk(root): | |
87 | ui_files.extend( | |
88 | os.path.join(rootDir, ui) for ui in files if ui.endswith(".ui") | |
89 | ) | |
90 | else: | |
91 | ui_files = [ | |
92 | os.path.join(root, ui) | |
93 | for ui in os.listdir(root) | |
94 | if os.path.isfile(os.path.join(root, ui) and ui.endswith(".ui")) | |
95 | ] | |
96 | ||
97 | ProcessPoolExecutor = None | |
98 | if workers != 1: | |
99 | try: | |
11148
15e30f0c76a8
Adjusted the code to the modified issue codes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
100 | from concurrent.futures import ProcessPoolExecutor # noqa: I-101, I-103 |
9986 | 101 | except NotImplementedError: |
102 | workers = 1 | |
103 | ||
104 | if workers != 1 and ProcessPoolExecutor is not None: | |
105 | # If workers == 0, let ProcessPoolExecutor determine worker count. | |
106 | workers = workers or None | |
107 | with ProcessPoolExecutor(max_workers=workers) as executor: | |
108 | executor.map( | |
109 | partial( | |
110 | __compileOneUi, mapFunc=mapFunc, execute=execute, indent=indent | |
111 | ), | |
112 | ui_files, | |
113 | ) | |
114 | else: | |
115 | for ui_file in ui_files: | |
116 | __compileOneUi(ui_file, mapFunc=mapFunc, execute=execute, indent=indent) | |
117 | ||
118 | ||
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119 | def compileUiFiles(): |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
121 | Compile the .ui files to Python sources. |
4435
9f6555d3c3c0
Fixed some code style issues and removed code no longer needed.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4021
diff
changeset
|
122 | """ |
9209
b99e7fd55fd3
Reorganized the project structure to use the source layout in order to support up-to-date build systems with "pyproject.toml".
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8881
diff
changeset
|
123 | if os.path.exists("src"): |
b99e7fd55fd3
Reorganized the project structure to use the source layout in order to support up-to-date build systems with "pyproject.toml".
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8881
diff
changeset
|
124 | # eric7 with 'src' layout |
9986 | 125 | compileUiDir( |
126 | os.path.join("src", "eric7"), recurse=True, mapFunc=__pyName, workers=0 | |
127 | ) | |
9209
b99e7fd55fd3
Reorganized the project structure to use the source layout in order to support up-to-date build systems with "pyproject.toml".
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8881
diff
changeset
|
128 | elif os.path.exists("eric7"): |
b99e7fd55fd3
Reorganized the project structure to use the source layout in order to support up-to-date build systems with "pyproject.toml".
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8881
diff
changeset
|
129 | # old layout or invoked from within 'src' |
9986 | 130 | compileUiDir("eric7", recurse=True, mapFunc=__pyName, workers=0) |
9209
b99e7fd55fd3
Reorganized the project structure to use the source layout in order to support up-to-date build systems with "pyproject.toml".
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8881
diff
changeset
|
131 | else: |
b99e7fd55fd3
Reorganized the project structure to use the source layout in order to support up-to-date build systems with "pyproject.toml".
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8881
diff
changeset
|
132 | print("No valid 'eric7' source layout could be found. Aborting...") |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
133 | |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
791
diff
changeset
|
134 | |
10065
de4ae767b0e3
Corrected and checked some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9986
diff
changeset
|
135 | def main(): |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
136 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
137 | The main function of the script. |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
138 | """ |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
139 | # Compile .ui files |
12
1d8dd9706f46
First commit after changing to Python 3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
0
diff
changeset
|
140 | print("Compiling user interface files...") |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
141 | compileUiFiles() |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
142 | |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
143 | |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
144 | if __name__ == "__main__": |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
145 | try: |
10065
de4ae767b0e3
Corrected and checked some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9986
diff
changeset
|
146 | main() |
0
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
147 | except SystemExit: |
de9c2efb9d02
Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
148 | raise |
4563
881340f4bd0c
Fixed a few coding style issue related to 'blind except:' statements.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4435
diff
changeset
|
149 | except Exception: |
3032
927a2f8b3669
Fixed various coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3021
diff
changeset
|
150 | print( |
927a2f8b3669
Fixed various coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3021
diff
changeset
|
151 | "\nAn internal error occured. Please report all the output of the" |
927a2f8b3669
Fixed various coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
3021
diff
changeset
|
152 | " program, \nincluding the following traceback, to" |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
153 | " eric-bugs@eric-ide.python-projects.org.\n" |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
154 | ) |
428
58405c24aa09
Did some more string format conversions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
15
diff
changeset
|
155 | raise |
4566
a2e8f3c420ec
Dealt with the M801 code style checker messages.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4563
diff
changeset
|
156 | |
a2e8f3c420ec
Dealt with the M801 code style checker messages.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4563
diff
changeset
|
157 | # |
11148
15e30f0c76a8
Adjusted the code to the modified issue codes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
11090
diff
changeset
|
158 | # eflag: noqa = M-801 |