On Friday 14 March 2003 02:47 am, Andrew McNamara wrote: > Line oriented network protocols are very common, and I often find myself > calling the socket makefile method so I can read complete lines from a > socket. I'm probably not the first one who's wished that socket objects > where more file-like. > > While I don't think we'd want to go as far as to turn them into a stdio > based file object, it might make sense to allow them to be iterated over > (and add a .readline() method, I guess). This would necessitate adding some > input buffering, which will complicate things like the .recv() method, so > I'm not sure it's that good an idea, but it removes one gotchya for > neophytes (and forgetful veterans). Thoughts? I've had occasion to code a "socket that turns into a filelike object at need" (back in Python 2.0, I believe) and I used something like (can't find the original code, but AFAIR it was a bit like the following): class richsocket: def __init__(self, sock, *args): self.sock = socket.socket(*args) self.file = None def __getattr__(self, name): try: result = getattr(self.sock, name) except AttributeError: pass else: return result if self.file is None: self.file = self.sock.makefile() return getattr(self.file, name) This has some issues (e.g. method close goes to self.sock when it should probably go to self.file if not None; plus, the buffering issues you mention, etc), but nothing that looks too hard to fix -- in my use case I applied AGNI and never needed any more than this simple and smooth "double alternate delegation" pattern. Today, if type socket supports inheritance (haven't checked), it should be even easier, I suspect. Alex
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4