Changeset 662 in main for branches/3D/openPLM/plmapp/mail.py


Ignore:
Timestamp:
01/18/12 11:59:51 (8 years ago)
Author:
pcosquer
Message:

3D branch: merge changes from trunk (rev [661])

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3D/openPLM/plmapp/mail.py

    r473 r662  
    3333from django.conf import settings 
    3434from django.core.mail import EmailMultiAlternatives 
    35 from django.db.models import Model 
     35from django.db.models import Model, Q 
    3636from django.template.loader import render_to_string 
    37 from django.contrib.contenttypes.models import ContentType 
     37from django.db.models.loading import get_model 
    3838from django.contrib.sites.models import Site 
    3939from celery.task import task 
    4040 
    41 from openPLM.plmapp.models import User, DelegationLink, ROLE_OWNER 
     41from openPLM.plmapp.models import User, DelegationLink, ROLE_OWNER, ROLE_SIGN 
    4242 
    4343 
     
    4545    recipients = set(users) 
    4646    if hasattr(obj, "plmobjectuserlink_plmobject"): 
    47         manager = obj.plmobjectuserlink_plmobject 
     47        manager = obj.plmobjectuserlink_plmobject.order_by() 
     48        roles_filter = Q() 
     49 
    4850        for role in roles: 
    49             users = manager.filter(role__contains=role).values_list("user", flat=True) 
    50             recipients.update(users) 
    51             links = DelegationLink.objects.filter(role__contains=role)\ 
     51            if role == ROLE_SIGN: 
     52                roles_filter |= Q(role__startswith=role) 
     53            else: 
     54                roles_filter |= Q(role=role) 
     55        users = manager.filter(roles_filter).values_list("user", flat=True) 
     56        recipients.update(users) 
     57        links = DelegationLink.objects.filter(roles_filter)\ 
    5258                        .values_list("delegator", "delegatee") 
    53             gr = kjbuckets.kjGraph(tuple(links)) 
    54             for u in users: 
    55                 recipients.update(gr.reachable(u).items()) 
    56     elif ROLE_OWNER: 
     59        gr = kjbuckets.kjGraph(tuple(links)) 
     60        for u in users: 
     61            recipients.update(gr.reachable(u).items()) 
     62    elif roles == [ROLE_OWNER]: 
    5763        if hasattr(obj, "owner"): 
    58             recipients.add(obj.owner.id) 
     64            recipients.add(obj.owner_id) 
    5965        elif isinstance(obj, User): 
    6066            recipients.add(obj.id) 
     
    6975 
    7076class CT(object): 
    71     def __init__(self, ct_id, pk): 
    72         self.ct_id = ct_id 
     77    __slots__ = ("app_label", "module_name", "pk") 
     78 
     79    def __init__(self, app_label, module_name, pk): 
     80        self.app_label = app_label 
     81        self.module_name = module_name 
    7382        self.pk = pk 
     83 
     84    def __getstate__(self): 
     85        return dict(app_label=self.app_label,  
     86                    module_name=self.module_name, 
     87                    pk=self.pk) 
     88     
     89    def __setstate__(self, state): 
     90        self.app_label = state["app_label"] 
     91        self.module_name = state["module_name"] 
     92        self.pk = state["pk"] 
    7493 
    7594    @classmethod 
    7695    def from_object(cls, obj): 
    77         return cls(ContentType.objects.get_for_model(obj).id, obj.pk) 
     96        return cls(obj._meta.app_label, obj._meta.module_name, obj.pk) 
    7897 
    7998    def get_object(self): 
    80         ct = ContentType.objects.get_for_id(self.ct_id) 
    81         return ct.get_object_for_this_type(pk=self.pk) 
     99        model_class = get_model(self.app_label, self.module_name) 
     100        return model_class.objects.get(pk=self.pk) 
    82101 
    83102 
     
    130149        The mail is sent in a separated thread.  
    131150    """ 
    132      
    133151    plmobject = unserialize(plmobject) 
    134     user = unserialize(user) 
    135     subject = "[PLM] " + unicode(plmobject) 
    136152    recipients = get_recipients(plmobject, roles, users)  
    137      
    138153    if recipients: 
     154        user = unserialize(user) 
     155        subject = "[PLM] " + unicode(plmobject) 
    139156        ctx = { 
    140157                "last_action" : last_action, 
     
    148165def do_send_mail(subject, recipients, ctx, template, blacklist=()): 
    149166    if recipients: 
     167        if len(recipients) == 1: 
     168            email = User.objects.get(id=recipients.pop()).email 
     169            if not email or email in blacklist: 
     170                return 
     171            emails = (email,) 
     172        else: 
     173            emails = User.objects.filter(id__in=recipients).exclude(email="")\ 
     174                            .values_list("email", flat=True) 
     175            emails = set(emails) - set(blacklist) 
     176            if not emails: 
     177                return 
    150178        ctx = unserialize(ctx) 
    151         emails = User.objects.filter(id__in=recipients).exclude(email="")\ 
    152                         .values_list("email", flat=True) 
    153         emails = set(emails) - set(blacklist) 
    154179        ctx["site"] = Site.objects.get_current() 
    155180        html_content = render_to_string(template + ".htm", ctx) 
     
    172197    histories = serialize(histories) 
    173198    user = CT.from_object(user) 
    174     do_send_histories_mail.delay(plmobject, roles, last_action, histories, user, blacklist, 
    175               convert_users(users), template) 
    176  
    177  
     199    do_send_histories_mail.delay(plmobject, roles, last_action, histories, 
     200            user, blacklist, convert_users(users), template) 
     201 
     202 
Note: See TracChangeset for help on using the changeset viewer.