Skip to content

Commit

Permalink
Set up new branch to branch off of Compress branch
Browse files Browse the repository at this point in the history
  • Loading branch information
Jeff McMillen authored and Jeff McMillen committed Dec 10, 2024
1 parent d9e4bfb commit 2702ed7
Show file tree
Hide file tree
Showing 4 changed files with 168 additions and 28 deletions.
27 changes: 0 additions & 27 deletions client/src/hooks/datafiles/mutations/useExtract.js

This file was deleted.

126 changes: 126 additions & 0 deletions client/src/hooks/datafiles/mutations/useExtract.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
import { useMutation } from '@tanstack/react-query';
import { useSelector, useDispatch, shallowEqual } from 'react-redux';
import { getExtractParams } from 'utils/getExtractParams';
import { apiClient } from 'utils/apiClient';
import { fetchUtil } from 'utils/fetchUtil';
import { TTapisFile } from 'utils/types';
import { TJobBody, TJobPostResponse } from './useSubmitJob';

const getAppUtil = async function fetchAppDefinitionUtil(
appId: string,
appVersion: string
) {
const params = { appId, appVersion };
const result = await fetchUtil({
url: '/api/workspace/apps',
params,
});
return result.response;
};

async function submitJobUtil(body: TJobBody) {
const res = await apiClient.post<TJobPostResponse>(
`/api/workspace/jobs`,
body
);
return res.data.response;
}

function useExtract() {
const dispatch = useDispatch();
const status = useSelector(
(state: any) => state.files.operationStatus.extract,
shallowEqual
);

const setStatus = (newStatus: any) => {
dispatch({
type: 'DATA_FILES_SET_OPERATION_STATUS',
payload: { status: newStatus, operation: 'extract' },
});
};

const extractApp = useSelector(
(state: any) => state.workbench.config.extractApp
);

const defaultAllocation = useSelector(
(state: any) =>
state.allocations.portal_alloc || state.allocations.active[0].projectName
);

const latestExtract = getAppUtil(extractApp.id, extractApp.version);

Check failure on line 52 in client/src/hooks/datafiles/mutations/useExtract.ts

View workflow job for this annotation

GitHub Actions / Client_Side_Unit_Tests

src/components/DataFiles/tests/DataFiles.test.jsx > DataFiles > should render Data Files with multiple private systems

TypeError: Cannot read properties of undefined (reading 'id') ❯ Module.useExtract src/hooks/datafiles/mutations/useExtract.ts:52:47 ❯ DataFilesExtractModal src/components/DataFiles/DataFilesModals/DataFilesExtractModal.jsx:13:42 ❯ renderWithHooks node_modules/react-dom/cjs/react-dom.development.js:15486:18 ❯ mountIndeterminateComponent node_modules/react-dom/cjs/react-dom.development.js:20103:13 ❯ beginWork node_modules/react-dom/cjs/react-dom.development.js:21626:16 ❯ beginWork$1 node_modules/react-dom/cjs/react-dom.development.js:27465:14 ❯ performUnitOfWork node_modules/react-dom/cjs/react-dom.development.js:26599:12 ❯ workLoopSync node_modules/react-dom/cjs/react-dom.development.js:26505:5 ❯ renderRootSync node_modules/react-dom/cjs/react-dom.development.js:26473:7 ❯ recoverFromConcurrentError node_modules/react-dom/cjs/react-dom.development.js:25889:20

const { mutateAsync } = useMutation({ mutationFn: submitJobUtil });

const extract = ({ file }: { file: TTapisFile }) => {
dispatch({
type: 'DATA_FILES_SET_OPERATION_STATUS',
payload: { status: 'RUNNING', operation: 'extract' },
});

const params = getExtractParams(
file,
extractApp,
latestExtract,
defaultAllocation
);

return mutateAsync(
{
job: params,
},
{
onSuccess: (response: any) => {
if (response.execSys) {
dispatch({
type: 'SYSTEMS_TOGGLE_MODAL',
payload: {
operation: 'pushKeys',
props: {
system: response.execSys,
},
},
});
} else if (response.status === 'PENDING') {
dispatch({
type: 'DATA_FILES_SET_OPERATION_STATUS',
payload: { status: { type: 'SUCCESS' }, operation: 'extract' },
});
dispatch({
type: 'ADD_TOAST',
payload: {
message: 'File extraction in progress',
},
});
dispatch({
type: 'DATA_FILES_SET_OPERATION_STATUS',
payload: { operation: 'extract', status: {} },
});
dispatch({
type: 'DATA_FILES_TOGGLE_MODAL',
payload: { operation: 'extract', props: {} },
});
}
},
onError: (response) => {
const errorMessage =
response.cause === 'compressError'
? response.message
: 'An error has occurred.';
dispatch({
type: 'DATA_FILES_SET_OPERATION_STATUS',
payload: {
status: { type: 'ERROR', message: errorMessage },
operation: 'extract',
},
});
},
}
);
};

return { extract, status, setStatus };
}

export default useExtract;
41 changes: 41 additions & 0 deletions client/src/utils/getExtractParams.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { TTapisFile } from './types';

export const getExtractParams = (
file: TTapisFile,
extractApp: {
id: string;
version: string;
},
latestExtract: any,
defaultAllocation: string
) => {
const inputFile = `tapis://${file.system}/${file.path}`;
const archivePath = `${file.path.slice(0, -file.name.length)}`;
return {
fileInputs: [
{
name: 'Input File',
sourceUrl: inputFile,
},
],
name: `${extractApp.id}-${extractApp.version}_${
new Date().toISOString().split('.')[0]
}`,
archiveSystemId: file.system,
archiveSystemDir: archivePath,
archiveOnAppError: false,
appId: extractApp.id,
appVersion: extractApp.version,
parameterSet: {
appArgs: [],
schedulerOptions: [
{
name: 'TACC Allocation',
description: 'The TACC allocation associated with this job execution',
include: true,
arg: `-A ${defaultAllocation}`,
},
],
},
};
};
2 changes: 1 addition & 1 deletion server/portal/settings/settings_default.py
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@
},
"extractApp": {
"id": "extract",
"version": "0.0.3"
"version": "0.0.1"
},
"makePublic": True,
"hideApps": False,
Expand Down

0 comments on commit 2702ed7

Please sign in to comment.