Пример #1
0
    def test_tags_modified(self, key="contact:phone", value="42"):
        """
        NBR modifies a value which is in osm, the outdated value matches the osm value
        Should indicate that an auto-update is ok.
        """
        self.osm_updated.tags[key] = value

        ret = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated)
        self.assertEqual(self.osm_element.tags[key], value)
        self.assertEqual(ret, "update")
Пример #2
0
    def test_tags_deleted_ignored(self, del_key="contact:phone"):
        """
        NBR removes a value which is not in osm.
        This can be ignored, no action needed.
        """
        del self.osm_updated.tags[del_key]
        del self.osm_element.tags[del_key]

        ret = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated)
        self.assertEqual(ret, True)
Пример #3
0
    def test_tags_modified_removed(self, key="contact:phone", value="42"):
        """
        NBR modifies a value which is not in osm,
        Should indicate that a manual intervention is needed        
        """
        self.osm_updated.tags[key] = value
        del self.osm_element.tags[key]

        ret = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated)
        self.assertFalse(key in self.osm_element.tags)
        self.assertEqual(ret, False)
Пример #4
0
    def test_tags_modified_tampered(self, key="contact:phone", value="42"):
        """
        NBR modifies a value which is in osm, the outdated value does not match the osm value.
        Should indicate that a manual intervention is needed        
        """
        self.osm_updated.tags[key] = value
        value_tampered = self.osm_element.tags[key] + "tampered"
        self.osm_element.tags[key] = value_tampered

        ret = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated)
        self.assertEqual(self.osm_element.tags[key], value_tampered)
        self.assertEqual(ret, False)
Пример #5
0
    def test_tags_deleted_tampered(self, del_key="contact:phone"):
        """
        NBR removes a value which is in osm, the outdated value does not match the osm value.
        Should indicate that a manual intervention is needed        
        """
        del self.osm_updated.tags[del_key]
        self.assertTrue(del_key in self.osm_element.tags)
        self.osm_element.tags[del_key] += "tampered"

        self.assertNotEqual(self.osm_element.tags[del_key], self.osm_outdated.tags[del_key])
        ret = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated)
        self.assertEqual(ret, False)
Пример #6
0
    def test_tags_deleted(self, del_key="contact:phone"):
        """
        NBR removes a value which is in osm, the outdated value matches the osm value.
        Should indicate that an auto-update is ok.
        """
        del self.osm_updated.tags[del_key]

        self.assertTrue(del_key in self.osm_element.tags)
        self.assertEqual(self.osm_element.tags[del_key], self.osm_outdated.tags[del_key])
        ret = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated)
        self.assertFalse(del_key in self.osm_element.tags)
        self.assertEqual(ret, "update")
Пример #7
0
    def test_tags_added_building_equal(self):
        """
        NBR adds a value which is in osm, and the value is the same. 
        This can be ignored, no action needed.
        """
        self.assertFalse("new_tag" in self.osm_updated.tags)
        self.osm_updated.tags["building"] = self.osm_element.tags["building"]

        self.assertTrue(self.osm_element.tags["building"], "kindergarten")
        ret = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated)
        self.assertTrue(ret)
        self.assertEqual(self.osm_element.tags["building"], "kindergarten")
Пример #8
0
    def test_tags_added_building(self, value="new_value"):
        """
        NBR adds a value which is in osm, and the value is missmatched. 
        Should indicate that a manual intervention is needed
        """
        self.assertFalse("new_tag" in self.osm_updated.tags)
        self.osm_updated.tags["building"] = value

        self.assertTrue(self.osm_element.tags["building"], "kindergarten")
        ret = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated)
        self.assertFalse(ret)
        self.assertEqual(self.osm_element.tags["building"], "kindergarten")
Пример #9
0
    def test_tags_added_new_tag(self, value="new_value"):
        """
        NBR adds a value which is not in osm.
        Should indicate that an auto-update is ok.
        """
        self.assertFalse("new_tag" in self.osm_updated.tags)
        self.osm_updated.tags["new_tag"] = value

        self.assertTrue("new_tag" not in self.osm_element.tags)
        action = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated)
        self.assertEqual(action, "update")
        self.assertTrue("new_tag" in self.osm_element.tags)
Пример #10
0
    def test_all(self):
        def new(d_old, d_new, k):
            self.assertNotIn(k, d_old)
            self.assertNotIn(k, d_new)
            d_new[k] = "new"

        def modified(d_old, d_new, k):
            self.assertIn(k, d_old)
            self.assertIn(k, d_new)
            self.assertEqual(d_new[k], d_old[k])
            d_new[k] += "modified"

        def deleted(d_old, d_new, k):
            self.assertIn(k, d_old)
            self.assertIn(k, d_new)
            del d_new[k]

        tag_from_barnehagefakta_is = {"new": new, "modified": modified, "deleted": deleted}

        def set_new(d, k, new_v, old_v):
            if new_v is not None:
                d[k] = new_v

        def set_old(d, k, new_v, old_v):
            if old_v is not None:
                d[k] = old_v

        def set_new_conflict(d, k, new_v, old_v):
            if new_v is not None:
                d[k] = new_v + "conflicting"

        def set_old_conflict(d, k, new_v, old_v):
            if old_v is not None:
                d[k] = old_v + "conflicting"

        def delete_key(d, k, new_v, old_v):
            if k in d:
                del d[k]

        value_in_OSM = {
            "matches new value": set_new,
            "matches old value": set_old,
            "conflicts new value": set_new_conflict,
            "conflicts old value": set_old_conflict,
            "is unset": delete_key,
        }

        action = dict()

        def tokey(key1, key2):
            return "{0}, {1}".format(key1, key2)

        with open("update_osm_test.csv", "r") as f:
            f.readline()  # skip first line
            for line in f:
                ls = line.split(",")
                k = tokey(ls[0], ls[1])
                a = ls[2]  # action
                if "ignore" in a or "N/A" in a:
                    action[k] = ("ignore", True)
                elif "conflict" in a:
                    action[k] = ("conflict", False)
                elif "auto update" in a:
                    action[k] = ("auto_update", "update")
                else:
                    raise ValueError(line)
        logger.debug("%s", action)

        for NBR in tag_from_barnehagefakta_is:
            for OSM in value_in_OSM:
                info = 'nbr="%s", osm="%s", action="%s"' % (NBR, OSM, action[tokey(NBR, OSM)])
                logger.info(info)

                # shorthand
                d_old, d_new = self.osm_outdated.tags, self.osm_updated.tags
                d_osm = self.osm_element.tags

                if NBR is "new":
                    k = "newKey"
                else:
                    k = self.osm_updated.tags.keys()[0]  # pick a key

                # updates the correct dictionaries:
                tag_from_barnehagefakta_is[NBR](d_old, d_new, k)
                new_v, old_v = d_new.get(k, None), d_old.get(k, None)
                logger.debug("new_v = %s, old_v = %s", new_v, old_v)
                value_in_OSM[OSM](d=d_osm, k=k, new_v=new_v, old_v=old_v)

                # Call:
                ret = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated)

                # Check:
                expected_ret = action[tokey(NBR, OSM)][1]
                self.assertEqual(ret, expected_ret, "For the test: %s, got %s, expected %s" % (info, ret, expected_ret))

                self.setUp()  # cleanup
Пример #11
0
 def test_tags_equal(self):
     action = update_osm.resolve_conflict(self.osm_element, self.osm_outdated, self.osm_updated)
     self.assertEqual(action, True)