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
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
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( )
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"}
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
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)
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))