1
0
Fork 0

Reorganize catalog modules

- Move the support modules inside python3-flightgear/flightgear/ and
  remove their shebang, if any.
- Accordingly adapt the import statements.
- Change shebangs from e.g. '#! /usr/bin/python' to
  '#! /usr/bin/env python3'.
- Small changes to make Python 3 happy with all scripts.

catalog/check_aircraft.py should be run under Python 3 from now on.
This commit is contained in:
Florent Rougon 2020-06-19 12:06:21 +02:00
parent d259ec0b76
commit 1c2d17d869
9 changed files with 48 additions and 33 deletions

View file

@ -22,6 +22,9 @@ The script can be run directly from this directory, or the script and its
modules can be copied together and run from any location. The steps to use modules can be copied together and run from any location. The steps to use
these are: these are:
* Have something like `export PYTHONPATH="/path/to/fgmeta/python3-flightgear"`
in your shell setup or use a .pth file (see `python3-flightgear/README.md`
for more details).
* Create an output directory where the catalog and zip files will be located. * Create an output directory where the catalog and zip files will be located.
* Copy the configuration files `catalog.config.xml`, `template.xml`, and * Copy the configuration files `catalog.config.xml`, `template.xml`, and
`zip-excludes.lst` from one of the `*catalog*` example directories into the `zip-excludes.lst` from one of the `*catalog*` example directories into the

View file

View file

