def test_import_csv_explore_database(self):
        if utils.get_example_database().backend == "sqlite":
            # sqlite doesn't support schema / database creation
            return
        explore_db_id = utils.get_example_database().id

        upload_db = utils.get_or_create_db(
            "csv_explore_db", app.config["SQLALCHEMY_DATABASE_URI"])
        upload_db_id = upload_db.id
        extra = upload_db.get_extra()
        extra["explore_database_id"] = explore_db_id
        upload_db.extra = json.dumps(extra)
        db.session.commit()

        self.login(username="******")
        self.enable_csv_upload(DatasetDAO.get_database_by_id(upload_db_id))
        table_name = "".join(
            random.choice(string.ascii_uppercase) for _ in range(5))

        f = "testCSV.csv"
        self.create_sample_csvfile(f, ["a,b", "john,1", "paul,2"])
        # initial upload with fail mode
        resp = self.upload_csv(f, table_name)
        self.assertIn(f'CSV file "{f}" uploaded to table "{table_name}"', resp)
        table = self.get_table_by_name(table_name)
        self.assertEqual(table.database_id, explore_db_id)

        # cleanup
        db.session.delete(table)
        db.session.delete(DatasetDAO.get_database_by_id(upload_db_id))
        db.session.commit()
        os.remove(f)
Esempio n. 2
0
    def validate(self) -> None:
        exceptions: List[ValidationError] = list()
        database_id = self._properties["database"]
        table_name = self._properties["table_name"]
        schema = self._properties.get("schema", None)
        owner_ids: Optional[List[int]] = self._properties.get("owners")

        # Validate uniqueness
        if not DatasetDAO.validate_uniqueness(database_id, schema, table_name):
            exceptions.append(DatasetExistsValidationError(table_name))

        # Validate/Populate database
        database = DatasetDAO.get_database_by_id(database_id)
        if not database:
            exceptions.append(DatabaseNotFoundValidationError())
        self._properties["database"] = database

        # Validate table exists on dataset
        if database and not DatasetDAO.validate_table_exists(
                database, table_name, schema):
            exceptions.append(TableNotFoundValidationError(table_name))

        try:
            owners = populate_owners(self._actor, owner_ids)
            self._properties["owners"] = owners
        except ValidationError as ex:
            exceptions.append(ex)
        if exceptions:
            exception = DatasetInvalidError()
            exception.add_list(exceptions)
            raise exception