Catalog generation enhancements

This commit is contained in:
James Turner
2018-07-25 11:38:52 +01:00
parent 0cc48e148f
commit 0b46052259
3 changed files with 107 additions and 70 deletions
+24 -49
View File
@@ -2,7 +2,7 @@
import argparse
import datetime
import lxml.etree as ET
import xml.etree.cElementTree as ET
import os
import re
import sgprops
@@ -61,11 +61,19 @@ def scan_set_file(aircraft_dir, set_file, includes):
if sim_node.hasChild('authors'):
# aircraft has structured authors data, handle that
variant['authors'] = extract_authors(sim_node.getChild('authors'))
elif sim_node.hasChild('author'):
variant['authors'] = sim_node.getChild('authors')
# can have legacy author tag alongside new strucutred data for
# backwards FG compatability
if sim_node.hasChild('author'):
variant['author'] = sim_node.getValue("author", None)
if sim_node.hasChild('maintainers'):
variant['maintainers'] = sim_node.getChild('maintainers')
if sim_node.hasChild('urls'):
variant['urls'] = sim_node.getChild('urls')
if sim_node.hasChild('long-description'):
variant['description'] = sim_node.getValue("long-description", None)
variant['id'] = base_id
@@ -79,11 +87,7 @@ def scan_set_file(aircraft_dir, set_file, includes):
variant['previews'] = extract_previews(sim_node.getChild('previews'), aircraft_dir)
if sim_node.hasChild('rating'):
rating_node = sim_node.getChild("rating")
variant['rating_FDM'] = rating_node.getValue("FDM", 0)
variant['rating_systems'] = rating_node.getValue("systems", 0)
variant['rating_cockpit'] = rating_node.getValue("cockpit", 0)
variant['rating_model'] = rating_node.getValue("model", 0)
variant['rating'] = sim_node.getChild("rating")
if sim_node.hasChild('tags'):
variant['tags'] = extract_tags(sim_node.getChild('tags'), set_file)
@@ -125,20 +129,6 @@ def extract_tags(tags_node, set_path):
return result
def extract_authors(authors_node):
result = []
for author in authors_node.getChildren("author"):
authorName = author.getValue("name", None)
if (authorName == None):
continue
authorNick = author.getValue("nick", None)
authorEmail = author.getValue("email", None)
authorDesc = author.getValue("description", None)
result.append({'name':authorName, 'nick':authorNick, 'email':authorEmail, 'description':authorDesc})
return result
# scan all the -set.xml files in an aircraft directory. Returns a
# package dict and a list of variants.
def scan_aircraft_dir(aircraft_dir, includes):
@@ -217,20 +207,8 @@ def append_tag_nodes(node, variant):
def append_author_nodes(node, info):
if 'authors' in info:
authors_node = ET.Element('authors')
for a in info['authors']:
a_node = ET.Element('author')
a_node.append(make_xml_leaf('name', a['name']))
if (a['email'] != None):
a_node.append(make_xml_leaf('email', a['email']))
if (a['nick'] != None):
a_node.append(make_xml_leaf('nick', a['nick']))
if (a['description'] != None):
a_node.append(make_xml_leaf('description', a['description']))
authors_node.append(a_node)
node.append(authors_node)
elif 'author' in info:
node.append(info['authors']._createXMLElement())
if 'author' in info:
# traditional single author string
node.append( make_xml_leaf('author', info['author']) )
@@ -249,18 +227,9 @@ def make_aircraft_node(aircraftDirName, package, variants, downloadBase):
if 'minimum-fg-version' in package:
package_node.append( make_xml_leaf('minimum-fg-version', package['minimum-fg-version']) )
if 'rating_FDM' in package or 'rating_systems' in package \
or 'rating_cockpit' in package or 'rating_model' in package:
rating_node = ET.Element('rating')
package_node.append(rating_node)
rating_node.append( make_xml_leaf('FDM',
package['rating_FDM']) )
rating_node.append( make_xml_leaf('systems',
package['rating_systems']) )
rating_node.append( make_xml_leaf('cockpit',
package['rating_cockpit']) )
rating_node.append( make_xml_leaf('model',
package['rating_model']) )
if 'rating' in package:
package_node.append(package['rating']._createXMLElement())
package_node.append( make_xml_leaf('id', package['id']) )
for variant in variants:
variant_node = ET.Element('variant')
@@ -303,4 +272,10 @@ def make_aircraft_node(aircraftDirName, package, variants, downloadBase):
append_preview_nodes(package_node, package, downloadBase, aircraftDirName)
append_tag_nodes(package_node, package)
if 'maintainers' in package:
package_node.append(package['maintainers']._createXMLElement())
if 'urls' in package:
package_node.append(package['urls']._createXMLElement())
return package_node