@ -1,8 +1,10 @@
#!/usr/bin/python #! /usr/bin/env python3
import argparse import argparse
import os import os
import sgprops
from flightgear.meta import sgprops
def check_meta_data(aircraft_dir, set_file, includes): def check_meta_data(aircraft_dir, set_file, includes):
base_file = os.path.basename(set_file) base_file = os.path.basename(set_file)
@ -13,44 +15,46 @@ def check_meta_data(aircraft_dir, set_file, includes):
root_node = sgprops.readProps(set_path, includePaths = includes) root_node = sgprops.readProps(set_path, includePaths = includes)
if not root_node.hasChild("sim"): if not root_node.hasChild("sim"):
print "-set.xml has no <sim> node:", set_path print("-set.xml has no <sim> node:", set_path)
return return
sim_node = root_node.getChild("sim") sim_node = root_node.getChild("sim")
if not sim_node.hasChild('description'): if not sim_node.hasChild('description'):
print "-set.xml missing <description>:", set_path print("-set.xml missing <description>:", set_path)
if not sim_node.hasChild('long-description'): if not sim_node.hasChild('long-description'):
print "-set.xml missing <long-description>:", set_path print("-set.xml missing <long-description>:", set_path)
if not sim_node.hasChild('authors'): if not sim_node.hasChild('authors'):
print "-set.xml is missing structured <authors> data:", set_path print("-set.xml is missing structured <authors> data:", set_path)
if not sim_node.hasChild('tags'): if not sim_node.hasChild('tags'):
print "-set.xml does not define any tags", set_path print("-set.xml does not define any tags", set_path)
# check for non-standard tags # check for non-standard tags
if not sim_node.hasChild('thumbnail'): if not sim_node.hasChild('thumbnail'):
print "-set.xml does not define a thumbnail", set_path print("-set.xml does not define a thumbnail", set_path)
# check thumbnail size and format # check thumbnail size and format
if not sim_node.hasChild('rating'): if not sim_node.hasChild('rating'):
print "-set.xml does not define any ratings", set_path print("-set.xml does not define any ratings", set_path)
if not sim_node.hasChild('minimum-fg-version'): if not sim_node.hasChild('minimum-fg-version'):
print "-set.xml does not define a minimum FG version", set_path print("-set.xml does not define a minimum FG version", set_path)
# check all the -set.xml files in an aircraft directory.
# check all the -set.xml files in an aircraft directory.
def check_aircraft_dir(d, includes): def check_aircraft_dir(d, includes):
if not os.path.isdir(d): if not os.path.isdir(d):
return return
files = os.listdir(d) files = os.listdir(d)
for file in sorted(files, key=lambda s: s.lower()): for f in sorted(files, key=lambda s: s.lower()):
if file.endswith('-set.xml'): if f.endswith('-set.xml'):
check_meta_data(d, file, includes) check_meta_data(d, f, includes)
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument("--include", help="Include directory to validate -set.xml parsing", parser.add_argument("--include", help="Include directory to validate -set.xml parsing",
@ -60,7 +64,7 @@ args = parser.parse_args()
for d in args.dir: for d in args.dir:
if not os.path.isdir(d): if not os.path.isdir(d):
print "Skipping missing directory:", d print("Skipping missing directory:", d)
names = os.listdir(d) names = os.listdir(d)
for name in sorted(names, key=lambda s: s.lower()): for name in sorted(names, key=lambda s: s.lower()):
@ -70,4 +74,3 @@ for d in args.dir:
acftDir = os.path.join(d, name) acftDir = os.path.join(d, name)
check_aircraft_dir(acftDir, args.include) check_aircraft_dir(acftDir, args.include)

View file

@ -1,15 +1,16 @@
#!/usr/bin/python #! /usr/bin/env python3
import unittest import unittest
import sgprops
import os import os
from os.path import join from os.path import join
import catalog
import lxml.etree as ET import lxml.etree as ET
from shutil import rmtree from shutil import rmtree
from tempfile import mkdtemp from tempfile import mkdtemp
import zipfile import zipfile
from flightgear.meta import sgprops
from flightgear.meta.aircraft_catalogs import catalog
catalog.quiet = True catalog.quiet = True
@ -247,7 +248,7 @@ class ZipTests(unittest.TestCase):
"""General checks for the zip file.""" """General checks for the zip file."""
# Check for file existence. # Check for file existence.
self.assert_(os.access(file_name, os.F_OK)) self.assertTrue(os.access(file_name, os.F_OK))
# Check the contents. # Check the contents.
file = zipfile.ZipFile(file_name) file = zipfile.ZipFile(file_name)

View file

@ -1,7 +1,9 @@
#! /usr/bin/env python3
import unittest import unittest
import types from flightgear.meta import sgprops
import sgprops
class SGProps(unittest.TestCase): class SGProps(unittest.TestCase):
@ -9,14 +11,14 @@ class SGProps(unittest.TestCase):
parsed = sgprops.readProps("testData/props1.xml") parsed = sgprops.readProps("testData/props1.xml")
self.assertEqual(parsed.getValue("value"), 42) self.assertEqual(parsed.getValue("value"), 42)
self.assertEqual(type(parsed.getValue("value")), types.IntType) self.assertEqual(type(parsed.getValue("value")), int)
valNode = parsed.getChild("value") valNode = parsed.getChild("value")
self.assertEqual(valNode.parent, parsed) self.assertEqual(valNode.parent, parsed)
self.assertEqual(valNode.name, "value") self.assertEqual(valNode.name, "value")
self.assertEqual(valNode.value, 42) self.assertEqual(valNode.value, 42)
self.assertEqual(type(valNode.value), types.IntType) self.assertEqual(type(valNode.value), int)
with self.assertRaises(IndexError): with self.assertRaises(IndexError):
missingNode = parsed.getChild("missing") missingNode = parsed.getChild("missing")

View file

@ -8,12 +8,14 @@ import os
import re import re
import shutil import shutil
import subprocess import subprocess
import time
import sgprops
import sys import sys
import catalogTags import time
import catalog
from catalog import make_aircraft_node, make_aircraft_zip, parse_config_file, parse_template_file from flightgear.meta import sgprops
from flightgear.meta.aircraft_catalogs import catalogTags
from flightgear.meta.aircraft_catalogs import catalog
from flightgear.meta.aircraft_catalogs.catalog import make_aircraft_node, \
make_aircraft_zip, parse_config_file, parse_template_file
CATALOG_VERSION = 4 CATALOG_VERSION = 4

View file

@ -1,4 +1,4 @@
#!/usr/bin/python # -*- coding: utf-8 -*-
import argparse import argparse
import datetime import datetime
@ -8,11 +8,12 @@ import os
from os.path import exists, join, relpath from os.path import exists, join, relpath
from os import F_OK, access, walk from os import F_OK, access, walk
import re import re
import sgprops
import sys import sys
import catalogTags
import zipfile import zipfile
from flightgear.meta import sgprops
from . import catalogTags
CATALOG_VERSION = 4 CATALOG_VERSION = 4
quiet = False quiet = False
verbose = False verbose = False

View file

@ -1,3 +1,5 @@
# -*- coding: utf-8 -*-
aircraftTypeTags = [ aircraftTypeTags = [
"aerobatic", "aerobatic",
"airship", "airship",
@ -176,7 +178,8 @@ simFeatureTags = [
"wildfire" "wildfire"
] ]
tags = aircraftTypeTags + manufacturerTags + eraTags + simFeatureTags + propulsionTags + featureTags tags = (aircraftTypeTags + manufacturerTags + eraTags + simFeatureTags +
propulsionTags + featureTags)
def isValidTag(maybeTag): def isValidTag(maybeTag):
return maybeTag in tags return maybeTag in tags