def test_create_feature_image_small_image(projects_fixture, image_small_DES_2176_fixture):
    feature = FeaturesService.fromImage(projects_fixture.id, image_small_DES_2176_fixture, metadata={})
    assert feature.project_id == projects_fixture.id
    assert len(feature.assets) == 1
    assert db_session.query(Feature).count() == 1
    assert db_session.query(FeatureAsset).count() == 1
    assert len(os.listdir(get_project_asset_dir(feature.project_id))) == 2
    os.path.isfile(get_asset_path(feature.assets[0].path))
    os.path.isfile(os.path.join(get_project_asset_dir(projects_fixture.id), str(feature.assets[0].uuid) + ".thumb.jpeg"))
def test_create_feature_video_asset(projects_fixture, feature_fixture, video_file_fixture):
    feature = FeaturesService.createFeatureAsset(projects_fixture.id,
                                                 feature_fixture.id,
                                                 FileStorage(video_file_fixture))
    assert feature.id == feature_fixture.id
    assert len(feature.assets) == 1
    assert db_session.query(FeatureAsset).count() == 1
    assert len(os.listdir(get_project_asset_dir(feature.project_id))) == 1
    os.path.isfile(get_asset_path(feature.assets[0].path))
    os.path.isfile(os.path.join(get_project_asset_dir(projects_fixture.id), str(feature.assets[0].uuid) + ".mp4"))
def test_remove_feature_image(projects_fixture, image_file_fixture):
    feature = FeaturesService.fromImage(projects_fixture.id, image_file_fixture, metadata={})
    FeaturesService.delete(feature.id)

    assert db_session.query(Feature).count() == 0
    assert db_session.query(FeatureAsset).count() == 0
    assert len(os.listdir(get_project_asset_dir(feature.project_id))) == 0
def test_remove_feature_image_asset(projects_fixture, feature_fixture, image_file_fixture):
    feature = FeaturesService.createFeatureAsset(projects_fixture.id,
                                                 feature_fixture.id,
                                                 FileStorage(image_file_fixture))
    FeaturesService.delete(feature.id)
    assert db_session.query(Feature).count() == 0
    assert db_session.query(FeatureAsset).count() == 0
    assert len(os.listdir(get_project_asset_dir(feature.project_id))) == 0
Beispiel #5
0
def test_delete_point_cloud(projects_fixture):
    u1 = db_session.query(User).get(1)

    point_cloud = PointCloudService.create(projectId=projects_fixture.id,
                                           data=POINT_CLOUD_DATA,
                                           user=u1)
    PointCloudService.delete(pointCloudId=point_cloud.id)
    assert db_session.query(PointCloud).count() == 0
    assert db_session.query(Feature).count() == 0
    assert len(os.listdir(get_project_asset_dir(point_cloud.project_id))) == 0
Beispiel #6
0
def projects_fixture2():
    proj = Project(name="test2", description="description2")
    u1 = db_session.query(User).filter(User.username == "test1").first()
    proj.users.append(u1)
    proj.tenant_id = u1.tenant_id
    db_session.add(proj)
    db_session.commit()
    yield proj

    shutil.rmtree(get_project_asset_dir(proj.id), ignore_errors=True)
def test_refresh_observable_projects(
        agave_utils_with_image_file_from_rapp_folder,
        observable_projects_fixture, get_system_users_mock,
        rollback_side_effect):
    refresh_observable_projects()
    rollback_side_effect.assert_not_called()
    assert len(
        os.listdir(
            get_project_asset_dir(
                observable_projects_fixture.project_id))) == 2
def test_external_data_rapp(userdata, projects_fixture,
                            agave_utils_with_image_file_from_rapp_folder):
    u1 = db_session.query(User).filter(User.username == "test1").first()

    import_from_agave(projects_fixture.tenant_id, u1.id, "testSystem", "/Rapp",
                      projects_fixture.id)
    features = db_session.query(Feature).all()
    # should be one feature with a single image asset
    assert len(features) == 1
    assert len(features[0].assets) == 1
    assert len(os.listdir(get_project_asset_dir(
        features[0].project_id))) == 2  # processed image + thumbnail
    # This should only have been called once, since there is only one FILE in the listing
    agave_utils_with_image_file_from_rapp_folder.client_in_external_data.getFile.assert_called_once(
    )
