If any error occurs during an action, the operation should not be
logged.
This error was identified when running Kimchi tests in which the
following error was raised:
[02/Mar/2016:10:58:24] HTTP Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/cherrypy/_cprequest.py", line 670, in
respond
response.body = self.handler()
File "/usr/lib/python2.7/site-packages/cherrypy/lib/encoding.py", line 217, in
__call__
self.body = self.oldhandler(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/cherrypy/_cpdispatch.py", line 61, in
__call__
return self.callable(*self.args, **self.kwargs)
File "/home/alinefm/wok/src/wok/control/base.py", line 153, in wrapper
if model_args:
UnboundLocalError: local variable 'model_args' referenced before assignment
Signed-off-by: Aline Manera <alinefm(a)linux.vnet.ibm.com>
---
src/wok/control/base.py | 76 ++++++++++++++++++++++++-------------------------
1 file changed, 37 insertions(+), 39 deletions(-)
diff --git a/src/wok/control/base.py b/src/wok/control/base.py
index f44771e..3dd3fb8 100644
--- a/src/wok/control/base.py
+++ b/src/wok/control/base.py
@@ -36,8 +36,6 @@ from wok.reqlogger import RequestRecord
from wok.utils import get_plugin_from_request
-LOG_DISABLED_METHODS = ['GET']
-
# Default request log messages
COLLECTION_DEFAULT_LOG = "request on collection"
RESOURCE_DEFAULT_LOG = "request on resource"
@@ -130,6 +128,18 @@ class Resource(object):
action_fn = getattr(self.model, model_fn(self, action_name))
action_result = action_fn(*model_args)
+
+ params = {}
+ if model_args:
+ params = {'ident': str(model_args[0])}
+
+ RequestRecord(
+ self.getRequestMessage(method, action_name) % params,
+ app=get_plugin_from_request(),
+ req=method,
+ user=cherrypy.session.get(USER_NAME, 'N/A')
+ ).log()
+
if destructive is False or \
('persistent' in self.info.keys() and
self.info['persistent'] is True):
@@ -148,17 +158,6 @@ class Resource(object):
raise cherrypy.HTTPError(500, e.message)
except WokException, e:
raise cherrypy.HTTPError(500, e.message)
- finally:
- params = {}
- if model_args:
- params = {'ident': str(model_args[0])}
-
- RequestRecord(
- self.getRequestMessage(method, action_name) % params,
- app=get_plugin_from_request(),
- req=method,
- user=cherrypy.session.get(USER_NAME, 'N/A')
- ).log()
wrapper.__name__ = action_name
wrapper.exposed = True
@@ -176,15 +175,7 @@ class Resource(object):
fn = getattr(self.model, model_fn(self, 'delete'))
fn(*self.model_args)
cherrypy.response.status = 204
- except AttributeError:
- e = InvalidOperation('WOKAPI0002E', {'resource':
- get_class_name(self)})
- raise cherrypy.HTTPError(405, e.message)
- except OperationFailed, e:
- raise cherrypy.HTTPError(500, e.message)
- except InvalidOperation, e:
- raise cherrypy.HTTPError(400, e.message)
- finally:
+
method = 'DELETE'
params = {}
if self.model_args:
@@ -196,6 +187,14 @@ class Resource(object):
req=method,
user=cherrypy.session.get(USER_NAME, 'N/A')
).log()
+ except AttributeError:
+ e = InvalidOperation('WOKAPI0002E', {'resource':
+ get_class_name(self)})
+ raise cherrypy.HTTPError(405, e.message)
+ except OperationFailed, e:
+ raise cherrypy.HTTPError(500, e.message)
+ except InvalidOperation, e:
+ raise cherrypy.HTTPError(400, e.message)
@cherrypy.expose
def index(self, *args, **kargs):
@@ -245,19 +244,19 @@ class Resource(object):
e = InvalidOperation('WOKAPI0003E', {'resource':
get_class_name(self)})
raise cherrypy.HTTPError(405, e.message)
- finally:
- method = 'PUT'
- RequestRecord(
- self.getRequestMessage(method) % params,
- app=get_plugin_from_request(),
- req=method,
- user=cherrypy.session.get(USER_NAME, 'N/A')
- ).log()
validate_params(params, self, 'update')
args = list(self.model_args) + [params]
ident = update(*args)
+
+ method = 'PUT'
+ RequestRecord(
+ self.getRequestMessage(method) % params,
+ app=get_plugin_from_request(),
+ req=method,
+ user=cherrypy.session.get(USER_NAME, 'N/A')
+ ).log()
self._redirect(ident)
self.lookup()
return self.get()
@@ -413,7 +412,14 @@ class Collection(object):
return self.get(params)
elif method == 'POST':
params = parse_request()
- return self.create(params, *args)
+ result = self.create(params, *args)
+ RequestRecord(
+ self.getRequestMessage(method) % params,
+ app=get_plugin_from_request(),
+ req=method,
+ user=cherrypy.session.get(USER_NAME, 'N/A')
+ ).log()
+ return result
except InvalidOperation, e:
raise cherrypy.HTTPError(400, e.message)
except InvalidParameter, e:
@@ -426,14 +432,6 @@ class Collection(object):
raise cherrypy.HTTPError(500, e.message)
except WokException, e:
raise cherrypy.HTTPError(500, e.message)
- finally:
- if method not in LOG_DISABLED_METHODS:
- RequestRecord(
- self.getRequestMessage(method) % params,
- app=get_plugin_from_request(),
- req=method,
- user=cherrypy.session.get(USER_NAME, 'N/A')
- ).log()
class AsyncCollection(Collection):
--
2.5.0