changeset 386:ffa86312ee81 treepkg-status

added classed for treepkg status xml generation
author Bjoern Ricks <bricks@intevation.de>
date Wed, 07 Jul 2010 15:40:48 +0000
parents d6fb7106f053
children c1f3be727f9d
files test/status/test_status.py treepkg/status/__init__.py treepkg/status/status.py treepkg/status/status.xsd
diffstat 4 files changed, 333 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/status/test_status.py	Wed Jul 07 15:40:48 2010 +0000
@@ -0,0 +1,29 @@
+# Copyright (C) 2010 by Intevation GmbH
+# Authors:
+# Bjoern Ricks <bjoern.ricks@intevation.de>
+#
+# This program is free software under the GPL (>=v2)
+# Read the file COPYING coming with the software for details.
+
+"""Tests for treepkg.status.status"""
+
+import unittest
+import os.path
+import sys
+
+test_dir = os.path.dirname(__file__)
+sys.path.append(os.path.join(test_dir, os.pardir, os.pardir))
+
+from treepkg.status.status import TreepkgStatus
+
+class TreepkgStatusTest(unittest.TestCase):
+
+    def test_toxml(self):
+        status = TreepkgStatus("testtreepkg")
+        dom = status.toxml()
+        xml = dom.toxml()
+        self.assertEquals("<status><name>testtreepkg</name></status>", xml)
+
+if __name__ == '__main__':
+    unittest.main()
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/treepkg/status/__init__.py	Wed Jul 07 15:40:48 2010 +0000
@@ -0,0 +1,6 @@
+# Copyright (C) 2007 by Intevation GmbH
+# Authors:
+# Bernhard Herzog <bh@intevation.de>
+#
+# This program is free software under the GPL (>=v2)
+# Read the file COPYING coming with the software for details.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/treepkg/status/status.py	Wed Jul 07 15:40:48 2010 +0000
@@ -0,0 +1,198 @@
+# Copyright (C) 2010 by Intevation GmbH
+# Authors:
+# Bjoern Ricks <bjoern.ricks@intevation.de>
+#
+# This program is free software under the GPL (>=v2)
+# Read the file COPYING coming with the software for details.
+
+"""Build treepkg status information"""
+
+import xml.dom.minidom
+
+TREEPKG_NAMESPACE_URI = "http://wald.intevation.org/projects/treepkg/"
+TREEPKG_NAMESPACE_PREFIX = "tpkg"
+
+def createTpkgElement(doc, name):
+    return doc.createElementNS(TREEPKG_NAMESPACE_URI, name)
+
+def createTpkgRoot(name):
+    domimpl = xml.dom.minidom.getDOMImplementation()
+    doc = domimpl.createDocument(TREEPKG_NAMESPACE_URI, name, None)
+    root = doc.documentElement
+    return (doc, root)
+
+class TreepkgStatus:
+
+    def __init__(self, name, treepkgpath=None, millpath=None, version=None):
+        self.name = name
+        self.treepkgpath = treepkgpath
+        self.millpath = millpath
+        self.version = version
+
+    def toxml(self):
+        (doc, root) = createTpkgRoot("status")
+        # add <name>
+        nameele = createTpkgElement(doc, "name")
+        text = doc.createTextNode(self.name)
+        nameele.appendChild(text)
+        root.appendChild(nameele)
+        # add <treepkgpath>
+        if self.treepkgpath:
+            treepkgpathele = createTpkgElement(doc, "treepkgpath")
+            text = doc.createTextNode(self.treepkgpath)
+            treepkgpathele.appendChild(text)
+            root.appendChild(treepkgpathele)
+        # add <millpath>
+        if self.millpath:
+            millpathele = createTpkgElement(doc, "millpath")
+            text = doc.createTextNode(self.millpath)
+            millpathele.appendChild(text)
+            root.appendChild(millpathele)
+        # add <version>
+        if self.version:
+            versionele = createTpkgElement(doc, "version")
+            text = doc.createTextNode(self.version)
+            versionele.appendChild(text)
+            root.appendChild(version)
+        return root
+
+class TreepkgTrack:
+    
+    def __init__(self, name):
+        self.name = name
+        self.revisions = []
+
+    def add_revision(self, revision):
+        self.revisions.append(revision)
+
+    def toxml(self):
+        (doc, root) = createTpkgRoot("track")
+        nameele = createTpkgElement(doc, "name")
+        text = doc.createTextNode(self.name)
+        nameele.appendChild(text)
+        root.appendChild(nameele)
+        for rev in self.revision:
+            root.appendChild(rev.toxml())
+        return root
+
+class TreepkgTrackRevision:
+
+    def __init__(self, number, rules, status, platform):
+        self.number = number
+        self.rules = rules
+        self.status = status
+        self.platform = platform
+
+    def toxml(self):
+        (doc, root) = createTpkgRoot("revision")
+        # add <number>
+        numberele = createTpkgElement(doc, "number")
+        text = doc.createTextNode(self.number)
+        numbverele.appendChild(text)
+        root.appendChild(numberele)
+        # add <rules>
+        rulesele = createTpkgElement(doc, "rules")
+        text = doc.createTextNode(self.rules)
+        rulesele.appendChild(text)
+        root.appendChild(rulesele)
+        # add <status><message></message></status>
+        statusele = createTpkgElement(doc, "status")
+        messageele = createTpkgElement(doc, "message")
+        text = doc.createTextNode(self.status)
+        messageele.appendChild(text)
+        statusele.appendChild(messageele)
+        root.appendChild(statusele)
+        # add <platform>
+        root.appendChild(platform.toxml())
+        return root
+
+class TreepkgPlatform:
+
+    def __init__(self, os, arch):
+        self.os = os
+        self.arch = arch
+        self.packages = []
+        self.logs = []
+
+    def add_package(self, package):
+        self.packages.append(package)
+
+    def add_log(self, log):
+        self.logs.append(log)
+
+    def toxml(self):
+        (doc, root) = createTpkgRoot("platform")
+        # add <os>
+        osele = createTpkgElement(doc, "os")
+        text = doc.createTextNode(self.os)
+        osele.appendChild(text)
+        root.appendChild(osele)
+        # add <arch>
+        archele = createTpkgElement(doc, "arch")
+        text = doc.createTextNode(sef.arch)
+        archele.appendChild(text)
+        root.appendChild(archele)
+        # add <packages>
+        packagesele = createTpkgElement(doc, "packages")
+        for package in self.packages:
+            packagesele.appendChild(package.toxml())
+        root.appendChild(packagesele)
+        # add <logs>
+        logsele = createTpkgElement(doc, "logs")
+        for log in self.logs:
+            losele.appendChild(log)
+        root.appendChild(logsele)
+        return root
+
+class TreepkgLog:
+
+    def __init__(self, name, path):
+        self.name = name
+        self.path = path
+
+    def toxml(self)
+        (doc, root) = createTpkgRoot("log")
+        # add <name>
+        nameele = createTpkgElement(doc, "name")
+        text = doc.createTextNode(self.name)
+        nameele.appendChild(text)
+        root.appendChild(nameele)
+        # add path
+        pathele = createTpkgElement(doc, "path")
+        text = doc.createTextNode(self.path)
+        pathele.appendChild(text)
+        root.appendChild(pathele)
+        return root
+
+class TreepkgPackage:
+        
+        def __init__(self, name, path, type, checksum = None):
+            self.name = name
+            self.path = path
+            self.type = type
+            self.checksum = checksum
+
+        def toxml(self):
+            (doc, root) = createTpkgRoot("package")
+            # add <name>
+            nameele = createTpkgElement(doc, "name")
+            text = doc.createTextNode(self.name)
+            nameele.appendChild(text)
+            root.appendChild(nameele)
+            # add <path>
+            pathele = createTpkgElement("path")
+            text = doc.createTextNode(self.path)
+            pathele.appendChild(text)
+            root.appendChild(pathele)
+            # add <checksum>
+            if self.checksum:
+                checksumele = createTpkgElement(doc, "checksum")
+                text = doc.createTextNode(self.checksum)
+                checksumele.appendChild(text)
+                root.appendChild(checksumele)
+            # add <type>
+            typeele = createTpkgElement(doc, "type")
+            text = doc.createTextNode(self.type)
+            typeele.appendChild(text)
+            root.appendChild(typeele)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/treepkg/status/status.xsd	Wed Jul 07 15:40:48 2010 +0000
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            xmlns:tpkg="http://wald.intevation.org/projects/treepkg/"
+            targetNamespace="http://wald.intevation.org/projects/treepkg/">
+
+    <xsd:element name="treepkg">
+        <xsd:complexType>
+            <xsd:sequence>
+                <xsd:element name="tracks" type="tpkg:tracks"/>
+                <xsd:element name="info" type="tpkg:info" minOccurs="1"/>
+            </xsd:sequence>
+            <!-- xml schema version -->
+            <xsd:attribute name="version" type="xsd:string"/>
+        </xsd:complexType>
+    </xsd:element>
+
+    <xsd:complexType name="info">
+        <xsd:sequence>
+            <xsd:element name="name" type="xsd:string" minOccurs="1"/>
+            <xsd:element name="treepkgpath" type="xsd:string"/>
+            <xsd:element name="millpath" type="xsd:string"/>
+            <!-- treepkg version e.g. svn revision  -->
+            <xsd:element name="version" type="xsd:string"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <xsd:complexType name="tracks">
+        <xsd:sequence>
+            <xsd:element name="track" type="tpkg:track" maxOccurs="unbounded"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <xsd:complexType name="track">
+        <xsd:sequence>
+            <xsd:element name="name" type="xsd:string" minOccurs="1"/>
+            <xsd:element name="revision" type="tpkg:revision"
+            maxOccurs="unbounded"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <xsd:complexType name="revision">
+        <xsd:sequence>
+            <xsd:element name="number" type="xsd:string" minOccurs="1"/>
+            <xsd:element name="rules" type="xsd:string" minOccurs="1"/>
+            <xsd:element name="status" type="tpkg:revisionstatus" minOccurs="1"/>
+            <xsd:element name="platform" type="tpkg:platform" minOccurs="1"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <xsd:complexType name="revisionstatus">
+        <xsd:sequence>
+            <xsd:element name="message" type="xsd:string"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <xsd:complexType name="platform">
+        <xsd:sequence>
+            <xsd:element name="os" type="xsd:string"/>
+            <xsd:element name="arch" type="xsd:string"/>
+            <xsd:element name="packages" type="tpkg:packages"/>
+            <xsd:element name="logs" type="tpkg:logs"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <xsd:complexType name="logs">
+        <xsd:sequence>
+            <xsd:element name="log" type="tpkg:log"/>
+        </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:sequence>
+    </xsd:complexType>
+
+
+    <xsd:complexType name="packages">
+        <xsd:sequence>
+            <xsd:element name="package" type="tpkg:package"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <xsd:complexType name="package">
+        <xsd:sequence>
+            <xsd:element name="name" type="xsd:string" minOccurs="1"/>
+            <xsd:element name="path" type="xsd:string" minOccurs="1">
+            <xsd:element name="checksum" type="xsd:string"/>
+            <xsd:element name="type" type="tpkg:pkgtype" minOccurs="1"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+    <xsd:simpleType name="pkgtype">
+        <xsd:restriction base="xsd:string">
+            <xsd:enumeration value="binary"/>
+            <xsd:enumeration value="source"/>
+        </xsd:restriction>
+    </xsd:simpleType>
+</xsd:schema>
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)