From 2a634797ecafe893bd8fad6ecc2c76f8f9b6acf9 Mon Sep 17 00:00:00 2001 From: Al Date: Sat, 23 Jul 2016 03:04:23 -0400 Subject: [PATCH] [fix] make sure values are hashable in mapping OSM components --- scripts/geodata/osm/components.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/scripts/geodata/osm/components.py b/scripts/geodata/osm/components.py index 987ee76e..ef580ced 100644 --- a/scripts/geodata/osm/components.py +++ b/scripts/geodata/osm/components.py @@ -1,3 +1,4 @@ +import collections import os import six import yaml @@ -101,15 +102,17 @@ class OSMAddressComponents(object): config.update(config_updates) break + values = [(k, v) for k, v in six.iteritems(properties) if isinstance(v, collections.Hashable)] + # place=city, place=suburb, etc. override per-country boundaries - for k, v in six.iteritems(properties): + for k, v in values: containing_component = self.global_keys_override.get(k, {}).get(v, None) if containing_component is not None: return containing_component # admin_level tags are mapped per country - for k, v in six.iteritems(properties): + for k, v in values: containing_component = config.get(k, {}).get(v, None) if containing_component is not None: @@ -117,7 +120,7 @@ class OSMAddressComponents(object): # other place keys like place=state, etc. serve as a backup # when no boundaries are available - for k, v in six.iteritems(properties): + for k, v in values: containing_component = self.global_keys.get(k, {}).get(v, None) if containing_component is not None: