sobjects.py
author Pierre-Yves David <pierre-yves.david@logilab.fr>
Wed, 10 Feb 2010 08:20:56 +0100
changeset 101 b9c77c4c40b8
parent 92 87b2293a11df
child 113 45a0bff67d7e
permissions -rw-r--r--
[fix] Fix migration for 1.4.0 which does not add CodeKeyword entity type

"""Notification views for keywords / classification schemes

:organization: Logilab
:copyright: 2003-2009 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
"""
__docformat__ = "restructuredtext en"

from logilab.common.decorators import cached

from cubicweb.selectors import implements
from cubicweb.sobjects.notification import NotificationView


class KeywordNotificationView(NotificationView):
    __select__ = implements('Keyword')
    msgid_timestamp = True

    def recipients(self):
        """Returns the project's interested people (entities)"""
        creator = self.entity(0).created_by[0]
        if not creator.is_in_group('managers') and creator.primary_email:
            return [(creator.primary_email[0].address, 'fr')]
        return []

    def context(self, **kwargs):
        context = NotificationView.context(self, **kwargs)
        entity = self.entity(0)
        context['kw'] = entity.name
        return context


class KeywordNameChanged(KeywordNotificationView):
    __regid__ = 'notif_after_update_entity'

    content = _("keyword name changed from %(oldname)s to %(kw)s")

    @cached
    def get_oldname(self, entity):
        session = self.req
        try:
            return session.execute('Any N WHERE X eid %(x)s, X name N',
                                   {'x' : entity.eid}, 'x')[0][0]
        except IndexError:
            return u'?'

    def context(self, **kwargs):
        entity = self.entity(0)
        context = KeywordNotificationView.context(self, **kwargs)
        context['oldname'] = self.get_oldname(entity)
        return context

    def subject(self):
        entity = self.entity(0)
        return self.req._('keyword name changed from %s to %s') % (
            self.get_oldname(entity), entity.name)