]> git.openstreetmap.org Git - nominatim.git/blob - nominatim/tokenizer/sanitizers/split_name_list.py
add consistent SPDX copyright headers
[nominatim.git] / nominatim / tokenizer / sanitizers / split_name_list.py
1 # SPDX-License-Identifier: GPL-2.0-only
2 #
3 # This file is part of Nominatim. (https://nominatim.org)
4 #
5 # Copyright (C) 2022 by the Nominatim developer community.
6 # For a full list of authors see the git log.
7 """
8 Sanitizer that splits lists of names into their components.
9
10 Arguments:
11     delimiters: Define the set of characters to be used for
12                 splitting the list. (default: `,;`)
13 """
14 import re
15
16 from nominatim.errors import UsageError
17
18 def create(func):
19     """ Create a name processing function that splits name values with
20         multiple values into their components.
21     """
22     delimiter_set = set(func.get('delimiters', ',;'))
23     if not delimiter_set:
24         raise UsageError("Set of delimiters in split-name-list sanitizer is empty.")
25
26     regexp = re.compile('\\s*[{}]\\s*'.format(''.join('\\' + d for d in delimiter_set)))
27
28     def _process(obj):
29         if not obj.names:
30             return
31
32         new_names = []
33         for name in obj.names:
34             split_names = regexp.split(name.name)
35             if len(split_names) == 1:
36                 new_names.append(name)
37             else:
38                 new_names.extend(name.clone(name=n) for n in split_names if n)
39
40         obj.names = new_names
41
42     return _process