Implement proper argument parsing.
This commit is contained in:
parent
e6d976194f
commit
27c593ac84
3 changed files with 58 additions and 33 deletions
|
@ -71,6 +71,8 @@ class RenderJob:
|
||||||
mapnik.save_map(self.m, output)
|
mapnik.save_map(self.m, output)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
self.reporting.load_error(filename, repr(e))
|
self.reporting.load_error(filename, repr(e))
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
def render(self, config, width, height, scale_factor):
|
def render(self, config, width, height, scale_factor):
|
||||||
filename = config['name']
|
filename = config['name']
|
||||||
|
@ -95,7 +97,8 @@ class RenderJob:
|
||||||
self.reporting.show_file(postfix, renderer['name'])
|
self.reporting.show_file(postfix, renderer['name'])
|
||||||
try:
|
try:
|
||||||
start = time()
|
start = time()
|
||||||
renderer['render'](self.m, actual, scale_factor)
|
for i in range(self.repeat):
|
||||||
|
renderer['render'](self.m, actual, scale_factor)
|
||||||
render_time = time() - start
|
render_time = time() - start
|
||||||
|
|
||||||
if not os.path.exists(expected):
|
if not os.path.exists(expected):
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
class Reporting:
|
class Reporting:
|
||||||
DIFF = 1
|
DIFF = 1
|
||||||
NOT_FOUND = 2
|
NOT_FOUND = 2
|
||||||
|
@ -86,6 +88,8 @@ class Reporting:
|
||||||
print str(idx+1) + ") \x1b[34m%s different pixels\x1b[0m:\n\t%s (\x1b[31mactual\x1b[0m)\n\t%s (\x1b[32mexpected\x1b[0m)" % (error[3], error[1], error[2])
|
print str(idx+1) + ") \x1b[34m%s different pixels\x1b[0m:\n\t%s (\x1b[31mactual\x1b[0m)\n\t%s (\x1b[32mexpected\x1b[0m)" % (error[3], error[1], error[2])
|
||||||
elif error[0] == self.REPLACE:
|
elif error[0] == self.REPLACE:
|
||||||
print str(idx+1) + ") \x1b[31mreplaced reference with new version:\x1b[0m %s" % error[2]
|
print str(idx+1) + ") \x1b[31mreplaced reference with new version:\x1b[0m %s" % error[2]
|
||||||
|
elif error[0] == self.LOAD_ERROR:
|
||||||
|
print str(idx+1) + ") \x1b[31mfailure to load style \"%s\":\x1b[0m %s" % (error[1], error[4])
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
def show_file(self, postfix, renderer):
|
def show_file(self, postfix, renderer):
|
||||||
|
|
|
@ -8,6 +8,7 @@ import sys
|
||||||
import os.path
|
import os.path
|
||||||
from reporting import Reporting
|
from reporting import Reporting
|
||||||
from renderjob import RenderJob
|
from renderjob import RenderJob
|
||||||
|
import argparse
|
||||||
|
|
||||||
visual_output_dir = "/tmp/mapnik-visual-images"
|
visual_output_dir = "/tmp/mapnik-visual-images"
|
||||||
|
|
||||||
|
@ -115,46 +116,63 @@ other_tests = [
|
||||||
|
|
||||||
files = text_tests + tiff_tests + other_tests
|
files = text_tests + tiff_tests + other_tests
|
||||||
|
|
||||||
|
def find_file(filename):
|
||||||
|
if filename.startswith('styles/'):
|
||||||
|
filename = filename[7:]
|
||||||
|
if filename.endswith('.xml'):
|
||||||
|
filename = filename[:-4]
|
||||||
|
for f in files:
|
||||||
|
if f['name'] == filename:
|
||||||
|
return f
|
||||||
|
#not found => default sizes
|
||||||
|
return {'name': filename, 'sizes': sizes_few_square}
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
if '-q' in sys.argv:
|
parser = argparse.ArgumentParser(description='Run mapnik\'s visual tests.')
|
||||||
quiet = True
|
parser.add_argument('-q', '--quiet', action='store_true',
|
||||||
sys.argv.remove('-q')
|
help='output colored dots on stderr instead of detailed information on stdout')
|
||||||
else:
|
parser.add_argument('-O', '--overwrite', action='store_true',
|
||||||
quiet = False
|
help='overwrite reference images')
|
||||||
|
parser.add_argument('-g', '--generate', action='store_true',
|
||||||
reporting = Reporting(quiet=quiet)
|
help='generate missing reference images')
|
||||||
render_job = RenderJob(reporting, dirname, visual_output_dir)
|
parser.add_argument('-r', '--repeat', action='store',
|
||||||
|
help='repeat rendering N times. Useful for finding bugs and benchmarking',
|
||||||
if '--overwrite' in sys.argv:
|
default=1, type=int, metavar='N')
|
||||||
render_job.set_overwrite_failures(True)
|
parser.add_argument('-d', '--disable-renderer', action='append',
|
||||||
sys.argv.remove('--overwrite')
|
help='disable a renderer (options: agg, cairo, grid)',
|
||||||
else:
|
choices=['agg', 'cairo', 'grid'], metavar='NAME', default=[])
|
||||||
render_job.set_overwrite_failures(False)
|
parser.add_argument('-o', '--output-dir', action='store',
|
||||||
|
default=visual_output_dir, help='output directory (default: %(default)s)', metavar='DIR')
|
||||||
if '--no-generate' in sys.argv:
|
parser.add_argument('file', nargs='*', action='store',
|
||||||
render_job.set_generate(False)
|
help='only render these files')
|
||||||
sys.argv.remove('--no-generate')
|
args = parser.parse_args()
|
||||||
else:
|
|
||||||
render_job.set_generate(True)
|
print args
|
||||||
|
reporting = Reporting(quiet=args.quiet)
|
||||||
if len(sys.argv) == 2:
|
render_job = RenderJob(reporting, dirname, args.output_dir)
|
||||||
files = [{"name": sys.argv[1], "sizes": sizes_few_square}]
|
render_job.repeat = args.repeat
|
||||||
elif len(sys.argv) > 2:
|
render_job.set_overwrite_failures(args.overwrite)
|
||||||
files = []
|
render_job.set_generate(args.generate)
|
||||||
for name in sys.argv[1:]:
|
if args.file:
|
||||||
files.append({"name": name})
|
new_files = []
|
||||||
|
for f in args.file:
|
||||||
if not os.path.exists(visual_output_dir):
|
new_files.append(find_file(f))
|
||||||
os.makedirs(visual_output_dir)
|
print new_files
|
||||||
|
files = new_files
|
||||||
|
|
||||||
if 'osm' not in mapnik.DatasourceCache.plugin_names():
|
if 'osm' not in mapnik.DatasourceCache.plugin_names():
|
||||||
print "OSM plugin required"
|
print "OSM plugin required"
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
|
|
||||||
|
|
||||||
|
if not os.path.exists(args.output_dir):
|
||||||
|
os.makedirs(args.output_dir)
|
||||||
|
|
||||||
for f in files:
|
for f in files:
|
||||||
config = dict(defaults)
|
config = dict(defaults)
|
||||||
config.update(f)
|
config.update(f)
|
||||||
render_job.load_and_save(config['name'], os.path.join(dirname, 'xml_output', "%s-out.xml" % config['name']))
|
if not render_job.load_and_save(config['name'], os.path.join(dirname, 'xml_output', "%s-out.xml" % config['name'])):
|
||||||
|
continue
|
||||||
for size in config['sizes']:
|
for size in config['sizes']:
|
||||||
for scale_factor in config['scales']:
|
for scale_factor in config['scales']:
|
||||||
render_job.render(config,
|
render_job.render(config,
|
||||||
|
|
Loading…
Add table
Reference in a new issue