Sun, 16 May 2021 20:07:24 +0200
Replaced all imports of PyQt5 to PyQt6 and started to replace code using obsoleted methods and adapt to the PyQt6 enum usage.
8018
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
3 | # Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de> |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing a class representing the templates JSON file. |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | """ |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10 | import json |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11 | import time |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | import typing |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | |
8318
962bce857696
Replaced all imports of PyQt5 to PyQt6 and started to replace code using obsoleted methods and adapt to the PyQt6 enum usage.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
14 | from PyQt6.QtCore import QObject |
8018
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15 | |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16 | from E5Gui import E5MessageBox |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | from E5Gui.E5OverrideCursor import E5OverridenCursor |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | TemplateViewer = typing.TypeVar("TemplateViewer") |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23 | class TemplatesFile(QObject): |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | """ |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | Class representing the templates JSON file. |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | """ |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | def __init__(self, viewer: TemplateViewer, parent: QObject = None): |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | """ |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | Constructor |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | @param viewer reference to the template viewer object |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | @type TemplateViewer |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | @param parent reference to the parent object (defaults to None) |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | @type QObject (optional) |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | """ |
8218
7c09585bd960
Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8023
diff
changeset
|
36 | super().__init__(parent) |
8018
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | self.__viewer = viewer |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | def writeFile(self, filename: str) -> bool: |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | """ |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | Public method to write the templates data to a templates JSON file. |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | @param filename name of the templates file |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | @type str |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | @return flag indicating a successful write |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | @rtype bool |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | """ |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | templatesDict = {} |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49 | # step 0: header |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | templatesDict["header"] = { |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | "comment": "eric templates file", |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | "saved": time.strftime('%Y-%m-%d, %H:%M:%S'), |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | "warning": ( |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | "This file was generated automatically, do not edit." |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55 | ), |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | } |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | # step 1: template groups and templates |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | templateGroups = [] |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | for group in self.__viewer.getAllGroups(): |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | templates = [] |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | for template in group.getAllEntries(): |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | templates.append({ |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64 | "name": template.getName(), |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | "description": template.getDescription().strip(), |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | "text": template.getTemplateText() |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | }) |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | templateGroups.append({ |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69 | "name": group.getName(), |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70 | "language": group.getLanguage(), |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71 | "templates": templates, |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | }) |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | templatesDict["template_groups"] = templateGroups |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74 | |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | try: |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76 | jsonString = json.dumps(templatesDict, indent=2) |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77 | with open(filename, "w") as f: |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78 | f.write(jsonString) |
8240
93b8a353c4bf
Applied some more code simplifications suggested by the new Simplify checker (Y105: use contextlib.suppress) (batch 1).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8218
diff
changeset
|
79 | except (TypeError, OSError) as err: |
8018
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80 | with E5OverridenCursor(): |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81 | E5MessageBox.critical( |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | None, |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | self.tr("Save Templates"), |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84 | self.tr( |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85 | "<p>The templates file <b>{0}</b> could not be" |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86 | " written.</p><p>Reason: {1}</p>" |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87 | ).format(filename, str(err)) |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88 | ) |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89 | return False |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90 | |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | return True |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92 | |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93 | def readFile(self, filename: str) -> bool: |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94 | """ |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95 | Public method to read the templates data from a templates JSON file. |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | |
8023
56359a72ab10
TemplatesFile: implemented a docstring correction.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8018
diff
changeset
|
97 | @param filename name of the templates file |
8018
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98 | @type str |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99 | @return flag indicating a successful read |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100 | @rtype bool |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101 | """ |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102 | try: |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103 | with open(filename, "r") as f: |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104 | jsonString = f.read() |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105 | templatesDict = json.loads(jsonString) |
8240
93b8a353c4bf
Applied some more code simplifications suggested by the new Simplify checker (Y105: use contextlib.suppress) (batch 1).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8218
diff
changeset
|
106 | except (OSError, json.JSONDecodeError) as err: |
8018
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107 | E5MessageBox.critical( |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108 | None, |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109 | self.tr("Read Templates"), |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110 | self.tr( |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111 | "<p>The templates file <b>{0}</b> could not be read.</p>" |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112 | "<p>Reason: {1}</p>" |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113 | ).format(filename, str(err)) |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114 | ) |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
115 | return False |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116 | |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117 | for templateGroup in templatesDict["template_groups"]: |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118 | self.__viewer.addGroup(templateGroup["name"], |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119 | templateGroup["language"]) |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120 | for template in templateGroup["templates"]: |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
121 | self.__viewer.addEntry(templateGroup["name"], |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
122 | template["name"], |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123 | template["description"], |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124 | template["text"], |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
125 | quiet=True) |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
126 | |
641c7c312f26
Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
127 | return True |