]> git.openstreetmap.org Git - nominatim.git/commitdiff
custom comparison for SpecialPhrase
authorSarah Hoffmann <lonvia@denofr.de>
Mon, 30 May 2022 14:30:41 +0000 (16:30 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Mon, 30 May 2022 14:30:41 +0000 (16:30 +0200)
Duplicate elemination only works when a custom hash/equal function
is implemented that is based on the members.

nominatim/tools/special_phrases/special_phrase.py
test/python/tools/test_import_special_phrases.py
test/python/tools/test_sp_csv_loader.py
test/testdata/sp_csv_test.csv

index d9bf9e58e82c40441045ce205c6c7e2bc42550ab..16935ccfa5ac58cc5e77b521fb876b44de20bff0 100644 (file)
@@ -10,7 +10,7 @@
     This class is a model used to transfer a special phrase through
     the process of load and importation.
 """
-class SpecialPhrase():
+class SpecialPhrase:
     """
         Model representing a special phrase.
     """
@@ -22,3 +22,15 @@ class SpecialPhrase():
         # Needed if some operator in the wiki are not written in english
         p_operator = p_operator.strip().lower()
         self.p_operator = '-' if p_operator not in ('near', 'in') else p_operator
+
+    def __eq__(self, other):
+        if not isinstance(other, SpecialPhrase):
+            return False
+
+        return self.p_label == other.p_label \
+               and self.p_class == other.p_class \
+               and self.p_type == other.p_type \
+               and self.p_operator == other.p_operator
+
+    def __hash__(self):
+        return hash((self.p_label, self.p_class, self.p_type, self.p_operator))
index 7026a549ad7982e94a7a40be0807fd6b1b000d84..0dcf549cacf0c26db85ed0a6a2fe54116bbc104f 100644 (file)
@@ -17,11 +17,6 @@ from nominatim.errors import UsageError
 
 from cursor import CursorForTesting
 
-@pytest.fixture
-def testfile_dir(src_dir):
-    return src_dir / 'test' / 'testfiles'
-
-
 @pytest.fixture
 def sp_importer(temp_db_conn, def_config, monkeypatch):
     """
index b5069a52a166633c5a52d0c9926afff54b8d4d7a..49d5a85340a8a58cf70d74579cb7f75c7bfdc8df 100644 (file)
@@ -11,6 +11,7 @@ import pytest
 
 from nominatim.errors import UsageError
 from nominatim.tools.special_phrases.sp_csv_loader import SPCsvLoader
+from nominatim.tools.special_phrases.special_phrase import SpecialPhrase
 
 @pytest.fixture
 def sp_csv_loader(src_dir):
@@ -29,17 +30,11 @@ def test_generate_phrases(sp_csv_loader):
     """
     phrases = list(sp_csv_loader.generate_phrases())
 
-    assert len(phrases) == 41
+    assert len(phrases) == 42
     assert len(set(phrases)) == 41
 
-    assert any(p.p_label == 'Billboard'
-               and p.p_class == 'advertising'
-               and p.p_type == 'billboard'
-               and p.p_operator == '-' for p in phrases)
-    assert any(p.p_label == 'Zip Lines'
-               and p.p_class == 'aerialway'
-               and p.p_type == 'zip_line'
-               and p.p_operator == '-' for p in phrases)
+    assert SpecialPhrase('Billboard', 'advertising', 'billboard', '-') in phrases
+    assert SpecialPhrase('Zip Lines', 'aerialway', 'zip_line', '-') in phrases
 
 
 def test_invalid_cvs_file():
index 3dab967b940e0dc519ea6d011d32f095b03ea24a..147526de4e577438da119ddb49b9c36cfd4fcd8b 100644 (file)
@@ -18,6 +18,7 @@ Zipline near,aerialway,zip_line,near,N
 Ziplines near,aerialway,zip_line,near,Y 
 Zipwire,aerialway,zip_line,-,N 
 Zipwires,aerialway,zip_line,-,Y 
+Zipwires,aerialway,zip_line,name,Y 
 Zipwire in,aerialway,zip_line,in,N 
 Zipwires in,aerialway,zip_line,in,Y 
 Zipwire near,aerialway,zip_line,near,N