import six if six.PY3: basestring = str long = int xrange = range unicode = str def to_key(literal_or_identifier): ''' returns string representation of this object''' if literal_or_identifier['type'] == 'Identifier': return literal_or_identifier['name'] elif literal_or_identifier['type'] == 'Literal': k = literal_or_identifier['value'] if isinstance(k, float): return unicode(float_repr(k)) elif 'regex' in literal_or_identifier: return compose_regex(k) elif isinstance(k, bool): return u'true' if k else u'false' elif k is None: return u'null' else: return unicode(k) def compose_regex(val): reg, flags = val # reg = REGEXP_CONVERTER._unescape_string(reg) return u'/%s/%s' % (reg, flags) def float_repr(f): if int(f) == f: return unicode(repr(int(f))) return unicode(repr(f))