E5XML/TasksReader.py

changeset 585
f40889943c0a
child 587
3078a9781573
equal deleted inserted replaced
584:b5d4c116952a 585:f40889943c0a
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2010 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a class for reading an XML tasks file.
8 """
9
10 import time
11
12 from E5Gui.E5Application import e5App
13
14 from .Config import tasksFileFormatVersion
15 from .XMLStreamReaderBase import XMLStreamReaderBase
16
17 import Utilities
18
19 class TasksReader(XMLStreamReaderBase):
20 """
21 Class for reading an XML tasks file.
22 """
23 def __init__(self, device, forProject = False, viewer = None):
24 """
25 Constructor
26
27 @param device reference to the I/O device to read from (QIODevice)
28 @param forProject flag indicating project related mode (boolean)
29 @param viewer reference to the task viewer (TaskViewer)
30 """
31 XMLStreamReaderBase.__init__(self, device)
32
33 self.viewer = viewer
34
35 self.forProject = forProject
36 if viewer:
37 self.viewer = viewer
38 else:
39 self.viewer = e5App().getObject("TaskViewer")
40
41 self.version = ""
42
43 def readXML(self):
44 """
45 Public method to read and parse the XML document.
46 """
47 while not self.atEnd():
48 self.readNext()
49 if self.isStartElement():
50 if self.name() == "Tasks":
51 self.version = self.attribute("version",
52 tasksFileFormatVersion)
53 elif self.name() == "Task":
54 self.__readTask()
55
56 self.showErrorMessage()
57
58 def __readTask(self):
59 """
60 Private method to read the task info.
61 """
62 task = {"summary" : "",
63 "priority" : 1,
64 "completed" : False,
65 "created" : 0,
66 "filename" : "",
67 "linenumber" : 0,
68 "bugfix" : False,
69 "description" : "",
70 }
71 task["priority"] = int(self.attribute("priority", "1"))
72
73 val = self.attribute("completed", "False")
74 if val in ["True", "False"]:
75 val = (val == "True")
76 else:
77 val = bool(int(val))
78 task["completed"] = val
79
80 val = self.attribute("bugfix", "False")
81 if val in ["True", "False"]:
82 val = (val == "True")
83 else:
84 val = bool(int(val))
85 task["bugfix"] = val
86
87 while not self.atEnd():
88 self.readNext()
89 if self.isEndElement() and self.name() == "Task":
90 self.viewer.addTask(task["summary"], priority = task["priority"],
91 filename = task["filename"], lineno = task["linenumber"],
92 completed = task["completed"], _time = task["created"],
93 isProjectTask = self.forProject, isBugfixTask = task["bugfix"],
94 longtext = task["description"])
95 break
96
97 if self.isStartElement():
98 if self.name() == "Summary":
99 task["summary"] = self.readElementText()
100 elif self.name() == "Description":
101 task["description"] = self.readElementText()
102 elif self.name() == "Created":
103 task["created"] = time.mktime(
104 time.strptime(self.readElementText(), "%Y-%m-%d, %H:%M:%S"))
105 elif self.name() == "Filename":
106 task["filename"] = \
107 Utilities.toNativeSeparators(self.readElementText())
108 elif self.name() == "Linenumber":
109 try:
110 task["linenumber"] = int(self.readElementText())
111 except ValueError:
112 pass

eric ide

mercurial