コード例 #1
0
 def delete(self, req, tenant_id, instance_id, user_id, id):
     """Revoke access for a user."""
     LOG.info(
         _("Revoking user access for instance '%(id)s'\n"
           "req : '%(req)s'\n\n") % {
               "id": instance_id,
               "req": req
           })
     context = req.environ[wsgi.CONTEXT_KEY]
     self.authorize_target_action(context, 'user_access:delete',
                                  instance_id)
     context.notification = notification.DBaaSUserRevoke(context,
                                                         request=req)
     user_id = correct_id_with_req(user_id, req)
     user = self._get_user(context, instance_id, user_id)
     if not user:
         LOG.error(_("No such user: %(user)s ") % {'user': user})
         raise exception.UserNotFound(uuid=user)
     username, hostname = unquote_user_host(user_id)
     access = models.User.access(context, instance_id, username, hostname)
     databases = [db.name for db in access.databases]
     with StartNotification(context,
                            instance_id=instance_id,
                            username=username,
                            database=databases):
         if id not in databases:
             raise exception.DatabaseNotFound(uuid=id)
         models.User.revoke(context, instance_id, username, hostname, id)
     return wsgi.Result(None, 202)
コード例 #2
0
ファイル: service.py プロジェクト: wffeige/trove
 def update(self, req, body, tenant_id, instance_id, id):
     """Change attributes for one user."""
     LOG.info("Updating user attributes for instance '%(id)s'\n"
              "req : '%(req)s'\n\n",
              {"id": instance_id, "req": strutils.mask_password(req)})
     context = req.environ[wsgi.CONTEXT_KEY]
     self.authorize_target_action(context, 'user:update', instance_id)
     id = correct_id_with_req(id, req)
     username, hostname = unquote_user_host(id)
     user = None
     user_attrs = body['user']
     context.notification = notification.DBaaSUserUpdateAttributes(
         context, request=req)
     with StartNotification(context, instance_id=instance_id,
                            username=username):
         try:
             user = models.User.load(context, instance_id, username,
                                     hostname)
         except (ValueError, AttributeError) as e:
             raise exception.BadRequest(_("Error loading user: %(e)s")
                                        % {'e': e})
         if not user:
             raise exception.UserNotFound(uuid=id)
         try:
             models.User.update_attributes(context, instance_id, username,
                                           hostname, user_attrs)
         except (ValueError, AttributeError) as e:
             raise exception.BadRequest(_("User update error: %(e)s")
                                        % {'e': e})
     return wsgi.Result(None, 202)
コード例 #3
0
ファイル: service.py プロジェクト: wffeige/trove
 def delete(self, req, tenant_id, instance_id, id):
     LOG.info("Delete instance '%(id)s'\n"
              "req : '%(req)s'\n\n",
              {"id": instance_id, "req": req})
     context = req.environ[wsgi.CONTEXT_KEY]
     self.authorize_target_action(context, 'user:delete', instance_id)
     id = correct_id_with_req(id, req)
     username, host = unquote_user_host(id)
     user = None
     context.notification = notification.DBaaSUserDelete(context,
                                                         request=req)
     with StartNotification(context, instance_id=instance_id,
                            username=username):
         try:
             user = guest_models.MySQLUser(name=username,
                                           host=host)
             found_user = models.User.load(context, instance_id, username,
                                           host)
             if not found_user:
                 user = None
         except (ValueError, AttributeError) as e:
             raise exception.BadRequest(_("User delete error: %(e)s")
                                        % {'e': e})
         if not user:
             raise exception.UserNotFound(uuid=id)
         models.User.delete(context, instance_id, user.serialize())
     return wsgi.Result(None, 202)
