1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
from celery.utils.log import get_task_logger
import json
from rest_framework import serializers
from simulationAPI.models import Task, Session
logger = get_task_logger(__name__)
class SessionSerializer(serializers.ModelSerializer):
class Meta:
model = Session
fields = ('session_id', 'app_name', 'created_at', 'expire_at', 'count')
class TaskSerializer(serializers.HyperlinkedModelSerializer):
session = SessionSerializer(read_only=True)
class Meta:
model = Task
fields = ('task_id', 'file', 'type', 'status',
'parameters', 'upload_time', 'log_name', 'workspace_file',
'returncode', 'session', 'start_time', 'end_time')
def create(self, validated_data):
# Takes file from request and stores it along with a taskid
request = self.context.get('request')
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, type=type, parameters=parameters)
logger.info("Session: %s (created: %s), Task: %s", session, created, task)
return task
|