eduardogsilva.routerfleet/import_tool/views.py

99 lines
3.9 KiB
Python
Raw Normal View History

2024-07-10 12:06:00 -03:00
from django.shortcuts import render, redirect, get_object_or_404
2024-07-10 10:18:29 -03:00
from django.contrib.auth.decorators import login_required
from .models import CsvData, ImportTask
from .forms import CsvDataForm
2024-07-10 12:06:00 -03:00
from django.contrib import messages
2024-07-10 10:18:29 -03:00
2024-07-10 16:54:14 -03:00
2024-07-10 10:18:29 -03:00
@login_required()
def view_import_tool_list(request):
2024-07-10 12:06:00 -03:00
import_list = []
for csv_data in CsvData.objects.all().order_by('-created'):
import_summary = {
'csv_data': csv_data,
'task_count': csv_data.importtask_set.filter(csv_data=csv_data).count(),
'success_count': csv_data.importtask_set.filter(csv_data=csv_data, import_success=True).count(),
'error_count': csv_data.importtask_set.filter(csv_data=csv_data, import_error=True).count(),
}
if import_summary['task_count'] != import_summary['success_count'] + import_summary['error_count']:
import_summary['status'] = 'In Progress'
elif import_summary['error_count'] > 0:
import_summary['status'] = 'Completed with Errors'
else:
import_summary['status'] = 'Completed'
import_list.append(import_summary)
2024-07-10 10:18:29 -03:00
data = {
'import_list': import_list,
'page_title': 'CSV import List',
}
return render(request, 'import_tool/import_tool_list.html', context=data)
2024-07-10 12:06:00 -03:00
@login_required()
def view_import_details(request):
csv_data = get_object_or_404(CsvData, uuid=request.GET.get('uuid'))
2024-07-10 16:53:55 -03:00
import_task_list = ImportTask.objects.filter(csv_data=csv_data).order_by('import_id')
2024-07-10 12:06:00 -03:00
if request.GET.get('view') == 'raw':
import_view = 'raw'
elif request.GET.get('view') == 'processed':
import_view = 'processed'
else:
import_view = 'tasks'
2024-07-10 16:53:55 -03:00
if request.GET.get('action') == 'create_tasks':
tasks_created = 0
for task in csv_data.import_data:
import_task, import_task_created = ImportTask.objects.get_or_create(
csv_data=csv_data, import_id=task['import_id'], defaults={
'name': task['name'],
'username': task['username'],
'password': task['password'],
'address': task['address'],
'port': task['port'],
'router_type': task['router_type'],
'backup_profile_name': task['backup_profile'],
'router_group_name': task['router_group'],
'ssh_key_name': task['ssh_key'],
'monitoring': True if task['monitoring'] == 'true' else False,
}
)
if import_task_created:
tasks_created += 1
if tasks_created > 0:
messages.success(request, f'Tasks created: {tasks_created}')
else:
messages.warning(request, 'No new tasks created.')
return redirect(f'/router/import_tool/details/?uuid={csv_data.uuid}')
elif request.GET.get('action') == 'start_import':
import_view = 'tasks'
pass
elif request.GET.get('action') == 'delete':
#import_task_list.delete()
#csv_data.delete()
messages.warning(request, 'Delete action not implemented yet.')
return redirect('/router/import_tool')
2024-07-10 12:06:00 -03:00
data = {
'csv_data': csv_data,
'import_task_list': import_task_list,
'import_view': import_view,
2024-07-10 16:53:55 -03:00
'page_title': f'Import Details - {csv_data.id}',
2024-07-10 12:06:00 -03:00
}
return render(request, 'import_tool/import_details.html', context=data)
2024-07-10 10:18:29 -03:00
@login_required()
def view_import_csv_file(request):
form = CsvDataForm(request.POST or None)
data = {'form': form, 'page_title': 'Import CSV File'}
2024-07-10 12:06:00 -03:00
if form.is_valid():
csv_data_instance = form.save(commit=False)
csv_data_instance.import_data = form.cleaned_data['import_data']
csv_data_instance.save()
messages.success(request, 'CSV data successfully processed and saved.')
return redirect('success_url')
2024-07-10 10:18:29 -03:00
return render(request, 'generic_form.html', context=data)
2024-07-10 16:53:55 -03:00