From 1580c95bd5a8ade477ec41cb25a0938262ae2730 Mon Sep 17 00:00:00 2001 From: Gibran Parvez Date: Thu, 4 Jan 2018 16:30:07 -0500 Subject: [PATCH] Merge v1 commits --- routes/v1.js | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/routes/v1.js b/routes/v1.js index 18c32059..af572c09 100644 --- a/routes/v1.js +++ b/routes/v1.js @@ -29,6 +29,7 @@ var controllers = { coarse_reverse: require('../controller/coarse_reverse'), mdToHTML: require('../controller/markdownToHtml'), libpostal: require('../controller/libpostal'), + structured_libpostal: require('../controller/structured_libpostal'), place: require('../controller/place'), placeholder: require('../controller/placeholder'), search: require('../controller/search'), @@ -97,6 +98,7 @@ const PlaceHolder = require('../service/configurations/PlaceHolder'); const PointInPolygon = require('../service/configurations/PointInPolygon'); const Language = require('../service/configurations/Language'); const Interpolation = require('../service/configurations/Interpolation'); +const Libpostal = require('../service/configurations/Libpostal'); /** * Append routes to app @@ -123,6 +125,18 @@ function addRoutes(app, peliasConfig) { const interpolationService = serviceWrapper(interpolationConfiguration); const isInterpolationEnabled = _.constant(interpolationConfiguration.isEnabled()); + // standard libpostal should use req.clean.text for the `address` parameter + const libpostalConfiguration = new Libpostal( + _.defaultTo(peliasConfig.api.services.libpostal, {}), + _.property('clean.text')); + const libpostalService = serviceWrapper(libpostalConfiguration); + + // structured libpostal should use req.clean.parsed_text.address for the `address` parameter + const structuredLibpostalConfiguration = new Libpostal( + _.defaultTo(peliasConfig.api.services.libpostal, {}), + _.property('clean.parsed_text.address')); + const structuredLibpostalService = serviceWrapper(structuredLibpostalConfiguration); + // fallback to coarse reverse when regular reverse didn't return anything const coarseReverseShouldExecute = all( isPipServiceEnabled, not(hasRequestErrors), not(hasResponseData) @@ -133,6 +147,12 @@ function addRoutes(app, peliasConfig) { not(isRequestSourcesOnlyWhosOnFirst) ); + // for libpostal to execute for structured requests, req.clean.parsed_text.address must exist + const structuredLibpostalShouldExecute = all( + not(hasRequestErrors), + hasParsedTextProperties.all('address') + ); + // execute placeholder if libpostal only parsed as admin-only and needs to // be geodisambiguated const placeholderGeodisambiguationShouldExecute = all( @@ -257,7 +277,7 @@ function addRoutes(app, peliasConfig) { sanitizers.search.middleware(peliasConfig.api), middleware.requestLanguage, middleware.calcSize(), - controllers.libpostal(libpostalShouldExecute), + controllers.libpostal(libpostalService, libpostalShouldExecute), controllers.placeholder(placeholderService, geometricFiltersApply, placeholderGeodisambiguationShouldExecute), controllers.placeholder(placeholderService, geometricFiltersDontApply, placeholderIdsLookupShouldExecute), controllers.search_with_ids(peliasConfig.api, esclient, queries.address_using_ids, searchWithIdsShouldExecute), @@ -287,6 +307,7 @@ function addRoutes(app, peliasConfig) { sanitizers.structured_geocoding.middleware(peliasConfig.api), middleware.requestLanguage, middleware.calcSize(), + controllers.structured_libpostal(structuredLibpostalService, structuredLibpostalShouldExecute), controllers.search(peliasConfig.api, esclient, queries.structured_geocoding, not(hasResponseDataOrRequestErrors)), postProc.trimByGranularityStructured(), postProc.distances('focus.point.'),