# -*- coding: utf-8 -*- import logging import traceback from django.contrib import admin from django.contrib import messages from django.core.mail import mail_admins from django.utils.text import Truncator from django.conf import settings from yandex_webmaster import YandexWebmaster from .models import Category, Entry, Recipient from .emails import mail_user_notification from .forms import CategoryAdminForm log = logging.getLogger('guestbook') YANDEX_WEBMASTER_DOMAIN = getattr(settings, 'YANDEX_WEBMASTER_DOMAIN', None) YANDEX_WEBMASTER_TOKEN = getattr(settings, 'YANDEX_WEBMASTER_TOKEN', None) #YANDEX_WEBMASTER_TOKEN_EXPIRES = getattr(settings, 'YANDEX_WEBMASTER_TOKEN_EXPIRES', None) YANDEX_WEBMASTER_ENABLED = YANDEX_WEBMASTER_DOMAIN and YANDEX_WEBMASTER_TOKEN class CategoryAdmin(admin.ModelAdmin): list_display = ['ordering', 'name', 'slug'] list_display_links = ['name'] list_editable = ['ordering'] search_fields = ['name'] form = CategoryAdminForm class EntryAdmin(admin.ModelAdmin): list_display = ['name', 'short_message', 'category', 'pub_date', 'created_at', 'published'] list_filter = ['published', 'category', 'created_at', 'pub_date'] list_per_page = 50 search_fields = ['name', 'email', 'message', 'reply'] readonly_fields = ['notified_user', 'added_origtext'] def short_message(self, obj): return Truncator(obj.message).chars(500) short_message.short_description = u'Вопрос' def save_model(self, request, obj, form, change): obj.save() # отправка уведомления try: fail_message = u'Не удалось отправить пользователю уведомление об ответе на его вопрос.' fail_level = messages.WARNING if obj.published and not obj.notified_user and obj.reply and obj.email: result = mail_user_notification(obj.email, obj) if result > 0: obj.notified_user = True obj.save() self.message_user(request, u'Пользователю отправлено уведомление об ответе на его вопрос.') else: self.message_user(request, fail_message, level=fail_level) except Exception as e: log.info(u'Next exception for Entry with id=%s' % obj.pk) log.exception(e) self.message_user(request, fail_message, level=fail_level) # отправка в оригинальные тексты try: if YANDEX_WEBMASTER_ENABLED and not obj.added_origtext and obj.reply: text = (u'%s\n%s' % (obj.message, obj.reply)).strip() text_len = len(text) if text_len >= 500 and text_len <= 32000: api = YandexWebmaster(YANDEX_WEBMASTER_TOKEN, YANDEX_WEBMASTER_DOMAIN) api.add_original_text(text) # obj.added_origtext = True obj.save() except Exception as e: log.info(u'Next exception for Entry with id=%s' % obj.pk) log.exception(e) mail_admins(subject=u'guestbook: original texts error', message=u'Entry id=%s.\n\n%s' % (obj.pk, traceback.format_exc(e)) ) class RecipientAdmin(admin.ModelAdmin): list_display = ['email'] search_fields = ['email'] admin.site.register(Category, CategoryAdmin) admin.site.register(Entry, EntryAdmin) admin.site.register(Recipient, RecipientAdmin)