eric7/Templates/TemplatesFile.py

Sun, 16 May 2021 20:07:24 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 16 May 2021 20:07:24 +0200
branch
eric7
changeset 8318
962bce857696
parent 8312
800c432b34c8
child 8356
68ec9c3d4de5
permissions
-rw-r--r--

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

eric ide

mercurial