summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-07-30 12:15:47 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-07-30 12:15:47 +0200
commit5bbfbeb70d7116f10fb308ff1314f3b24c8f51ab (patch)
tree5ad14917ef46d58d6cf5765ddc048752be1aed30
parenta35e06313dfb7e9f1760967101497dbe462535a5 (diff)
downloadChimère-5bbfbeb70d7116f10fb308ff1314f3b24c8f51ab.tar.bz2
Chimère-5bbfbeb70d7116f10fb308ff1314f3b24c8f51ab.zip
Fix JSON importer
-rw-r--r--chimere/tests.py18
-rw-r--r--chimere/utils.py40
2 files changed, 13 insertions, 45 deletions
diff --git a/chimere/tests.py b/chimere/tests.py
index 6793234..548bc84 100644
--- a/chimere/tests.py
+++ b/chimere/tests.py
@@ -299,24 +299,12 @@ class OSMImporterTest(TestCase, ImporterTest):
def setUp(self):
subcategories = subcategory_setup()
marker_setup()
- importer1 = Importer.objects.create(
- importer_type='OSM',
- source=test_dir_path + 'tests/sample_nodes.osm')
- importer1.categories.add(subcategories[0])
- importer2 = Importer.objects.create(
- importer_type='OSM',
- source=test_dir_path + 'tests/sample_ways.osm')
- importer2.categories.add(subcategories[1])
importer3 = Importer.objects.create(
importer_type='OSM',
- source='http://open.mapquestapi.com/xapi/api/0.6/way'
- '[highway=motorway]'
- '[bbox=2.0393839939136975,48.68908639634696,'
- '2.3140421970277316,48.790972349390415]')
-
- self.marker_importers = [(importer1, 19), (importer2, 8),
- (importer3, None)]
+ source='node["railway"="station"](41.55,0.95855712890625,42,1.2);'
+ 'out;')
+ self.marker_importers = [(importer3, 4)]
class GeoRSSImporterTest(TestCase, ImporterTest):
diff --git a/chimere/utils.py b/chimere/utils.py
index 607ec36..7518076 100644
--- a/chimere/utils.py
+++ b/chimere/utils.py
@@ -210,21 +210,20 @@ class ImportManager(object):
try:
source = open(source)
except IOError as msg:
- return (None, msg)
+ return None, msg
except (urllib.error.URLError, AttributeError) as error:
- return (None, str(error))
+ return None, str(error)
if self.importer_instance.zipped:
try:
files = self.get_files_inside_zip(
self.importer_instance.source_file or
self.importer_instance.source , suffixes, dest_dir)
except zipfile.BadZipfile:
- return (None, _("Bad zip file"))
+ return None, _("Bad zip file")
if not files or None in files or [] in files:
- return (None,
- _("Missing file(s) inside the zip file"))
+ return None, _("Missing file(s) inside the zip file")
source = files[0] if len(suffixes) == 1 else files
- return (source, None)
+ return source, None
class KMLManager(ImportManager):
@@ -786,11 +785,11 @@ class JsonManager(ImportManager):
top = True
if not isinstance(filtr, dict):
if filtr in item:
- yield base_key, item[filtr]
+ yield filtr, item[filtr]
else:
for k in filtr:
if top:
- base_key = k
+ base_key = filtr[k]
if not isinstance(filtr[k], dict):
if k in item:
yield base_key, item[k]
@@ -852,7 +851,6 @@ class JsonManager(ImportManager):
new_item, updated_item,
_("A key must be associated to \"%s\" in the "
"filter.") % k)
-
default_dct = {'origin': self.importer_instance.origin,
'license': self.importer_instance.license,
'description': ""}
@@ -865,9 +863,6 @@ class JsonManager(ImportManager):
dct = default_dct.copy()
for key, value in self.extract_dict_values(item, filtr):
- """
- for k in filtr:
- """
if key.startswith('prefix_') or key.startswith('suffix_'):
continue
if key == 'external_image':
@@ -927,7 +922,7 @@ class JsonManager(ImportManager):
cls = Marker
pl_id = (dct.pop('id') if 'id' in dct else dct['name']) \
- + "-" + str(self.importer_instance.pk)
+ + "-" + str(self.importer_instance.pk)
it, updated, created = self.create_or_update_item(cls, dct, pl_id)
if updated:
@@ -1033,7 +1028,7 @@ class OSMManager(ImportManager):
for way in result.ways:
dct = deepcopy(default_dct)
dct.update(self._get_attributes(way, filtr))
- pl_id = "OSM-way-{}".format(node.id)
+ pl_id = "OSM-way-{}".format(way.id)
if not way.nodes or len(way.nodes) == 1:
# not a real way
@@ -1083,22 +1078,7 @@ class OSMManager(ImportManager):
- updated items;
- error detail on error.
"""
-
- is_file = True if self.importer_instance.source_file else False
- if not is_file:
- return self.parse_overpass()
- source, msg = self.get_source_file(
- ['.osm'], extra_url=self.importer_instance.filtr)
- if not source:
- return (0, 0, msg)
-
- tree = etree.parse(source)
- # only import node or ways
- if tree.xpath('count(//way)') and tree.xpath('count(//node)'):
- return self.import_ways(tree)
- elif tree.xpath('count(//node)'):
- return self.import_nodes(tree)
- return 0, 0, _("Nothing to import")
+ return self.parse_overpass()
def import_ways(self, tree):
from chimere.models import Route