From e530deefe02b7f6de2748f7d99f713bc9d4abfe5 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Mon, 23 Jun 2014 16:04:33 +0000 Subject: Move shared code to a base class, less code duplication --- lorrycontroller/movetopbottom.py | 44 ++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/lorrycontroller/movetopbottom.py b/lorrycontroller/movetopbottom.py index dcb79a4..7c1664a 100644 --- a/lorrycontroller/movetopbottom.py +++ b/lorrycontroller/movetopbottom.py @@ -21,10 +21,7 @@ import bottle import lorrycontroller -class MoveToTop(lorrycontroller.LorryControllerRoute): - - http_method = 'POST' - path = '/1.0/move-to-top' +class MoveBase(object): def run(self, **kwargs): logging.info('%s %s called', self.http_method, self.path) @@ -32,27 +29,30 @@ class MoveToTop(lorrycontroller.LorryControllerRoute): statedb = self.open_statedb() with statedb: lorry_infos = statedb.get_all_lorries_info() - if lorry_infos: - topmost = lorry_infos[0] - timestamp = min(0, topmost['last_run'] - 1) - statedb.set_lorry_last_run(path, timestamp) - return 'Lorry %s moved to top of run-queue' % path + timestamp = self.get_new_timestamp(lorry_infos) + statedb.set_lorry_last_run(path, timestamp) + return self.msg % path -class MoveToBottom(lorrycontroller.LorryControllerRoute): +class MoveToTop(MoveBase, lorrycontroller.LorryControllerRoute): + + http_method = 'POST' + path = '/1.0/move-to-top' + msg = 'Lorry %s moved to the top of the run queue' + + def get_new_timestamp(self, lorry_infos): + topmost = lorry_infos[0] + timestamp = min(0, topmost['last_run'] - 1) + return timestamp + + +class MoveToBottom(MoveBase, lorrycontroller.LorryControllerRoute): http_method = 'POST' path = '/1.0/move-to-bottom' + msg = 'Lorry %s moved to the bottom of the run queue' - def run(self, **kwargs): - logging.info('%s %s called', self.http_method, self.path) - path = bottle.request.forms.path - statedb = self.open_statedb() - with statedb: - lorry_infos = statedb.get_all_lorries_info() - if lorry_infos: - bottommost = lorry_infos[-1] - timestamp = ( - bottommost['last_run'] + bottommost['interval'] + 1) - statedb.set_lorry_last_run(path, timestamp) - return 'Lorry %s moved to bototm of run-queue' % path + def get_new_timestamp(self, lorry_infos): + bottommost = lorry_infos[-1] + timestamp = bottommost['last_run'] + bottommost['interval'] + 1 + return timestamp -- cgit v1.2.1 From 0b31a04a38b3a2819ab166c69d31c122723a33af Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Mon, 23 Jun 2014 16:46:58 +0000 Subject: Improve move-to-top/bottom API call error messages --- lorrycontroller/movetopbottom.py | 12 ++++++++++++ yarns.webapp/030-queue-management.yarn | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/lorrycontroller/movetopbottom.py b/lorrycontroller/movetopbottom.py index 7c1664a..2aeff98 100644 --- a/lorrycontroller/movetopbottom.py +++ b/lorrycontroller/movetopbottom.py @@ -26,13 +26,25 @@ class MoveBase(object): def run(self, **kwargs): logging.info('%s %s called', self.http_method, self.path) path = bottle.request.forms.path + if not path: + return 'Form field path was not given' statedb = self.open_statedb() with statedb: + if not self.lorry_exists(statedb, path): + return 'Lorry %s does not exist' % path lorry_infos = statedb.get_all_lorries_info() timestamp = self.get_new_timestamp(lorry_infos) statedb.set_lorry_last_run(path, timestamp) return self.msg % path + def lorry_exists(self, statedb, path): + try: + statedb.get_lorry_info(path) + except lorrycontroller.LorryNotFoundError: + return False + else: + return True + class MoveToTop(MoveBase, lorrycontroller.LorryControllerRoute): diff --git a/yarns.webapp/030-queue-management.yarn b/yarns.webapp/030-queue-management.yarn index 9fca4fb..ebf50af 100644 --- a/yarns.webapp/030-queue-management.yarn +++ b/yarns.webapp/030-queue-management.yarn @@ -101,6 +101,18 @@ Add two Lorries, then make sure they can reordered at will. AND admin makes request GET /1.0/list-queue THEN response has queue set to ["upstream/bar", "upstream/foo"] +If trying to move a lorry that doesn't exist, make sure there's an +appropriate error message. + + WHEN admin makes request POST /1.0/move-to-bottom with path=upstream/alfred + THEN response matches "upstream/alfred does not exist" + +Likewise, if we forget to give a path argument, there should be an +error message. + + WHEN admin makes request POST /1.0/move-to-bottom + THEN response matches "path.*not given" + Finally, clean up. FINALLY WEBAPP terminates -- cgit v1.2.1