diff --git a/cesium_app/handlers/dataset.py b/cesium_app/handlers/dataset.py index 418a989..3f3d2dd 100644 --- a/cesium_app/handlers/dataset.py +++ b/cesium_app/handlers/dataset.py @@ -5,6 +5,7 @@ from cesium import data_management, time_series from cesium.util import shorten_fname +from ..tests.fixtures import create_test_dataset import os from os.path import join as pjoin @@ -24,6 +25,12 @@ def _get_dataset(self, dataset_id): return d def post(self): + if self.get_argument('create_example') == 'true': + project_id = self.get_argument('projectID') + p = Project.get(Project.id == project_id) + with create_test_dataset(p, delete_after=False) as d: + return self.success(d, 'cesium/FETCH_DATASETS') + if not 'tarFile' in self.request.files: return self.error('No tar file uploaded') diff --git a/cesium_app/tests/fixtures.py b/cesium_app/tests/fixtures.py index a4f5578..e12590d 100644 --- a/cesium_app/tests/fixtures.py +++ b/cesium_app/tests/fixtures.py @@ -29,7 +29,7 @@ def create_test_project(): @contextmanager -def create_test_dataset(project, label_type='class'): +def create_test_dataset(project, label_type='class', delete_after=True): """Create and yield test labeled dataset, then delete. Params @@ -57,12 +57,16 @@ def create_test_dataset(project, label_type='class'): tarball = shutil.copy2(tarball, cfg['paths']['upload_folder']) ts_paths = data_management.parse_and_store_ts_data( tarball, cfg['paths']['ts_data_folder'], header) - d = m.Dataset.add(name='test_ds', project=project, file_uris=ts_paths) + + name = 'Example Dataset' + d = m.Dataset.add(name=name, project=project, file_uris=ts_paths) d.save() + try: yield d finally: - d.delete_instance() + if delete_after: + d.delete_instance() @contextmanager diff --git a/public/scripts/Datasets.jsx b/public/scripts/Datasets.jsx index b348dfe..d5fe22f 100644 --- a/public/scripts/Datasets.jsx +++ b/public/scripts/Datasets.jsx @@ -63,6 +63,11 @@ let DatasetForm = (props) => { + ( { onSubmit: form => ( dispatch(Action.uploadDataset(form)) - ) + ), + createExampleDataset: () => dispatch(Action.createExampleDataset(ownProps.selectedProject.id)) } ); diff --git a/public/scripts/actions.jsx b/public/scripts/actions.jsx index 0ce27ab..33ab6c9 100644 --- a/public/scripts/actions.jsx +++ b/public/scripts/actions.jsx @@ -17,6 +17,7 @@ export const FETCH_DATASETS = 'cesium/FETCH_DATASETS'; export const RECEIVE_DATASETS = 'cesium/RECEIVE_DATASETS'; export const UPLOAD_DATASET = 'cesium/UPLOAD_DATASET'; export const DELETE_DATASET = 'cesium/DELETE_DATASET'; +export const CREATE_EXAMPLE_DATASET = 'cesium/CREATE_EXAMPLE_DATASET'; export const FETCH_FEATURES = 'cesium/FETCH_FEATURES'; export const FETCH_FEATURESETS = 'cesium/FETCH_FEATURESETS'; @@ -174,6 +175,7 @@ export function deleteProject(id) { export function uploadDataset(form) { const formData = new FormData(); + formData.append('create_example', false); for (const key in form) { if (form[key] && objectType(form[key][0]) === 'File') { @@ -228,6 +230,31 @@ function receiveDatasets(datasets) { } +// Create example dataset +export function createExampleDataset(projectID) { + var form_data = new FormData(); + form_data.append('projectID', projectID); + form_data.append('create_example', true); + + return dispatch => + promiseAction( + dispatch, + CREATE_EXAMPLE_DATASET, + + fetch('/dataset', { + method: 'POST', + body: form_data, + }) + .then(response => response.json()) + .then((json) => { + dispatch(fetchDatasets()); + dispatch(hideExpander('newDatasetExpander')); + dispatch(resetForm('newDataset')); + }).catch(ex => console.log('createExampleDataset', ex)) + ); +} + + // Download featuresets export function fetchFeaturesets() { return dispatch =>