src/eric7/Templates/TemplatesFile.py

Thu, 11 Jul 2024 14:21:34 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 11 Jul 2024 14:21:34 +0200
branch
eric7
changeset 10840
c8045d0dbaa7
parent 10459
5c5ed40d533d
child 11090
f5f5f5803935
permissions
-rw-r--r--

MicroPython
- Updated the list of known CircuitPython boards for CPy 9.1.0.
- Updated the list of known UF2 capable boards.

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
10439
21c28b0f9e41 Updated copyright for 2024.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10050
diff changeset
3 # Copyright (c) 2021 - 2024 Detlev Offenbach <detlev@die-offenbachs.de>
8018
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
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9413
diff changeset
16 from eric7.EricGui.EricOverrideCursor import EricOverridenCursor
9413
80c06d472826 Changed the eric7 import statements to include the package name (i.e. eric7) in order to not fiddle with sys.path.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9278
diff changeset
17 from eric7.EricWidgets import EricMessageBox
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 TemplateViewer = typing.TypeVar("TemplateViewer")
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
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 class TemplatesFile(QObject):
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 """
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 Class representing the templates JSON file.
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
26
8018
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
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
30
8018
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
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
38
8018
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.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
42
8018
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 """
9278
36448ca469c2 Simplified some code iaw. recommendations of the extended style checker and reformatted the code with black.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
48 templatesDict = {
36448ca469c2 Simplified some code iaw. recommendations of the extended style checker and reformatted the code with black.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
49 # step 0: header
36448ca469c2 Simplified some code iaw. recommendations of the extended style checker and reformatted the code with black.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
50 "header": {
36448ca469c2 Simplified some code iaw. recommendations of the extended style checker and reformatted the code with black.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
51 "comment": "eric templates file",
36448ca469c2 Simplified some code iaw. recommendations of the extended style checker and reformatted the code with black.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
52 "saved": time.strftime("%Y-%m-%d, %H:%M:%S"),
36448ca469c2 Simplified some code iaw. recommendations of the extended style checker and reformatted the code with black.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
53 "warning": ("This file was generated automatically, do not edit."),
36448ca469c2 Simplified some code iaw. recommendations of the extended style checker and reformatted the code with black.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
54 }
8018
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 }
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
56
8018
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 # step 1: template groups and templates
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 templateGroups = []
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 for group in self.__viewer.getAllGroups():
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 templates = []
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 for template in group.getAllEntries():
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
62 templates.append(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
63 {
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
64 "name": template.getName(),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
65 "description": template.getDescription().strip(),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
66 "text": template.getTemplateText(),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
67 }
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
68 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
69 templateGroups.append(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
70 {
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
71 "name": group.getName(),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
72 "language": group.getLanguage(),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
73 "templates": templates,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
74 }
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
75 )
8018
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 templatesDict["template_groups"] = templateGroups
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
77
8018
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 try:
10459
5c5ed40d533d Changed the JSON based file writers to ensure a "\n" at the end to make them please version control systems (see issue 528).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
79 jsonString = json.dumps(templatesDict, indent=2) + "\n"
8018
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 with open(filename, "w") as f:
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 f.write(jsonString)
10050
3750abc45d5e Corrected some code style issues detected by the extended checkers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
82 except (OSError, TypeError) 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
83 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
84 EricMessageBox.critical(
8018
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 None,
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 self.tr("Save Templates"),
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 self.tr(
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 "<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
89 " written.</p><p>Reason: {1}</p>"
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
90 ).format(filename, str(err)),
8018
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 )
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 return False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
93
8018
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 return True
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
95
8018
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 def readFile(self, filename: str) -> bool:
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 """
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 Public method to read the templates data from a templates JSON file.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
99
8023
56359a72ab10 TemplatesFile: implemented a docstring correction.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8018
diff changeset
100 @param filename name of the templates file
8018
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 @type str
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 @return flag indicating a successful read
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 @rtype bool
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 """
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 try:
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 with open(filename, "r") as f:
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 jsonString = f.read()
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 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
109 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
110 EricMessageBox.critical(
8018
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 None,
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 self.tr("Read Templates"),
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 self.tr(
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 "<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
115 "<p>Reason: {1}</p>"
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
116 ).format(filename, str(err)),
8018
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 )
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 return False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
119
8018
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 for templateGroup in templatesDict["template_groups"]:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
121 self.__viewer.addGroup(templateGroup["name"], templateGroup["language"])
8018
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 for template in templateGroup["templates"]:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
123 self.__viewer.addEntry(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
124 templateGroup["name"],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
125 template["name"],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
126 template["description"],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
127 template["text"],
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
128 quiet=True,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
129 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
130
8018
641c7c312f26 Implemented the JSON based templates files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 return True

eric ide

mercurial