#############################################################################
#
#	Pyro Utilities
#
#	This is part of "Pyro" - Python Remote Objects
#	which is (c)1999 Irmen de Jong - irmen@bigfoot.com.
#
#############################################################################


# basic sys.argv argument parser.

class ArgVParser:
	argsK={}				# public!
	argsR=[]				# public!
	
	def parse(self,argv):
		if len(argv)>0 and argv[0]=='-c':
			del argv[0]
		argsk = {}
		argsr=[]
		while argv:
			if argv[0][0]=='-':
				try:
					if argv[1][0]!='-':			# next arg is a value to a -xxx arg
						argsk[argv[0]] = argv[1]
						del argv[1]
					else:
						argsk[argv[0]] = None		# next arg is again -xxx; thus no value
				except IndexError:
					argsk[argv[0]] = None			# no more args; thus no value
			else:
				argsr.append(argv[0])
			del argv[0]
		self.argsK=argsk
		self.argsR=argsr
	def getArg(self,opt):
		res = self.argsK[opt]
		del self.argsK[opt]
		return res
	def printIgnored(self):
		for k in self.argsK.keys():
			print 'Ignored unknown option',k
		for k in self.argsR:
			print 'Ignored argument',k



import random,time,sys

try:
	import socket
	import string
except:
	pass
	
def getUUID():
	# Generate UUID.
	# Should use the machine's MAC ethernet address, but there is no
	# portable way to get it... use the IP address + a random number instead.
	# The UUID is constructed as follows;
	# AAAAAAAAAAAA-BBBBBBBBBBBBBBBB-CCCCCCCC
	# where A=network address, B=timestamp, C=random.
	try:
		ip=socket.gethostbyname(socket.gethostname())
		ip=map(eval, string.split(ip,'.'))
		ip=reduce(lambda x,y: x+'%02x' % y, ip, '')
	except:
		# can't get IP address... use another value
		ip='%08lx' % id(getUUID)
	
	t1=time.time()	
	t2=int((time.clock()+t1)%1.0*sys.maxint)   # hi res time
	t1=int(t1)	# low res time
	r1=(random.randint(0,sys.maxint/2)>>3) & 0xffff
	r2=(random.randint(0,sys.maxint/2)>>4) & 0xffff
	r3=(random.randint(0,sys.maxint/2)>>5) & 0xffff
	return ip+'%04lx-%08lx%08lx-%04lx%04lx' % (r1,t1,t2,r2,r3)
	
