quantum-ai-v2/data_analyzer/models.py
Claude b2fe16aeaa Optimize data analyzer agent for PDF-only processing
- Restrict file upload to PDF files only in frontend and backend
- Add comprehensive PDF MIME type validation
- Remove duplicate processing view and URL endpoint
- Update model help text and UI labels for PDF-only
- Clean up unused imports and code references
- Maintain rich results formatting with HTML rendering
- Preserve all existing webhook processing functionality

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-25 10:16:35 +05:30

84 lines
2.9 KiB
Python

from django.db import models
from decimal import Decimal
from agent_base.models import BaseAgentRequest, BaseAgentResponse
from django.db.models.signals import post_delete
from django.dispatch import receiver
import os
class DataAnalysisAgentRequest(BaseAgentRequest):
"""Data Analysis Agent request tracking"""
# Agent-specific request fields
data_file = models.FileField(
upload_to='uploads/data_analyzer/',
blank=True,
help_text='PDF file for analysis'
)
analysis_type = models.CharField(
max_length=50,
choices=[
('summary', 'Summary Analysis'),
('detailed', 'Detailed Analysis'),
('statistical', 'Statistical Analysis'),
],
default='summary'
)
# Legacy field (keeping for compatibility)
input_text = models.TextField(blank=True, null=True)
def delete(self, *args, **kwargs):
"""Custom delete method to clean up uploaded file"""
# Delete the file before deleting the database record
if self.data_file:
try:
if os.path.exists(self.data_file.path):
os.remove(self.data_file.path)
print(f"Deleted file during model deletion: {self.data_file.path}")
except Exception as e:
print(f"Warning - Failed to delete file during model deletion: {e}")
# Call the parent delete method
super().delete(*args, **kwargs)
class Meta:
db_table = 'data_analyzer_requests'
verbose_name = 'Data Analysis Agent Request'
verbose_name_plural = 'Data Analysis Agent Requests'
class DataAnalysisAgentResponse(BaseAgentResponse):
"""Data Analysis Agent response storage"""
request = models.OneToOneField(
DataAnalysisAgentRequest,
on_delete=models.CASCADE,
related_name='response'
)
# Agent-specific response fields
analysis_results = models.JSONField(default=dict, blank=True)
insights_summary = models.TextField(blank=True)
report_text = models.TextField(blank=True)
raw_response = models.JSONField(default=dict, blank=True)
# Legacy field (keeping for compatibility)
output_text = models.TextField(blank=True, null=True)
class Meta:
db_table = 'data_analyzer_responses'
verbose_name = 'Data Analysis Agent Response'
verbose_name_plural = 'Data Analysis Agent Responses'
@receiver(post_delete, sender=DataAnalysisAgentRequest)
def cleanup_data_file(sender, instance, **kwargs):
"""Signal handler to ensure uploaded files are deleted when request is deleted"""
if instance.data_file:
try:
if os.path.exists(instance.data_file.path):
os.remove(instance.data_file.path)
print(f"Signal cleanup: Deleted file {instance.data_file.path}")
except Exception as e:
print(f"Signal cleanup warning - Failed to delete file: {e}")