def to_s1(integer, base): if base == 2: format_char = 'b' elif base == 8: format_char = 'o' elif base == 16: format_char = 'x' else: raise Rb2PyValueError( 'to_s1() can convert only to base 2, 8 or 16. Unsupported base: ' + str(base)) return String(('{:' + format_char + '}').format(integer))
def pack1(sequence, format): string = String() string.pack(sequence, format) return string
def name0(cls): return String(cls.__qualname__.replace('.', '::'))
def join0(array): return String('').join(array)
def inspect0(object): return String(repr(object))
def s(string): return String(string)
def file_foreach(path): with open(str(path)) as f: for line in f: yield String(line)
def chr0(integer): return String(chr(integer))
def unpack1(string, format): if isinstance(string, ArrayABC): return String.from_byte_list(string).unpack(format) raise Rb2PyNotImplementedError('unpack')
def to_s0(object): return String(str(object))
def String1(object): method = responds_to(object, 'to_str') return method() if method else String(object)
# Aliases SEEK_CUR = io.SEEK_CUR SEEK_END = io.SEEK_END SEEK_SET = io.SEEK_SET # Abstract Base Classes ArrayABC = abc.MutableSequence HashABC = abc.MutableMapping NumberABC = numbers.Number # Globals env = OrderedDict() for name, value in os.environ.items(): env[String(name)] = String(value) class NoBlock(object): def __bool__(self): return False NO_BLOCK = NoBlock() # Helpers def s(string): return String(string)