From 01972bdcd893b10f7e7dd2ed4337a63b87c4c263 Mon Sep 17 00:00:00 2001 From: Maksim Andrianov Date: Tue, 14 Jan 2020 16:36:23 +0300 Subject: [PATCH] [python][tools] Added option 'print_features'. --- tools/python/mwm/__main__.py | 5 +++- tools/python/mwm/dump_mwm.py | 50 ++++++++++++++++-------------------- 2 files changed, 26 insertions(+), 29 deletions(-) diff --git a/tools/python/mwm/__main__.py b/tools/python/mwm/__main__.py index ba03ea6bbf..aa7fb3001c 100644 --- a/tools/python/mwm/__main__.py +++ b/tools/python/mwm/__main__.py @@ -47,8 +47,11 @@ The most commonly used mwm commands are: description="Dumps some MWM structures.") parser.add_argument("--path", type=str, required=True, help="Path to mwm.") + parser.add_argument("--format", type=str, default="meta", + choices=("meta", "features"), + help="Output format.") args = parser.parse_args(sys.argv[2:]) - dump_mwm(args.path) + dump_mwm(args.path, args.format) @staticmethod def find_feature(): diff --git a/tools/python/mwm/dump_mwm.py b/tools/python/mwm/dump_mwm.py index db64c24771..17f35860f4 100755 --- a/tools/python/mwm/dump_mwm.py +++ b/tools/python/mwm/dump_mwm.py @@ -1,40 +1,34 @@ import json import os.path -import random import sys from .mwm import MWM -def dump_mwm(path): +def dump_mwm(path, format): mwm = MWM(open(path, "rb")) mwm.read_types(os.path.join(os.path.dirname(sys.argv[0]), "..", "..", "..", "data", "types.txt")) - print("Tags:") - tvv = sorted([(k, v[0], v[1]) for k, v in mwm.tags.items()], key=lambda x: x[1]) - for tv in tvv: - print(" {0:<8}: offs {1:9} len {2:8}".format(tv[0], tv[1], tv[2])) - v = mwm.read_version() - print("Format: {0}, version: {1}".format(v["fmt"], v["date"].strftime("%Y-%m-%d %H:%M"))) - print("Header: {0}".format(mwm.read_header())) - print("Region Info: {0}".format(mwm.read_region_info())) - print("Metadata count: {0}".format(len(mwm.read_metadata()))) + header = mwm.read_header() + fts = list(mwm.iter_features()) - cross = mwm.read_crossmwm() - if cross: - print("Outgoing points: {0}, incoming: {1}".format(len(cross["out"]), len(cross["in"]))) - print("Outgoing regions: {0}".format(set(cross["neighbours"]))) + if format == "meta": + print("Tags:") + tvv = sorted([(k, v[0], v[1]) for k, v in mwm.tags.items()], key=lambda x: x[1]) + for tv in tvv: + print(" {0:<8}: offs {1:9} len {2:8}".format(tv[0], tv[1], tv[2])) + v = mwm.read_version() + print("Format: {0}, version: {1}".format(v["fmt"], v["date"].strftime("%Y-%m-%d %H:%M"))) + print("Header: {0}".format(header)) + print("Region Info: {0}".format(mwm.read_region_info())) + print("Metadata count: {0}".format(len(mwm.read_metadata()))) + print("Feature count: {0}".format(len(fts))) + cross = mwm.read_crossmwm() + if cross: + print("Outgoing points: {0}, incoming: {1}".format(len(cross["out"]), len(cross["in"]))) + print("Outgoing regions: {0}".format(set(cross["neighbours"]))) - # Print some random features using reservoir sampling - count = 5 - sample = [] - for i, feature in enumerate(mwm.iter_features()): - if i < count: - sample.append(feature) - elif random.randint(0, i) < count: - sample[random.randint(0, count-1)] = feature - - print("Feature count: {0}".format(i)) - print("Sample features:") - for feature in sample: - print(json.dumps(feature, ensure_ascii=False)) + elif format == "features": + print("Features:") + for ft in fts: + print(json.dumps(ft, ensure_ascii=False))