Hello, given the ongoing work on struct (which I thought was a dead module), I was wondering if it would be possible to add an API to register custom parsing codes for struct. Whenever I use it for non-trivial tasks, I always happen to write small wrapper functions to adjust the values returned by struct.
An example API would be the following: ============================================ def mystring_len(): return 20 def mystring_pack(s): if len(s) > 20: raise ValueError, "a mystring can be at max 20 chars" s = (s + "\0"*20)[:20] s = struct.pack("20s", s) return s def mystring_unpack(s): assert len(s) == 20 s = struct.unpack("20s", s)[0] idx = s.find("\0") if idx >= 0: s = s[:idx] return s struct.register("S", mystring_pack, mystring_unpack, mystring_len) # then later foo = struct.unpack("iilS", data) ============================================ This is only an example, any similar API which might fit better struct internals would do as well. As shown, the custom packer/unpacker can call the original pack/unpack as a basis for their work. I guess an issue with this could be the endianess problem: it would make sense if, when called recursively, struct.pack/unpack used by the default the endianess specified by the external format string. -- Giovanni Bajo -- http://mail.python.org/mailman/listinfo/python-list