def _create_watch_regions(watch_driving_dataset, regions_csv_file):
    categories = []
    f = open(regions_csv_file, "r")
    for line in f:
        stripped_line = line.strip()
        if not stripped_line.startswith('#') and len(stripped_line) > 0:
            values = line.split(',')
            if len(values) != 3:
                log.error("Regions csv file has incorrect number of elements on line reading %s" % stripped_line)
                exit(-1)
            category_name = values[0].strip()
            cat = None
            for category in categories:
                if category.name == category_name:
                    cat = category

            if cat is None:
                log.info("  adding category {}".format(category_name))
                cat = LandCoverRegionCategory(name=category_name)
                cat.driving_dataset = watch_driving_dataset
                categories.append(cat)

            region = LandCoverRegion()
            region.name = values[1].strip()
            region.mask_file = "data/WATCH_2D/masks/{}".format(values[2].strip())
            region.category = cat
            log.info("  adding region {} to {} with file {}".format(region.name, category_name, region.mask_file))
    f.close()
    def _mock_lcs_get_land_cover_region_wrong_dataset(id):
        dds = DrivingDataset()
        dds.id = 7

        land_cover_type = LandCoverRegionCategory()
        land_cover_type.id = 1
        land_cover_type.driving_dataset_id = 7
        land_cover_type.driving_dataset = dds

        land_cover_region = LandCoverRegion()
        land_cover_region.id = id
        land_cover_region.name = "Sand"
        land_cover_region.category = land_cover_type

        return land_cover_region
 def _get_or_create_category(self, categoies, driving_dataset, category_name):
     """
     Gets a category with the given name. Either by finding it or creating it
     :param categoies: current list of categories (updated if new one is added)
     :param driving_dataset: the driving dataset to set for the category
     :param category_name: the name of the category
     :return: the category
     """
     found_category = None
     for category in categoies:
         if category.name == category_name:
             found_category = category
             break
     if found_category is None:
         found_category = LandCoverRegionCategory(name=category_name)
         found_category.driving_dataset = driving_dataset
         categoies.append(found_category)
     return found_category
    def test_GIVEN_data_set_with_a_region_WHEN_list_THEN_returns_mask(self):

        with session_scope() as session:
            category = LandCoverRegionCategory()
            category.driving_dataset = self.driving_dataset
            category.name = "mycategory"

            region = LandCoverRegion()
            region.name = "myregion"
            region.category = category
            region.mask_file = "data/file_path"
            session.add(category)


        self.login(access_level=constants.USER_ACCESS_LEVEL_ADMIN)
        response = self.app.get(
            url=url(controller='driving_data', action='edit', id=self.driving_dataset.id),
            expect_errors=True
        )

        assert_that(response.normal_body, contains_string(category.name))
        assert_that(response.normal_body, contains_string(region.name))
        assert_that(response.normal_body, contains_string(region.mask_file))
    def test_GIVEN_invalid_land_cover_actions_WHEN_post_THEN_error_shown_and_stay_on_page(self):
        # Add some regions to another driving dataset
        dds = DatasetService().get_driving_datasets(self.user)[1]
        with session_scope() as session:
            land_cat = LandCoverRegionCategory()
            land_cat.driving_dataset = dds
            land_cat.name = "Category2"

            land_region = LandCoverRegion()
            land_region.name = "Region1"
            land_region.category = land_cat
            session.add(land_region)

        response = self.app.post(
            url(controller='model_run', action='land_cover'),
            params={
                'submit': u'Next',
                'action_1_region': str(land_region.id),
                'action_1_value': u'8',
                'action_1_order': u'1'
            })
        assert_that(response.normal_body, contains_string("Land Cover"))  # Check still on page
        assert_that(response.normal_body, contains_string("Land Cover Region not valid for the chosen driving data"))