|
1 | 1 | import os |
2 | 2 | import re |
3 | 3 | from django.shortcuts import render |
| 4 | +import numpy as np |
4 | 5 | from rest_framework import viewsets, permissions |
5 | 6 | from api.models import Code |
6 | 7 | from api.serializers import * |
@@ -47,23 +48,60 @@ def analyse_code(request): |
47 | 48 |
|
48 | 49 | print("Incoming data: ", code_serializer.initial_data) |
49 | 50 | if code_serializer.is_valid(): |
50 | | - code_serializer.save() |
51 | | - user_code = code_serializer.validated_data.get('code') |
52 | | - language = code_serializer.validated_data.get('language', 'java').lower() |
| 51 | + validated_data = code_serializer.validated_data |
| 52 | + saved_code = Code.objects.create(**validated_data) |
| 53 | + |
| 54 | + user_code = validated_data.get('code') |
| 55 | + language = validated_data.get('language', 'java').lower() |
53 | 56 | call_template = extract_call_template(user_code, language) |
| 57 | + |
54 | 58 | language_map = { |
55 | 59 | 'java': handle_java_code, |
56 | 60 | 'cpp': handle_cpp_code, |
57 | 61 | 'python': handle_python_code |
58 | 62 | } |
| 63 | + |
59 | 64 | if language in language_map: |
60 | | - return language_map[language](user_code, call_template) |
| 65 | + try: |
| 66 | + analysis_result = language_map[language](user_code, call_template) |
| 67 | + |
| 68 | + if analysis_result.status_code == 200: |
| 69 | + result_data = analysis_result.data |
| 70 | + |
| 71 | + # Ensure result data is JSON-serializable |
| 72 | + def ensure_serializable(obj): |
| 73 | + if isinstance(obj, np.ndarray): |
| 74 | + return obj.tolist() # Convert ndarray to list |
| 75 | + if isinstance(obj, dict): |
| 76 | + return {k: ensure_serializable(v) for k, v in obj.items()} |
| 77 | + if isinstance(obj, list): |
| 78 | + return [ensure_serializable(item) for item in obj] |
| 79 | + return obj |
| 80 | + |
| 81 | + serialized_result = ensure_serializable(result_data) |
| 82 | + |
| 83 | + saved_code.analysis_result = serialized_result |
| 84 | + saved_code.save() |
| 85 | + |
| 86 | + return analysis_result |
| 87 | + except Exception as e: |
| 88 | + print("Error during analysis:", e) |
| 89 | + return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) |
61 | 90 | else: |
62 | 91 | return Response({"error": f"Language '{language}' not supported for analysis."}, status=status.HTTP_400_BAD_REQUEST) |
63 | 92 | else: |
64 | 93 | print("Validation errors: ", code_serializer.errors) |
65 | 94 | return Response(code_serializer.errors, status=status.HTTP_400_BAD_REQUEST) |
66 | 95 |
|
| 96 | + |
| 97 | + |
| 98 | + |
| 99 | +@api_view(['GET']) |
| 100 | +def get_code_history(request, username): |
| 101 | + codes = Code.objects.filter(username=username).order_by('-created_at') |
| 102 | + serializer = CodeSerializer(codes, many=True) |
| 103 | + return Response(serializer.data) |
| 104 | + |
67 | 105 | def handle_java_code(user_code, call_template): |
68 | 106 | try: |
69 | 107 | sizes = [10, 50, 100, 200, 500, 1000, 5000, 10000,50000, 100000] |
|
0 commit comments