Esempio n. 1
0
 def get_mbox(self):
     if hasattr(self, "mbox"):
         return self.mbox
     f = open(self.get_mbox_path(), "r", encoding="utf-8")
     self.mbox = f.read()
     self._mbox_obj = MboxMessage(self.mbox)
     f.close()
     return self.mbox
Esempio n. 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
Esempio n. 3
0
 def create(self, request, *args, **kwargs):
     m = MboxMessage(request.data["mbox"])
     projects = [p for p in Project.objects.all() if p.recognizes(m)]
     grps = request.user.groups.all()
     grps_name = [grp.name for grp in grps]
     if "importers" not in grps_name:
         projects = (p for p in projects if p.maintained_by(self.request.user))
     results = []
     for project in projects:
         serializer = self.get_serializer(data=request.data)
         serializer.is_valid(raise_exception=True)
         serializer.save(project=project)
         results.append(serializer.data)
     # Fake paginator response.  Note that there is no Location header.
     return Response(
         OrderedDict([("count", len(results)), ("results", results)]),
         status=status.HTTP_201_CREATED,
     )
Esempio n. 4
0
 def get_mbox(self):
     if hasattr(self, "mbox_blob"):
         return self.mbox_blob
     self.mbox_blob = load_blob(self.message_id)
     self._mbox_obj = MboxMessage(self.mbox_blob)
     return self.mbox_blob
Esempio n. 5
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
Esempio n. 6
0
 def parse(self, stream, media_type=None, parser_context=None):
     data = stream.read().decode("utf-8")
     return MboxMessage(data).get_json()
Esempio n. 7
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