Package: python3-yaql Version: 0.2.3-2 Severity: grave Tags: patch Justification: renders package unusable
yaql (python 3 package) fails to launch or import because uses python 2 syntax. 2to3 seams to fix the issue. -- System Information: Debian Release: stretch/sid APT prefers testing APT policy: (990, 'testing'), (500, 'testing-updates'), (500, 'stable- updates'), (500, 'unstable'), (500, 'stable'), (1, 'experimental') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 4.1.0-1-amd64 (SMP w/8 CPU cores) Locale: LANG=es_UY.UTF-8, LC_CTYPE=es_UY.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) Versions of packages python3-yaql depends on: ii dpkg 1.18.2 ii python3-ply 3.4-5 ii python3.4 3.4.3-7 pn python3:any <none> python3-yaql recommends no packages. python3-yaql suggests no packages.
--- yaql/__init__.py (original) +++ yaql/__init__.py (refactored) @@ -12,8 +12,8 @@ # License for the specific language governing permissions and limitations # under the License. -import parser -import context +from . import parser +from . import context from yaql.functions import builtin, extended __versioninfo__ = (0, 2, 3) --- yaql/context.py (original) +++ yaql/context.py (refactored) @@ -14,7 +14,7 @@ from functools import wraps import inspect -from exceptions import NoArgumentFound +from .exceptions import NoArgumentFound class Context(): --- yaql/exceptions.py (original) +++ yaql/exceptions.py (refactored) @@ -20,9 +20,9 @@ class NoFunctionRegisteredException(YaqlException): def __init__(self, func_name, arg_num=None): - self.func_name = func_name + self.__name__ = func_name self.arg_num = arg_num - msg = "No function called '{0}' is registered".format(self.func_name) + msg = "No function called '{0}' is registered".format(self.__name__) if self.arg_num: msg += " which has {0} arguments".format(self.arg_num) super(NoFunctionRegisteredException, self).__init__(msg) --- yaql/expressions.py (original) +++ yaql/expressions.py (refactored) @@ -13,8 +13,8 @@ # under the License. import types -from context import * -from exceptions import YaqlExecutionException, NoFunctionRegisteredException +from .context import * +from .exceptions import YaqlExecutionException, NoFunctionRegisteredException import yaql @@ -87,7 +87,7 @@ fs = self._try_invoke( resolvers, [self.function_name, this], context) or [] - if not isinstance(fs, types.ListType): + if not isinstance(fs, list): fs = [fs] except YaqlExecutionException: fs = [] @@ -223,7 +223,7 @@ ok = True if arg_type: ok = ok and isinstance(arg_val, arg_type) - if type(arg_val) == types.BooleanType: + if type(arg_val) == bool: ok = ok and type(arg_val) == arg_type if custom_validator: ok = ok and custom_validator(arg_val) --- yaql/parser.py (original) +++ yaql/parser.py (refactored) @@ -14,9 +14,9 @@ import types import ply.yacc as yacc -import expressions -import exceptions -import lexer +from . import expressions +from . import exceptions +from . import lexer import tempfile @@ -96,7 +96,7 @@ """ func : value '.' FUNC arg ')' """ - if isinstance(p[4], types.ListType): + if isinstance(p[4], list): arg = p[4] else: arg = [p[4]] @@ -114,7 +114,7 @@ """ func : FUNC arg ')' """ - if isinstance(p[2], types.ListType): + if isinstance(p[2], list): arg = p[2] else: arg = [p[2]] @@ -126,11 +126,11 @@ arg : arg ',' arg """ val_list = [] - if isinstance(p[1], types.ListType): + if isinstance(p[1], list): val_list += p[1] else: val_list.append(p[1]) - if isinstance(p[3], types.ListType): + if isinstance(p[3], list): val_list += p[3] else: val_list.append(p[3]) --- yaql/utils.py (original) +++ yaql/utils.py (refactored) @@ -18,9 +18,9 @@ def limit(generator, limit=MAX_GENERATOR_ITEMS): res = [] - for i in xrange(limit): + for i in range(limit): try: - res.append(generator.next()) + res.append(next(generator)) except StopIteration: return res raise YaqlSequenceException(limit) --- yaql/cli/cli_functions.py (original) +++ yaql/cli/cli_functions.py (refactored) @@ -31,7 +31,7 @@ @ContextAware() def main(context): print("Yet Another Query Language - command-line query tool") - print("Version {0}".format(version)) + print(("Version {0}".format(version))) print("Copyright (c) 2013 Mirantis, Inc") print("") if not context.get_data(): @@ -44,7 +44,7 @@ comm = True while comm != 'exit': try: - comm = raw_input(PROMPT) + comm = input(PROMPT) except EOFError: return if not comm: @@ -52,7 +52,7 @@ if comm[0] == '@': funcName, args = parse_service_command(comm) if funcName not in SERVICE_FUNCTIONS: - print("Unknown command " + funcName) + print(("Unknown command " + funcName)) else: SERVICE_FUNCTIONS[funcName](args, context) continue @@ -62,17 +62,17 @@ if ex.position: pointer_string = (" " * (ex.position + len(PROMPT))) + '^' print(pointer_string) - print(ex.message) + print((ex.message)) continue try: res = expr.evaluate(context=Context(context)) if isinstance(res, types.GeneratorType): res = limit(res) - print(json.dumps(res, indent=4)) + print((json.dumps(res, indent=4))) except Exception as ex: print("Execution exception:") if hasattr(ex, 'message'): - print(ex.message) + print((ex.message)) else: print("Unknown") @@ -81,17 +81,17 @@ try: json_str = open(os.path.expanduser(data_file)).read() except IOError as e: - print("Unable to read data file '{0}': {1}".format(data_file, - e.strerror)) + print(("Unable to read data file '{0}': {1}".format(data_file, + e.strerror))) return try: decoder = JSONDecoder() data = decoder.decode(json_str) except Exception as e: - print("Unable to parse data: " + e.message) + print(("Unable to parse data: " + e.message)) return context.set_data(data) - print("Data from file '{0}' loaded into context".format(data_file)) + print(("Data from file '{0}' loaded into context".format(data_file))) --- yaql/cli/run.py (original) +++ yaql/cli/run.py (refactored) @@ -30,7 +30,7 @@ decoder = JSONDecoder() data = decoder.decode(json_str) except: - print("Unable to load data from "+options.data) + print(("Unable to load data from "+options.data)) return else: data = None --- yaql/functions/builtin.py (original) +++ yaql/functions/builtin.py (refactored) @@ -21,7 +21,7 @@ def _get_att_or_key(item, value): - if isinstance(item, types.DictionaryType): + if isinstance(item, dict): return item.get(value) return getattr(item, value) @@ -35,20 +35,20 @@ @EvalArg('self', arg_type=collections.Iterable, - custom_validator=lambda v: not isinstance(v, types.DictionaryType) - and not isinstance(v, types.StringTypes)) + custom_validator=lambda v: not isinstance(v, dict) + and not isinstance(v, str)) def collection_attribution(self, att_name): for item in self: val = _get_att_or_key(item, att_name()) if isinstance(val, collections.Iterable) and \ - not isinstance(val, types.StringTypes): + not isinstance(val, str): for v in val: yield v else: yield val -@EvalArg('self', arg_type=types.DictionaryType) +@EvalArg('self', arg_type=dict) def dict_attribution(self, arg_name): return self.get(arg_name()) @@ -63,7 +63,7 @@ # Collection filtering -@EvalArg("index", types.IntType) +@EvalArg("index", int) def get_by_index(this, index): this = this() if isinstance(this, types.GeneratorType): @@ -72,11 +72,11 @@ @EvalArg("self", arg_type=collections.Iterable, - custom_validator=lambda v: not isinstance(v, types.StringTypes)) + custom_validator=lambda v: not isinstance(v, str)) def filter_by_predicate(self, predicate): for item in self: r = predicate(item) - if not isinstance(r, types.BooleanType): + if not isinstance(r, bool): raise YaqlExecutionException() if r is True: yield item @@ -132,19 +132,19 @@ # Boolean operations -@EvalArg('a', arg_type=types.BooleanType) -@EvalArg('b', arg_type=types.BooleanType) +@EvalArg('a', arg_type=bool) +@EvalArg('b', arg_type=bool) def _and(a, b): return a and b -@EvalArg('a', arg_type=types.BooleanType) -@EvalArg('b', arg_type=types.BooleanType) +@EvalArg('a', arg_type=bool) +@EvalArg('b', arg_type=bool) def _or(a, b): return a or b -@EvalArg('self', arg_type=types.BooleanType) +@EvalArg('self', arg_type=bool) def _not(self): return not self @@ -186,7 +186,7 @@ @EvalArg('value') def to_bool(value): - if isinstance(value, types.StringTypes): + if isinstance(value, str): if value.lower() == 'false': return False return bool(value) --- yaql/functions/extended.py (original) +++ yaql/functions/extended.py (refactored) @@ -38,7 +38,7 @@ def _range_limited(start, end): - for i in xrange(int(start()), int(end())): + for i in range(int(start()), int(end())): yield i @@ -66,7 +66,7 @@ @ContextAware() -@EvalArg('levels', types.IntType) +@EvalArg('levels', int) def parent(context, levels, func): con = context traversed = 0 @@ -113,7 +113,7 @@ self = self() for cond in conditions: res = cond(self) - if not isinstance(res, types.TupleType): + if not isinstance(res, tuple): raise YaqlExecutionException("Switch must have tuple parameters") if len(res) != 2: raise YaqlExecutionException("Switch tuples must be of size 2")