def get_missing_housenumbers( self ) -> Tuple[List[Tuple[util.Street, List[util.HouseNumber]]], List[Tuple[ util.Street, List[util.HouseNumber]]]]: """ Compares ref and osm house numbers, prints the ones which are in ref, but not in osm. Return value is a pair of ongoing and done streets. Each of of these is a pair of a street name and a house number list. """ ongoing_streets = [] done_streets = [] osm_street_names = self.get_osm_streets() all_ref_house_numbers = self.__get_ref_housenumbers() for osm_street in osm_street_names: osm_street_name = osm_street.get_osm_name() ref_house_numbers = all_ref_house_numbers[osm_street_name] osm_house_numbers = self.get_osm_housenumbers(osm_street_name) only_in_reference = util.get_only_in_first(ref_house_numbers, osm_house_numbers) in_both = util.get_in_both(ref_house_numbers, osm_house_numbers) ref_street_name = get_ref_street_from_osm_street( self.get_config(), osm_street_name) street = util.Street(osm_street_name, ref_street_name, self.should_show_ref_street(osm_street_name)) if only_in_reference: ongoing_streets.append((street, only_in_reference)) if in_both: done_streets.append((street, in_both)) # Sort by length. ongoing_streets.sort(key=lambda result: len(result[1]), reverse=True) return ongoing_streets, done_streets
def get_additional_housenumbers(self) -> util.NumberedStreets: """ Compares ref and osm house numbers, prints the ones which are in osm, but not in ref. Return value is a list of streets. Each of of these is a pair of a street name and a house number list. """ additional = [] osm_street_names = self.get_osm_streets() all_ref_house_numbers = self.get_ref_housenumbers() streets_valid = self.get_street_valid() for osm_street in osm_street_names: osm_street_name = osm_street.get_osm_name() ref_house_numbers = all_ref_house_numbers[osm_street_name] osm_house_numbers = self.get_osm_housenumbers(osm_street_name) if osm_street_name in streets_valid.keys(): street_valid = streets_valid[osm_street_name] osm_house_numbers = \ [i for i in osm_house_numbers if not util.HouseNumber.is_invalid(i.get_number(), street_valid)] only_in_osm = util.get_only_in_first(osm_house_numbers, ref_house_numbers) ref_street_name = get_ref_street_from_osm_street( self.get_config(), osm_street_name) street = util.Street(osm_street_name, ref_street_name, self.should_show_ref_street(osm_street_name)) if only_in_osm: additional.append((street, only_in_osm)) # Sort by length. additional.sort(key=lambda result: len(result[1]), reverse=True) return additional
def get_missing_streets(self) -> Tuple[List[str], List[str]]: """Tries to find missing streets in a relation.""" reference_streets = self.get_ref_streets() street_blacklist = self.get_config().get_street_filters() osm_streets = [self.get_ref_street_from_osm_street(street) for street in self.get_osm_streets()] only_in_reference = util.get_only_in_first(reference_streets, osm_streets) only_in_reference = [i for i in only_in_reference if i not in street_blacklist] in_both = util.get_in_both(reference_streets, osm_streets) return only_in_reference, in_both
def get_additional_streets(self, sorted_result: bool = True ) -> List[util.Street]: """Tries to find additional streets in a relation.""" ref_streets = [ get_osm_street_from_ref_street(self.get_config(), street) for street in self.get_ref_streets() ] ref_street_objs = [util.Street(i) for i in ref_streets] osm_streets = self.get_osm_streets(sorted_result) osm_street_blacklist = self.get_config().get_osm_street_filters() only_in_osm = util.get_only_in_first(osm_streets, ref_street_objs) only_in_osm = [ i for i in only_in_osm if i.get_osm_name() not in osm_street_blacklist ] return only_in_osm
def test_happy(self) -> None: """Tests the happy path.""" self.assertEqual(util.get_only_in_first(["1", "2", "3"], ["3", "4"]), ["1", "2"])