diff --git a/spug_api/libs/tools.py b/spug_api/libs/tools.py index 7feb45c..860c0b4 100644 --- a/spug_api/libs/tools.py +++ b/spug_api/libs/tools.py @@ -5,7 +5,6 @@ from queue import Queue import ipaddress import json import time -import six def human_time(date=None): @@ -74,14 +73,12 @@ class Argument(object): def __init__(self, name, default=None, required=True, type=str, filter=None, help=None, nullable=False): self.name = name self.default = default - self.type = (type,) + self.type = type self.required = required self.nullable = nullable self.filter = filter self.help = help - if type == str: - self.type = six.string_types - if not isinstance(self.name, six.string_types): + if not isinstance(self.name, str): raise TypeError('Argument name must be string') if filter and not callable(self.filter): raise TypeError('Argument filter is not callable') @@ -100,15 +97,17 @@ class Argument(object): else: return None try: - if self.type[0] in six.integer_types: - value = self.type[0](value) - elif self.type[0] == dict: - value = json.loads(value) - elif self.type[0] == bool: - assert value.lower() in ['true', 'false'] - value = value.lower() == 'true' - except (ValueError, AssertionError): - raise ParseError(self.help or 'Type Error: %s type must be %s' % (self.name, self.type[0])) + if self.type: + if self.type in (list, dict) and isinstance(value, str): + value = json.loads(value) + assert isinstance(value, self.type) + elif self.type == bool and isinstance(value, str): + assert value.lower() in ['true', 'false'] + value = value.lower() == 'true' + elif not isinstance(value, self.type): + value = self.type(value) + except (TypeError, ValueError, AssertionError): + raise ParseError(self.help or 'Type Error: %s type must be %s' % (self.name, self.type)) if self.filter: if not self.filter(value): @@ -120,7 +119,7 @@ class BaseParser(object): def __init__(self, *args): self.args = [] for e in args: - if isinstance(e, six.string_types): + if isinstance(e, str): e = Argument(e) elif not isinstance(e, Argument): raise TypeError('%r is not instance of Argument' % e) @@ -162,8 +161,9 @@ class JsonParser(BaseParser): self.__data.update(post_json or {}) else: try: - if isinstance(data, six.string_types): - self.__data = json.loads(data) + if isinstance(data, (str, bytes)): + data = data.decode('utf-8') + self.__data = json.loads(data) if data else {} else: assert hasattr(data, '__contains__') assert hasattr(data, 'get')