Handle weboob exceptions, fix issue #25
This commit is contained in:
parent
0fb5f28184
commit
bd3e599d12
@ -29,6 +29,7 @@ def filter_flats(config, flats_list, fetch_details=True):
|
|||||||
:param flats_list: The initial list of flat objects to filter.
|
:param flats_list: The initial list of flat objects to filter.
|
||||||
:return: A dict mapping flat status and list of flat objects.
|
:return: A dict mapping flat status and list of flat objects.
|
||||||
"""
|
"""
|
||||||
|
# pylint: disable=locally-disabled,redefined-variable-type
|
||||||
# Add the flatisfy metadata entry and prepare the flat objects
|
# Add the flatisfy metadata entry and prepare the flat objects
|
||||||
flats_list = metadata.init(flats_list)
|
flats_list = metadata.init(flats_list)
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ LOGGER = logging.getLogger(__name__)
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
from weboob.capabilities.housing import Query
|
from weboob.capabilities.housing import Query
|
||||||
|
from weboob.core.bcall import CallErrors
|
||||||
from weboob.core.ouiboube import WebNip
|
from weboob.core.ouiboube import WebNip
|
||||||
from weboob.tools.json import WeboobEncoder
|
from weboob.tools.json import WeboobEncoder
|
||||||
except ImportError:
|
except ImportError:
|
||||||
@ -103,15 +104,31 @@ class WeboobProxy(object):
|
|||||||
query = Query()
|
query = Query()
|
||||||
query.cities = []
|
query.cities = []
|
||||||
for postal_code in postal_codes:
|
for postal_code in postal_codes:
|
||||||
|
matching_cities = []
|
||||||
try:
|
try:
|
||||||
for city in self.webnip.do("search_city", postal_code):
|
for city in self.webnip.do("search_city", postal_code):
|
||||||
query.cities.append(city)
|
matching_cities.append(city)
|
||||||
except IndexError:
|
except CallErrors as exc:
|
||||||
|
# If an error occured, just log it
|
||||||
LOGGER.error(
|
LOGGER.error(
|
||||||
|
(
|
||||||
|
"An error occured while building query for "
|
||||||
|
"postal code %s: %s"
|
||||||
|
),
|
||||||
|
postal_code,
|
||||||
|
str(exc)
|
||||||
|
)
|
||||||
|
|
||||||
|
if not matching_cities:
|
||||||
|
# If postal code gave no match, warn the user
|
||||||
|
LOGGER.warn(
|
||||||
"Postal code %s could not be matched with a city.",
|
"Postal code %s could not be matched with a city.",
|
||||||
postal_code
|
postal_code
|
||||||
)
|
)
|
||||||
return None
|
|
||||||
|
# Append the matched cities to the query
|
||||||
|
for city in matching_cities:
|
||||||
|
query.cities.append(city)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
query.house_types = [
|
query.house_types = [
|
||||||
@ -154,11 +171,18 @@ class WeboobProxy(object):
|
|||||||
"""
|
"""
|
||||||
housings = []
|
housings = []
|
||||||
# TODO: Handle max_entries better
|
# TODO: Handle max_entries better
|
||||||
for housing in itertools.islice(
|
try:
|
||||||
self.webnip.do('search_housings', query),
|
for housing in itertools.islice(
|
||||||
max_entries
|
self.webnip.do('search_housings', query),
|
||||||
):
|
max_entries
|
||||||
housings.append(json.dumps(housing, cls=WeboobEncoder))
|
):
|
||||||
|
housings.append(json.dumps(housing, cls=WeboobEncoder))
|
||||||
|
except CallErrors as exc:
|
||||||
|
# If an error occured, just log it
|
||||||
|
LOGGER.error(
|
||||||
|
"An error occured while fetching the housing posts: %s",
|
||||||
|
str(exc)
|
||||||
|
)
|
||||||
return housings
|
return housings
|
||||||
|
|
||||||
def info(self, full_flat_id):
|
def info(self, full_flat_id):
|
||||||
@ -169,13 +193,23 @@ class WeboobProxy(object):
|
|||||||
(ID@BACKEND)
|
(ID@BACKEND)
|
||||||
:return: The details in JSON.
|
:return: The details in JSON.
|
||||||
"""
|
"""
|
||||||
|
housing = {}
|
||||||
flat_id, backend_name = full_flat_id.rsplit("@", 1)
|
flat_id, backend_name = full_flat_id.rsplit("@", 1)
|
||||||
backend = next(
|
backend = next(
|
||||||
backend
|
backend
|
||||||
for backend in self.backends
|
for backend in self.backends
|
||||||
if backend.name == backend_name
|
if backend.name == backend_name
|
||||||
)
|
)
|
||||||
housing = backend.get_housing(flat_id)
|
try:
|
||||||
|
housing = backend.get_housing(flat_id)
|
||||||
|
except CallErrors as exc:
|
||||||
|
# If an error occured, just log it
|
||||||
|
LOGGER.error(
|
||||||
|
"An error occured while fetching housing %s: %s",
|
||||||
|
full_flat_id,
|
||||||
|
str(exc)
|
||||||
|
)
|
||||||
|
|
||||||
housing.id = full_flat_id # Otherwise, we miss the @backend afterwards
|
housing.id = full_flat_id # Otherwise, we miss the @backend afterwards
|
||||||
return json.dumps(housing, cls=WeboobEncoder)
|
return json.dumps(housing, cls=WeboobEncoder)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user