if op == 'u': def routine(data, stacklevel=1): data = _need_bytes(data, stacklevel) return struct_op(data)[0] else: def routine(data, stacklevel=None): return struct_op(data) routine.__name__ = routine.__qualname__ = name return name, routine for op, size, end, sign in iters.product(ops, sizes, ends, signs): name, routine = make_single(op, size, end, sign) setattr(mod, name, routine) # # Make normal user-oriented packers, e.g. p8 # def make_multi(op, size): name = "%s%s" % (op, size) ls = getattr(mod, "_%sls" % (name)) lu = getattr(mod, "_%slu" % (name)) bs = getattr(mod, "_%sbs" % (name)) bu = getattr(mod, "_%sbu" % (name))
def p8(number, endian=None): # type: (int, Optional[endianess]) -> bytes pass def u16(data, endian=None): # type: (bytes, Optional[endianess]) -> int pass def p16(number, endian=None): # type: (int, Optional[endianess]) -> bytes pass def u32(data, endian=None): # type: (bytes, Optional[endianess]) -> int pass def p32(number, endian=None): # type: (int, Optional[endianess]) -> bytes pass for op, size in iters.product(ops, sizes): name, routine = make_multi(op, size) if hasattr(mod, name): setattr(mod, name, routine)
def make_single(op,size,end,sign): name = '_%s%s%s%s' % (op, size, end, sign) fmt = sizes[size] end = '>' if end == 'b' else '<' if sign == 'u': fmt = fmt.upper() fmt = end+fmt def routine(data): return ops[op](fmt,data) routine.__name__ = name return name, routine for op,size,end,sign in iters.product(ops, sizes, ends, signs): name, routine = make_single(op,size,end,sign) setattr(mod, name, routine) return_types = {'p': 'str', 'u': 'int'} op_verbs = {'p': 'pack', 'u': 'unpack'} arg_doc = {'p': 'number (int): Number to convert', 'u': 'data (str): String to convert'} rv_doc = {'p': 'The packed number as a string', 'u': 'The unpacked number'} # # Make normal user-oriented packers, e.g. p8 # def make_multi(op, size):