PyDMConverter 0.0.0__tar.gz → 1.0.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/PKG-INFO +1 -1
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/PyDMConverter.egg-info/PKG-INFO +1 -1
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/PyDMConverter.egg-info/SOURCES.txt +6 -1
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/PyDMConverter.egg-info/top_level.txt +1 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/arguments.md +20 -0
- pydmconverter-1.0.3/docs/user_guide.md +78 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pydmconverter/__main__.py +26 -12
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pydmconverter/edm/converter.py +10 -4
- pydmconverter-1.0.3/pydmconverter/edm/converter_helpers.py +1428 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pydmconverter/edm/menumux.py +4 -1
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pydmconverter/edm/parser.py +16 -14
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pydmconverter/edm/parser_helpers.py +28 -8
- pydmconverter-1.0.3/pydmconverter/exceptions.py +17 -0
- pydmconverter-1.0.3/pydmconverter/launch_gui.sh +32 -0
- pydmconverter-1.0.3/pydmconverter/sites/__init__.py +12 -0
- pydmconverter-1.0.3/pydmconverter/sites/slac.py +2 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pydmconverter/widgets.py +119 -34
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pydmconverter/widgets_helpers.py +75 -33
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pyproject.toml +6 -1
- pydmconverter-1.0.3/tests/edm/test_converter.py +347 -0
- pydmconverter-1.0.3/tests/edm/test_converter_helpers.py +85 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/tests/edm/test_parser.py +19 -4
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/tests/edm/test_parser_helpers.py +24 -24
- pydmconverter-1.0.3/tests/test_main.py +283 -0
- pydmconverter-1.0.3/tests/test_sites.py +16 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/tests/test_widgets.py +83 -8
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/tests/test_widgets_helpers.py +12 -7
- pydmconverter-0.0.0/docs/user_guide.md +0 -43
- pydmconverter-0.0.0/launch_gui.sh +0 -26
- pydmconverter-0.0.0/pydmconverter/edm/converter_helpers.py +0 -895
- pydmconverter-0.0.0/tests/edm/test_converter.py +0 -0
- pydmconverter-0.0.0/tests/edm/test_converter_helpers.py +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/.github/workflows/gh-pages.yml +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/.github/workflows/lint.yml +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/.github/workflows/pypi_release.yml +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/.github/workflows/tests.yml +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/.gitignore +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/.pre-commit-config.yaml +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/LICENSE +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/PyDMConverter.egg-info/dependency_links.txt +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/PyDMConverter.egg-info/entry_points.txt +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/PyDMConverter.egg-info/requires.txt +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/README.md +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/resources/file_minus.png +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/resources/file_plus.png +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/resources/file_x.png +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/resources/folder_plus.png +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/resources/folder_search.png +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/resources/play_circle_outline.png +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/resources/settings.png +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/src/model/__init__.py +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/src/model/app_model.py +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/src/model/options_model.py +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/src/view/__init__.py +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/src/view/file_select_widget.py +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/src/view/main_window.py +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/src/view/main_window.ui +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/src/view/options_window.py +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/src/view/output_select_dialog.py +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/images/pydmconverter.png +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/index.md +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/reference/custom_types.md +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/reference/edm/converter.md +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/reference/edm/converter_helpers.md +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/reference/edm/menumux.md +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/reference/edm/parser.md +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/reference/edm/parser_helpers.md +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/reference/index.md +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/reference/pydm-converter-tool.md +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/reference/widgets.md +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/reference/widgets_helpers.md +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/environment.yml +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/examples/TEM_mapping.edl +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/examples/all_bsy0_main.edl +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/examples/all_bsy0_main_with_groups.edl +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/examples/prosilica.edl +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/mkdocs.yml +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pydmconverter/__init__.py +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pydmconverter/custom_types.py +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pydmconverter/edm/__init__.py +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/setup.cfg +0 -0
- {pydmconverter-0.0.0 → pydmconverter-1.0.3}/tests/__init__.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PyDMConverter
|
|
3
|
-
Version:
|
|
3
|
+
Version: 1.0.3
|
|
4
4
|
Summary: converter to generate pydm .ui files from other display managers.
|
|
5
5
|
Author: Devan Agrawal, Zach Domke, Ryan McClanahan, Alexander Ng, Logan Somoza, Alexandria Ikuma
|
|
6
6
|
Author-email: Yekta Yazar <yazar@slac.stanford.edu>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PyDMConverter
|
|
3
|
-
Version:
|
|
3
|
+
Version: 1.0.3
|
|
4
4
|
Summary: converter to generate pydm .ui files from other display managers.
|
|
5
5
|
Author: Devan Agrawal, Zach Domke, Ryan McClanahan, Alexander Ng, Logan Somoza, Alexandria Ikuma
|
|
6
6
|
Author-email: Yekta Yazar <yazar@slac.stanford.edu>
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
LICENSE
|
|
4
4
|
README.md
|
|
5
5
|
environment.yml
|
|
6
|
-
launch_gui.sh
|
|
7
6
|
mkdocs.yml
|
|
8
7
|
pyproject.toml
|
|
9
8
|
.github/ISSUE_TEMPLATE/bug-report.yml
|
|
@@ -55,6 +54,8 @@ examples/prosilica.edl
|
|
|
55
54
|
pydmconverter/__init__.py
|
|
56
55
|
pydmconverter/__main__.py
|
|
57
56
|
pydmconverter/custom_types.py
|
|
57
|
+
pydmconverter/exceptions.py
|
|
58
|
+
pydmconverter/launch_gui.sh
|
|
58
59
|
pydmconverter/widgets.py
|
|
59
60
|
pydmconverter/widgets_helpers.py
|
|
60
61
|
pydmconverter/edm/__init__.py
|
|
@@ -63,7 +64,11 @@ pydmconverter/edm/converter_helpers.py
|
|
|
63
64
|
pydmconverter/edm/menumux.py
|
|
64
65
|
pydmconverter/edm/parser.py
|
|
65
66
|
pydmconverter/edm/parser_helpers.py
|
|
67
|
+
pydmconverter/sites/__init__.py
|
|
68
|
+
pydmconverter/sites/slac.py
|
|
66
69
|
tests/__init__.py
|
|
70
|
+
tests/test_main.py
|
|
71
|
+
tests/test_sites.py
|
|
67
72
|
tests/test_widgets.py
|
|
68
73
|
tests/test_widgets_helpers.py
|
|
69
74
|
tests/edm/test_converter.py
|
|
@@ -15,6 +15,26 @@ This argument allows users to override the output file if it already exists. Mos
|
|
|
15
15
|
|
|
16
16
|
This argument adds scroll bars to converted screens. It will ad a horizontal and vertical scroll bar. If this argument is not included, the screen will not contain a scroll bar.
|
|
17
17
|
|
|
18
|
+
## Site
|
|
19
|
+
|
|
20
|
+
`--site <name>`
|
|
21
|
+
|
|
22
|
+
This argument applies site-specific conversion rules during the conversion process. Some facilities have EDM widgets or patterns that have no equivalent in PyDM and should be skipped or handled differently. The `--site` flag lets you opt into these rules without affecting the default conversion behavior.
|
|
23
|
+
|
|
24
|
+
**Available sites:**
|
|
25
|
+
|
|
26
|
+
| Site | Rules Applied |
|
|
27
|
+
|--------|---------------|
|
|
28
|
+
| `slac` | Skips `activeExitButtonClass` (exit buttons present on every SLAC EDM screen that have no PyDM equivalent) |
|
|
29
|
+
|
|
30
|
+
**Usage:**
|
|
31
|
+
``` bash
|
|
32
|
+
pydmconverter /path/to/file.edl output.ui --site slac
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Adding a new site:**
|
|
36
|
+
To add conversion rules for a new site, create a new module in `pydmconverter/sites/` (e.g. `mysite.py`) that defines a `SKIP_WIDGETS` set, then register it in `pydmconverter/sites/__init__.py`.
|
|
37
|
+
|
|
18
38
|
## Help
|
|
19
39
|
|
|
20
40
|
`-h` or `--help`
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#Installation
|
|
2
|
+
|
|
3
|
+
##Prerequisites
|
|
4
|
+
|
|
5
|
+
## Installation Methods
|
|
6
|
+
|
|
7
|
+
### Option 1: Install from PyPI (Recommended)
|
|
8
|
+
The easiest way to install the converter is directly from PyPI:
|
|
9
|
+
``` bash
|
|
10
|
+
pip install PyDMConverter
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
### Option 2: Install from Source
|
|
14
|
+
If you need the latest development version or want to contribute:
|
|
15
|
+
|
|
16
|
+
#### Clone the Repository
|
|
17
|
+
``` bash
|
|
18
|
+
git clone https://github.com/slaclab/pydm-converter-tool.git
|
|
19
|
+
cd pydm-converter-tool
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
#### Set up Environment
|
|
23
|
+
Using `conda`:
|
|
24
|
+
``` bash
|
|
25
|
+
conda env create -f environment.yml
|
|
26
|
+
conda activate pydm
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Or using pip:
|
|
30
|
+
``` bash
|
|
31
|
+
pip install -e .
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
# How to Run the Converter
|
|
35
|
+
|
|
36
|
+
The converter can be run in two ways: via the command line interface (CLI) or through the graphical user interface (GUI).
|
|
37
|
+
|
|
38
|
+
## Launch the GUI
|
|
39
|
+
|
|
40
|
+
To launch the graphical interface:
|
|
41
|
+
``` bash
|
|
42
|
+
pydmconverter
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
This will open the PyDM Converter GUI where you can:
|
|
46
|
+
- Select files or folders to convert
|
|
47
|
+
|
|
48
|
+
## Command Line Interface
|
|
49
|
+
|
|
50
|
+
The CLI provides two main ways to run the converter: on individual files and entire folders. Users can include additional arguments described on the [Arguments] page.
|
|
51
|
+
|
|
52
|
+
[Arguments]: arguments.md
|
|
53
|
+
|
|
54
|
+
## For individual files
|
|
55
|
+
When using the converter on a single file, the command line is:
|
|
56
|
+
``` bash
|
|
57
|
+
pydmconverter '/path/old_file.edl' 'new_file_name.ui' `
|
|
58
|
+
```
|
|
59
|
+
## For an entire folder
|
|
60
|
+
When converting an entire folder, the command line is:
|
|
61
|
+
``` bash
|
|
62
|
+
pydmconverter '/path_to_old_directory' '/new_file_location' 'old_file_type'
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Examples
|
|
66
|
+
To convert EDM file called "file.edl" to PYDM file called "file.ui" :
|
|
67
|
+
``` bash
|
|
68
|
+
pydmconverter /afs/slac/g/lcls/edm/file.edl file.ui`
|
|
69
|
+
```
|
|
70
|
+
To convert EDM files in a folder called "edm" to PYDM file in the current folder :
|
|
71
|
+
``` bash
|
|
72
|
+
pydmconverter /afs/slac/g/lcls/edm . .edl
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
To convert with SLAC-specific rules (e.g. skipping exit buttons):
|
|
76
|
+
``` bash
|
|
77
|
+
pydmconverter /afs/slac/g/lcls/edm/file.edl file.ui --site slac
|
|
78
|
+
```
|
|
@@ -7,7 +7,7 @@ from pydmconverter.edm.converter import convert
|
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
import logging
|
|
9
9
|
|
|
10
|
-
logging.basicConfig(level=logging.
|
|
10
|
+
logging.basicConfig(level=logging.WARNING)
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
IMAGE_FILE_SUFFIXES = {".png", ".jpg", ".jpeg", ".gif"}
|
|
@@ -17,11 +17,19 @@ def run_gui() -> None:
|
|
|
17
17
|
"""
|
|
18
18
|
launch the PyDMConverter gui
|
|
19
19
|
"""
|
|
20
|
-
#
|
|
21
|
-
|
|
20
|
+
# Get the directory where this package is installed
|
|
21
|
+
package_dir = Path(__file__).parent
|
|
22
|
+
launch_script = package_dir / "launch_gui.sh"
|
|
23
|
+
|
|
24
|
+
if not launch_script.exists():
|
|
25
|
+
raise FileNotFoundError(
|
|
26
|
+
f"launch_gui.sh not found at {launch_script}. Please ensure the package was installed correctly."
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
subprocess.run(["bash", str(launch_script)], check=True)
|
|
22
30
|
|
|
23
31
|
|
|
24
|
-
def run(input_file, output_file, input_file_type=".edl", override=False, scrollable=False):
|
|
32
|
+
def run(input_file, output_file, input_file_type=".edl", override=False, scrollable=False, site=None):
|
|
25
33
|
input_path: Path = Path(input_file)
|
|
26
34
|
output_path: Path = Path(output_file)
|
|
27
35
|
|
|
@@ -31,7 +39,7 @@ def run(input_file, output_file, input_file_type=".edl", override=False, scrolla
|
|
|
31
39
|
if output_path.is_file() and not override:
|
|
32
40
|
raise FileExistsError(f"Output file '{output_path}' already exists. Use --override or -o to overwrite it.")
|
|
33
41
|
copy_img_files(input_path.parent, output_path.parent)
|
|
34
|
-
convert(str(input_path), str(output_path), scrollable)
|
|
42
|
+
convert(str(input_path), str(output_path), scrollable, site=site)
|
|
35
43
|
else:
|
|
36
44
|
if input_file_type[0] != ".": # prepending . so it will not pick up other file types with same suffix
|
|
37
45
|
input_file_type = "." + input_file_type
|
|
@@ -39,7 +47,7 @@ def run(input_file, output_file, input_file_type=".edl", override=False, scrolla
|
|
|
39
47
|
files_found: int
|
|
40
48
|
files_failed: list[str]
|
|
41
49
|
files_found, files_failed = convert_files_in_folder(
|
|
42
|
-
input_path, output_path, input_file_type, override, scrollable
|
|
50
|
+
input_path, output_path, input_file_type, override, scrollable, site=site
|
|
43
51
|
)
|
|
44
52
|
|
|
45
53
|
if files_found == 0:
|
|
@@ -68,7 +76,8 @@ def run_cli(args: argparse.Namespace) -> None:
|
|
|
68
76
|
input_file_type: str = args.output_type
|
|
69
77
|
override: bool = args.override
|
|
70
78
|
scrollable: bool = args.scrollable
|
|
71
|
-
|
|
79
|
+
site: str = args.site
|
|
80
|
+
run(input_file, output_file, input_file_type, override, scrollable, site=site)
|
|
72
81
|
|
|
73
82
|
|
|
74
83
|
"""
|
|
@@ -90,7 +99,7 @@ def run_cli(args: argparse.Namespace) -> None:
|
|
|
90
99
|
files_found: int
|
|
91
100
|
files_failed: list[str]
|
|
92
101
|
files_found, files_failed = convert_files_in_folder(
|
|
93
|
-
input_path, output_path, input_file_type, override, scrollable
|
|
102
|
+
input_path, output_path, input_file_type, override, scrollable, site=site
|
|
94
103
|
)
|
|
95
104
|
|
|
96
105
|
if files_found == 0:
|
|
@@ -117,7 +126,7 @@ def copy_img_files(input_path: Path, output_path: Path) -> None:
|
|
|
117
126
|
|
|
118
127
|
|
|
119
128
|
def convert_files_in_folder(
|
|
120
|
-
input_path: Path, output_path: Path, input_file_type: str, override: bool, scrollable: bool
|
|
129
|
+
input_path: Path, output_path: Path, input_file_type: str, override: bool, scrollable: bool, site=None
|
|
121
130
|
) -> tuple[int, list[str]]:
|
|
122
131
|
"""Recursively runs convert on files in directory and subdirectories
|
|
123
132
|
|
|
@@ -153,17 +162,16 @@ def convert_files_in_folder(
|
|
|
153
162
|
logging.warning(f"Skipped: {output_file_path} already exists. Use --override or -o to overwrite it.")
|
|
154
163
|
else:
|
|
155
164
|
try:
|
|
156
|
-
convert(file, output_file_path, scrollable)
|
|
165
|
+
convert(file, output_file_path, scrollable, site=site)
|
|
157
166
|
except Exception as e:
|
|
158
167
|
files_failed.append(str(file))
|
|
159
168
|
logging.warning(f"Failed to convert {file}: {e}")
|
|
160
|
-
breakpoint()
|
|
161
169
|
continue
|
|
162
170
|
|
|
163
171
|
subdirectories = [item for item in input_path.iterdir() if item.is_dir()]
|
|
164
172
|
for subdir in subdirectories:
|
|
165
173
|
sub_found, sub_failed = convert_files_in_folder(
|
|
166
|
-
subdir, output_path / subdir.name, input_file_type, override, scrollable
|
|
174
|
+
subdir, output_path / subdir.name, input_file_type, override, scrollable, site=site
|
|
167
175
|
)
|
|
168
176
|
files_found += sub_found
|
|
169
177
|
files_failed += sub_failed
|
|
@@ -219,6 +227,12 @@ def main() -> None:
|
|
|
219
227
|
action="store_true",
|
|
220
228
|
help="create scrollable pydm windows that replicate edm windows (may cause spacing issues for embedded displays)",
|
|
221
229
|
)
|
|
230
|
+
parser.add_argument(
|
|
231
|
+
"--site",
|
|
232
|
+
type=str,
|
|
233
|
+
default=None,
|
|
234
|
+
help="Apply site-specific conversion rules (e.g., slac)",
|
|
235
|
+
)
|
|
222
236
|
args: argparse.Namespace = parser.parse_args()
|
|
223
237
|
|
|
224
238
|
if args.input_file:
|
|
@@ -2,7 +2,7 @@ from pydmconverter.edm.parser import EDMFileParser, EDMObject
|
|
|
2
2
|
import xml.etree.ElementTree as ET
|
|
3
3
|
from pydmconverter.edm.converter_helpers import convert_edm_to_pydm_widgets
|
|
4
4
|
import logging
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
from pydmconverter.widgets_helpers import PageHeader
|
|
7
7
|
|
|
8
8
|
logger = logging.getLogger(__name__)
|
|
@@ -13,6 +13,7 @@ CUSTOM_WIDGET_DEFINITIONS = {
|
|
|
13
13
|
"PyDMDrawingEllipse": {"extends": "QWidget", "header": "pydm.widgets.drawing", "container": ""},
|
|
14
14
|
"PyDMDrawingLine": {"extends": "QWidget", "header": "pydm.widgets.drawing", "container": ""},
|
|
15
15
|
"PyDMDrawingPolyline": {"extends": "QWidget", "header": "pydm.widgets.drawing", "container": ""},
|
|
16
|
+
"PyDMDrawingIrregularPolygon": {"extends": "QWidget", "header": "pydm.widgets.drawing", "container": ""},
|
|
16
17
|
"PyDMLabel": {"extends": "QLabel", "header": "pydm.widgets.label", "container": ""},
|
|
17
18
|
"PyDMEnumComboBox": {"extends": "QComboBox", "header": "pydm.widgets.enum_combo_box", "container": ""},
|
|
18
19
|
"PyDMPushButton": {"extends": "QPushButton", "header": "pydm.widgets.pushbutton", "container": ""},
|
|
@@ -40,6 +41,7 @@ CUSTOM_WIDGET_DEFINITIONS = {
|
|
|
40
41
|
"PyDMByteIndicator": {"extends": "QWidget", "header": "pydm.widgets.byte", "container": ""},
|
|
41
42
|
"PyDMLineEdit": {"extends": "QLineEdit", "header": "pydm.widgets.line_edit", "container": ""},
|
|
42
43
|
"PyDMDrawingArc": {"extends": "QWidget", "header": "pydm.widgets.drawing", "container": ""},
|
|
44
|
+
"PyDMDrawingPie": {"extends": "QWidget", "header": "pydm.widgets.drawing", "container": ""},
|
|
43
45
|
"PyDMWaveformPlot": {"extends": "QWidget", "header": "pydm.widgets.waveformplot", "container": ""},
|
|
44
46
|
"PyDMScaleIndicator": {"extends": "QWidget", "header": "pydm.widgets.scale", "container": ""},
|
|
45
47
|
"PyDMShellCommand": {"extends": "QPushButton", "header": "pydm.widgets.shell_command", "container": ""},
|
|
@@ -48,10 +50,9 @@ CUSTOM_WIDGET_DEFINITIONS = {
|
|
|
48
50
|
}
|
|
49
51
|
|
|
50
52
|
|
|
51
|
-
def convert(input_path, output_path, scrollable=False):
|
|
53
|
+
def convert(input_path, output_path, scrollable=False, site=None):
|
|
52
54
|
try:
|
|
53
55
|
edm_parser = EDMFileParser(input_path, output_path)
|
|
54
|
-
pprint(edm_parser.ui, indent=2)
|
|
55
56
|
logger.info(f"Successfully parsed EDM file: {input_path}")
|
|
56
57
|
except FileNotFoundError:
|
|
57
58
|
logger.error("File Not Found")
|
|
@@ -59,7 +60,7 @@ def convert(input_path, output_path, scrollable=False):
|
|
|
59
60
|
|
|
60
61
|
# edm_parser.ui, _, _ = replace_calc_and_loc_in_edm_content(edm_parser.ui, input_path)
|
|
61
62
|
|
|
62
|
-
pydm_widgets, used_classes = convert_edm_to_pydm_widgets(edm_parser)
|
|
63
|
+
pydm_widgets, used_classes = convert_edm_to_pydm_widgets(edm_parser, site=site)
|
|
63
64
|
logger.info(f"Converted EDM objects to {len(pydm_widgets)} PyDM widgets.")
|
|
64
65
|
|
|
65
66
|
page_header = PageHeader()
|
|
@@ -85,10 +86,15 @@ def convert(input_path, output_path, scrollable=False):
|
|
|
85
86
|
tree.write(output_path, encoding="utf-8", xml_declaration=True)
|
|
86
87
|
|
|
87
88
|
|
|
89
|
+
QT_BASE_CLASSES = {"QPushButton", "QTabWidget", "QFrame", "QLabel", "QWidget", "QLineEdit", "QComboBox", "QTableWidget"}
|
|
90
|
+
|
|
91
|
+
|
|
88
92
|
def build_customwidgets_element(used_classes: set) -> ET.Element:
|
|
89
93
|
customwidgets_el = ET.Element("customwidgets")
|
|
90
94
|
|
|
91
95
|
for cls_name in sorted(used_classes):
|
|
96
|
+
if cls_name in QT_BASE_CLASSES:
|
|
97
|
+
continue
|
|
92
98
|
if cls_name not in CUSTOM_WIDGET_DEFINITIONS:
|
|
93
99
|
logger.warning(f"Could not find custom widget {cls_name} in CUSTOM_WIDGET_DEFINITIONS")
|
|
94
100
|
continue
|