eric7/Sessions/SessionFile.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 8319
ea11a3948f40
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.

8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de>
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
8025
aaad60a23960 Corrected some documentation strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8016
diff changeset
7 Module implementing a class representing the session JSON file.
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import json
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import time
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12
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
13 from PyQt6.QtCore import QObject
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 from E5Gui import E5MessageBox
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 from E5Gui.E5OverrideCursor import E5OverridenCursor
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 from E5Gui.E5Application import e5App
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 import Preferences
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 class SessionFile(QObject):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 """
8025
aaad60a23960 Corrected some documentation strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8016
diff changeset
24 Class representing the session JSON file.
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 """
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 def __init__(self, isGlobal: bool, parent: QObject = None):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 """
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 Constructor
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29
8012
ecf45f723038 Several corrections to the JSON file handlers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8009
diff changeset
30 @param isGlobal flag indicating a file for a global session
ecf45f723038 Several corrections to the JSON file handlers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8009
diff changeset
31 @type bool
8016
e484fc67677e Corrected some code documentation strings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8012
diff changeset
32 @param parent reference to the parent object (defaults to None)
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 @type QObject (optional)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 """
8218
7c09585bd960 Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8164
diff changeset
35 super().__init__(parent)
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 self.__isGlobal = isGlobal
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 def writeFile(self, filename: str) -> bool:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 """
8012
ecf45f723038 Several corrections to the JSON file handlers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8009
diff changeset
41 Public method to write the session data to a session JSON file.
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42
8012
ecf45f723038 Several corrections to the JSON file handlers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8009
diff changeset
43 @param filename name of the session file
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 @type str
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 @return flag indicating a successful write
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 @rtype bool
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 """
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 # get references to objects we need
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 project = e5App().getObject("Project")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 projectBrowser = e5App().getObject("ProjectBrowser")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 multiProject = e5App().getObject("MultiProject")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 vm = e5App().getObject("ViewManager")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 dbg = e5App().getObject("DebugUI")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 dbs = e5App().getObject("DebugServer")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 # prepare the session data dictionary
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 # step 0: header
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 sessionDict = {}
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 sessionDict["header"] = {}
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 if not self.__isGlobal:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 sessionDict["header"]["comment"] = (
8012
ecf45f723038 Several corrections to the JSON file handlers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8009
diff changeset
62 "eric session file for project {0}"
ecf45f723038 Several corrections to the JSON file handlers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8009
diff changeset
63 .format(project.getProjectName())
ecf45f723038 Several corrections to the JSON file handlers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8009
diff changeset
64 )
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 sessionDict["header"]["warning"] = (
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 "This file was generated automatically, do not edit."
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 )
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68
8031
ce5858a237d2 Changed the Project and MultiProject configuration option "XMLTimestamp" to "TimestampFile". A configuration check is suggested.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8025
diff changeset
69 if Preferences.getProject("TimestampFile") or self.__isGlobal:
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 sessionDict["header"]["saved"] = (
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 time.strftime('%Y-%m-%d, %H:%M:%S')
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 )
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 # step 1: open multi project and project for global session
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 sessionDict["MultiProject"] = ""
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 sessionDict["Project"] = ""
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 if self.__isGlobal:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 if multiProject.isOpen():
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 sessionDict["MultiProject"] = (
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 multiProject.getMultiProjectFile()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 )
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 if project.isOpen():
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 sessionDict["Project"] = project.getProjectFile()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 # step 2: all open (project) filenames and the active editor
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 if vm.canSplit():
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 sessionDict["ViewManagerSplits"] = {
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 "Count": vm.splitCount(),
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 "Orientation": vm.getSplitOrientation(),
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 }
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 else:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 sessionDict["ViewManagerSplits"] = {
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 "Count": 0,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 "Orientation": 1,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 }
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 editorsDict = {} # remember editors by file name to detect clones
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 sessionDict["Editors"] = []
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 allOpenEditorLists = vm.getOpenEditorsForSession()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 for splitIndex, openEditorList in enumerate(allOpenEditorLists):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 for editorIndex, editor in enumerate(openEditorList):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 fileName = editor.getFileName()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 if self.__isGlobal or project.isProjectFile(fileName):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 if fileName in editorsDict:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 isClone = editorsDict[fileName].isClone(editor)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 else:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 isClone = False
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 editorsDict[fileName] = editor
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 editorDict = {
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 "Filename": fileName,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 "Cursor": editor.getCursorPosition(),
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 "Folds": editor.contractedFolds(),
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 "Zoom": editor.getZoom(),
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 "Clone": isClone,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 "Splitindex": splitIndex,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 "Editorindex": editorIndex,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 }
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 sessionDict["Editors"].append(editorDict)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 aw = vm.getActiveName()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 sessionDict["ActiveWindow"] = {}
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 if aw and (self.__isGlobal or project.isProjectFile(aw)):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 ed = vm.getOpenEditor(aw)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 sessionDict["ActiveWindow"] = {
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 "Filename": aw,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 "Cursor": ed.getCursorPosition(),
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 }
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 # step 3: breakpoints
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 allBreaks = Preferences.getProject("SessionAllBreakpoints")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 projectFiles = project.getSources(True)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 bpModel = dbs.getBreakPointModel()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 if self.__isGlobal or allBreaks:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 sessionDict["Breakpoints"] = bpModel.getAllBreakpoints()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 else:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 sessionDict["Breakpoints"] = [
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 bp
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 for bp in bpModel.getAllBreakpoints()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 if bp[0] in projectFiles
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 ]
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 # step 4: watch expressions
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 wpModel = dbs.getWatchPointModel()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 sessionDict["Watchpoints"] = wpModel.getAllWatchpoints()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 # step 5: debug info
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 if self.__isGlobal:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 if len(dbg.argvHistory):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 dbgCmdline = dbg.argvHistory[0]
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 else:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 dbgCmdline = ""
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 if len(dbg.wdHistory):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 dbgWd = dbg.wdHistory[0]
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 else:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 dbgWd = ""
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 if len(dbg.envHistory):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 dbgEnv = dbg.envHistory[0]
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 else:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 dbgEnv = ""
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 if len(dbg.multiprocessNoDebugHistory):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 dbgMultiprocessNoDebug = (
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 dbg.multiprocessNoDebugHistory[0]
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 )
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 else:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 dbgMultiprocessNoDebug = ""
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 sessionDict["DebugInfo"] = {
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 "VirtualEnv": dbg.lastUsedVenvName,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 "CommandLine": dbgCmdline,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 "WorkingDirectory": dbgWd,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 "Environment": dbgEnv,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 "ReportExceptions": dbg.exceptions,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 "Exceptions": dbg.excList,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 "IgnoredExceptions": dbg.excIgnoreList,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 "AutoClearShell": dbg.autoClearShell,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 "TracePython": dbg.tracePython,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 "AutoContinue": dbg.autoContinue,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 "EnableMultiprocess": dbg.enableMultiprocess,
8163
29fb6d420a25 Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8064
diff changeset
178 "MultiprocessNoDebug": dbgMultiprocessNoDebug,
29fb6d420a25 Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8064
diff changeset
179 "GlobalConfigOverride": dbg.overrideGlobalConfig,
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 }
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 else:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 sessionDict["DebugInfo"] = {
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 "VirtualEnv": project.dbgVirtualEnv,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 "CommandLine": project.dbgCmdline,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 "WorkingDirectory": project.dbgWd,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 "Environment": project.dbgEnv,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 "ReportExceptions": project.dbgReportExceptions,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 "Exceptions": project.dbgExcList,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 "IgnoredExceptions": project.dbgExcIgnoreList,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 "AutoClearShell": project.dbgAutoClearShell,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 "TracePython": project.dbgTracePython,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 "AutoContinue": project.dbgAutoContinue,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 "EnableMultiprocess": project.dbgEnableMultiprocess,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 "MultiprocessNoDebug": project.dbgMultiprocessNoDebug,
8163
29fb6d420a25 Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8064
diff changeset
195 "GlobalConfigOverride": project.dbgGlobalConfigOverride,
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 }
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 # step 6: bookmarks
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 bookmarksList = []
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 for fileName in editorsDict:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 if self.__isGlobal or project.isProjectFile(fileName):
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 editor = editorsDict[fileName]
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 bookmarks = editor.getBookmarks()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 if bookmarks:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 bookmarksList.append({
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 "Filename": fileName,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 "Lines": bookmarks,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 })
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 sessionDict["Bookmarks"] = bookmarksList
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 # step 7: state of the various project browsers
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 browsersList = []
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 for browserName in projectBrowser.getProjectBrowserNames():
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 expandedItems = (
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 projectBrowser.getProjectBrowser(browserName)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 .getExpandedItemNames()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 )
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 if expandedItems:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 browsersList.append({
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 "Name": browserName,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 "ExpandedItems": expandedItems,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 })
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 sessionDict["ProjectBrowserStates"] = browsersList
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 try:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 jsonString = json.dumps(sessionDict, indent=2)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 with open(filename, "w") as f:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 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
229 except (TypeError, OSError) as err:
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 with E5OverridenCursor():
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 E5MessageBox.critical(
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 None,
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 self.tr("Save Session"),
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 self.tr(
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 "<p>The session file <b>{0}</b> could not be"
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 " written.</p><p>Reason: {1}</p>"
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 ).format(filename, str(err))
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 )
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 return False
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 return True
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 def readFile(self, filename: str) -> bool:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 """
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 Public method to read the session data from a session JSON file.
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 @param filename name of the project file
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 @type str
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 @return flag indicating a successful read
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 @rtype bool
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 """
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 try:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 with open(filename, "r") as f:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 jsonString = f.read()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 sessionDict = 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
256 except (OSError, json.JSONDecodeError) as err:
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 E5MessageBox.critical(
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 None,
8012
ecf45f723038 Several corrections to the JSON file handlers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8009
diff changeset
259 self.tr("Read Session"),
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 self.tr(
8012
ecf45f723038 Several corrections to the JSON file handlers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8009
diff changeset
261 "<p>The session file <b>{0}</b> could not be read.</p>"
ecf45f723038 Several corrections to the JSON file handlers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8009
diff changeset
262 "<p>Reason: {1}</p>"
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 ).format(filename, str(err))
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 )
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 return False
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 # get references to objects we need
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 project = e5App().getObject("Project")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 projectBrowser = e5App().getObject("ProjectBrowser")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 multiProject = e5App().getObject("MultiProject")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 vm = e5App().getObject("ViewManager")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 dbg = e5App().getObject("DebugUI")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 dbs = e5App().getObject("DebugServer")
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 # step 1: multi project and project
8164
c8b88e73b56f Fixed an issue related to an empty global config override dictionary.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8163
diff changeset
276 # =================================
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 if sessionDict["MultiProject"]:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 multiProject.openMultiProject(sessionDict["MultiProject"], False)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 if sessionDict["Project"]:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 project.openProject(sessionDict["Project"], False)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 # step 2: (project) filenames and the active editor
8164
c8b88e73b56f Fixed an issue related to an empty global config override dictionary.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8163
diff changeset
283 # =================================================
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 vm.setSplitOrientation(sessionDict["ViewManagerSplits"]["Orientation"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 vm.setSplitCount(sessionDict["ViewManagerSplits"]["Count"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 editorsDict = {}
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 for editorDict in sessionDict["Editors"]:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 if editorDict["Clone"] and editorDict["Filename"] in editorsDict:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 editor = editorsDict[editorDict["Filename"]]
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 ed = vm.newEditorView(
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 editorDict["Filename"], editor, editor.getFileType(),
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 indexes=(editorDict["Splitindex"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 editorDict["Editorindex"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 )
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 else:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 ed = vm.openSourceFile(
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 editorDict["Filename"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 indexes=(editorDict["Splitindex"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 editorDict["Editorindex"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 )
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 editorsDict[editorDict["Filename"]] = ed
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 if ed is not None:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 ed.zoomTo(editorDict["Zoom"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 if editorDict["Folds"]:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 ed.recolor()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307 ed.setContractedFolds(editorDict["Folds"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 ed.setCursorPosition(*editorDict["Cursor"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 # step 3: breakpoints
8164
c8b88e73b56f Fixed an issue related to an empty global config override dictionary.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8163
diff changeset
311 # ===================
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 bpModel = dbs.getBreakPointModel()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 bpModel.addBreakPoints(sessionDict["Breakpoints"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 # step 4: watch expressions
8164
c8b88e73b56f Fixed an issue related to an empty global config override dictionary.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8163
diff changeset
316 # =========================
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 wpModel = dbs.getWatchPointModel()
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 wpModel.addWatchPoints(sessionDict["Watchpoints"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 # step 5: debug info
8164
c8b88e73b56f Fixed an issue related to an empty global config override dictionary.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8163
diff changeset
321 # ==================
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 debugInfoDict = sessionDict["DebugInfo"]
8164
c8b88e73b56f Fixed an issue related to an empty global config override dictionary.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8163
diff changeset
323
c8b88e73b56f Fixed an issue related to an empty global config override dictionary.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8163
diff changeset
324 # adjust for newer session types
c8b88e73b56f Fixed an issue related to an empty global config override dictionary.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8163
diff changeset
325 if "GlobalConfigOverride" not in debugInfoDict:
c8b88e73b56f Fixed an issue related to an empty global config override dictionary.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8163
diff changeset
326 debugInfoDict["GlobalConfigOverride"] = {
c8b88e73b56f Fixed an issue related to an empty global config override dictionary.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8163
diff changeset
327 "enable": False,
c8b88e73b56f Fixed an issue related to an empty global config override dictionary.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8163
diff changeset
328 "redirect": True,
c8b88e73b56f Fixed an issue related to an empty global config override dictionary.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8163
diff changeset
329 }
c8b88e73b56f Fixed an issue related to an empty global config override dictionary.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8163
diff changeset
330
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 dbg.lastUsedVenvName = debugInfoDict["VirtualEnv"]
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 dbg.setArgvHistory(debugInfoDict["CommandLine"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 dbg.setWdHistory(debugInfoDict["WorkingDirectory"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 dbg.setEnvHistory(debugInfoDict["Environment"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 dbg.setExceptionReporting(debugInfoDict["ReportExceptions"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 dbg.setExcList(debugInfoDict["Exceptions"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 dbg.setExcIgnoreList(debugInfoDict["IgnoredExceptions"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 dbg.setAutoClearShell(debugInfoDict["AutoClearShell"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 dbg.setTracePython(debugInfoDict["TracePython"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 dbg.setAutoContinue(debugInfoDict["AutoContinue"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 dbg.setEnableMultiprocess(debugInfoDict["EnableMultiprocess"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 dbg.setMultiprocessNoDebugHistory(debugInfoDict["MultiprocessNoDebug"])
8163
29fb6d420a25 Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8064
diff changeset
343 dbg.setEnableGlobalConfigOverride(
29fb6d420a25 Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8064
diff changeset
344 debugInfoDict["GlobalConfigOverride"])
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 if not self.__isGlobal:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 project.setDbgInfo(
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 debugInfoDict["VirtualEnv"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 debugInfoDict["CommandLine"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 debugInfoDict["WorkingDirectory"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 debugInfoDict["Environment"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 debugInfoDict["ReportExceptions"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 debugInfoDict["Exceptions"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 debugInfoDict["IgnoredExceptions"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354 debugInfoDict["AutoClearShell"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 debugInfoDict["TracePython"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 debugInfoDict["AutoContinue"],
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 debugInfoDict["EnableMultiprocess"],
8163
29fb6d420a25 Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8064
diff changeset
358 debugInfoDict["MultiprocessNoDebug"],
29fb6d420a25 Debugger
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8064
diff changeset
359 debugInfoDict["GlobalConfigOverride"],
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 )
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 # step 6: bookmarks
8164
c8b88e73b56f Fixed an issue related to an empty global config override dictionary.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8163
diff changeset
363 # =================
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 for bookmark in sessionDict["Bookmarks"]:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365 editor = vm.getOpenEditor(bookmark["Filename"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366 if editor is not None:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367 for lineno in bookmark["Lines"]:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 editor.toggleBookmark(lineno)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370 # step 7: state of the various project browsers
8164
c8b88e73b56f Fixed an issue related to an empty global config override dictionary.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8163
diff changeset
371 # =============================================
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 for browserState in sessionDict["ProjectBrowserStates"]:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373 browser = projectBrowser.getProjectBrowser(browserState["Name"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 if browser is not None:
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 browser.expandItemsByName(browserState["ExpandedItems"])
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 # step 8: active window
8164
c8b88e73b56f Fixed an issue related to an empty global config override dictionary.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8163
diff changeset
378 # =====================
8064
756747ba088c SessionFile: corrected an issue reading a session file with an empty active window entry.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8031
diff changeset
379 if sessionDict["ActiveWindow"]:
756747ba088c SessionFile: corrected an issue reading a session file with an empty active window entry.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8031
diff changeset
380 vm.openFiles(sessionDict["ActiveWindow"]["Filename"])
756747ba088c SessionFile: corrected an issue reading a session file with an empty active window entry.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8031
diff changeset
381 ed = vm.getOpenEditor(sessionDict["ActiveWindow"]["Filename"])
756747ba088c SessionFile: corrected an issue reading a session file with an empty active window entry.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8031
diff changeset
382 if ed is not None:
756747ba088c SessionFile: corrected an issue reading a session file with an empty active window entry.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8031
diff changeset
383 ed.setCursorPosition(*sessionDict["ActiveWindow"]["Cursor"])
756747ba088c SessionFile: corrected an issue reading a session file with an empty active window entry.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8031
diff changeset
384 ed.ensureCursorVisible()
8009
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386 return True

eric ide

mercurial