From 1e0106aa4187f84142f3575f351f0f845a161783 Mon Sep 17 00:00:00 2001 From: Garrett Holmstrom Date: Wed, 17 Apr 2013 14:29:40 -0700 Subject: [PATCH] Recurse correctly when filling in default routes --- requestbuilder/__init__.py | 2 -- requestbuilder/auth.py | 6 ++---- requestbuilder/command.py | 6 ++---- requestbuilder/service.py | 6 ++---- requestbuilder/util.py | 12 +++++++++++- 5 files changed, 17 insertions(+), 15 deletions(-) diff --git a/requestbuilder/__init__.py b/requestbuilder/__init__.py index a042639..c4fdfee 100644 --- a/requestbuilder/__init__.py +++ b/requestbuilder/__init__.py @@ -82,8 +82,6 @@ class MutuallyExclusiveArgList(list): else: self.required = False list.__init__(self, args) - # This must go nowhere since it has no arg values of its own - self.routes = () class Filter(object): diff --git a/requestbuilder/auth.py b/requestbuilder/auth.py index 6ca96a1..87dce5a 100644 --- a/requestbuilder/auth.py +++ b/requestbuilder/auth.py @@ -28,7 +28,7 @@ import urllib import urlparse from . import Arg, AUTH from .exceptions import AuthError -from .util import aggregate_subclass_fields +from .util import add_default_routes, aggregate_subclass_fields ISO8601 = '%Y-%m-%dT%H:%M:%SZ' @@ -60,9 +60,7 @@ class BaseAuth(object): def collect_arg_objs(self): arg_objs = aggregate_subclass_fields(self.__class__, 'ARGS') - for arg_obj in arg_objs: - if arg_obj.routes is None: - arg_obj.routes = self.default_routes + add_default_routes(arg_objs, self.default_routes) return arg_objs def preprocess_arg_objs(self, arg_objs): diff --git a/requestbuilder/command.py b/requestbuilder/command.py index eb704a5..eeb5d1e 100644 --- a/requestbuilder/command.py +++ b/requestbuilder/command.py @@ -32,7 +32,7 @@ from .config import Config from .exceptions import ArgumentError from .logging import configure_root_logger from .suite import RequestBuilder -from .util import aggregate_subclass_fields +from .util import add_default_routes, aggregate_subclass_fields class BaseCommand(object): ''' @@ -171,9 +171,7 @@ class BaseCommand(object): def collect_arg_objs(self): arg_objs = aggregate_subclass_fields(self.__class__, 'ARGS') - for arg_obj in arg_objs: - if arg_obj.routes is None: - arg_obj.routes = self.default_routes + add_default_routes(arg_objs, self.default_routes) return arg_objs def preprocess_arg_objs(self, arg_objs): diff --git a/requestbuilder/service.py b/requestbuilder/service.py index ea348aa..0113952 100644 --- a/requestbuilder/service.py +++ b/requestbuilder/service.py @@ -26,7 +26,7 @@ import urlparse import weakref from .exceptions import ClientError, ServerError, ServiceInitError -from .util import aggregate_subclass_fields +from .util import add_default_routes, aggregate_subclass_fields class BaseService(object): @@ -67,9 +67,7 @@ class BaseService(object): def collect_arg_objs(self): service_args = aggregate_subclass_fields(self.__class__, 'ARGS') - for service_arg in service_args: - if service_arg.routes is None: - service_arg.routes = self.default_routes + add_default_routes(service_args, self.default_routes) if self.auth is not None: auth_args = self.auth.collect_arg_objs() else: diff --git a/requestbuilder/util.py b/requestbuilder/util.py index 2e6ca7b..585aea0 100644 --- a/requestbuilder/util.py +++ b/requestbuilder/util.py @@ -13,9 +13,19 @@ # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. import platform +import requestbuilder import requests import sys -from . import __version__ + + +def add_default_routes(arglike_obj, default_routes): + if isinstance(arglike_obj, requestbuilder.Arg): + if arglike_obj.routes is None: + arglike_obj.routes = default_routes + elif isinstance(arglike_obj, list): + # Note that MutuallyExclusiveArgList is a list + for item in arglike_obj: + add_default_routes(item, default_routes) def aggregate_subclass_fields(cls, field_name):