On 08/31/2016 06:06 PM, Lucio Correia wrote:
Currently get_plugin_from_request() assumes plugin's
root URI is always /plugins/<plugin_name>, which is
in fact configurable by each plugin.
This patch fixes it by mapping plugins' root URI
on load time, and replacing get_plugin_from_request()
by a more generic get_plugin_from_uri() to be used
also in AsyncTask.
Signed-off-by: Lucio Correia <luciojhc(a)linux.vnet.ibm.com>
---
src/wok/control/base.py | 4 ++--
src/wok/utils.py | 14 +++++++++-----
2 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/src/wok/control/base.py b/src/wok/control/base.py
index f4443c8..213e6b5 100644
--- a/src/wok/control/base.py
+++ b/src/wok/control/base.py
@@ -33,7 +33,7 @@ from wok.control.utils import validate_params
from wok.exception import InvalidOperation, UnauthorizedError, WokException
from wok.reqlogger import RequestRecord
from wok.stringutils import encode_value, utf8_dict
-from wok.utils import get_plugin_from_request, wok_log
+from wok.utils import get_plugin_from_uri, wok_log
# Default request log messages
@@ -47,7 +47,7 @@ def log_request(code, params, exception, method, status, user=None):
log_id = RequestRecord(
{'code': code, 'params': params},
exception,
- app=get_plugin_from_request(),
+ app=get_plugin_from_uri(cherrypy.request.script_name),
Maybe you can use "cherrypy.request.app.root.domain" directly or... (see
below)
req=method,
status=status,
user=user or cherrypy.session.get(USER_NAME, 'N/A'),
diff --git a/src/wok/utils.py b/src/wok/utils.py
index 7599e85..b3d252c 100644
--- a/src/wok/utils.py
+++ b/src/wok/utils.py
@@ -44,6 +44,7 @@ from wok.exception import InvalidParameter, TimeoutExpired
from wok.stringutils import decode_value
+plugin_root = {}
wok_log = cherrypy.log.error_log
@@ -82,6 +83,10 @@ def get_enabled_plugins():
plugin_config = _load_plugin_conf(name)
try:
if plugin_config['wok']['enable']:
+ # update plugin lookup dict
+ uri = plugin_config['wok']['uri']
+ plugin_root[name] = uri
+
It is better to have the uri as the key. So you can easily grab the
application name based on uri.
plugin_root[uri] = name
yield (name, plugin_config)
except (TypeError, KeyError):
continue
@@ -106,14 +111,13 @@ def get_all_tabs():
return tabs
-def get_plugin_from_request():
+def get_plugin_from_uri(uri):
"""
Returns name of plugin being requested. If no plugin, returns 'wok'.
"""
- script_name = cherrypy.request.script_name
- split = script_name.split('/')
- if len(split) > 2 and split[1] == 'plugins':
- return split[2]
+ for plugin, root in plugin_root.iteritems():
+ if uri.startswith(root):
+ return plugin
return 'wok'
Replase all the above block to:
return plugin_root.get(uri, 'wok')