URL: https://github.com/freeipa/freeipa/pull/1033 Author: felipevolpone Title: #1033: Fixing internal error in param-{find,show} Action: opened
PR body: """ Fixing internal error in param-{find,show} with nonexistent object and showing properly error message. Since PR #1013 probably won't be updated anymore, I created this one with previous work plus some additional changes. https://pagure.io/freeipa/issue/7134 """ To pull the PR as Git branch: git remote add ghfreeipa https://github.com/freeipa/freeipa git fetch ghfreeipa pull/1033/head:pr1033 git checkout pr1033
From 986b15d057e520d3e4fedb3c20fde8831ea6ee49 Mon Sep 17 00:00:00 2001 From: David Kupka <dku...@redhat.com> Date: Tue, 29 Aug 2017 16:49:36 +0200 Subject: [PATCH 1/2] schema: Fix internal error in param-{find,show} with nonexistent object --- ipaserver/plugins/schema.py | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/ipaserver/plugins/schema.py b/ipaserver/plugins/schema.py index 1dbbec5f03..2ed669ded1 100644 --- a/ipaserver/plugins/schema.py +++ b/ipaserver/plugins/schema.py @@ -624,16 +624,25 @@ def _get_obj(self, metaobj_param, **kwargs): return obj def _retrieve(self, metaobjectfull_name, name, **kwargs): + found = False try: metaobj = self.api.Command[metaobjectfull_name] plugin = self.api.Object['command'] except KeyError: - metaobj = self.api.Object[metaobjectfull_name] - plugin = self.api.Object['class'] + try: + metaobj = self.api.Object[metaobjectfull_name] + plugin = self.api.Object['class'] + except KeyError: + pass + else: + found = True + else: + found = True - for param in plugin._iter_params(metaobj): - if param.name == name: - return metaobj, param + if found: + for param in plugin._iter_params(metaobj): + if param.name == name: + return metaobj, param raise errors.NotFound( reason=_("%(pkey)s: %(oname)s not found") % { @@ -646,8 +655,11 @@ def _search(self, metaobjectfull_name, **kwargs): metaobj = self.api.Command[metaobjectfull_name] plugin = self.api.Object['command'] except KeyError: - metaobj = self.api.Object[metaobjectfull_name] - plugin = self.api.Object['class'] + try: + metaobj = self.api.Object[metaobjectfull_name] + plugin = self.api.Object['class'] + except KeyError: + return tuple() return ((metaobj, param) for param in plugin._iter_params(metaobj)) From 4699d07164d978d22aa1eb26af4d2d37a93636cf Mon Sep 17 00:00:00 2001 From: Felipe Volpone <fbarr...@redhat.com> Date: Fri, 1 Sep 2017 13:44:08 -0300 Subject: [PATCH 2/2] Show error properly when name or full name are not valid --- ipaserver/plugins/schema.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/ipaserver/plugins/schema.py b/ipaserver/plugins/schema.py index 2ed669ded1..f77418fe75 100644 --- a/ipaserver/plugins/schema.py +++ b/ipaserver/plugins/schema.py @@ -625,18 +625,21 @@ def _get_obj(self, metaobj_param, **kwargs): def _retrieve(self, metaobjectfull_name, name, **kwargs): found = False + try: metaobj = self.api.Command[metaobjectfull_name] - plugin = self.api.Object['command'] except KeyError: - try: - metaobj = self.api.Object[metaobjectfull_name] - plugin = self.api.Object['class'] - except KeyError: - pass - else: - found = True - else: + raise errors.NotFound( + reason=_("%(metaobject)s: %(oname)s not found") % { + 'metaobject': metaobjectfull_name, 'oname': self.name, + } + ) + + if 'command' in self.api.Object: + plugin = self.api.Object['command'] + found = True + elif 'class' in self.api.Object: + plugin = self.api.Object['class'] found = True if found:
_______________________________________________ FreeIPA-devel mailing list -- freeipa-devel@lists.fedorahosted.org To unsubscribe send an email to freeipa-devel-le...@lists.fedorahosted.org