From b2ad8f082e94ba396272e6bfa36748302a82908d Mon Sep 17 00:00:00 2001 From: kgriffs Date: Wed, 14 Aug 2013 17:04:01 -0500 Subject: [PATCH] Use req.get_param's store feature in lieu of utils.purge This patch removes the use of utils.purge since it is no longer needed in light of Falcon's relatively new "store" feature, which causes the target dict to only receive the value of the param if it is found in the request, thus avoiding clobbering default kwarg values, which was the original intent of utils.purge. As a bonus, this approach is also ~40% faster. Change-Id: I6b3d82b1f700045e50b3131902b2c7b6dc6ea13c Implements: blueprint v1-obvious-optimizations --- marconi/transport/utils.py | 8 -------- marconi/transport/wsgi/messages.py | 15 ++++++++------- marconi/transport/wsgi/queues.py | 14 ++++++++------ 3 files changed, 16 insertions(+), 21 deletions(-) diff --git a/marconi/transport/utils.py b/marconi/transport/utils.py index f052f3d8f..187a6191b 100644 --- a/marconi/transport/utils.py +++ b/marconi/transport/utils.py @@ -54,11 +54,3 @@ def to_json(obj): :param obj: a JSON-serializable object """ return json.dumps(obj, ensure_ascii=False) - - -def purge(src): - """Returns a copy of a dict, excluding any keys set to `None`. - - :param src: a dictionary-like object to copy - """ - return dict([(k, v) for k, v in src.items() if v is not None]) diff --git a/marconi/transport/wsgi/messages.py b/marconi/transport/wsgi/messages.py index d03e7415c..851135efd 100644 --- a/marconi/transport/wsgi/messages.py +++ b/marconi/transport/wsgi/messages.py @@ -75,13 +75,14 @@ class CollectionResource(object): def _get(self, req, project_id, queue_name): uuid = req.get_header('Client-ID', required=True) - # TODO(kgriffs): Optimize - kwargs = utils.purge({ - 'marker': req.get_param('marker'), - 'limit': req.get_param_as_int('limit'), - 'echo': req.get_param_as_bool('echo'), - 'include_claimed': req.get_param_as_bool('include_claimed'), - }) + kwargs = {} + + # NOTE(kgriffs): This syntax ensures that + # we don't clobber default values with None. + req.get_param('marker', store=kwargs) + req.get_param_as_int('limit', store=kwargs) + req.get_param_as_bool('echo', store=kwargs) + req.get_param_as_bool('include_claimed', store=kwargs) try: validate.message_listing(**kwargs) diff --git a/marconi/transport/wsgi/queues.py b/marconi/transport/wsgi/queues.py index 26552a374..b75ba35ab 100644 --- a/marconi/transport/wsgi/queues.py +++ b/marconi/transport/wsgi/queues.py @@ -93,12 +93,14 @@ class CollectionResource(object): self.queue_controller = queue_controller def on_get(self, req, resp, project_id): - # TODO(kgriffs): Optimize - kwargs = utils.purge({ - 'marker': req.get_param('marker'), - 'limit': req.get_param_as_int('limit'), - 'detailed': req.get_param_as_bool('detailed'), - }) + + kwargs = {} + + # NOTE(kgriffs): This syntax ensures that + # we don't clobber default values with None. + req.get_param('marker', store=kwargs) + req.get_param_as_int('limit', store=kwargs) + req.get_param_as_bool('detailed', store=kwargs) try: validate.queue_listing(**kwargs)