make sure outputs take into account linked place names

This commit is contained in:
Sarah Hoffmann
2022-03-16 21:44:52 +01:00
parent 17da5f45be
commit 524dc64ab7
5 changed files with 75 additions and 21 deletions

View File

@@ -114,21 +114,26 @@ class ParameterParser
} }
foreach ($aLanguages as $sLanguage => $fLanguagePref) { foreach ($aLanguages as $sLanguage => $fLanguagePref) {
$aLangPrefOrder['name:'.$sLanguage] = 'name:'.$sLanguage; $this->addNameTag($aLangPrefOrder, 'name:'.$sLanguage);
} }
$aLangPrefOrder['name'] = 'name'; $this->addNameTag($aLangPrefOrder, 'name');
$aLangPrefOrder['brand'] = 'brand'; $this->addNameTag($aLangPrefOrder, 'brand');
foreach ($aLanguages as $sLanguage => $fLanguagePref) { foreach ($aLanguages as $sLanguage => $fLanguagePref) {
$aLangPrefOrder['official_name:'.$sLanguage] = 'official_name:'.$sLanguage; $this->addNameTag($aLangPrefOrder, 'official_name:'.$sLanguage);
$aLangPrefOrder['short_name:'.$sLanguage] = 'short_name:'.$sLanguage; $this->addNameTag($aLangPrefOrder, 'short_name:'.$sLanguage);
} }
$aLangPrefOrder['official_name'] = 'official_name'; $this->addNameTag($aLangPrefOrder, 'official_name');
$aLangPrefOrder['short_name'] = 'short_name'; $this->addNameTag($aLangPrefOrder, 'short_name');
$aLangPrefOrder['ref'] = 'ref'; $this->addNameTag($aLangPrefOrder, 'ref');
$aLangPrefOrder['type'] = 'type'; $this->addNameTag($aLangPrefOrder, 'type');
return $aLangPrefOrder; return $aLangPrefOrder;
} }
private function addNameTag(&$aLangPrefOrder, $sTag) {
$aLangPrefOrder[$sTag] = $sTag;
$aLangPrefOrder['_place_'.$sTag] = '_place_'.$sTag;
}
public function hasSetAny($aParamNames) public function hasSetAny($aParamNames)
{ {
foreach ($aParamNames as $sName) { foreach ($aParamNames as $sName) {

View File

@@ -85,7 +85,10 @@ BEGIN
FROM each(location.name - result.name); FROM each(location.name - result.name);
{% if debug %}RAISE WARNING 'Extra names: %', extra_names;{% endif %} {% if debug %}RAISE WARNING 'Extra names: %', extra_names;{% endif %}
result.name := location.name || result.name || extra_names; IF extra_names is not null THEN
result.name := result.name || extra_names;
END IF;
{% if debug %}RAISE WARNING 'Final names: %', result.name;{% endif %} {% if debug %}RAISE WARNING 'Final names: %', result.name;{% endif %}
END IF; END IF;
END IF; END IF;

View File

@@ -18,8 +18,14 @@ Feature: Searching linked places
| N2 | R13 | | N2 | R13 |
When sending search query "Vario" When sending search query "Vario"
Then results contain Then results contain
| osm | | osm | display_name |
| R13 | | R13 | Garbo |
When sending search query "Vario"
| accept-language |
| it |
Then results contain
| osm | display_name |
| R13 | Vario |
Scenario: Differing names from linked places are searchable Scenario: Differing names from linked places are searchable
@@ -38,5 +44,9 @@ Feature: Searching linked places
| N2 | R13 | | N2 | R13 |
When sending search query "Vario" When sending search query "Vario"
Then results contain Then results contain
| osm | | osm | display_name |
| R13 | | R13 | Garbo |
When sending search query "Garbo"
Then results contain
| osm | display_name |
| R13 | Garbo |

View File

@@ -117,8 +117,10 @@ Feature: Updates of linked places
| 1 | N3:label | | 1 | N3:label |
When importing When importing
Then placex contains Then placex contains
| object | linked_place_id | name+name:de | | object | linked_place_id | name+_place_name:de |
| R1 | - | pnt | | R1 | - | pnt |
And placex contains
| object | linked_place_id | name+name:de |
| N3 | R1 | pnt | | N3 | R1 | pnt |
When updating places When updating places
| osm | class | type | name+name:de | admin | geometry | | osm | class | type | name+name:de | admin | geometry |
@@ -126,8 +128,43 @@ Feature: Updates of linked places
Then placex contains Then placex contains
| object | linked_place_id | name+name:de | | object | linked_place_id | name+name:de |
| N3 | R1 | newname | | N3 | R1 | newname |
And placex contains
| object | linked_place_id | name+_place_name:de |
| R1 | - | newname | | R1 | - | newname |
Scenario: Update linking relation when linkee name is deleted
Given the places
| osm | class | type | name | admin | geometry |
| R1 | boundary | administrative | rel | 8 | poly-area:0.1 |
And the places
| osm | class | type | name | admin | geometry |
| N3 | place | city | pnt | 30 | 0.00001 0 |
And the relations
| id | members |
| 1 | N3:label |
When importing
Then placex contains
| object | linked_place_id | name+_place_name | name+name |
| R1 | - | pnt | rel |
And placex contains
| object | linked_place_id | name+name |
| N3 | R1 | pnt |
When sending search query "pnt"
Then results contain
| osm |
| R1 |
When updating places
| osm | class | type | name+name:de | admin | geometry |
| N3 | place | city | depnt | 30 | 0.00001 0 |
Then placex contains
| object | linked_place_id | name+name:de |
| N3 | R1 | depnt |
And placex contains
| object | linked_place_id | name+_place_name:de | name+name |
| R1 | - | depnt | rel |
When sending search query "pnt"
Then exactly 0 results are returned
Scenario: Updating linkee extratags keeps linker's extratags Scenario: Updating linkee extratags keeps linker's extratags
Given the named places Given the named places
| osm | class | type | extra+wikidata | admin | geometry | | osm | class | type | extra+wikidata | admin | geometry |

View File

@@ -62,8 +62,6 @@ class GenericResponse:
if errorcode == 200 and fmt != 'debug': if errorcode == 200 and fmt != 'debug':
getattr(self, '_parse_' + fmt)() getattr(self, '_parse_' + fmt)()
else:
print("Bad response: ", page)
def _parse_json(self): def _parse_json(self):
m = re.fullmatch(r'([\w$][^(]*)\((.*)\)', self.page) m = re.fullmatch(r'([\w$][^(]*)\((.*)\)', self.page)
@@ -74,13 +72,14 @@ class GenericResponse:
self.header['json_func'] = m.group(1) self.header['json_func'] = m.group(1)
self.result = json.JSONDecoder(object_pairs_hook=OrderedDict).decode(code) self.result = json.JSONDecoder(object_pairs_hook=OrderedDict).decode(code)
if isinstance(self.result, OrderedDict): if isinstance(self.result, OrderedDict):
self.result = [self.result] if 'error' in self.result:
self.result = []
else:
self.result = [self.result]
def _parse_geojson(self): def _parse_geojson(self):
self._parse_json() self._parse_json()
if 'error' in self.result[0]: if self.result:
self.result = []
else:
self.result = list(map(_geojson_result_to_json_result, self.result[0]['features'])) self.result = list(map(_geojson_result_to_json_result, self.result[0]['features']))
def _parse_geocodejson(self): def _parse_geocodejson(self):