eric6/Sessions/SessionFile.py

Sat, 10 Apr 2021 18:38:27 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 10 Apr 2021 18:38:27 +0200
changeset 8218
7c09585bd960
parent 8164
c8b88e73b56f
child 8240
93b8a353c4bf
permissions
-rw-r--r--

Applied some more code simplifications suggested by the new Simplify checker (super(Foo, self) => super()).

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
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 from PyQt5.QtCore import QObject
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)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 except (TypeError, EnvironmentError) as err:
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)
29818ac4853c Implemented the JSON based session files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 except (EnvironmentError, json.JSONDecodeError) as err:
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