7
|
1 """
|
|
2 Project that can be stored to and loaded from XML.
|
|
3 """
|
|
4
|
|
5 from xml.sax import ContentHandler, make_parser
|
|
6 import xml.dom.minidom as md
|
|
7 import os.path
|
|
8
|
|
9 class ProjectContentHandler(ContentHandler):
|
|
10 def __init__(self, project):
|
|
11 self.project = project
|
|
12 self.inFiles = False
|
|
13 def startElement(self, name, attrs):
|
|
14 if name == 'Project':
|
|
15 self.project.name = attrs['name']
|
|
16 if name == 'Files':
|
|
17 self.inFiles = True
|
|
18 if name == 'File' and self.inFiles:
|
|
19 self.project.files.append(attrs['Filename'])
|
|
20 def endElement(self, name):
|
|
21 if name == 'Files':
|
|
22 self.inFiles = False
|
|
23
|
15
|
24 class ProjectFile:
|
|
25 def __init__(self, filename):
|
|
26 self.filename = filename
|
|
27
|
7
|
28 class Project:
|
15
|
29 def __init__(self, filename, isnew=False):
|
7
|
30 self.name = ""
|
|
31 self.files = []
|
|
32 self.settings = {}
|
15
|
33 self.filename = filename
|
|
34
|
|
35 if not isnew:
|
|
36 """ Load the project from the XML file """
|
|
37 parser = make_parser()
|
|
38 handler = ProjectContentHandler(self)
|
|
39 parser.setContentHandler(handler)
|
|
40 parser.parse(filename)
|
7
|
41
|
|
42 def save(self, filename):
|
|
43 """ Save the project in XML format """
|
|
44 # Create document:
|
|
45 doc = md.Document()
|
|
46 # Add project:
|
|
47 project = doc.createElement("Project")
|
|
48 project.setAttribute("name", self.name)
|
|
49 doc.appendChild(project)
|
|
50
|
|
51 # Add project files:
|
|
52 filesNode = doc.createElement("Files")
|
|
53 project.appendChild(filesNode)
|
|
54 for f in self.files:
|
|
55 fe = doc.createElement("File")
|
|
56 fe.setAttribute("Filename", f)
|
|
57 filesNode.appendChild(fe)
|
|
58
|
|
59 # Write the XML file:
|
|
60 xml = doc.toprettyxml()
|
|
61 with open(filename, 'w') as f:
|
|
62 f.write(xml)
|
|
63
|
15
|
64 def loadProjectFile(self, filename):
|
|
65 basedir = os.path.dirname(self.filename)
|
|
66 filename = os.path.join(basedir, filename)
|
|
67 with open(filename, 'r') as f:
|
|
68 src = f.read()
|
|
69 return src
|
7
|
70
|