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
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
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, )
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
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
def parse(self, stream, media_type=None, parser_context=None): data = stream.read().decode("utf-8") return MboxMessage(data).get_json()
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