# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.shortcuts import render, redirect from django.views.generic import TemplateView from django.contrib import messages as flash_messages from django.db import transaction from . import models import json #import logging #logger = logging.getLogger('console') class FeedCategoryImportExcelView(TemplateView): template_name = 'feed_content/feed_category_import_excel.html' final_breadcrumb = 'Import' def get_view_title(self): return 'Import {0} from Excel'.format(self.get_object().name) def post(self, request, *args, **kwargs): try: viewset = self.viewset category = self.get_object() messages_json = request.POST.get('messages_json', '').strip() if messages_json == '': raise RuntimeError('No import data was specified.') messages = json.loads(messages_json) messages_to_import = [] expected_day = 1 for message in messages: day = int(message['day']) message_text = message['message_text'].strip() if day != expected_day: raise RuntimeError('Expected day {0} but got day {1}.'.format(expected_day, day)) if message_text == '': raise RuntimeError('Message for day {0} is blank.'.format(day)) messages_to_import.append({'day': day, 'message_text': message_text}) expected_day += 1 if not messages_to_import: raise RuntimeError('No import data was specified.') with transaction.atomic(): models.FeedItem.objects.filter(feed_category=category).delete() for message in messages_to_import: models.FeedItem.objects.create( feed_category=category, day_number=message['day'], message_text=message['message_text'] ) flash_messages.add_message(request, flash_messages.SUCCESS, 'Import succeeded.'); except Exception as e: flash_messages.add_message(request, flash_messages.ERROR, 'IMPORT FAILED: {0}'.format(e.message)) return redirect(viewset.get_view_url(viewset.instance_breadcrumb_view_type, self, request.GET, self.get_object()))