Fixes parsing of bad-designed XML part of the code from Catastro (sometimes returns a list, sometimes only 1 entry but not within a list)

This commit is contained in:
J 2019-09-18 01:37:04 +02:00
parent 06bb139e63
commit 0478146b27
3 changed files with 12 additions and 3 deletions

View File

@ -1,3 +1,4 @@
import json
from datetime import datetime
from src.librecatastro.domain.address import Address
@ -32,6 +33,12 @@ class CadasterEntryXML(CadasterEntry):
self.gsurface = config['not_available_via_XML']
self.constructions = []
constructions = xml['consulta_dnp']['bico']['lcons']['cons']
''' Bad XML design, instead of returning a list with 1 element, it returns
the element'''
if not isinstance(constructions, list):
constructions = [constructions]
for construction in constructions:
use = construction['lcd']
doorway = construction['dt']['lourb']['loint']['es']

View File

@ -60,7 +60,7 @@ class ScrapperXML:
''' Adding to tracking file'''
logger.info('{},{}'.format(lon, lat))
num_scrapping_fails = 5
num_scrapping_fails = 10
entry = ScrapperXML.get_cadaster_entries_by_address(prov_name, city_name, tv, nv, num)
cadaster_entry = CadasterEntryXML(entry, lon, lat)
@ -167,6 +167,8 @@ class ScrapperXML:
params['Puerta'] = ''
url = cls.URL_LOCATIONS_BASE.format("/OVCCallejero.asmx/Consulta_DNPLOC")
logger.debug("[|||||||||| ] URL for entry: {} Params: {}".format(url, params))
response = requests.get(url, params=params)
xml = response.content
return xmltodict.parse(xml, process_namespaces=False, xml_attribs=False)

View File

@ -53,7 +53,7 @@ class ScrapperXMLTests(unittest.TestCase):
cadaster['consulta_numerero']['lerr']['err']['cod'] == '43':
num_scrapping_fails -= 1
else:
num_scrapping_fails = 5
num_scrapping_fails = 10
matches += 1
counter += 1
@ -94,7 +94,7 @@ class ScrapperXMLTests(unittest.TestCase):
coords = ScrapperXML.get_coords_from_cadaster(prov_name, city_name, cadaster_num)
lon = coords['consulta_coordenadas']['coordenadas']['coord']['geo']['xcen']
lat = coords['consulta_coordenadas']['coordenadas']['coord']['geo']['ycen']
num_scrapping_fails = 5
num_scrapping_fails = 10
entry = ScrapperXML.get_cadaster_entries_by_address(prov_name, city_name, tv, nv, num)
cadaster_entry = CadasterEntryXML(entry, lon, lat)