[Patchew-devel] [PATCH v2 3/3] Make Import Command use Rest

Fam Zheng famz at redhat.com
Mon Jul 2 08:04:53 UTC 2018


On Mon, 07/02 13:11, Shubham Jain wrote:
> On Mon, Jul 2, 2018 at 12:32 PM Fam Zheng <famz at redhat.com> wrote:
> 
> > On Fri, 06/29 19:35, Shubham Jain wrote:
> > > Make patchew-cli's Import user REST apis. Changed the exit status of
> > authenticated user from cli test while importing since in REST every
> > authenticated user can access the import api but messages would be imported
> > only to the projects recognised ie whether it imported by maintainer or
> > importer. Also added warning if message is not imported to any project.
> > > ---
> > >  api/rest.py          |  3 ++-
> > >  patchew-cli          | 18 +++++++++++++-----
> > >  tests/test_import.py |  8 ++++----
> > >  3 files changed, 19 insertions(+), 10 deletions(-)
> > >
> > > diff --git a/api/rest.py b/api/rest.py
> > > index 9b47f37..876be75 100644
> > > --- a/api/rest.py
> > > +++ b/api/rest.py
> > > @@ -423,7 +423,8 @@ class MessagesViewSet(BaseMessageViewSet):
> > >      serializer_class = MessageSerializer
> > >      permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
> > >      parser_classes = (JSONParser, MessagePlainTextParser, )
> > > -
> > > +    authentication_classes = (CsrfExemptSessionAuthentication, )
> > > +
> > >      def create(self, request, *args, **kwargs):
> > >          m = MboxMessage(request.data['mbox'])
> > >          projects = [p for p in Project.objects.all() if p.recognizes(m)]
> > > diff --git a/patchew-cli b/patchew-cli
> > > index f90f3c5..3796caf 100755
> > > --- a/patchew-cli
> > > +++ b/patchew-cli
> > > @@ -220,11 +220,18 @@ class ImportCommand(SubCommand):
> > >                      print("[OLD] " + mo["Subject"])
> > >                      return
> > >              print("[NEW] " + mo["Subject"])
> > > -            r = self.api_do("import", mboxes=[mo.as_string()])
> > > -            for p in r:
> > > -                if p not in projects:
> > > -                    projects.add(p)
> > > -                    print(p)
> > > +            for mbox in [mo.as_string()]:
> > > +                r = self.rest_api_do(url_cmd="messages",
> > > +                                     request_method='post',
> > > +                                     content_type='message/rfc822',
> > > +                                     data=mbox)
> > > +                projects_list = [x['resource_uri'].split("messages")[0]
> > for x in r['results']]
> > > +                for p in projects_list:
> > > +                    if p not in projects:
> > > +                        projects.add(p)
> > > +                        print(p)
> > > +                if len(projects_list)==0:
> > > +                    print("The message was not imported to any project.
> > Perhaps you're not logged in as an importer or maintainer")
> >
> > Let's report error or raise exception instead of only showing a message if
> > not
> > logged in as importer/maintainer/suerpuser.
> >
> Raising an exception will return exit status 1, also the condition of
> checking is only just checking the length of projects list. What if an
> importer is logged in and messages not imported to any project, ie there
> are no recognised project. In that case it should return 0 as exit status
> right?

Yes. It should basically work like this:

have permission  |   message format  |     number of     |    result
  to import?     |      is valid?    | imported projects |
---------------------------------------------------------------------
       N                    X                    X             error
       Y                    N                    X             error
       Y                    Y                    X             ok

(X = don't care)

Fam




More information about the Patchew-devel mailing list