#!/usr/bin/env python

"""
Idea:

_ = Underscore()

print map(_.str, somelist)

"""

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)
		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)



