PyDMConverter 1.0.2__tar.gz → 1.0.4__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-1.0.2 → pydmconverter-1.0.4}/.gitignore +4 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/PKG-INFO +8 -3
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/PyDMConverter.egg-info/PKG-INFO +8 -3
- pydmconverter-1.0.4/PyDMConverter.egg-info/SOURCES.txt +142 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/PyDMConverter.egg-info/requires.txt +8 -2
- pydmconverter-1.0.4/PyDMConverter.egg-info/scm_file_list.json +138 -0
- pydmconverter-1.0.4/PyDMConverter.egg-info/scm_version.json +8 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/app/src/model/options_model.py +6 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/app/src/view/main_window.py +20 -3
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/app/src/view/options_window.py +9 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/docs/arguments.md +20 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/docs/user_guide.md +6 -1
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/pydmconverter/__main__.py +85 -10
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/pydmconverter/custom_types.py +3 -2
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/pydmconverter/edm/converter.py +10 -5
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/pydmconverter/edm/converter_helpers.py +532 -450
- pydmconverter-1.0.4/pydmconverter/edm/edm_qt.py +101 -0
- pydmconverter-1.0.4/pydmconverter/edm/ir_adapter.py +195 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/pydmconverter/edm/menumux.py +4 -1
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/pydmconverter/edm/parser.py +19 -15
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/pydmconverter/edm/parser_helpers.py +220 -28
- pydmconverter-1.0.4/pydmconverter/exceptions.py +17 -0
- pydmconverter-1.0.4/pydmconverter/ir/__init__.py +42 -0
- pydmconverter-1.0.4/pydmconverter/ir/base.py +27 -0
- pydmconverter-1.0.4/pydmconverter/ir/builder.py +197 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/screen-ir.schema.json +424 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/widget-registry/.beaver-snapshot-sha +1 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/widget-registry/absolute-canvas.json +35 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/widget-registry/embedded-display.json +55 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/widget-registry/frame.json +52 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/widget-registry/group-box.json +44 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/widget-registry/image-view.json +51 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/widget-registry/pv-button.json +57 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/widget-registry/pv-byte-led.json +58 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/widget-registry/pv-checkbox.json +55 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/widget-registry/pv-enum-combobox.json +49 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/widget-registry/pv-label.json +72 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/widget-registry/pv-led.json +50 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/widget-registry/pv-progress-bar.json +62 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/widget-registry/pv-radio-group.json +42 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/widget-registry/pv-slider.json +58 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/widget-registry/pv-text-input.json +57 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/widget-registry/regular-button.json +49 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/widget-registry/related-display-button.json +60 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/widget-registry/scroll-area.json +52 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/widget-registry/tabs.json +50 -0
- pydmconverter-1.0.4/pydmconverter/ir/data/widget-registry/text-label.json +55 -0
- pydmconverter-1.0.4/pydmconverter/ir/emit.py +51 -0
- pydmconverter-1.0.4/pydmconverter/ir/fox.py +65 -0
- pydmconverter-1.0.4/pydmconverter/ir/ids.py +73 -0
- pydmconverter-1.0.4/pydmconverter/ir/macros.py +34 -0
- pydmconverter-1.0.4/pydmconverter/ir/model.py +177 -0
- pydmconverter-1.0.4/pydmconverter/ir/registry.py +120 -0
- pydmconverter-1.0.4/pydmconverter/ir/schema.py +62 -0
- pydmconverter-1.0.4/pydmconverter/ir/source.py +75 -0
- pydmconverter-1.0.4/pydmconverter/ir/transforms.py +158 -0
- pydmconverter-1.0.4/pydmconverter/react.py +113 -0
- pydmconverter-1.0.4/pydmconverter/sites/__init__.py +12 -0
- pydmconverter-1.0.4/pydmconverter/sites/slac.py +2 -0
- pydmconverter-1.0.4/pydmconverter/ui/__init__.py +6 -0
- pydmconverter-1.0.4/pydmconverter/ui/ir_adapter.py +181 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/pydmconverter/widgets.py +52 -4
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/pydmconverter/widgets_helpers.py +53 -40
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/pyproject.toml +13 -4
- pydmconverter-1.0.4/tests/edm/fixtures/p0_min.edl +74 -0
- pydmconverter-1.0.4/tests/edm/fixtures/p0_vis.edl +62 -0
- pydmconverter-1.0.4/tests/edm/fixtures/p1_widgets.edl +47 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/tests/edm/test_converter.py +216 -0
- pydmconverter-1.0.4/tests/edm/test_ir_adapter.py +68 -0
- pydmconverter-1.0.4/tests/edm/test_p1_widgets.py +26 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/tests/edm/test_parser.py +5 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/tests/edm/test_parser_helpers.py +104 -4
- pydmconverter-1.0.4/tests/edm/test_visibility_rules.py +50 -0
- pydmconverter-1.0.4/tests/ir/__init__.py +0 -0
- pydmconverter-1.0.4/tests/ir/conftest.py +69 -0
- pydmconverter-1.0.4/tests/ir/test_ir_builder.py +186 -0
- pydmconverter-1.0.4/tests/ir/test_ir_emit.py +50 -0
- pydmconverter-1.0.4/tests/ir/test_ir_fox.py +41 -0
- pydmconverter-1.0.4/tests/ir/test_ir_ids.py +38 -0
- pydmconverter-1.0.4/tests/ir/test_ir_model.py +88 -0
- pydmconverter-1.0.4/tests/ir/test_ir_registry.py +74 -0
- pydmconverter-1.0.4/tests/ir/test_ir_schema.py +25 -0
- pydmconverter-1.0.4/tests/ir/test_ir_transforms.py +86 -0
- pydmconverter-1.0.4/tests/test_headless_import.py +35 -0
- pydmconverter-1.0.4/tests/test_options_model.py +38 -0
- pydmconverter-1.0.4/tests/test_react.py +72 -0
- pydmconverter-1.0.4/tests/test_sites.py +16 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/tests/test_widgets.py +105 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/tests/test_widgets_helpers.py +56 -0
- pydmconverter-1.0.4/tests/ui/__init__.py +0 -0
- pydmconverter-1.0.4/tests/ui/fixtures/p0_min.ui +75 -0
- pydmconverter-1.0.4/tests/ui/fixtures/p1_widgets.ui +46 -0
- pydmconverter-1.0.4/tests/ui/test_ir_adapter.py +109 -0
- pydmconverter-1.0.4/tests/ui/test_p1_widgets.py +50 -0
- pydmconverter-1.0.2/PyDMConverter.egg-info/SOURCES.txt +0 -73
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/.github/workflows/gh-pages.yml +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/.github/workflows/lint.yml +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/.github/workflows/pypi_release.yml +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/.github/workflows/tests.yml +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/.pre-commit-config.yaml +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/LICENSE +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/PyDMConverter.egg-info/dependency_links.txt +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/PyDMConverter.egg-info/entry_points.txt +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/PyDMConverter.egg-info/top_level.txt +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/README.md +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/app/resources/file_minus.png +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/app/resources/file_plus.png +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/app/resources/file_x.png +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/app/resources/folder_plus.png +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/app/resources/folder_search.png +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/app/resources/play_circle_outline.png +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/app/resources/settings.png +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/app/src/model/__init__.py +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/app/src/model/app_model.py +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/app/src/view/__init__.py +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/app/src/view/file_select_widget.py +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/app/src/view/main_window.ui +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/app/src/view/output_select_dialog.py +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/docs/images/pydmconverter.png +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/docs/index.md +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/docs/reference/custom_types.md +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/docs/reference/edm/converter.md +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/docs/reference/edm/converter_helpers.md +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/docs/reference/edm/menumux.md +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/docs/reference/edm/parser.md +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/docs/reference/edm/parser_helpers.md +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/docs/reference/index.md +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/docs/reference/pydm-converter-tool.md +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/docs/reference/widgets.md +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/docs/reference/widgets_helpers.md +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/environment.yml +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/examples/TEM_mapping.edl +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/examples/all_bsy0_main.edl +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/examples/all_bsy0_main_with_groups.edl +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/examples/prosilica.edl +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/mkdocs.yml +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/pydmconverter/__init__.py +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/pydmconverter/edm/__init__.py +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/pydmconverter/launch_gui.sh +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/setup.cfg +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/tests/__init__.py +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/tests/edm/test_converter_helpers.py +0 -0
- {pydmconverter-1.0.2 → pydmconverter-1.0.4}/tests/test_main.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PyDMConverter
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.4
|
|
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>
|
|
@@ -692,13 +692,18 @@ Classifier: Topic :: Scientific/Engineering
|
|
|
692
692
|
Requires-Python: >=3.10
|
|
693
693
|
Description-Content-Type: text/markdown
|
|
694
694
|
License-File: LICENSE
|
|
695
|
-
Requires-Dist:
|
|
696
|
-
Requires-Dist:
|
|
695
|
+
Requires-Dist: pydantic>=2
|
|
696
|
+
Requires-Dist: jsonschema>=4
|
|
697
|
+
Provides-Extra: gui
|
|
698
|
+
Requires-Dist: pydm; extra == "gui"
|
|
699
|
+
Requires-Dist: pyqt5; extra == "gui"
|
|
697
700
|
Provides-Extra: dev
|
|
698
701
|
Requires-Dist: pytest; extra == "dev"
|
|
699
702
|
Requires-Dist: pytest-cov; extra == "dev"
|
|
700
703
|
Requires-Dist: pytest-qt; extra == "dev"
|
|
701
704
|
Requires-Dist: pytest-mock; extra == "dev"
|
|
705
|
+
Requires-Dist: pydm; extra == "dev"
|
|
706
|
+
Requires-Dist: pyqt5; extra == "dev"
|
|
702
707
|
Dynamic: license-file
|
|
703
708
|
|
|
704
709
|
# PyDM Converter
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PyDMConverter
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.4
|
|
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>
|
|
@@ -692,13 +692,18 @@ Classifier: Topic :: Scientific/Engineering
|
|
|
692
692
|
Requires-Python: >=3.10
|
|
693
693
|
Description-Content-Type: text/markdown
|
|
694
694
|
License-File: LICENSE
|
|
695
|
-
Requires-Dist:
|
|
696
|
-
Requires-Dist:
|
|
695
|
+
Requires-Dist: pydantic>=2
|
|
696
|
+
Requires-Dist: jsonschema>=4
|
|
697
|
+
Provides-Extra: gui
|
|
698
|
+
Requires-Dist: pydm; extra == "gui"
|
|
699
|
+
Requires-Dist: pyqt5; extra == "gui"
|
|
697
700
|
Provides-Extra: dev
|
|
698
701
|
Requires-Dist: pytest; extra == "dev"
|
|
699
702
|
Requires-Dist: pytest-cov; extra == "dev"
|
|
700
703
|
Requires-Dist: pytest-qt; extra == "dev"
|
|
701
704
|
Requires-Dist: pytest-mock; extra == "dev"
|
|
705
|
+
Requires-Dist: pydm; extra == "dev"
|
|
706
|
+
Requires-Dist: pyqt5; extra == "dev"
|
|
702
707
|
Dynamic: license-file
|
|
703
708
|
|
|
704
709
|
# PyDM Converter
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
.gitignore
|
|
2
|
+
.pre-commit-config.yaml
|
|
3
|
+
LICENSE
|
|
4
|
+
README.md
|
|
5
|
+
environment.yml
|
|
6
|
+
mkdocs.yml
|
|
7
|
+
pyproject.toml
|
|
8
|
+
.github/ISSUE_TEMPLATE/bug-report.yml
|
|
9
|
+
.github/ISSUE_TEMPLATE/feature-request.yml
|
|
10
|
+
.github/workflows/gh-pages.yml
|
|
11
|
+
.github/workflows/lint.yml
|
|
12
|
+
.github/workflows/pypi_release.yml
|
|
13
|
+
.github/workflows/tests.yml
|
|
14
|
+
PyDMConverter.egg-info/PKG-INFO
|
|
15
|
+
PyDMConverter.egg-info/SOURCES.txt
|
|
16
|
+
PyDMConverter.egg-info/dependency_links.txt
|
|
17
|
+
PyDMConverter.egg-info/entry_points.txt
|
|
18
|
+
PyDMConverter.egg-info/requires.txt
|
|
19
|
+
PyDMConverter.egg-info/scm_file_list.json
|
|
20
|
+
PyDMConverter.egg-info/scm_version.json
|
|
21
|
+
PyDMConverter.egg-info/top_level.txt
|
|
22
|
+
app/resources/file_minus.png
|
|
23
|
+
app/resources/file_plus.png
|
|
24
|
+
app/resources/file_x.png
|
|
25
|
+
app/resources/folder_plus.png
|
|
26
|
+
app/resources/folder_search.png
|
|
27
|
+
app/resources/play_circle_outline.png
|
|
28
|
+
app/resources/settings.png
|
|
29
|
+
app/src/model/__init__.py
|
|
30
|
+
app/src/model/app_model.py
|
|
31
|
+
app/src/model/options_model.py
|
|
32
|
+
app/src/view/__init__.py
|
|
33
|
+
app/src/view/file_select_widget.py
|
|
34
|
+
app/src/view/main_window.py
|
|
35
|
+
app/src/view/main_window.ui
|
|
36
|
+
app/src/view/options_window.py
|
|
37
|
+
app/src/view/output_select_dialog.py
|
|
38
|
+
docs/arguments.md
|
|
39
|
+
docs/index.md
|
|
40
|
+
docs/user_guide.md
|
|
41
|
+
docs/images/pydmconverter.png
|
|
42
|
+
docs/reference/custom_types.md
|
|
43
|
+
docs/reference/index.md
|
|
44
|
+
docs/reference/pydm-converter-tool.md
|
|
45
|
+
docs/reference/widgets.md
|
|
46
|
+
docs/reference/widgets_helpers.md
|
|
47
|
+
docs/reference/edm/converter.md
|
|
48
|
+
docs/reference/edm/converter_helpers.md
|
|
49
|
+
docs/reference/edm/menumux.md
|
|
50
|
+
docs/reference/edm/parser.md
|
|
51
|
+
docs/reference/edm/parser_helpers.md
|
|
52
|
+
examples/TEM_mapping.edl
|
|
53
|
+
examples/all_bsy0_main.edl
|
|
54
|
+
examples/all_bsy0_main_with_groups.edl
|
|
55
|
+
examples/prosilica.edl
|
|
56
|
+
pydmconverter/__init__.py
|
|
57
|
+
pydmconverter/__main__.py
|
|
58
|
+
pydmconverter/custom_types.py
|
|
59
|
+
pydmconverter/exceptions.py
|
|
60
|
+
pydmconverter/launch_gui.sh
|
|
61
|
+
pydmconverter/react.py
|
|
62
|
+
pydmconverter/widgets.py
|
|
63
|
+
pydmconverter/widgets_helpers.py
|
|
64
|
+
pydmconverter/edm/__init__.py
|
|
65
|
+
pydmconverter/edm/converter.py
|
|
66
|
+
pydmconverter/edm/converter_helpers.py
|
|
67
|
+
pydmconverter/edm/edm_qt.py
|
|
68
|
+
pydmconverter/edm/ir_adapter.py
|
|
69
|
+
pydmconverter/edm/menumux.py
|
|
70
|
+
pydmconverter/edm/parser.py
|
|
71
|
+
pydmconverter/edm/parser_helpers.py
|
|
72
|
+
pydmconverter/ir/__init__.py
|
|
73
|
+
pydmconverter/ir/base.py
|
|
74
|
+
pydmconverter/ir/builder.py
|
|
75
|
+
pydmconverter/ir/emit.py
|
|
76
|
+
pydmconverter/ir/fox.py
|
|
77
|
+
pydmconverter/ir/ids.py
|
|
78
|
+
pydmconverter/ir/macros.py
|
|
79
|
+
pydmconverter/ir/model.py
|
|
80
|
+
pydmconverter/ir/registry.py
|
|
81
|
+
pydmconverter/ir/schema.py
|
|
82
|
+
pydmconverter/ir/source.py
|
|
83
|
+
pydmconverter/ir/transforms.py
|
|
84
|
+
pydmconverter/ir/data/screen-ir.schema.json
|
|
85
|
+
pydmconverter/ir/data/widget-registry/.beaver-snapshot-sha
|
|
86
|
+
pydmconverter/ir/data/widget-registry/absolute-canvas.json
|
|
87
|
+
pydmconverter/ir/data/widget-registry/embedded-display.json
|
|
88
|
+
pydmconverter/ir/data/widget-registry/frame.json
|
|
89
|
+
pydmconverter/ir/data/widget-registry/group-box.json
|
|
90
|
+
pydmconverter/ir/data/widget-registry/image-view.json
|
|
91
|
+
pydmconverter/ir/data/widget-registry/pv-button.json
|
|
92
|
+
pydmconverter/ir/data/widget-registry/pv-byte-led.json
|
|
93
|
+
pydmconverter/ir/data/widget-registry/pv-checkbox.json
|
|
94
|
+
pydmconverter/ir/data/widget-registry/pv-enum-combobox.json
|
|
95
|
+
pydmconverter/ir/data/widget-registry/pv-label.json
|
|
96
|
+
pydmconverter/ir/data/widget-registry/pv-led.json
|
|
97
|
+
pydmconverter/ir/data/widget-registry/pv-progress-bar.json
|
|
98
|
+
pydmconverter/ir/data/widget-registry/pv-radio-group.json
|
|
99
|
+
pydmconverter/ir/data/widget-registry/pv-slider.json
|
|
100
|
+
pydmconverter/ir/data/widget-registry/pv-text-input.json
|
|
101
|
+
pydmconverter/ir/data/widget-registry/regular-button.json
|
|
102
|
+
pydmconverter/ir/data/widget-registry/related-display-button.json
|
|
103
|
+
pydmconverter/ir/data/widget-registry/scroll-area.json
|
|
104
|
+
pydmconverter/ir/data/widget-registry/tabs.json
|
|
105
|
+
pydmconverter/ir/data/widget-registry/text-label.json
|
|
106
|
+
pydmconverter/sites/__init__.py
|
|
107
|
+
pydmconverter/sites/slac.py
|
|
108
|
+
pydmconverter/ui/__init__.py
|
|
109
|
+
pydmconverter/ui/ir_adapter.py
|
|
110
|
+
tests/__init__.py
|
|
111
|
+
tests/test_headless_import.py
|
|
112
|
+
tests/test_main.py
|
|
113
|
+
tests/test_options_model.py
|
|
114
|
+
tests/test_react.py
|
|
115
|
+
tests/test_sites.py
|
|
116
|
+
tests/test_widgets.py
|
|
117
|
+
tests/test_widgets_helpers.py
|
|
118
|
+
tests/edm/test_converter.py
|
|
119
|
+
tests/edm/test_converter_helpers.py
|
|
120
|
+
tests/edm/test_ir_adapter.py
|
|
121
|
+
tests/edm/test_p1_widgets.py
|
|
122
|
+
tests/edm/test_parser.py
|
|
123
|
+
tests/edm/test_parser_helpers.py
|
|
124
|
+
tests/edm/test_visibility_rules.py
|
|
125
|
+
tests/edm/fixtures/p0_min.edl
|
|
126
|
+
tests/edm/fixtures/p0_vis.edl
|
|
127
|
+
tests/edm/fixtures/p1_widgets.edl
|
|
128
|
+
tests/ir/__init__.py
|
|
129
|
+
tests/ir/conftest.py
|
|
130
|
+
tests/ir/test_ir_builder.py
|
|
131
|
+
tests/ir/test_ir_emit.py
|
|
132
|
+
tests/ir/test_ir_fox.py
|
|
133
|
+
tests/ir/test_ir_ids.py
|
|
134
|
+
tests/ir/test_ir_model.py
|
|
135
|
+
tests/ir/test_ir_registry.py
|
|
136
|
+
tests/ir/test_ir_schema.py
|
|
137
|
+
tests/ir/test_ir_transforms.py
|
|
138
|
+
tests/ui/__init__.py
|
|
139
|
+
tests/ui/test_ir_adapter.py
|
|
140
|
+
tests/ui/test_p1_widgets.py
|
|
141
|
+
tests/ui/fixtures/p0_min.ui
|
|
142
|
+
tests/ui/fixtures/p1_widgets.ui
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
{
|
|
2
|
+
"files": [
|
|
3
|
+
".pre-commit-config.yaml",
|
|
4
|
+
"README.md",
|
|
5
|
+
"environment.yml",
|
|
6
|
+
"LICENSE",
|
|
7
|
+
"pyproject.toml",
|
|
8
|
+
"mkdocs.yml",
|
|
9
|
+
".gitignore",
|
|
10
|
+
"docs/arguments.md",
|
|
11
|
+
"docs/user_guide.md",
|
|
12
|
+
"docs/index.md",
|
|
13
|
+
"docs/images/pydmconverter.png",
|
|
14
|
+
"docs/reference/widgets_helpers.md",
|
|
15
|
+
"docs/reference/widgets.md",
|
|
16
|
+
"docs/reference/custom_types.md",
|
|
17
|
+
"docs/reference/pydm-converter-tool.md",
|
|
18
|
+
"docs/reference/index.md",
|
|
19
|
+
"docs/reference/edm/parser_helpers.md",
|
|
20
|
+
"docs/reference/edm/parser.md",
|
|
21
|
+
"docs/reference/edm/menumux.md",
|
|
22
|
+
"docs/reference/edm/converter.md",
|
|
23
|
+
"docs/reference/edm/converter_helpers.md",
|
|
24
|
+
"tests/test_react.py",
|
|
25
|
+
"tests/test_headless_import.py",
|
|
26
|
+
"tests/__init__.py",
|
|
27
|
+
"tests/test_widgets_helpers.py",
|
|
28
|
+
"tests/test_widgets.py",
|
|
29
|
+
"tests/test_sites.py",
|
|
30
|
+
"tests/test_options_model.py",
|
|
31
|
+
"tests/test_main.py",
|
|
32
|
+
"tests/ir/test_ir_transforms.py",
|
|
33
|
+
"tests/ir/test_ir_fox.py",
|
|
34
|
+
"tests/ir/test_ir_ids.py",
|
|
35
|
+
"tests/ir/__init__.py",
|
|
36
|
+
"tests/ir/test_ir_model.py",
|
|
37
|
+
"tests/ir/test_ir_builder.py",
|
|
38
|
+
"tests/ir/conftest.py",
|
|
39
|
+
"tests/ir/test_ir_registry.py",
|
|
40
|
+
"tests/ir/test_ir_emit.py",
|
|
41
|
+
"tests/ir/test_ir_schema.py",
|
|
42
|
+
"tests/ui/__init__.py",
|
|
43
|
+
"tests/ui/test_ir_adapter.py",
|
|
44
|
+
"tests/ui/test_p1_widgets.py",
|
|
45
|
+
"tests/ui/fixtures/p1_widgets.ui",
|
|
46
|
+
"tests/ui/fixtures/p0_min.ui",
|
|
47
|
+
"tests/edm/test_converter_helpers.py",
|
|
48
|
+
"tests/edm/test_ir_adapter.py",
|
|
49
|
+
"tests/edm/test_parser_helpers.py",
|
|
50
|
+
"tests/edm/test_parser.py",
|
|
51
|
+
"tests/edm/test_converter.py",
|
|
52
|
+
"tests/edm/test_p1_widgets.py",
|
|
53
|
+
"tests/edm/test_visibility_rules.py",
|
|
54
|
+
"tests/edm/fixtures/p0_vis.edl",
|
|
55
|
+
"tests/edm/fixtures/p1_widgets.edl",
|
|
56
|
+
"tests/edm/fixtures/p0_min.edl",
|
|
57
|
+
"app/resources/file_minus.png",
|
|
58
|
+
"app/resources/folder_search.png",
|
|
59
|
+
"app/resources/play_circle_outline.png",
|
|
60
|
+
"app/resources/settings.png",
|
|
61
|
+
"app/resources/file_plus.png",
|
|
62
|
+
"app/resources/file_x.png",
|
|
63
|
+
"app/resources/folder_plus.png",
|
|
64
|
+
"app/src/view/output_select_dialog.py",
|
|
65
|
+
"app/src/view/main_window.ui",
|
|
66
|
+
"app/src/view/__init__.py",
|
|
67
|
+
"app/src/view/main_window.py",
|
|
68
|
+
"app/src/view/file_select_widget.py",
|
|
69
|
+
"app/src/view/options_window.py",
|
|
70
|
+
"app/src/model/__init__.py",
|
|
71
|
+
"app/src/model/app_model.py",
|
|
72
|
+
"app/src/model/options_model.py",
|
|
73
|
+
"pydmconverter/react.py",
|
|
74
|
+
"pydmconverter/widgets.py",
|
|
75
|
+
"pydmconverter/__init__.py",
|
|
76
|
+
"pydmconverter/exceptions.py",
|
|
77
|
+
"pydmconverter/launch_gui.sh",
|
|
78
|
+
"pydmconverter/widgets_helpers.py",
|
|
79
|
+
"pydmconverter/custom_types.py",
|
|
80
|
+
"pydmconverter/__main__.py",
|
|
81
|
+
"pydmconverter/ir/model.py",
|
|
82
|
+
"pydmconverter/ir/__init__.py",
|
|
83
|
+
"pydmconverter/ir/source.py",
|
|
84
|
+
"pydmconverter/ir/schema.py",
|
|
85
|
+
"pydmconverter/ir/fox.py",
|
|
86
|
+
"pydmconverter/ir/emit.py",
|
|
87
|
+
"pydmconverter/ir/transforms.py",
|
|
88
|
+
"pydmconverter/ir/ids.py",
|
|
89
|
+
"pydmconverter/ir/builder.py",
|
|
90
|
+
"pydmconverter/ir/macros.py",
|
|
91
|
+
"pydmconverter/ir/registry.py",
|
|
92
|
+
"pydmconverter/ir/base.py",
|
|
93
|
+
"pydmconverter/ir/data/screen-ir.schema.json",
|
|
94
|
+
"pydmconverter/ir/data/widget-registry/pv-byte-led.json",
|
|
95
|
+
"pydmconverter/ir/data/widget-registry/pv-label.json",
|
|
96
|
+
"pydmconverter/ir/data/widget-registry/pv-button.json",
|
|
97
|
+
"pydmconverter/ir/data/widget-registry/regular-button.json",
|
|
98
|
+
"pydmconverter/ir/data/widget-registry/pv-progress-bar.json",
|
|
99
|
+
"pydmconverter/ir/data/widget-registry/text-label.json",
|
|
100
|
+
"pydmconverter/ir/data/widget-registry/pv-slider.json",
|
|
101
|
+
"pydmconverter/ir/data/widget-registry/tabs.json",
|
|
102
|
+
"pydmconverter/ir/data/widget-registry/pv-checkbox.json",
|
|
103
|
+
"pydmconverter/ir/data/widget-registry/group-box.json",
|
|
104
|
+
"pydmconverter/ir/data/widget-registry/image-view.json",
|
|
105
|
+
"pydmconverter/ir/data/widget-registry/pv-enum-combobox.json",
|
|
106
|
+
"pydmconverter/ir/data/widget-registry/pv-text-input.json",
|
|
107
|
+
"pydmconverter/ir/data/widget-registry/.beaver-snapshot-sha",
|
|
108
|
+
"pydmconverter/ir/data/widget-registry/scroll-area.json",
|
|
109
|
+
"pydmconverter/ir/data/widget-registry/absolute-canvas.json",
|
|
110
|
+
"pydmconverter/ir/data/widget-registry/frame.json",
|
|
111
|
+
"pydmconverter/ir/data/widget-registry/embedded-display.json",
|
|
112
|
+
"pydmconverter/ir/data/widget-registry/related-display-button.json",
|
|
113
|
+
"pydmconverter/ir/data/widget-registry/pv-radio-group.json",
|
|
114
|
+
"pydmconverter/ir/data/widget-registry/pv-led.json",
|
|
115
|
+
"pydmconverter/ui/__init__.py",
|
|
116
|
+
"pydmconverter/ui/ir_adapter.py",
|
|
117
|
+
"pydmconverter/sites/__init__.py",
|
|
118
|
+
"pydmconverter/sites/slac.py",
|
|
119
|
+
"pydmconverter/edm/__init__.py",
|
|
120
|
+
"pydmconverter/edm/ir_adapter.py",
|
|
121
|
+
"pydmconverter/edm/converter_helpers.py",
|
|
122
|
+
"pydmconverter/edm/menumux.py",
|
|
123
|
+
"pydmconverter/edm/parser.py",
|
|
124
|
+
"pydmconverter/edm/converter.py",
|
|
125
|
+
"pydmconverter/edm/edm_qt.py",
|
|
126
|
+
"pydmconverter/edm/parser_helpers.py",
|
|
127
|
+
"examples/prosilica.edl",
|
|
128
|
+
"examples/TEM_mapping.edl",
|
|
129
|
+
"examples/all_bsy0_main.edl",
|
|
130
|
+
"examples/all_bsy0_main_with_groups.edl",
|
|
131
|
+
".github/ISSUE_TEMPLATE/feature-request.yml",
|
|
132
|
+
".github/ISSUE_TEMPLATE/bug-report.yml",
|
|
133
|
+
".github/workflows/pypi_release.yml",
|
|
134
|
+
".github/workflows/tests.yml",
|
|
135
|
+
".github/workflows/lint.yml",
|
|
136
|
+
".github/workflows/gh-pages.yml"
|
|
137
|
+
]
|
|
138
|
+
}
|
|
@@ -13,6 +13,7 @@ class OptionsModel:
|
|
|
13
13
|
def __init__(self):
|
|
14
14
|
# General options
|
|
15
15
|
self.output_folder = None
|
|
16
|
+
self.override_existing = False
|
|
16
17
|
|
|
17
18
|
# EDM options
|
|
18
19
|
self.edm_override_def_colors = False
|
|
@@ -39,6 +40,9 @@ class OptionsModel:
|
|
|
39
40
|
output_folder = data.get("output_folder", None)
|
|
40
41
|
if output_folder is not None and os.path.exists(output_folder):
|
|
41
42
|
self.output_folder = output_folder
|
|
43
|
+
override_existing = data.get("override_existing", None)
|
|
44
|
+
if override_existing is not None:
|
|
45
|
+
self.override_existing = override_existing
|
|
42
46
|
|
|
43
47
|
# EDM options
|
|
44
48
|
edm_override_def_colors = data.get("edm_override_def_colors", None)
|
|
@@ -61,6 +65,8 @@ class OptionsModel:
|
|
|
61
65
|
# General options
|
|
62
66
|
if self.output_folder is not None:
|
|
63
67
|
data["output_folder"] = self.output_folder
|
|
68
|
+
if self.override_existing is not False:
|
|
69
|
+
data["override_existing"] = self.override_existing
|
|
64
70
|
|
|
65
71
|
# EDM options
|
|
66
72
|
if self.edm_override_def_colors is not False:
|
|
@@ -10,6 +10,7 @@ from time import sleep
|
|
|
10
10
|
from typing import List
|
|
11
11
|
from pydm import Display
|
|
12
12
|
from qtpy.QtCore import Slot, QCoreApplication
|
|
13
|
+
from qtpy.QtGui import QBrush, QColor
|
|
13
14
|
from qtpy.QtWidgets import (
|
|
14
15
|
QFileDialog,
|
|
15
16
|
QTableWidget,
|
|
@@ -27,6 +28,9 @@ import logging
|
|
|
27
28
|
logging.basicConfig(level=logging.INFO)
|
|
28
29
|
logger = logging.getLogger(__name__)
|
|
29
30
|
|
|
31
|
+
CONVERTED_ROW_COLOR = QColor(200, 230, 201)
|
|
32
|
+
FAILED_ROW_COLOR = QColor(255, 205, 210)
|
|
33
|
+
|
|
30
34
|
|
|
31
35
|
class MainWindow(Display):
|
|
32
36
|
def __init__(self, parent=None, args=None, macros=None, ui_filename=None):
|
|
@@ -174,6 +178,17 @@ class MainWindow(Display):
|
|
|
174
178
|
if conversion_status == "Converted":
|
|
175
179
|
table_widget.removeRow(i)
|
|
176
180
|
|
|
181
|
+
def set_row_status(self, row: int, status: str, color: QColor, tooltip: str = "") -> None:
|
|
182
|
+
"""Sets the status cell of a row and colors the whole row"""
|
|
183
|
+
table_widget: QTableWidget = self.ui.table_widget
|
|
184
|
+
status_item = QTableWidgetItem(status)
|
|
185
|
+
status_item.setToolTip(tooltip)
|
|
186
|
+
table_widget.setItem(row, 2, status_item)
|
|
187
|
+
for col in range(table_widget.columnCount()):
|
|
188
|
+
item = table_widget.item(row, col)
|
|
189
|
+
if item is not None:
|
|
190
|
+
item.setBackground(QBrush(color))
|
|
191
|
+
|
|
177
192
|
@Slot()
|
|
178
193
|
def on_convert_button_clicked(self) -> None:
|
|
179
194
|
table_widget: QTableWidget = self.ui.table_widget
|
|
@@ -182,12 +197,14 @@ class MainWindow(Display):
|
|
|
182
197
|
output_file = table_widget.item(row, 1).text()
|
|
183
198
|
file_type = os.path.splitext(input_file)[1].lower()
|
|
184
199
|
try:
|
|
185
|
-
pydmconverter.__main__.run(
|
|
200
|
+
pydmconverter.__main__.run(
|
|
201
|
+
input_file, output_file, file_type, override=self.options_model.override_existing
|
|
202
|
+
)
|
|
186
203
|
logger.debug(f"converted {input_file} to {output_file}")
|
|
187
|
-
|
|
204
|
+
self.set_row_status(row, "Converted", CONVERTED_ROW_COLOR)
|
|
188
205
|
except Exception as msg:
|
|
189
206
|
logger.debug(msg)
|
|
190
|
-
|
|
207
|
+
self.set_row_status(row, "Failed", FAILED_ROW_COLOR, tooltip=str(msg))
|
|
191
208
|
QCoreApplication.processEvents()
|
|
192
209
|
|
|
193
210
|
"""parser = self.app_model.parsers[file_type](input_file)
|
|
@@ -47,12 +47,20 @@ class OptionsWindow(QWidget):
|
|
|
47
47
|
self.output_folder_select = FileSelectWidget(path=self.options_model.output_folder, select_dir=False)
|
|
48
48
|
output_folder_group_layout.addWidget(self.output_folder_select)
|
|
49
49
|
|
|
50
|
+
conversion_group = QGroupBox("Conversion")
|
|
51
|
+
conversion_group_layout = QVBoxLayout()
|
|
52
|
+
conversion_group.setLayout(conversion_group_layout)
|
|
53
|
+
self.override_existing_checkbox = QCheckBox("Overwrite existing output files")
|
|
54
|
+
self.override_existing_checkbox.setChecked(self.options_model.override_existing)
|
|
55
|
+
conversion_group_layout.addWidget(self.override_existing_checkbox)
|
|
56
|
+
|
|
50
57
|
self.general_group_view = QWidget()
|
|
51
58
|
general_group_layout = QVBoxLayout()
|
|
52
59
|
self.general_group_view.setLayout(general_group_layout)
|
|
53
60
|
general_group_label = QLabel("General")
|
|
54
61
|
general_group_layout.addWidget(general_group_label)
|
|
55
62
|
general_group_layout.addWidget(output_folder_group)
|
|
63
|
+
general_group_layout.addWidget(conversion_group)
|
|
56
64
|
general_group_layout.addStretch()
|
|
57
65
|
|
|
58
66
|
edm_colors_group = QGroupBox("colors.list")
|
|
@@ -122,6 +130,7 @@ class OptionsWindow(QWidget):
|
|
|
122
130
|
else:
|
|
123
131
|
QMessageBox.critical(self, "Invalid Path", "The entered output folder path is not valid.")
|
|
124
132
|
return False
|
|
133
|
+
self.options_model.override_existing = self.override_existing_checkbox.isChecked()
|
|
125
134
|
|
|
126
135
|
# EDM options
|
|
127
136
|
colors_path = self.edm_override_file_select.get_path()
|
|
@@ -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`
|
|
@@ -69,5 +69,10 @@ pydmconverter /afs/slac/g/lcls/edm/file.edl file.ui`
|
|
|
69
69
|
```
|
|
70
70
|
To convert EDM files in a folder called "edm" to PYDM file in the current folder :
|
|
71
71
|
``` bash
|
|
72
|
-
pydmconverter /afs/slac/g/lcls/edm . .edl
|
|
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
|
|
73
78
|
```
|