Mercurial > lcfOS
diff python/libs/project.py @ 67:99bf4f7d47f4
Changed project storage
author | windel |
---|---|
date | Fri, 12 Oct 2012 16:11:31 +0200 |
parents | 32078200cdd6 |
children | 654c5ac4f2c5 |
line wrap: on
line diff
--- a/python/libs/project.py Sun Oct 07 17:27:09 2012 +0200 +++ b/python/libs/project.py Fri Oct 12 16:11:31 2012 +0200 @@ -1,70 +1,32 @@ """ - Project that can be stored to and loaded from XML. + source project + contains: + - modules + - primitives like functions, types and variables + - other modules + """ -from xml.sax import ContentHandler, make_parser -import xml.dom.minidom as md -import os.path - -class ProjectContentHandler(ContentHandler): - def __init__(self, project): - self.project = project - self.inFiles = False - def startElement(self, name, attrs): - if name == 'Project': - self.project.name = attrs['name'] - if name == 'Files': - self.inFiles = True - if name == 'File' and self.inFiles: - self.project.files.append(attrs['Filename']) - def endElement(self, name): - if name == 'Files': - self.inFiles = False - -class ProjectFile: - def __init__(self, filename): - self.filename = filename +import json class Project: - def __init__(self, filename, isnew=False): + def __init__(self, filename=None): self.name = "" - self.files = [] + self.modules = [] + self.elements = [] self.settings = {} self.filename = filename - if not isnew: + if self.filename: """ Load the project from the XML file """ - parser = make_parser() - handler = ProjectContentHandler(self) - parser.setContentHandler(handler) - parser.parse(filename) - - def save(self, filename): - """ Save the project in XML format """ - # Create document: - doc = md.Document() - # Add project: - project = doc.createElement("Project") - project.setAttribute("name", self.name) - doc.appendChild(project) + with open(self.filename, 'r') as f: + d = json.load(f) + self.elements = d['elements'] - # Add project files: - filesNode = doc.createElement("Files") - project.appendChild(filesNode) - for f in self.files: - fe = doc.createElement("File") - fe.setAttribute("Filename", f) - filesNode.appendChild(fe) + def save(self): + if self.filename: + d = {'elements': self.elements} + print(d) + with open(self.filename, 'w') as f: + json.dump(d, f) - # Write the XML file: - xml = doc.toprettyxml() - with open(filename, 'w') as f: - f.write(xml) - - def loadProjectFile(self, filename): - basedir = os.path.dirname(self.filename) - filename = os.path.join(basedir, filename) - with open(filename, 'r') as f: - src = f.read() - return src -