""" Module containing the SPCsvLoader class. The class allows to load phrases from a csv file. """ import csv import os from nominatim.tools.special_phrases.special_phrase import SpecialPhrase from nominatim.tools.special_phrases.sp_loader import SPLoader from nominatim.errors import UsageError class SPCsvLoader(SPLoader): """ Base class for special phrases loaders. Handle the loading of special phrases from external sources. """ def __init__(self, csv_path): super().__init__() self.csv_path = csv_path self.has_been_read = False def __next__(self): if self.has_been_read: raise StopIteration() self.has_been_read = True SPCsvLoader.check_csv_validity(self.csv_path) return SPCsvLoader.parse_csv(self.csv_path) @staticmethod def parse_csv(csv_path): """ Open and parse the given csv file. Create the corresponding SpecialPhrases. """ phrases = set() with open(csv_path) as file: reader = csv.DictReader(file, delimiter=',') for row in reader: phrases.add( SpecialPhrase(row['phrase'], row['class'], row['type'], row['operator']) ) return phrases @staticmethod def check_csv_validity(csv_path): """ Check that the csv file has the right extension. """ _, extension = os.path.splitext(csv_path) if extension != '.csv': raise UsageError('The file {} is not a csv file.'.format(csv_path))