On Fri, 2018-04-06 at 13:24 +0200, vkaba...@redhat.com wrote: > From: Veronika Kabatova <vkaba...@redhat.com> > > While the code on our side returns all (key, value) pairs for email > headers, Django's REST framework probably uses dictionaries behind the > scenes. This means that having multiple headers with same key (eg > 'Received', which is totally valid and common situation), only one of > these headers is visible in the REST API. > > Let's hack around this by returning a list of values in case the key is > present multiple times. > > Signed-off-by: Veronika Kabatova <vkaba...@redhat.com>
Sorry for the delay in getting to this. This looks good but I feel it needs a regression test. If you could provide one, I'd be happy to squash it in here and apply this. Cheers, Stephen > --- > patchwork/api/cover.py | 12 +++++++++++- > patchwork/api/patch.py | 12 +++++++++++- > 2 files changed, 22 insertions(+), 2 deletions(-) > > diff --git a/patchwork/api/cover.py b/patchwork/api/cover.py > index 1064504..dd1db97 100644 > --- a/patchwork/api/cover.py > +++ b/patchwork/api/cover.py > @@ -57,8 +57,18 @@ class > CoverLetterDetailSerializer(CoverLetterListSerializer): > headers = SerializerMethodField() > > def get_headers(self, instance): > + headers = {} > + > if instance.headers: > - return email.parser.Parser().parsestr(instance.headers, True) > + parsed = email.parser.Parser().parsestr(instance.headers, True) > + for key in parsed.keys(): > + headers[key] = parsed.get_all(key) > + # Let's return a single string instead of a list if only one > + # header with this key is present > + if len(headers[key]) == 1: > + headers[key] = headers[key][0] > + > + return headers > > class Meta: > model = CoverLetter > diff --git a/patchwork/api/patch.py b/patchwork/api/patch.py > index 115feff..645b0e9 100644 > --- a/patchwork/api/patch.py > +++ b/patchwork/api/patch.py > @@ -123,8 +123,18 @@ class PatchDetailSerializer(PatchListSerializer): > prefixes = SerializerMethodField() > > def get_headers(self, patch): > + headers = {} > + > if patch.headers: > - return email.parser.Parser().parsestr(patch.headers, True) > + parsed = email.parser.Parser().parsestr(patch.headers, True) > + for key in parsed.keys(): > + headers[key] = parsed.get_all(key) > + # Let's return a single string instead of a list if only one > + # header with this key is present > + if len(headers[key]) == 1: > + headers[key] = headers[key][0] > + > + return headers > > def get_prefixes(self, instance): > return clean_subject(instance.name)[1] _______________________________________________ Patchwork mailing list Patchwork@lists.ozlabs.org https://lists.ozlabs.org/listinfo/patchwork