Beispiel #9
0
    def delete(user: User, projectId: int) -> dict:
        """
        Delete a project and all its Features and assets
        :param projectId: int
        :return:
        """
        proj = db_session.query(Project).get(projectId)

        db_session.delete(proj)
        db_session.commit()

        assets_folder = get_project_asset_dir(projectId)
        try:
            shutil.rmtree(assets_folder)
        except FileNotFoundError:
            pass
        return {"status": "ok"}
Beispiel #10
0
def test_add_point_cloud_file(projects_fixture, point_cloud_fixture,
                              lidar_las1pt2_file_fixture,
                              convert_to_potree_mock, check_point_cloud_mock,
                              get_point_cloud_info_mock):

    filename = os.path.basename(lidar_las1pt2_file_fixture.name)
    task = PointCloudService.fromFileObj(point_cloud_fixture.id,
                                         lidar_las1pt2_file_fixture, filename)

    assert task.status == "RUNNING"
    assert point_cloud_fixture.task_id == task.id
    # load updated point cloud
    point_cloud = db_session.query(PointCloud).get(1)
    las_files = os.listdir(
        get_asset_path(point_cloud.path, PointCloudService.ORIGINAL_FILES_DIR))
    assert len(las_files) == 1
    assert las_files[0] == os.path.basename(filename)
    original_file_size = os.fstat(lidar_las1pt2_file_fixture.fileno()).st_size
    asset_file_path = os.path.join(
        get_asset_path(point_cloud.path, PointCloudService.ORIGINAL_FILES_DIR),
        filename)
    assert os.path.getsize(asset_file_path) == original_file_size

    # run conversion tool (that we had mocked)
    _, convert_kwargs = convert_to_potree_mock.apply_async.call_args
    assert projects_fixture.id == convert_kwargs['args'][0]
    convert_to_potree(projects_fixture.id)

    # load updated point cloud
    point_cloud = db_session.query(PointCloud).get(1)

    assert point_cloud.task.status == "FINISHED"
    assert db_session.query(Feature).count() == 1
    assert db_session.query(FeatureAsset).count() == 1
    assert len(os.listdir(get_project_asset_dir(point_cloud.project_id))) == 2
    assert len(os.listdir(get_asset_path(point_cloud.feature.assets[0].path))
               ) == 5  # index.html, preview.html, pointclouds, libs, logo
    assert os.path.isfile(
        os.path.join(get_asset_path(point_cloud.feature.assets[0].path),
                     "preview.html"))
    with open(
            os.path.join(get_asset_path(point_cloud.feature.assets[0].path),
                         "preview.html"), 'r+') as f:
        preview = f.read()
        assert "nsf_logo" not in preview
        assert "$('.potree_menu_toggle').hide()" in preview
Beispiel #11
0
def observable_projects_fixture():
    u1 = db_session.query(User).filter(User.username == "test1").first()
    proj = Project(name="test_observable",
                   description="description",
                   tenant_id=u1.tenant_id)
    obs = ObservableDataProject(
        system_id="testSystem",
        path="/testPath",
        watch_content=True
    )
    obs.project = proj
    proj.users.append(u1)
    db_session.add(obs)
    db_session.add(proj)
    db_session.commit()
    yield obs

    shutil.rmtree(get_project_asset_dir(proj.id), ignore_errors=True)
Beispiel #12
0
def test_import_point_clouds_from_agave(MockAgaveUtils, projects_fixture,
                                        point_cloud_fixture,
                                        lidar_las1pt2_file_fixture):
    MockAgaveUtils().getFile.return_value = lidar_las1pt2_file_fixture

    u1 = db_session.query(User).get(1)
    files = [{"system": "designsafe.storage.default", "path": "file1.las"}]
    import_point_clouds_from_agave(u1.id, files, point_cloud_fixture.id)

    point_cloud = point_cloud_fixture
    assert point_cloud.task.status == "FINISHED"
    assert point_cloud.task.description == ""
    assert len(os.listdir(get_project_asset_dir(point_cloud.project_id))) == 2
    assert len(os.listdir(get_asset_path(point_cloud.feature.assets[0].path))
               ) == 5  # index.html, preview.html, pointclouds, libs, logo
    assert len(
        os.listdir(
            get_asset_path(point_cloud_fixture.path,
                           PointCloudService.ORIGINAL_FILES_DIR))) == 1
def test_remove_feature(projects_fixture, feature_fixture):
    FeaturesService.delete(feature_fixture.id)
    assert db_session.query(Feature).count() == 0
    assert not os.path.exists(get_project_asset_dir(feature_fixture.project_id))