[Treepkg-commits] r367 - branches/treepkg-status/treepkg/info
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Wed Jul 21 17:52:16 CEST 2010
Author: bricks
Date: 2010-07-21 17:52:15 +0200 (Wed, 21 Jul 2010)
New Revision: 367
Modified:
branches/treepkg-status/treepkg/info/status.py
branches/treepkg-status/treepkg/info/status.xsd
Log:
implemented parsing from xml string
Modified: branches/treepkg-status/treepkg/info/status.py
===================================================================
--- branches/treepkg-status/treepkg/info/status.py 2010-07-13 16:46:17 UTC (rev 366)
+++ branches/treepkg-status/treepkg/info/status.py 2010-07-21 15:52:15 UTC (rev 367)
@@ -26,6 +26,29 @@
root = doc.documentElement
return (doc, root)
+def getTextFromNode(node):
+ if not node:
+ return None
+ textnode = node.firstChild
+ if not textnode or textnode.nodeType != node.TEXT_NODE:
+ return None
+ return textnode.data
+
+def getChild(node, name, required=False):
+ if not node:
+ if required:
+ raise TreepkgInfoException("")
+ return None
+ childs = node.getElementsByTagName(name)
+ if not childs:
+ if required:
+ raise TreepkgInfoException("")
+ return None
+ return childs[0]
+
+class TreepkgInfoException(Exception):
+ """ Exception class for TreepkgInfo """
+
class TreepkgInfo:
def __init__(self, config, numnewestrev=-1):
@@ -44,8 +67,12 @@
return self.tpkgroot.toxml()
@staticmethod
- def fromxml(xml): #FIXME
- pass
+ def fromxml(xml):
+ doc = xml.dom.minidom.parseString(xml)
+ root = doc.documentElement
+ if not root.tagName == "treepkg":
+ raise TreepkgInfoException("XML is not valid for treepkfinfo")
+ return TreepkgRootInfo.fromxml(root) # FIXME
def add_revisions(self, track, trackinfo):
revisions = track.get_revisions()
@@ -100,7 +127,7 @@
self.tracks.append(track)
def toxml(self):
- (doc, root) = createTpkgRoot("status")
+ (doc, root) = createTpkgRoot("info")
# add <name>
nameele = createTpkgElement(doc, "name")
text = doc.createTextNode(self.name)
@@ -130,6 +157,24 @@
tracksele.appendChild(track.toxml())
root.appendChild(tracksele)
return root
+
+ @staticmethod
+ def fromxml(node):
+ version = node.getAttribute("version")
+ infoele = getChild(node, "info", True)
+ nameele = getChild(infoele, "name", True)
+ name = getTextFromNode(nameele)
+ treepkgpathele = getChild(infoele, "treepkgpath")
+ treepkgpath = getTextFromNode(treepkgpathele)
+ trackspathele = getChild(infoele, "trackspath")
+ trackspath = getTextFromNode(trackspathele)
+ trackseles = node.getElementsByTagName("tracks")
+ tracks = []
+ for trackele in trackseles:
+ tracks.append(TreepkgTrackInfo.fromxml(trackele))
+ trackinfo = TreepkgRootInfo(name, treepkgpath, trackspath, version)
+ trackinfo.tracks = tracks
+ return trackinfo
class TreepkgTrackInfo:
@@ -156,6 +201,21 @@
root.appendChild(osele)
return root
+ @staticmethod
+ def fromxml(node):
+ nameele = getChild(node, "name", True)
+ name = getTextFromNode(nameele)
+ osele = getChild(node, "os")
+ os = getTextFromNode(osele)
+ treepkgtrackinfo = TreepkgTrackInfo(name, os)
+ treepkgtrackinfo.revisions = []
+ revisioneles = node.getElementsByTagName("revision")
+ for revele in revisioneles:
+ treepkgrevision = TreepkgTrackRevisionInfo.fromxml(revele)
+ treepkgtrackinfo.revisions.append(treepkgrevision)
+ return treepkgtrackinfo
+
+
class TreepkgTrackRevisionInfo:
def __init__(self, number, rules, status):
@@ -202,6 +262,28 @@
root.appendChild(logsele)
return root
+ @staticmethod
+ def fromxml(node):
+ numberele = getChild(node, "number", True)
+ number = getTextFromNode(numberele)
+ rulesele = getChild(node, "rules", True)
+ rules = getTextFromNode(rulesele)
+ statusele = getChild(node, "status", True)
+ messageele = getChild(statusele, "message")
+ message = getTextFromNode(messageele)
+ treepkgrevisioninfo = TreepkgTrackRevisionInfo(number, rules, message)
+ treepkgrevisioninfo.packages = []
+ treepkgrevisioninfo.logs = []
+ packageeles = getChild(node, "packages")
+ for packageele in packageeles:
+ treepkgrevisioninfo.packages.append(
+ TreepkgPackageInfo.fromxml(packageele))
+ logeles = getChild(node, "logs")
+ for logele in logeles:
+ treepkgrevisioninfo.logs.append(
+ TreepkgLogInfo.fromxml(logele))
+ return treepkgrevisioninfo
+
class TreepkgLogInfo:
def __init__(self, name, path):
@@ -222,6 +304,14 @@
root.appendChild(pathele)
return root
+ @staticmethod
+ def fromxml(node):
+ nameele = getChild(node, "name", True)
+ name = getTextFromNode(nameele)
+ pathele = getChild(node, "path", True)
+ path = getTextFromNode(pathele)
+ return TreepkgLogInfo(name, path)
+
class TreepkgPackageInfo:
def __init__(self, name, path, type, arch):
@@ -255,6 +345,20 @@
def add_checksum(self, checksum):
self.checksums.append(checksum)
+ @staticmethod
+ def fromxml(node):
+ nameele = getChild(node, "name", True)
+ name = getTextFromNode(nameele)
+ pathele = getChild(node, "path", True)
+ path = getTextFromNode(pathele)
+ ptype = node.getAttribute("type")
+ arch = node.getAttribute("arch")
+ packageinfo = TreepkgPackageInfo(name, path, ptype, arch)
+ checksumeles = node.getElementsByTagName("checksum")
+ for checksumele in checksumeles:
+ packageinfo.checksums.append(TreepkgChecksumInfo.fromxml(checksumele))
+ return packageinfo
+
class TreepkgChecksumInfo:
def __init__(self, checksum, type="md5"):
@@ -266,5 +370,13 @@
text = doc.createTextNode(self.checksum)
root.appendChild(text)
# add attribute type
- root.setAttributeNS(TREEPKG_NAMESPACE_URI, "type", self.type)
+ if type:
+ root.setAttributeNS(TREEPKG_NAMESPACE_URI, "type", self.type)
return root
+
+ @staticmethod
+ def fromxml(node):
+ checksumele = getChild(node, "checksum", True)
+ checksum = getTextFromNode(checksumele)
+ ctype = node.getAttribute("type")
+ return TreepkgChecksumInfo(checksum, ctype)
Modified: branches/treepkg-status/treepkg/info/status.xsd
===================================================================
--- branches/treepkg-status/treepkg/info/status.xsd 2010-07-13 16:46:17 UTC (rev 366)
+++ branches/treepkg-status/treepkg/info/status.xsd 2010-07-21 15:52:15 UTC (rev 367)
@@ -57,21 +57,22 @@
<xsd:complexType name="logs">
<xsd:sequence>
- <xsd:element name="log" type="tpkg:log"/>
+ <xsd:element name="log" type="tpkg:log" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType nam="log">
<xsd:sequence>
- <xsd:element name="name" type="xsd:string"/>
- <xsd:element name="path" type="xsd:string"/>
+ <xsd:element name="name" type="xsd:string" minOccurs="1"/>
+ <xsd:element name="path" type="xsd:string" minOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="packages">
<xsd:sequence>
- <xsd:element name="package" type="tpkg:package"/>
+ <xsd:element name="package" type="tpkg:package"
+ maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
@@ -88,7 +89,7 @@
<xsd:complexType name="checksum">
<xsd:sequence>
- <xsd:element name="checksum" type="xsd:string"/>
+ <xsd:element name="checksum" type="xsd:string" minOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="type" type="xsd:string"/>
</xsd:complexType>
More information about the Treepkg-commits
mailing list