summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSuchita Lad2025-03-21 17:43:12 +0530
committerSuchita Lad2025-03-25 11:13:14 +0530
commita7dcdd02a237dc59c2f65ad1a1594acd2091d301 (patch)
tree68f81cdff18b1291b512a137c6906ce9c8c100ce
parentb9b2f6181a300ed8c5eb7667c507616bbb3bd558 (diff)
downloadCommon-Interface-Project-a7dcdd02a237dc59c2f65ad1a1594acd2091d301.tar.gz
Common-Interface-Project-a7dcdd02a237dc59c2f65ad1a1594acd2091d301.tar.bz2
Common-Interface-Project-a7dcdd02a237dc59c2f65ad1a1594acd2091d301.zip
Added Script file name and type in Task model
-rw-r--r--blocks/eda-frontend/src/components/SchematicEditor/ToolbarExtension.js49
-rw-r--r--blocks/eda-frontend/src/redux/actions/actions.js1
-rw-r--r--blocks/eda-frontend/src/redux/actions/simulationActions.js9
-rw-r--r--blocks/eda-frontend/src/redux/reducers/simulationReducer.js7
-rw-r--r--blocks/simulationAPI/serializers.py7
-rw-r--r--blocks/simulationAPI/views.py12
6 files changed, 80 insertions, 5 deletions
diff --git a/blocks/eda-frontend/src/components/SchematicEditor/ToolbarExtension.js b/blocks/eda-frontend/src/components/SchematicEditor/ToolbarExtension.js
index c503c0d0..e1250c36 100644
--- a/blocks/eda-frontend/src/components/SchematicEditor/ToolbarExtension.js
+++ b/blocks/eda-frontend/src/components/SchematicEditor/ToolbarExtension.js
@@ -36,9 +36,10 @@ import {
import { makeStyles } from '@material-ui/core/styles'
import CloseIcon from '@material-ui/icons/Close'
import { useSelector, useDispatch } from 'react-redux'
-import { fetchSchematics, fetchSchematic, fetchDiagram, fetchGallery, setSchScriptDump } from '../../redux/actions/index'
+import { fetchSchematics, fetchSchematic, fetchDiagram, fetchGallery, setSchScriptDump, setScriptTaskId } from '../../redux/actions/index'
import { blue } from '@material-ui/core/colors'
import { getDateTime as getDate, getUppercaseInitial, saveToFile } from '../../utils/GalleryUtils'
+import api from '../../utils/Api'
const Transition = forwardRef(function Transition (props, ref) {
return <Slide direction='up' ref={ref} {...props} />
@@ -336,6 +337,7 @@ HelpScreen.propTypes = {
export function ScriptScreen ({ isOpen, onClose }) {
const scriptDump = useSelector(state => state.saveSchematicReducer.scriptDump)
+ const title = useSelector(state => state.netlistReducer.title)
const dispatch = useDispatch()
const scriptHandler = (e) => {
dispatch(setSchScriptDump(e.target.value))
@@ -343,8 +345,47 @@ export function ScriptScreen ({ isOpen, onClose }) {
const [result, setResult] = useState('')
- const executeCode = () => {
- setResult('Executing Scilab code...')
+ const prepareScriptNetlist = (scriptDump) => {
+ const titleA = title.split(' ')[1]
+ const myblob = new Blob([scriptDump], {
+ type: 'text/plain'
+ })
+ const file = new File([myblob], `${titleA}.sce`, { type: 'text/sce', lastModified: Date.now() })
+ const type = 'SCRIPT'
+ sendSriptNetlist(file, type)
+ }
+
+ function sendSriptNetlist (file, type) {
+ netlistConfig(file, type)
+ .then((response) => {
+ const res = response.data
+ const taskId = res.details.task_id
+ dispatch(setScriptTaskId(taskId))
+ })
+ .catch(function (error) {
+ console.error(error)
+ })
+ }
+
+ function netlistConfig (file, type) {
+ const formData = new FormData()
+
+ formData.append('app_name', process.env.REACT_APP_NAME)
+ formData.append('file', file)
+ formData.append('type', type)
+
+ const config = {
+ headers: {
+ 'content-type': 'multipart/form-data'
+ }
+ }
+ return api.post('simulation/upload', formData, config)
+ }
+
+ const executeScript = () => {
+ dispatch(setScriptTaskId(''))
+ prepareScriptNetlist(scriptDump)
+
}
const resetCode = () => {
@@ -414,7 +455,7 @@ export function ScriptScreen ({ isOpen, onClose }) {
{/* Action Buttons */}
<Box sx={{ mt: 4, display: 'flex', gap: 2 }}>
- <Button onClick={executeCode} color='primary' variant='contained'>
+ <Button onClick={executeScript} color='primary' variant='contained'>
Execute
</Button>
<Button onClick={resetCode} color='secondary' variant='contained'>
diff --git a/blocks/eda-frontend/src/redux/actions/actions.js b/blocks/eda-frontend/src/redux/actions/actions.js
index 9ec5a49b..dd25c855 100644
--- a/blocks/eda-frontend/src/redux/actions/actions.js
+++ b/blocks/eda-frontend/src/redux/actions/actions.js
@@ -46,6 +46,7 @@ export const SET_SCH_SHARED = 'SET_SCH_SHARED'
export const CLEAR_DETAILS = 'CLEAR_DETAILS'
export const LOAD_GALLERY = 'LOAD_GALLERY'
export const SET_SCH_SCRIPT_DUMP = 'SET_SCH_SCRIPT_DUMP'
+export const SET_SCRIPT_TASK_ID = 'SET_SCRIPT_TASK_ID'
// Action for fetching on-cloud saved schematics for authenticated user to display in dashboard
export const FETCH_SCHEMATICS = 'FETCH_SCHEMATICS'
diff --git a/blocks/eda-frontend/src/redux/actions/simulationActions.js b/blocks/eda-frontend/src/redux/actions/simulationActions.js
index f2d249a5..06a603b8 100644
--- a/blocks/eda-frontend/src/redux/actions/simulationActions.js
+++ b/blocks/eda-frontend/src/redux/actions/simulationActions.js
@@ -39,3 +39,12 @@ export const setResultTaskId = (taskId) => (dispatch) => {
}
})
}
+
+export const setScriptTaskId = (scriptTaskId) => (dispatch) => {
+ dispatch({
+ type: actions.SET_SCRIPT_TASK_ID,
+ payload: {
+ scriptTaskId
+ }
+ })
+}
diff --git a/blocks/eda-frontend/src/redux/reducers/simulationReducer.js b/blocks/eda-frontend/src/redux/reducers/simulationReducer.js
index aee38f33..08b3c2d2 100644
--- a/blocks/eda-frontend/src/redux/reducers/simulationReducer.js
+++ b/blocks/eda-frontend/src/redux/reducers/simulationReducer.js
@@ -42,6 +42,13 @@ export default function (state = initialState, action) {
}
}
+ case actions.SET_SCRIPT_TASK_ID: {
+ return {
+ ...state,
+ scriptTaskId: action.payload.taskId
+ }
+ }
+
default:
return state
}
diff --git a/blocks/simulationAPI/serializers.py b/blocks/simulationAPI/serializers.py
index 9a815b41..605c0dfb 100644
--- a/blocks/simulationAPI/serializers.py
+++ b/blocks/simulationAPI/serializers.py
@@ -28,13 +28,18 @@ class TaskSerializer(serializers.HyperlinkedModelSerializer):
file = request.FILES.get('file')
logger.info('File Upload: %s', file)
+ file_extension = file.name.split('.')[-1].lower()
+ if file_extension not in ['xml', 'sce']:
+ raise serializers.ValidationError({"file": "Invalid file type. Only .xml and .sce files are allowed."})
+
session_id = request.headers.get("Session-ID")
post = request.POST
postdata = post.dict()
app_name = postdata.pop('app_name')
+ type = postdata.pop('type', 'XCOS')
parameters = json.dumps(postdata, separators=(',', ':'))
session, created = Session.objects.get_or_create(session_id=session_id, app_name=app_name)
- task = Task.objects.create(session=session, file=file, parameters=parameters)
+ task = Task.objects.create(session=session, file=file, type=type, parameters=parameters)
logger.info("Session: %s (created: %s), Task: %s", session, created, task)
return task
diff --git a/blocks/simulationAPI/views.py b/blocks/simulationAPI/views.py
index 5d397e5c..c2b207b8 100644
--- a/blocks/simulationAPI/views.py
+++ b/blocks/simulationAPI/views.py
@@ -49,6 +49,18 @@ class XmlUploader(APIView):
def post(self, request, *args, **kwargs):
logger.info('Got POST for Xml upload: data=%s', request.data)
+
+ uploaded_file = request.FILES.get('file')
+ if not uploaded_file:
+ return Response({"error": "No file provided"}, status=status.HTTP_400_BAD_REQUEST)
+
+ file_extension = uploaded_file.name.split('.')[-1].lower()
+
+ # Validate file type
+ if file_extension not in ['xml', 'sce']:
+ return Response({"error": "Invalid file type. Only .xml and .sce files are allowed."},
+ status=status.HTTP_400_BAD_REQUEST)
+
serializer = TaskSerializer(data=request.data, context={'request': request})
if serializer.is_valid():
serializer.save()