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.
Files changed (84) hide show
  1. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/PKG-INFO +1 -1
  2. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/PyDMConverter.egg-info/PKG-INFO +1 -1
  3. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/PyDMConverter.egg-info/SOURCES.txt +6 -1
  4. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/PyDMConverter.egg-info/top_level.txt +1 -0
  5. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/arguments.md +20 -0
  6. pydmconverter-1.0.3/docs/user_guide.md +78 -0
  7. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pydmconverter/__main__.py +26 -12
  8. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pydmconverter/edm/converter.py +10 -4
  9. pydmconverter-1.0.3/pydmconverter/edm/converter_helpers.py +1428 -0
  10. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pydmconverter/edm/menumux.py +4 -1
  11. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pydmconverter/edm/parser.py +16 -14
  12. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pydmconverter/edm/parser_helpers.py +28 -8
  13. pydmconverter-1.0.3/pydmconverter/exceptions.py +17 -0
  14. pydmconverter-1.0.3/pydmconverter/launch_gui.sh +32 -0
  15. pydmconverter-1.0.3/pydmconverter/sites/__init__.py +12 -0
  16. pydmconverter-1.0.3/pydmconverter/sites/slac.py +2 -0
  17. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pydmconverter/widgets.py +119 -34
  18. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pydmconverter/widgets_helpers.py +75 -33
  19. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pyproject.toml +6 -1
  20. pydmconverter-1.0.3/tests/edm/test_converter.py +347 -0
  21. pydmconverter-1.0.3/tests/edm/test_converter_helpers.py +85 -0
  22. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/tests/edm/test_parser.py +19 -4
  23. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/tests/edm/test_parser_helpers.py +24 -24
  24. pydmconverter-1.0.3/tests/test_main.py +283 -0
  25. pydmconverter-1.0.3/tests/test_sites.py +16 -0
  26. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/tests/test_widgets.py +83 -8
  27. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/tests/test_widgets_helpers.py +12 -7
  28. pydmconverter-0.0.0/docs/user_guide.md +0 -43
  29. pydmconverter-0.0.0/launch_gui.sh +0 -26
  30. pydmconverter-0.0.0/pydmconverter/edm/converter_helpers.py +0 -895
  31. pydmconverter-0.0.0/tests/edm/test_converter.py +0 -0
  32. pydmconverter-0.0.0/tests/edm/test_converter_helpers.py +0 -0
  33. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  34. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  35. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/.github/workflows/gh-pages.yml +0 -0
  36. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/.github/workflows/lint.yml +0 -0
  37. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/.github/workflows/pypi_release.yml +0 -0
  38. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/.github/workflows/tests.yml +0 -0
  39. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/.gitignore +0 -0
  40. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/.pre-commit-config.yaml +0 -0
  41. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/LICENSE +0 -0
  42. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/PyDMConverter.egg-info/dependency_links.txt +0 -0
  43. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/PyDMConverter.egg-info/entry_points.txt +0 -0
  44. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/PyDMConverter.egg-info/requires.txt +0 -0
  45. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/README.md +0 -0
  46. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/resources/file_minus.png +0 -0
  47. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/resources/file_plus.png +0 -0
  48. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/resources/file_x.png +0 -0
  49. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/resources/folder_plus.png +0 -0
  50. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/resources/folder_search.png +0 -0
  51. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/resources/play_circle_outline.png +0 -0
  52. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/resources/settings.png +0 -0
  53. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/src/model/__init__.py +0 -0
  54. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/src/model/app_model.py +0 -0
  55. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/src/model/options_model.py +0 -0
  56. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/src/view/__init__.py +0 -0
  57. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/src/view/file_select_widget.py +0 -0
  58. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/src/view/main_window.py +0 -0
  59. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/src/view/main_window.ui +0 -0
  60. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/src/view/options_window.py +0 -0
  61. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/app/src/view/output_select_dialog.py +0 -0
  62. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/images/pydmconverter.png +0 -0
  63. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/index.md +0 -0
  64. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/reference/custom_types.md +0 -0
  65. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/reference/edm/converter.md +0 -0
  66. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/reference/edm/converter_helpers.md +0 -0
  67. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/reference/edm/menumux.md +0 -0
  68. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/reference/edm/parser.md +0 -0
  69. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/reference/edm/parser_helpers.md +0 -0
  70. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/reference/index.md +0 -0
  71. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/reference/pydm-converter-tool.md +0 -0
  72. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/reference/widgets.md +0 -0
  73. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/docs/reference/widgets_helpers.md +0 -0
  74. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/environment.yml +0 -0
  75. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/examples/TEM_mapping.edl +0 -0
  76. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/examples/all_bsy0_main.edl +0 -0
  77. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/examples/all_bsy0_main_with_groups.edl +0 -0
  78. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/examples/prosilica.edl +0 -0
  79. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/mkdocs.yml +0 -0
  80. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pydmconverter/__init__.py +0 -0
  81. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pydmconverter/custom_types.py +0 -0
  82. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/pydmconverter/edm/__init__.py +0 -0
  83. {pydmconverter-0.0.0 → pydmconverter-1.0.3}/setup.cfg +0 -0
  84. {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: 0.0.0
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: 0.0.0
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.INFO)
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
- # subprocess.run(["pydm", "--hide-nav-bar", "--hide-menu-bar", "view/main_window.py"])
21
- subprocess.run(["bash", "launch_gui.sh"], check=True)
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
- run(input_file, output_file, input_file_type, override, scrollable)
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
- from pprint import pprint
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