De-lint hybrid36.py
This commit is contained in:
@@ -4,16 +4,21 @@ http://cci.lbl.gov/hybrid_36/
|
||||
"""
|
||||
import string
|
||||
|
||||
_hybrid36_upper_chars = set(string.ascii_uppercase)
|
||||
_hybrid36_lower_chars = set(string.ascii_lowercase)
|
||||
_hybrid36_digits = set(string.digits)
|
||||
_hybrid36_upper_set = _hybrid36_upper_chars | _hybrid36_digits
|
||||
_hybrid36_lower_set = _hybrid36_lower_chars | _hybrid36_digits
|
||||
|
||||
_HYBRID36_UPPER_CHARS = set(string.ascii_uppercase)
|
||||
_HYBRID36_LOWER_CHARS = set(string.ascii_lowercase)
|
||||
_HYBRID36_DIGITS = set(string.digits)
|
||||
_HYBRID36_UPPER_SET = _HYBRID36_UPPER_CHARS | _HYBRID36_DIGITS
|
||||
_HYBRID36_LOWER_SET = _HYBRID36_LOWER_CHARS | _HYBRID36_DIGITS
|
||||
|
||||
|
||||
def decode(input_string):
|
||||
"""
|
||||
Convert an input string of a number in hybrid-36 format to an integer.
|
||||
"""Convert an input string of a number in hybrid-36 format to an integer.
|
||||
|
||||
Args:
|
||||
input_string: input string
|
||||
Returns:
|
||||
integer
|
||||
"""
|
||||
value_error_message = "invalid literal for hybrid-36 conversion: '%s'"
|
||||
|
||||
@@ -27,7 +32,7 @@ def decode(input_string):
|
||||
else:
|
||||
sign = 1
|
||||
|
||||
if not len(input_string):
|
||||
if len(input_string) == 0:
|
||||
raise ValueError(value_error_message % input_string)
|
||||
|
||||
# See http://cci.lbl.gov/hybrid_36/ for documentation on the format.
|
||||
@@ -35,21 +40,21 @@ def decode(input_string):
|
||||
num_chars = len(input_string)
|
||||
first_char = input_string[0]
|
||||
|
||||
if first_char in _hybrid36_digits:
|
||||
if first_char in _HYBRID36_DIGITS:
|
||||
return sign * int(input_string)
|
||||
elif first_char in _hybrid36_upper_chars:
|
||||
elif first_char in _HYBRID36_UPPER_CHARS:
|
||||
reference = - (10 * 36 ** (num_chars - 1) - 10 ** num_chars)
|
||||
_hybrid36_set = _hybrid36_upper_set
|
||||
elif first_char in _hybrid36_lower_chars:
|
||||
_hybrid36_set = _HYBRID36_UPPER_SET
|
||||
elif first_char in _HYBRID36_LOWER_CHARS:
|
||||
reference = (16 * 36 ** (num_chars - 1) + 10 ** num_chars)
|
||||
_hybrid36_set = _hybrid36_lower_set
|
||||
_hybrid36_set = _HYBRID36_LOWER_SET
|
||||
else:
|
||||
raise ValueError(value_error_message % original_input_string)
|
||||
|
||||
# Check the validity of the input string: ASCII characters should be
|
||||
# either all uppercase or all lowercase.
|
||||
for c in input_string[1:]:
|
||||
if c not in _hybrid36_set:
|
||||
for char in input_string[1:]:
|
||||
if char not in _hybrid36_set:
|
||||
raise ValueError(value_error_message % original_input_string)
|
||||
|
||||
# Convert with the int function.
|
||||
|
||||
Reference in New Issue
Block a user