Sat, 22 May 2021 18:51:46 +0200
Renamed the modules and classes of the E5Gui package to have the prefix 'Eric' instead of 'E5'.
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 | |
8356
68ec9c3d4de5
Renamed the modules and classes of the E5Gui package to have the prefix 'Eric' instead of 'E5'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8318
diff
changeset
|
16 | from E5Gui import EricMessageBox |
68ec9c3d4de5
Renamed the modules and classes of the E5Gui package to have the prefix 'Eric' instead of 'E5'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8318
diff
changeset
|
17 | from E5Gui.EricOverrideCursor import EricOverridenCursor |
8018
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: |
8356
68ec9c3d4de5
Renamed the modules and classes of the E5Gui package to have the prefix 'Eric' instead of 'E5'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8318
diff
changeset
|
80 | with EricOverridenCursor(): |
68ec9c3d4de5
Renamed the modules and classes of the E5Gui package to have the prefix 'Eric' instead of 'E5'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8318
diff
changeset
|
81 | EricMessageBox.critical( |
8018
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: |
8356
68ec9c3d4de5
Renamed the modules and classes of the E5Gui package to have the prefix 'Eric' instead of 'E5'.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8318
diff
changeset
|
107 | EricMessageBox.critical( |
8018
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 |