Skip to content

Commit 8bfd88d

Browse files
Merge pull request #39 from vre-hub/dev
fix(backend): workspace in deleted wf (#38)
2 parents 2905eb1 + 3c9e404 commit 8bfd88d

File tree

4 files changed

+46
-7
lines changed

4 files changed

+46
-7
lines changed

reana_jupyterlab/handlers/workflows.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,12 +139,16 @@ def get(self, workflow_id):
139139
try:
140140
response = requests.get(f"{server_url}/api/{endpoint}/{workflow_id}/workspace?{string_params}")
141141
data = response.json()
142+
143+
if response.status_code != 200:
144+
raise Exception(data.get('message', 'Error getting workspace files'))
145+
142146
data['files'] = self._parse_files(data.pop('items'))
143147
self.finish(data)
144148
except Exception as e:
145149
self.finish(json.dumps({
146150
'status': 'error',
147-
'message': str(e)
151+
'message': str(e),
148152
}))
149153

150154
class WorkflowSpecificationHandler(APIHandler):

reana_jupyterlab/tests/mocks/workflows.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@
4242
]
4343
}
4444

45+
DELETED_WF_FILES = {
46+
"message": "Workflow workspace was deleted"
47+
}
48+
4549
WF1_FILES_RESPONSE = {
4650
"files": [
4751
{

reana_jupyterlab/tests/test_workflows.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,14 @@ def mock_get_workspace(mocker):
4141

4242
mocker.patch('requests.get', return_value=response)
4343

44+
@pytest.fixture
45+
def mock_get_workspace_deleted(mocker):
46+
response = mocker.Mock()
47+
response.json.return_value = DELETED_WF_FILES.copy()
48+
response.status_code = 400
49+
50+
mocker.patch('requests.get', return_value=response)
51+
4452
@pytest.fixture
4553
def mock_get_specification(mocker):
4654
response = mocker.Mock()
@@ -145,6 +153,15 @@ async def test_get_workspace(jp_fetch, endpoint, mock_get_workspace):
145153
assert response.code == 200
146154
assert data == WF1_FILES_RESPONSE
147155

156+
157+
@pytest.mark.parametrize('endpoint', ['/reana_jupyterlab/workflows/mock_wf_id_1/workspace'])
158+
async def test_get_workspace_deleted(jp_fetch, endpoint, mock_get_workspace_deleted):
159+
response = await jp_fetch(endpoint)
160+
data = json.loads(response.body)
161+
162+
assert response.code == 200
163+
assert data['message'] == DELETED_WF_FILES['message']
164+
148165
@pytest.mark.parametrize('endpoint', ['/reana_jupyterlab/workflows/mock_wf_id_1/specification'])
149166
async def test_get_specification(jp_fetch, endpoint, mock_get_specification):
150167
response = await jp_fetch(endpoint)

src/components/@Workflows/WorkflowWorkspace.tsx

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ const useStyles = createUseStyles({
8585
},
8686
transparent: {
8787
opacity: 0.5
88+
},
89+
message: {
90+
padding: '16px',
91+
textAlign: 'center'
8892
}
8993
});
9094

@@ -116,12 +120,14 @@ export const WorkflowWorkspace: React.FC<MyProps> = ({ workflow, setWorkflow, is
116120
if (loading) {
117121
const populateWorkflow = async () => {
118122
try {
119-
const wfName = workflow.name + '.' + workflow.run;
120-
const dataWorkspace = await requestAPI<any>(`workflows/${wfName}/workspace?page=${page}&search=${query}`, {
121-
method: 'GET',
122-
});
123-
setWorkflow({ ...workflow, ...dataWorkspace });
124-
setNavigation({...navigation, ...dataWorkspace});
123+
if (workflow.status !== 'deleted') {
124+
const wfName = workflow.name + '.' + workflow.run;
125+
const dataWorkspace = await requestAPI<any>(`workflows/${wfName}/workspace?page=${page}&search=${query}`, {
126+
method: 'GET',
127+
});
128+
setWorkflow({ ...workflow, ...dataWorkspace });
129+
setNavigation({...navigation, ...dataWorkspace});
130+
}
125131
} catch (e) {
126132
console.error(e);
127133
} finally {
@@ -195,6 +201,14 @@ export const WorkflowWorkspace: React.FC<MyProps> = ({ workflow, setWorkflow, is
195201
setSelectedFiles([...selectedFiles, file]);
196202
}
197203

204+
if (workflow.status === 'deleted') {
205+
return (
206+
<div className={classes.content}>
207+
<p className={classes.message}>The workflow workspace was deleted.</p>
208+
</div>
209+
);
210+
}
211+
198212
if (loading) {
199213
return <Loading />;
200214
}

0 commit comments

Comments
 (0)