From 9cdd45acd8d6db23087053d47401c4ba0df944c2 Mon Sep 17 00:00:00 2001 From: Mark Wronkiewicz Date: Thu, 11 Jan 2018 10:16:25 -0500 Subject: [PATCH 1/4] Add absolute paths to allow label-maker commands to work outside module dir --- label_maker/label.py | 9 +++++++-- label_maker/main.py | 8 ++++++-- label_maker/validate.py | 6 +++++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/label_maker/label.py b/label_maker/label.py index 9ec11bf..deeecfe 100644 --- a/label_maker/label.py +++ b/label_maker/label.py @@ -16,6 +16,7 @@ from PIL import Image, ImageDraw from tilepie import tilereduce +import label_maker from label_maker.filter import create_filter # declare a global accumulator so the workers will have access @@ -61,9 +62,13 @@ def make_labels(dest_folder, zoom, country, classes, ml_type, bounding_box, **kw print('Retiling QA Tiles to zoom level {} (takes a bit)'.format(zoom)) filtered_geo = op.join(dest_folder, '{}.geojson'.format(country)) ps = Popen(['tippecanoe-decode', '-c', '-f', mbtiles_file], stdout=PIPE) - run(['python', 'label_maker/stream_filter.py', json.dumps(bounding_box)], stdin=ps.stdout, stdout=open(filtered_geo, 'w')) + stream_filter_fpath = op.join(op.dirname(label_maker.__file__), 'stream_filter.py') + run(['python', stream_filter_fpath, json.dumps(bounding_box)], + stdin=ps.stdout, stdout=open(filtered_geo, 'w')) ps.wait() - run(['tippecanoe', '--no-feature-limit', '--no-tile-size-limit', '-P', '-l', 'osm', '-f', '-z', str(zoom), '-Z', str(zoom), '-o', mbtiles_file_zoomed, filtered_geo]) + run(['tippecanoe', '--no-feature-limit', '--no-tile-size-limit', '-P', + '-l', 'osm', '-f', '-z', str(zoom), '-Z', str(zoom), '-o', + mbtiles_file_zoomed, filtered_geo]) # Call tilereduce print('Determining labels for each tile') diff --git a/label_maker/main.py b/label_maker/main.py index ef7121a..f292dad 100644 --- a/label_maker/main.py +++ b/label_maker/main.py @@ -8,6 +8,7 @@ from cerberus import Validator +from label_maker import __file__ from label_maker.version import __version__ from label_maker.download import download_mbtiles from label_maker.label import make_labels @@ -18,17 +19,20 @@ logger = logging.getLogger(__name__) + def parse_args(args): """Create an argument parser with subcommands""" desc = 'label_maker (v%s)' % __version__ dhf = argparse.ArgumentDefaultsHelpFormatter parser = argparse.ArgumentParser(description=desc) + config_fpath = op.join(op.dirname(__file__), '..', 'config.json') pparser = argparse.ArgumentParser(add_help=False) - pparser.add_argument('--version', help='Print version and exit', action='version', version=__version__) + pparser.add_argument('--version', help='Print version and exit', + action='version', version=__version__) pparser.add_argument('--log', default=2, type=int, help='0:all, 1:debug, 2:info, 3:warning, 4:error, 5:critical') - pparser.add_argument('-c', '--config', default='config.json', type=str, + pparser.add_argument('-c', '--config', default=config_fpath, type=str, help='location of config.json file') pparser.add_argument('-d', '--dest', default='data', type=str, help='directory for storing output files') diff --git a/label_maker/validate.py b/label_maker/validate.py index c1c9443..77c98af 100644 --- a/label_maker/validate.py +++ b/label_maker/validate.py @@ -1,7 +1,11 @@ """Expose a schema for use with cerberus for config validation""" +import os.path as op +import label_maker countries = [] -with open('label_maker/countries.txt') as f: +module_dir = op.dirname(label_maker.__file__) # Get module home directory + +with open(op.join(module_dir, 'countries.txt')) as f: lines = f.readlines() for line in lines: countries.append(line.strip()) From 5412acaa7af2f75e1769efcf9491c6279d094932 Mon Sep 17 00:00:00 2001 From: Mark Wronkiewicz Date: Thu, 11 Jan 2018 11:05:41 -0500 Subject: [PATCH 2/4] Leave config.json as relative path --- label_maker/main.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/label_maker/main.py b/label_maker/main.py index f292dad..68ddadb 100644 --- a/label_maker/main.py +++ b/label_maker/main.py @@ -8,7 +8,6 @@ from cerberus import Validator -from label_maker import __file__ from label_maker.version import __version__ from label_maker.download import download_mbtiles from label_maker.label import make_labels @@ -25,14 +24,13 @@ def parse_args(args): desc = 'label_maker (v%s)' % __version__ dhf = argparse.ArgumentDefaultsHelpFormatter parser = argparse.ArgumentParser(description=desc) - config_fpath = op.join(op.dirname(__file__), '..', 'config.json') pparser = argparse.ArgumentParser(add_help=False) pparser.add_argument('--version', help='Print version and exit', action='version', version=__version__) pparser.add_argument('--log', default=2, type=int, help='0:all, 1:debug, 2:info, 3:warning, 4:error, 5:critical') - pparser.add_argument('-c', '--config', default=config_fpath, type=str, + pparser.add_argument('-c', '--config', default='config.json', type=str, help='location of config.json file') pparser.add_argument('-d', '--dest', default='data', type=str, help='directory for storing output files') From 9e7ca6a1472909706b2b8dbd6a7547d204b8f4fd Mon Sep 17 00:00:00 2001 From: Mark Wronkiewicz Date: Thu, 11 Jan 2018 11:08:06 -0500 Subject: [PATCH 3/4] Include countries.txt --- MANIFEST.in | 1 + 1 file changed, 1 insertion(+) diff --git a/MANIFEST.in b/MANIFEST.in index 4fae910..a90b315 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,2 +1,3 @@ include requirements.txt include README.md +include label_maker/countries.txt From 5e6b983ecf29c348cf88bc07ff8e2c34d5a4053a Mon Sep 17 00:00:00 2001 From: Mark Wronkiewicz Date: Thu, 11 Jan 2018 12:11:53 -0500 Subject: [PATCH 4/4] Add test for using cli outside module dir --- .circleci/config.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 03a77a5..d457f88 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -32,3 +32,9 @@ jobs: python test/verify-labels.py label-maker package --dest integration --config test/fixtures/integration/config.integration.json python test/verify-package.py + + # Retest that `label-maker labels` works, but from outside the module directory + cd ~ + label-maker labels --dest label-maker/integration --config label-maker/test/fixtures/integration/config.integration.json > stdout + cd ~/label-maker + python test/verify-labels.py \ No newline at end of file