From 03042a18bcba2683370dc72b5d159632262ba4e7 Mon Sep 17 00:00:00 2001 From: John Chilton <jmchilton@gmail.com> Date: Mon, 17 Feb 2014 21:34:52 -0600 Subject: [PATCH] Refactor client decorators into their own package. Trying to cut down of complexity and length of client.py. --- lwr/lwr_client/client.py | 41 +++++------------------------------- lwr/lwr_client/decorators.py | 35 ++++++++++++++++++++++++++++++ test/client_test.py | 2 +- 3 files changed, 41 insertions(+), 37 deletions(-) create mode 100644 lwr/lwr_client/decorators.py diff --git a/lwr/lwr_client/client.py b/lwr/lwr_client/client.py index c4241c86..e56a5db8 100644 --- a/lwr/lwr_client/client.py +++ b/lwr/lwr_client/client.py @@ -1,49 +1,18 @@ import os import shutil -import json +import time from json import dumps -from time import sleep from .destination import submit_params from .setup_handler import build as build_setup_handler from .job_directory import RemoteJobDirectory +from .decorators import parseJson +from .decorators import retry import logging log = logging.getLogger(__name__) CACHE_WAIT_SECONDS = 3 -MAX_RETRY_COUNT = 5 -RETRY_SLEEP_TIME = 0.1 - - -class parseJson(object): - - def __call__(self, func): - def replacement(*args, **kwargs): - response = func(*args, **kwargs) - return json.loads(response) - return replacement - - -class retry(object): - - def __call__(self, func): - - def replacement(*args, **kwargs): - max_count = MAX_RETRY_COUNT - count = 0 - while True: - count += 1 - try: - return func(*args, **kwargs) - except: - if count >= max_count: - raise - else: - sleep(RETRY_SLEEP_TIME) - continue - - return replacement class OutputNotFoundException(Exception): @@ -298,9 +267,10 @@ class JobClient(BaseJobClient): return complete_response else: print complete_response - sleep(1) + time.sleep(1) i += 1 + @retry() @parseJson() def raw_check_complete(self): """ @@ -317,7 +287,6 @@ class JobClient(BaseJobClient): response = self.raw_check_complete() return response["complete"] == "true" - @retry() def get_status(self): check_complete_response = self.raw_check_complete() # Older LWR instances won't set status so use 'complete', at some diff --git a/lwr/lwr_client/decorators.py b/lwr/lwr_client/decorators.py new file mode 100644 index 00000000..94035f5b --- /dev/null +++ b/lwr/lwr_client/decorators.py @@ -0,0 +1,35 @@ +import time +import json + +MAX_RETRY_COUNT = 5 +RETRY_SLEEP_TIME = 0.1 + + +class parseJson(object): + + def __call__(self, func): + def replacement(*args, **kwargs): + response = func(*args, **kwargs) + return json.loads(response) + return replacement + + +class retry(object): + + def __call__(self, func): + + def replacement(*args, **kwargs): + max_count = MAX_RETRY_COUNT + count = 0 + while True: + count += 1 + try: + return func(*args, **kwargs) + except: + if count >= max_count: + raise + else: + time.sleep(RETRY_SLEEP_TIME) + continue + + return replacement diff --git a/test/client_test.py b/test/client_test.py index 336c9b56..2a25ad27 100644 --- a/test/client_test.py +++ b/test/client_test.py @@ -7,7 +7,7 @@ from six import text_type, binary_type from lwr.lwr_client.client import JobClient from lwr.lwr_client.manager import HttpLwrInterface from lwr.lwr_client.transport import Urllib2Transport -from lwr.lwr_client.client import retry, MAX_RETRY_COUNT +from lwr.lwr_client.decorators import retry, MAX_RETRY_COUNT def test_with_retry(): -- GitLab