#!/usr/bin/python import socket class ShiftWriter: """A writer class which works like C++'s ostream. For instance: o = ShiftWriter(sys.stdout) o << "This is a list: " << [1, 2, 3] << "\n" """ file = None def __init__(self, file): self.file = file def __lshift__(self, arg): self.file.write(str(arg)) return self class InternetServer: """A class representing a site on the Internet.""" address = None def __init__(self, address): self.address = address def __getitem__(self, item): if item == "tcp": return InternetTCPServer(self) elif item == "udp": return InternetUDPServer(self) else: raise AttributeError def __getattr__(self, attr): return InternetServer(attr + "." + self.address) class InternetProtocolServer: """A class representing a protocol that can be served by an Internet site.""" server = None def __init__(self, server): self.server = server class InternetTCPServer(InternetProtocolServer): def __getitem__(self, key): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((self.server.address, key)) return s class Internet(InternetServer): """A class representing the Internet.""" def __init__(self): InternetServer.__init__(self, "") internet = Internet() if __name__ == "__main__": import sys o = ShiftWriter(sys.stdout) o << "This is a list: " << [1, 2, 3] << " and a number: " << 3 << "\n" o << "Nice, huh?\n" s = internet.uk.ac.ukc.stue407["tcp"][80] s.send("GET / HTTP/1.0\n\n") o << s.recv(10000)