From c54373bd9cd081a66e71a52755073041a3735c20 Mon Sep 17 00:00:00 2001 From: Lex Berezhny Date: Sat, 22 Jun 2019 17:16:00 -0400 Subject: [PATCH] moved enum into script to avoid weird import conflict with Python built-in enum module --- torba/torba/server/enum.py | 54 ------------------------------------ torba/torba/server/script.py | 46 ++++++++++++++++++++++++++++-- 2 files changed, 43 insertions(+), 57 deletions(-) delete mode 100644 torba/torba/server/enum.py diff --git a/torba/torba/server/enum.py b/torba/torba/server/enum.py deleted file mode 100644 index 652e5da8c..000000000 --- a/torba/torba/server/enum.py +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright (c) 2016, Neil Booth -# -# All rights reserved. -# -# See the file "LICENCE" for information about the copyright -# and warranty status of this software. - -"""An enum-like type with reverse lookup. - -Source: Python Cookbook, http://code.activestate.com/recipes/67107/ -""" - - -class EnumError(Exception): - pass - - -class Enumeration: - - def __init__(self, name, enumList): - self.__doc__ = name - - lookup = {} - reverseLookup = {} - i = 0 - uniqueNames = set() - uniqueValues = set() - for x in enumList: - if isinstance(x, tuple): - x, i = x - if not isinstance(x, str): - raise EnumError("enum name {} not a string".format(x)) - if not isinstance(i, int): - raise EnumError("enum value {} not an integer".format(i)) - if x in uniqueNames: - raise EnumError("enum name {} not unique".format(x)) - if i in uniqueValues: - raise EnumError("enum value {} not unique".format(x)) - uniqueNames.add(x) - uniqueValues.add(i) - lookup[x] = i - reverseLookup[i] = x - i = i + 1 - self.lookup = lookup - self.reverseLookup = reverseLookup - - def __getattr__(self, attr): - result = self.lookup.get(attr) - if result is None: - raise AttributeError('enumeration has no member {}'.format(attr)) - return result - - def whatis(self, value): - return self.reverseLookup[value] diff --git a/torba/torba/server/script.py b/torba/torba/server/script.py index d47811eb2..a608fb011 100644 --- a/torba/torba/server/script.py +++ b/torba/torba/server/script.py @@ -27,15 +27,55 @@ """Script-related classes and functions.""" -import struct from collections import namedtuple -from torba.server.enum import Enumeration -from torba.server.hash import hash160 from torba.server.util import unpack_le_uint16_from, unpack_le_uint32_from, \ pack_le_uint16, pack_le_uint32 +class EnumError(Exception): + pass + + +class Enumeration: + + def __init__(self, name, enumList): + self.__doc__ = name + + lookup = {} + reverseLookup = {} + i = 0 + uniqueNames = set() + uniqueValues = set() + for x in enumList: + if isinstance(x, tuple): + x, i = x + if not isinstance(x, str): + raise EnumError("enum name {} not a string".format(x)) + if not isinstance(i, int): + raise EnumError("enum value {} not an integer".format(i)) + if x in uniqueNames: + raise EnumError("enum name {} not unique".format(x)) + if i in uniqueValues: + raise EnumError("enum value {} not unique".format(x)) + uniqueNames.add(x) + uniqueValues.add(i) + lookup[x] = i + reverseLookup[i] = x + i = i + 1 + self.lookup = lookup + self.reverseLookup = reverseLookup + + def __getattr__(self, attr): + result = self.lookup.get(attr) + if result is None: + raise AttributeError('enumeration has no member {}'.format(attr)) + return result + + def whatis(self, value): + return self.reverseLookup[value] + + class ScriptError(Exception): """Exception used for script errors."""