From c20802b84f5e9c1aba97127168a6ba20d5f34afa Mon Sep 17 00:00:00 2001 From: James Turner Date: Tue, 19 Feb 2013 09:40:08 +0000 Subject: [PATCH] XML write-out improving. Use existing catalog for static data, revision counting. --- create_catalog.py | 72 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 66 insertions(+), 6 deletions(-) diff --git a/create_catalog.py b/create_catalog.py index 0082553..32aa968 100755 --- a/create_catalog.py +++ b/create_catalog.py @@ -12,10 +12,24 @@ import xml.etree.cElementTree as ET rootPath = sys.argv[1] outputDir = sys.argv[2] -shutil.rmtree(outputDir) +existingCatalogPath = os.path.join(outputDir, 'catalog.xml') +existingCatalog = None +if os.path.exists(existingCatalogPath): + existingCatalogPath = ET.parse(existingCatalogPath) + +for file in os.listdir(outputDir): + if fnmatch.fnmatch(file, '*.tar.gz'): + os.remove(os.path.join(outputDir, file)); + + thumbsDir = os.path.join(outputDir, 'thumbs') +shutil.rmtree(thumbsDir) os.makedirs(thumbsDir) +def setProperty(node, id, value): + s = ET.SubElement(node, id) + s.text = value + def parse_setXml(path): tree = ET.parse(path) @@ -34,6 +48,7 @@ def parse_setXml(path): d = {} + d['desc'] = desc d['ratings'] = ratings; d['status'] = tree.find('sim/status') d['authors'] = tree.findall('sim/author') @@ -60,10 +75,12 @@ def process_aircraft(acft, path): d['set'] = s[0:-8] aircraft.append(d) - + + thumbnailNames = [] # copy thumbnails for t in thumbs: outThumb = os.path.join(thumbsDir, acft + "-" + t) + thumbnailNames.append(acft + "-" + t) shutil.copyfile(os.path.join(path, t), outThumb) if len(aircraft) == 0: @@ -77,21 +94,64 @@ def process_aircraft(acft, path): tar.close() digest = hashlib.md5(open(outTar, 'r').read()).hexdigest() + revision = 1 + + # revision check + if acft in existingPackages: + previousMd5 = existingPackages[acft].find('md5').text + previousRevsion = int(existingPackages[acft].find('revision').text) + if digest != previousMd5: + print acft + ": MD5 has changed" + revision = previousRevsion + 1 + else: + existingPackages[acft] = ET.Element('package') + + setProperty(existingPackages[acft], 'id', acft) + setProperty(existingPackages[acft], 'revision', str(revision)) + setProperty(existingPackages[acft], 'md5', digest) + setProperty(existingPackages[acft], 'description', aircraft[0]['desc']) + + #setProperty(existingPackages[acft], 'thumbnails', thumbnailNames) + + for t in thumbnailNames: + tn = ET.SubElement(existingPackages[acft], 'thumbnail') + tn.text = 'thumbs/' + t + + existingPackages[acft].append(aircraft[0]['ratings']) + print "wrote tarfile, digest is " + digest root = ET.Element('PropertyList') catalogTree = ET.ElementTree(root) -licenseElement = ET.SubElement(root, 'license') -licenseElement.text = 'gpl' +existingPackages = dict() -urlElement = ET.SubElement(root, 'url') -urlElement.text = 'http://catalog.xml' +if (existingCatalog is not None): + print 'have existing catalog data' + + root.append(existingCatalog.find('license')) + root.append(existingCatalog.find('url')) + root.append(existingCatalog.find('description')) + root.append(existingCatalog.find('id')) + + # existing data (for revision incrementing) + for n in existingCatalog.findall('package/id'): + existingPackages[n.text] = n; + +#licenseElement = ET.SubElement(root, 'license') +#licenseElement.text = 'gpl' + +#urlElement = ET.SubElement(root, 'url') +#urlElement.text = 'http://catalog.xml' for acft in os.listdir(rootPath): path = os.path.join(rootPath, acft); if (os.path.isdir(path)): process_aircraft(acft, path) + +for ep in existingPackages: + root.append(existingPackages[ep]) + catalogTree.write(os.path.join(outputDir, 'catalog.xml'), 'UTF-8')