Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
 def test_addr_place(self) -> None:
     """Tests the case when addr:place is used."""
     with util.CsvIO(
             open("tests/workdir/street-housenumbers-gh964.csv",
                  "r")) as stream:
         actual = util.get_street_from_housenumber(stream)
     # This is picked up from addr:place because addr:street was empty.
     self.assertEqual(actual, [util.Street(osm_name="Tolvajos tanya")])
Ejemplo n.º 4
0
    def test_happy(self) -> None:
        """Tests the happy path."""
        relations = get_relations()
        relation_name = "gazdagret"
        relation = relations.get_relation(relation_name)
        only_in_osm = relation.get_additional_streets()

        self.assertEqual(only_in_osm, [util.Street('Only In OSM utca')])

        # These is filtered out, even if it's OSM-only.
        osm_street_blacklist = relations.get_relation("gazdagret").get_config().get_osm_street_filters()
        self.assertEqual(osm_street_blacklist, ['Second Only In OSM utca'])
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
 def get_osm_streets(self, sorted_result: bool = True) -> List[util.Street]:
     """Reads list of streets for an area from OSM."""
     ret: List[util.Street] = []
     with self.get_files().get_osm_streets_csv_stream() as sock:
         first = True
         for row in sock.get_rows():
             if first:
                 first = False
                 continue
             # 0: @id, 1: name, 6: @type
             street = util.Street(osm_id=int(row[0]), osm_name=row[1])
             if len(row) > 6:
                 street.set_osm_type(row[6])
             street.set_source(_("street"))
             ret.append(street)
     if os.path.exists(self.get_files().get_osm_housenumbers_path()):
         with self.get_files().get_osm_housenumbers_csv_stream() as sock:
             ret += util.get_street_from_housenumber(sock)
     if sorted_result:
         return sorted(set(ret))
     return ret
Ejemplo n.º 7
0
 def test_happy(self) -> None:
     """Tests the happy path."""
     street = util.Street("foo", "bar")
     self.assertEqual(street.get_ref_name(), "bar")
     self.assertEqual(street.to_html().getvalue(), "foo<br />(bar)")