示例#1
0
    def add_message_from_mbox(self, mbox, user, project_name=None):
        def find_message_projects(m):
            return [p for p in Project.objects.all() if p.recognizes(m)]

        m = MboxMessage(mbox)
        msgid = m.get_message_id()
        if project_name:
            projects = [Project.object.get(name=project_name)]
        else:
            projects = find_message_projects(m)
        for p in projects:
            msg = Message(message_id=msgid,
                          in_reply_to=m.get_in_reply_to() or "",
                          date=m.get_date(),
                          subject=m.get_subject(),
                          stripped_subject=m.get_subject(strip_tags=True),
                          version=m.get_version(),
                          sender=m.get_from(),
                          recipients=m.get_to() + m.get_cc(),
                          prefixes=m.get_prefixes(),
                          is_series_head=m.is_series_head(),
                          is_patch=m.is_patch(),
                          patch_num=m.get_num()[0])
            msg.project = p
            if self.filter(message_id=msgid, project__name=p.name).first():
                raise self.DuplicateMessageError(msgid)
            msg.save_mbox(mbox)
            msg.save()
            emit_event("MessageAdded", message=msg)
            self.update_series(msg)
        return projects
示例#2
0
 def create(self, project, **validated_data):
     mbox = validated_data.pop('mbox')
     m = MboxMessage(mbox)
     msg = Message(**validated_data)
     if 'in_reply_to' not in validated_data:
         msg.in_reply_to = m.get_in_reply_to() or ""
     msg.stripped_subject = m.get_subject(strip_tags=True)
     msg.version = m.get_version()
     msg.prefixes = m.get_prefixes()
     msg.is_series_head = m.is_series_head()
     msg.is_patch = m.is_patch()
     msg.patch_num = m.get_num()[0]
     msg.project = project
     msg.save_mbox(mbox)
     msg.save()
     emit_event("MessageAdded", message=msg)
     self.update_series(msg)
     return msg
示例#3
0
    def add_message_from_mbox(self, mbox, user, project_name=None):
        def find_message_projects(m):
            q = []
            for name, addr in m.get_to() + m.get_cc():
                q += Project.objects.filter(mailing_list__contains=addr)
            if not q:
                raise Exception("Cannot find project for message: %s" % m)
            return q

        m = MboxMessage(mbox)
        msgid = m.get_message_id()
        if project_name:
            projects = [Project.object.get(name=project_name)]
        else:
            projects = find_message_projects(m)
        for p in projects:
            msg = Message(message_id=msgid,
                          in_reply_to=m.get_in_reply_to() or "",
                          date=m.get_date(),
                          subject=m.get_subject(),
                          stripped_subject=m.get_subject(strip_tags=True),
                          version=m.get_version(),
                          sender=json.dumps(m.get_from()),
                          receivers=json.dumps(m.get_to() + m.get_cc()),
                          prefixes=json.dumps(m.get_prefixes()),
                          is_series_head=m.is_series_head(),
                          is_patch=m.is_patch(),
                          patch_num=m.get_num()[0])
            msg.project = p
            if self.filter(message_id=msgid, project__name=p.name).first():
                raise self.DuplicateMessageError(msgid)
            msg.save_mbox(mbox)
            msg.save()
            emit_event("MessageAdded", message=msg)
            self.update_series(msg)
        return projects