コード例 #4
0
ファイル: service.py プロジェクト: raman-mystack/tesora-trove
 def delete(self, req, tenant_id, instance_id, id):
     LOG.info(_("Deleting user for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % req)
     context = req.environ[wsgi.CONTEXT_KEY]
     id = correct_id_with_req(id, req)
     username, host = unquote_user_host(id)
     context.notification = notification.DBaaSUserDelete(context,
                                                         request=req)
     with StartNotification(context,
                            instance_id=instance_id,
                            username=username):
         user = None
         try:
             user = guest_models.MySQLUser()
             user.name = username
             user.host = host
             found_user = models.User.load(context, instance_id, username,
                                           host)
             if not found_user:
                 user = None
         except (ValueError, AttributeError) as e:
             raise exception.BadRequest(msg=str(e))
         if not user:
             raise exception.UserNotFound(uuid=id)
         models.User.delete(context, instance_id, user.serialize())
     return wsgi.Result(None, 202)
コード例 #5
0
 def update(self, req, body, tenant_id, instance_id, user_id):
     """Grant access for a user to one or more databases."""
     LOG.info(
         _("Granting user access for instance '%(id)s'\n"
           "req : '%(req)s'\n\n") % {
               "id": instance_id,
               "req": req
           })
     context = req.environ[wsgi.CONTEXT_KEY]
     self.authorize_target_action(context, 'user_access:update',
                                  instance_id)
     context.notification = notification.DBaaSUserGrant(context,
                                                        request=req)
     user_id = correct_id_with_req(user_id, req)
     user = self._get_user(context, instance_id, user_id)
     if not user:
         LOG.error(_("No such user: %(user)s ") % {'user': user})
         raise exception.UserNotFound(uuid=user)
     username, hostname = unquote_user_host(user_id)
     databases = [db['name'] for db in body['databases']]
     with StartNotification(context,
                            instance_id=instance_id,
                            username=username,
                            database=databases):
         models.User.grant(context, instance_id, username, hostname,
                           databases)
     return wsgi.Result(None, 202)
コード例 #6
0
ファイル: service.py プロジェクト: raman-mystack/tesora-trove
 def update(self, req, body, tenant_id, instance_id, id):
     """Change attributes for one user."""
     LOG.info(_("Updating user attributes for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % strutils.mask_password(req))
     context = req.environ[wsgi.CONTEXT_KEY]
     id = correct_id_with_req(id, req)
     username, hostname = unquote_user_host(id)
     user = None
     user_attrs = body['user']
     context.notification = notification.DBaaSUserUpdateAttributes(
         context, request=req)
     with StartNotification(context,
                            instance_id=instance_id,
                            username=username):
         try:
             user = models.User.load(context, instance_id, username,
                                     hostname)
         except (ValueError, AttributeError) as e:
             raise exception.BadRequest(msg=str(e))
         if not user:
             raise exception.UserNotFound(uuid=id)
         try:
             models.User.update_attributes(context, instance_id, username,
                                           hostname, user_attrs)
         except (ValueError, AttributeError) as e:
             raise exception.BadRequest(msg=str(e))
     return wsgi.Result(None, 202)
コード例 #7
0
ファイル: service.py プロジェクト: Hopebaytech/trove
 def delete(self, req, tenant_id, instance_id, id):
     LOG.info(_("Delete instance '%(id)s'\n"
                "req : '%(req)s'\n\n") %
              {"id": instance_id, "req": req})
     context = req.environ[wsgi.CONTEXT_KEY]
     id = correct_id_with_req(id, req)
     username, host = unquote_user_host(id)
     context.notification = notification.DBaaSUserDelete(context,
                                                         request=req)
     with StartNotification(context, instance_id=instance_id,
                            username=username):
         user = None
         try:
             user = guest_models.MySQLUser()
             user.name = username
             user.host = host
             found_user = models.User.load(context, instance_id, username,
                                           host)
             if not found_user:
                 user = None
         except (ValueError, AttributeError) as e:
             raise exception.BadRequest(msg=str(e))
         if not user:
             raise exception.UserNotFound(uuid=id)
         models.User.delete(context, instance_id, user.serialize())
     return wsgi.Result(None, 202)
コード例 #8
0
ファイル: service.py プロジェクト: Hopebaytech/trove
 def update(self, req, body, tenant_id, instance_id, id):
     """Change attributes for one user."""
     LOG.info(_("Updating user attributes for instance '%(id)s'\n"
                "req : '%(req)s'\n\n") %
              {"id": instance_id, "req": strutils.mask_password(req)})
     context = req.environ[wsgi.CONTEXT_KEY]
     id = correct_id_with_req(id, req)
     username, hostname = unquote_user_host(id)
     user = None
     user_attrs = body['user']
     context.notification = notification.DBaaSUserUpdateAttributes(
         context, request=req)
     with StartNotification(context, instance_id=instance_id,
                            username=username):
         try:
             user = models.User.load(context, instance_id, username,
                                     hostname)
         except (ValueError, AttributeError) as e:
             raise exception.BadRequest(msg=str(e))
         if not user:
             raise exception.UserNotFound(uuid=id)
         try:
             models.User.update_attributes(context, instance_id, username,
                                           hostname, user_attrs)
         except (ValueError, AttributeError) as e:
             raise exception.BadRequest(msg=str(e))
     return wsgi.Result(None, 202)
コード例 #9
0
ファイル: service.py プロジェクト: NeCTAR-RC/trove
 def _get_user(self, context, instance_id, user_id):
     username, hostname = unquote_user_host(user_id)
     try:
         user = models.User.load(context, instance_id, username, hostname)
     except (ValueError, AttributeError) as e:
         raise exception.BadRequest(msg=str(e))
     if not user:
         raise exception.UserNotFound(uuid=user_id)
     return user
コード例 #10
0
ファイル: service.py プロジェクト: vdialani/trove
 def _get_user(self, context, instance_id, user_id):
     username, hostname = unquote_user_host(user_id)
     try:
         user = models.User.load(context, instance_id, username, hostname)
     except (ValueError, AttributeError) as e:
         raise exception.BadRequest(msg=str(e))
     if not user:
         raise exception.UserNotFound(uuid=user_id)
     return user
コード例 #11
0
 def update(self, req, body, tenant_id, instance_id, user_id):
     """Grant access for a user to one or more databases."""
     LOG.info(_("Granting user access for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % req)
     context = req.environ[wsgi.CONTEXT_KEY]
     user = self._get_user(context, instance_id, user_id)
     username, hostname = unquote_user_host(user_id)
     databases = [db['name'] for db in body['databases']]
     models.User.grant(context, instance_id, username, hostname, databases)
     return wsgi.Result(None, 202)
コード例 #12
0
 def update(self, req, body, tenant_id, instance_id, user_id):
     """Grant access for a user to one or more databases."""
     LOG.info(_("Granting user access for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % req)
     context = req.environ[wsgi.CONTEXT_KEY]
     user = self._get_user(context, instance_id, user_id)
     username, hostname = unquote_user_host(user_id)
     databases = [db['name'] for db in body['databases']]
     models.User.grant(context, instance_id, username, hostname, databases)
     return wsgi.Result(None, 202)
コード例 #13
0
 def index(self, req, tenant_id, instance_id, user_id):
     """Show permissions for the given user."""
     LOG.info(_("Showing user access for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % req)
     context = req.environ[wsgi.CONTEXT_KEY]
     # Make sure this user exists.
     user = self._get_user(context, instance_id, user_id)
     username, hostname = unquote_user_host(user_id)
     access = models.User.access(context, instance_id, username, hostname)
     view = views.UserAccessView(access.databases)
     return wsgi.Result(view.data(), 200)
コード例 #14
0
 def index(self, req, tenant_id, instance_id, user_id):
     """Show permissions for the given user."""
     LOG.info(_("Showing user access for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % req)
     context = req.environ[wsgi.CONTEXT_KEY]
     # Make sure this user exists.
     user = self._get_user(context, instance_id, user_id)
     username, hostname = unquote_user_host(user_id)
     access = models.User.access(context, instance_id, username, hostname)
     view = views.UserAccessView(access.databases)
     return wsgi.Result(view.data(), 200)
コード例 #15
0
ファイル: service.py プロジェクト: jimbobhickville/trove
 def update(self, req, body, tenant_id, instance_id, user_id):
     """Grant access for a user to one or more databases."""
     LOG.info(_("Granting user access for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % req)
     context = req.environ[wsgi.CONTEXT_KEY]
     user = self._get_user(context, instance_id, user_id)
     if not user:
         LOG.error(_("No such user: %(user)s " % {'user': user}))
         raise exception.UserNotFound(uuid=user)
     username, hostname = unquote_user_host(user_id)
     databases = [db['name'] for db in body['databases']]
     models.User.grant(context, instance_id, username, hostname, databases)
     return wsgi.Result(None, 202)
コード例 #16
0
 def delete(self, req, tenant_id, instance_id, user_id, id):
     """Revoke access for a user."""
     LOG.info(_("Revoking user access for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % req)
     context = req.environ[wsgi.CONTEXT_KEY]
     user = self._get_user(context, instance_id, user_id)
     username, hostname = unquote_user_host(user_id)
     access = models.User.access(context, instance_id, username, hostname)
     databases = [db.name for db in access.databases]
     if id not in databases:
         raise exception.DatabaseNotFound(uuid=id)
     models.User.revoke(context, instance_id, username, hostname, id)
     return wsgi.Result(None, 202)
コード例 #17
0
 def update(self, req, body, tenant_id, instance_id, user_id):
     """Grant access for a user to one or more databases."""
     LOG.info(_("Granting user access for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % req)
     context = req.environ[wsgi.CONTEXT_KEY]
     user = self._get_user(context, instance_id, user_id)
     if not user:
         LOG.error(_("No such user: %(user)s " % {'user': user}))
         raise exception.UserNotFound(uuid=user)
     username, hostname = unquote_user_host(user_id)
     databases = [db['name'] for db in body['databases']]
     models.User.grant(context, instance_id, username, hostname, databases)
     return wsgi.Result(None, 202)
コード例 #18
0
 def delete(self, req, tenant_id, instance_id, user_id, id):
     """Revoke access for a user."""
     LOG.info(_("Revoking user access for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % req)
     context = req.environ[wsgi.CONTEXT_KEY]
     user = self._get_user(context, instance_id, user_id)
     username, hostname = unquote_user_host(user_id)
     access = models.User.access(context, instance_id, username, hostname)
     databases = [db.name for db in access.databases]
     if id not in databases:
         raise exception.DatabaseNotFound(uuid=id)
     models.User.revoke(context, instance_id, username, hostname, id)
     return wsgi.Result(None, 202)
コード例 #19
0
ファイル: service.py プロジェクト: jimbobhickville/trove
 def show(self, req, tenant_id, instance_id, id):
     """Return a single user."""
     LOG.info(_("Showing a user for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % req)
     context = req.environ[wsgi.CONTEXT_KEY]
     username, host = unquote_user_host(id)
     user = None
     try:
         user = models.User.load(context, instance_id, username, host)
     except (ValueError, AttributeError) as e:
         raise exception.BadRequest(msg=str(e))
     if not user:
         raise exception.UserNotFound(uuid=id)
     view = views.UserView(user)
     return wsgi.Result(view.data(), 200)
コード例 #20
0
ファイル: service.py プロジェクト: vdialani/trove
 def index(self, req, tenant_id, instance_id, user_id):
     """Show permissions for the given user."""
     LOG.info(_("Showing user access for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % req)
     context = req.environ[wsgi.CONTEXT_KEY]
     # Make sure this user exists.
     user_id = correct_id_with_req(user_id, req)
     user = self._get_user(context, instance_id, user_id)
     if not user:
         LOG.error(_("No such user: %(user)s ") % {'user': user})
         raise exception.UserNotFound(uuid=user)
     username, hostname = unquote_user_host(user_id)
     access = models.User.access(context, instance_id, username, hostname)
     view = views.UserAccessView(access.databases)
     return wsgi.Result(view.data(), 200)
コード例 #21
0
 def show(self, req, tenant_id, instance_id, id):
     """Return a single user."""
     LOG.info(_("Showing a user for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % req)
     context = req.environ[wsgi.CONTEXT_KEY]
     username, host = unquote_user_host(id)
     user = None
     try:
         user = models.User.load(context, instance_id, username, host)
     except (ValueError, AttributeError) as e:
         raise exception.BadRequest(msg=str(e))
     if not user:
         raise exception.UserNotFound(uuid=id)
     view = views.UserView(user)
     return wsgi.Result(view.data(), 200)
コード例 #22
0
ファイル: service.py プロジェクト: NeCTAR-RC/trove
 def index(self, req, tenant_id, instance_id, user_id):
     """Show permissions for the given user."""
     LOG.info(_("Showing user access for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % req)
     context = req.environ[wsgi.CONTEXT_KEY]
     # Make sure this user exists.
     user_id = correct_id_with_req(user_id, req)
     user = self._get_user(context, instance_id, user_id)
     if not user:
         LOG.error(_("No such user: %(user)s ") % {'user': user})
         raise exception.UserNotFound(uuid=user)
     username, hostname = unquote_user_host(user_id)
     access = models.User.access(context, instance_id, username, hostname)
     view = views.UserAccessView(access.databases)
     return wsgi.Result(view.data(), 200)
コード例 #23
0
ファイル: service.py プロジェクト: jimbobhickville/trove
 def update(self, req, body, tenant_id, instance_id, id):
     """Change attributes for one user."""
     LOG.info(_("Updating user attributes for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % req)
     context = req.environ[wsgi.CONTEXT_KEY]
     username, hostname = unquote_user_host(id)
     user = None
     user_attrs = body['user']
     try:
         user = models.User.load(context, instance_id, username, hostname)
     except (ValueError, AttributeError) as e:
         raise exception.BadRequest(msg=str(e))
     if not user:
         raise exception.UserNotFound(uuid=id)
     models.User.update_attributes(context, instance_id, username, hostname,
                                   user_attrs)
     return wsgi.Result(None, 202)
コード例 #24
0
 def update(self, req, body, tenant_id, instance_id, id):
     """Change attributes for one user."""
     LOG.info(_("Updating user attributes for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % req)
     context = req.environ[wsgi.CONTEXT_KEY]
     username, hostname = unquote_user_host(id)
     user = None
     user_attrs = body['user']
     try:
         user = models.User.load(context, instance_id, username, hostname)
     except (ValueError, AttributeError) as e:
         raise exception.BadRequest(msg=str(e))
     if not user:
         raise exception.UserNotFound(uuid=id)
     models.User.update_attributes(context, instance_id, username, hostname,
                                   user_attrs)
     return wsgi.Result(None, 202)
コード例 #25
0
ファイル: service.py プロジェクト: CMSS-BCRDB/RDSV1.0
 def delete_all(self, req, tenant_id, instance_id, user_id):
     """Revoke all db access for a user."""
     LOG.info(_("Revoking user access to all dbs for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % req)
     context = req.environ[wsgi.CONTEXT_KEY]
     user_id = correct_id_with_req(user_id, req)
     user = self._get_user(context, instance_id, user_id)
     if not user:
         LOG.error(_("No such user: %(user)s ") % {'user': user})
         raise exception.UserNotFound(uuid=user)
     username, hostname = unquote_user_host(user_id)
     access = models.User.access(context, instance_id, username, hostname)
     databases = [db.name for db in access.databases]
     #if id not in databases:
     #    raise exception.DatabaseNotFound(uuid=id)
     for id in databases:
         models.User.revoke(context, instance_id, username, hostname, id)
     return wsgi.Result(None, 202)
コード例 #26
0
ファイル: service.py プロジェクト: wffeige/trove
 def show(self, req, tenant_id, instance_id, id):
     """Return a single user."""
     LOG.info("Showing a user for instance '%(id)s'\n"
              "req : '%(req)s'\n\n",
              {"id": instance_id, "req": req})
     context = req.environ[wsgi.CONTEXT_KEY]
     self.authorize_target_action(context, 'user:show', instance_id)
     id = correct_id_with_req(id, req)
     username, host = unquote_user_host(id)
     user = None
     try:
         user = models.User.load(context, instance_id, username, host)
     except (ValueError, AttributeError) as e:
         raise exception.BadRequest(_("User show error: %(e)s")
                                    % {'e': e})
     if not user:
         raise exception.UserNotFound(uuid=id)
     view = views.UserView(user)
     return wsgi.Result(view.data(), 200)
コード例 #27
0
ファイル: service.py プロジェクト: Hopebaytech/trove
 def update(self, req, body, tenant_id, instance_id, user_id):
     """Grant access for a user to one or more databases."""
     LOG.info(_("Granting user access for instance '%(id)s'\n"
                "req : '%(req)s'\n\n") %
              {"id": instance_id, "req": req})
     context = req.environ[wsgi.CONTEXT_KEY]
     context.notification = notification.DBaaSUserGrant(
         context, request=req)
     user_id = correct_id_with_req(user_id, req)
     user = self._get_user(context, instance_id, user_id)
     if not user:
         LOG.error(_("No such user: %(user)s ") % {'user': user})
         raise exception.UserNotFound(uuid=user)
     username, hostname = unquote_user_host(user_id)
     databases = [db['name'] for db in body['databases']]
     with StartNotification(context, instance_id=instance_id,
                            username=username, database=databases):
         models.User.grant(context, instance_id, username, hostname,
                           databases)
     return wsgi.Result(None, 202)
コード例 #28
0
ファイル: service.py プロジェクト: jimbobhickville/trove
 def delete(self, req, tenant_id, instance_id, id):
     LOG.info(_("Deleting user for instance '%s'") % instance_id)
     LOG.info(_("req : '%s'\n\n") % req)
     context = req.environ[wsgi.CONTEXT_KEY]
     username, host = unquote_user_host(id)
     user = None
     try:
         user = guest_models.MySQLUser()
         user.name = username
         user.host = host
         found_user = models.User.load(context, instance_id, username,
                                       host)
         if not found_user:
             user = None
     except (ValueError, AttributeError) as e:
         raise exception.BadRequest(msg=str(e))
     if not user:
         raise exception.UserNotFound(uuid=id)
     models.User.delete(context, instance_id, user.serialize())
     return wsgi.Result(None, 202)
コード例 #29
0
ファイル: service.py プロジェクト: Hopebaytech/trove
 def delete(self, req, tenant_id, instance_id, user_id, id):
     """Revoke access for a user."""
     LOG.info(_("Revoking user access for instance '%(id)s'\n"
                "req : '%(req)s'\n\n") %
              {"id": instance_id, "req": req})
     context = req.environ[wsgi.CONTEXT_KEY]
     context.notification = notification.DBaaSUserRevoke(
         context, request=req)
     user_id = correct_id_with_req(user_id, req)
     user = self._get_user(context, instance_id, user_id)
     if not user:
         LOG.error(_("No such user: %(user)s ") % {'user': user})
         raise exception.UserNotFound(uuid=user)
     username, hostname = unquote_user_host(user_id)
     access = models.User.access(context, instance_id, username, hostname)
     databases = [db.name for db in access.databases]
     with StartNotification(context, instance_id=instance_id,
                            username=username, database=databases):
         if id not in databases:
             raise exception.DatabaseNotFound(uuid=id)
         models.User.revoke(context, instance_id, username, hostname, id)
     return wsgi.Result(None, 202)
コード例 #30
0
 def delete(self, req, tenant_id, instance_id, id):
     LOG.info(
         _("Delete instance '%(id)s'\n"
           "req : '%(req)s'\n\n") % {
               "id": instance_id,
               "req": req
           })
     context = req.environ[wsgi.CONTEXT_KEY]
     id = correct_id_with_req(id, req)
     username, host = unquote_user_host(id)
     user = None
     try:
         user = guest_models.MySQLUser()
         user.name = username
         user.host = host
         found_user = models.User.load(context, instance_id, username, host)
         if not found_user:
             user = None
     except (ValueError, AttributeError) as e:
         raise exception.BadRequest(msg=str(e))
     if not user:
         raise exception.UserNotFound(uuid=id)
     models.User.delete(context, instance_id, user.serialize())
     return wsgi.Result(None, 202)