From 284fe744d64d810c40c0fe3bf29e90912a730f59 Mon Sep 17 00:00:00 2001 From: Hunt Xu Date: Fri, 1 Jun 2018 18:00:57 +0800 Subject: [PATCH] rest_utils: simplify filter extracting Change-Id: I7271f6f7d381753607c2c791985100ecd421a981 --- qinling/utils/rest_utils.py | 44 +++++++++++-------------------------- 1 file changed, 13 insertions(+), 31 deletions(-) diff --git a/qinling/utils/rest_utils.py b/qinling/utils/rest_utils.py index 1605524a..0afcadb4 100644 --- a/qinling/utils/rest_utils.py +++ b/qinling/utils/rest_utils.py @@ -26,6 +26,9 @@ from qinling import exceptions as exc LOG = logging.getLogger(__name__) +FILTER_TYPES = ('in', 'nin', 'eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'has') +LIST_VALUE_FILTER_TYPES = {'in', 'nin'} + def wrap_wsme_controller_exception(func): """Decorator for controllers method. @@ -122,38 +125,17 @@ def _extract_filter_type_and_value(data): 'filter_type:value'. :return: filter type and value. """ - if data.startswith("in:"): - value = list(six.text_type(data[3:]).split(",")) - filter_type = 'in' - elif data.startswith("nin:"): - value = list(six.text_type(data[4:]).split(",")) - filter_type = 'nin' - elif data.startswith("neq:"): - value = six.text_type(data[4:]) - filter_type = 'neq' - elif data.startswith("gt:"): - value = six.text_type(data[3:]) - filter_type = 'gt' - elif data.startswith("gte:"): - value = six.text_type(data[4:]) - filter_type = 'gte' - elif data.startswith("lt:"): - value = six.text_type(data[3:]) - filter_type = 'lt' - elif data.startswith("lte:"): - value = six.text_type(data[4:]) - filter_type = 'lte' - elif data.startswith("eq:"): - value = six.text_type(data[3:]) - filter_type = 'eq' - elif data.startswith("has:"): - value = six.text_type(data[4:]) - filter_type = 'has' - else: - value = data - filter_type = 'eq' + for filter_type in FILTER_TYPES: + prefix = filter_type + ':' + prefix_len = len(prefix) + if data.startswith(prefix): + value = six.text_type(data[prefix_len:]) + if filter_type in LIST_VALUE_FILTER_TYPES: + value = list(value.split(',')) + return filter_type, value - return filter_type, value + # Not matching any filter types, defaults to 'eq'. + return 'eq', data def get_project_params(project_id, all_projects):