[Python-checkins] python/dist/src/Demo/pdist FSProxy.py, 1.1, 1.2 client.py, 1.5, 1.6 cmdfw.py, 1.3, 1.4 cmptree.py, 1.3, 1.4 cvslib.py, 1.13, 1.14 cvslock.py, 1.2, 1.3 mac.py, 1.1, 1.2 rcsclient.py, 1.6, 1.7 rcslib.py, 1.10, 1.11 rcvs.py, 1.22, 1.23 rrcs.py, 1.7, 1.8 security.py, 1.4, 1.5 server.py, 1.5, 1.6 sumtree.py, 1.1, 1.2

tim_one at users.sourceforge.net tim_one at users.sourceforge.net
Sun Jul 18 07:56:27 CEST 2004


Update of /cvsroot/python/python/dist/src/Demo/pdist
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28702/Demo/pdist

Modified Files:
	FSProxy.py client.py cmdfw.py cmptree.py cvslib.py cvslock.py 
	mac.py rcsclient.py rcslib.py rcvs.py rrcs.py security.py 
	server.py sumtree.py 
Log Message:
Whitespace normalization.  Ran reindent.py over the entire source tree.


Index: FSProxy.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Demo/pdist/FSProxy.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** FSProxy.py	10 Apr 1995 11:40:46 -0000	1.1
--- FSProxy.py	18 Jul 2004 05:56:08 -0000	1.2
***************
*** 25,33 ****
  
  if os.name == 'mac':
! 	import macfs
! 	maxnamelen = 31
  else:
! 	macfs = None
! 	maxnamelen = 255
  
  skipnames = (os.curdir, os.pardir)
--- 25,33 ----
  
  if os.name == 'mac':
!     import macfs
!     maxnamelen = 31
  else:
!     macfs = None
!     maxnamelen = 255
  
  skipnames = (os.curdir, os.pardir)
***************
*** 35,322 ****
  
  class FSProxyLocal:
! 	
! 	def __init__(self):
! 		self._dirstack = []
! 		self._ignore = ['*.pyc'] + self._readignore()
! 	
! 	def _close(self):
! 		while self._dirstack:
! 			self.back()
! 	
! 	def _readignore(self):
! 		file = self._hide('ignore')
! 		try:
! 			f = open(file)
! 		except IOError:
! 			file = self._hide('synctree.ignorefiles')
! 			try:
! 				f = open(file)
! 			except IOError:
! 				return []
! 		ignore = []
! 		while 1:
! 			line = f.readline()
! 			if not line: break
! 			if line[-1] == '\n': line = line[:-1]
! 			ignore.append(line)
! 		f.close()
! 		return ignore
! 	
! 	def _hidden(self, name):
! 		if os.name == 'mac':
! 			return name[0] == '(' and name[-1] == ')'
! 		else:
! 			return name[0] == '.'
! 	
! 	def _hide(self, name):
! 		if os.name == 'mac':
! 			return '(%s)' % name
! 		else:
! 			return '.%s' % name
! 	
! 	def visible(self, name):
! 		if len(name) > maxnamelen: return 0
! 		if name[-1] == '~': return 0
! 		if name in skipnames: return 0
! 		if self._hidden(name): return 0
! 		head, tail = os.path.split(name)
! 		if head or not tail: return 0
! 		if macfs:
! 			if os.path.exists(name) and not os.path.isdir(name):
! 				try:
! 					fs = macfs.FSSpec(name)
! 					c, t = fs.GetCreatorType()
! 					if t != 'TEXT': return 0
! 				except macfs.error, msg:
! 					print "***", name, msg
! 					return 0
! 		else:
! 			if os.path.islink(name): return 0
! 			if '\0' in open(name, 'rb').read(512): return 0
! 		for ign in self._ignore:
! 			if fnmatch.fnmatch(name, ign): return 0
! 		return 1
! 	
! 	def check(self, name):
! 		if not self.visible(name):
! 			raise os.error, "protected name %s" % repr(name)
! 	
! 	def checkfile(self, name):
! 		self.check(name)
! 		if not os.path.isfile(name):
! 			raise os.error, "not a plain file %s" % repr(name)
! 	
! 	def pwd(self):
! 		return os.getcwd()
! 	
! 	def cd(self, name):
! 		self.check(name)
! 		save = os.getcwd(), self._ignore
! 		os.chdir(name)
! 		self._dirstack.append(save)
! 		self._ignore = self._ignore + self._readignore()
! 	
! 	def back(self):
! 		if not self._dirstack:
! 			raise os.error, "empty directory stack"
! 		dir, ignore = self._dirstack[-1]
! 		os.chdir(dir)
! 		del self._dirstack[-1]
! 		self._ignore = ignore
! 	
! 	def _filter(self, files, pat = None):
! 		if pat:
! 			def keep(name, pat = pat):
! 				return fnmatch.fnmatch(name, pat)
! 			files = filter(keep, files)
! 		files = filter(self.visible, files)
! 		files.sort()
! 		return files
! 	
! 	def list(self, pat = None):
! 		files = os.listdir(os.curdir)
! 		return self._filter(files, pat)
! 	
! 	def listfiles(self, pat = None):
! 		files = os.listdir(os.curdir)
! 		files = filter(os.path.isfile, files)
! 		return self._filter(files, pat)
! 	
! 	def listsubdirs(self, pat = None):
! 		files = os.listdir(os.curdir)
! 		files = filter(os.path.isdir, files)
! 		return self._filter(files, pat)
! 	
! 	def exists(self, name):
! 		return self.visible(name) and os.path.exists(name)
! 	
! 	def isdir(self, name):
! 		return self.visible(name) and os.path.isdir(name)
! 	
! 	def islink(self, name):
! 		return self.visible(name) and os.path.islink(name)
! 	
! 	def isfile(self, name):
! 		return self.visible(name) and os.path.isfile(name)
! 	
! 	def sum(self, name):
! 		self.checkfile(name)
! 		BUFFERSIZE = 1024*8
! 		f = open(name)
! 		sum = md5.new()
! 		while 1:
! 			buffer = f.read(BUFFERSIZE)
! 			if not buffer:
! 				break
! 			sum.update(buffer)
! 		return sum.digest()
! 	
! 	def size(self, name):
! 		self.checkfile(name)
! 		return os.stat(name)[ST_SIZE]
! 	
! 	def mtime(self, name):
! 		self.checkfile(name)
! 		return time.localtime(os.stat(name)[ST_MTIME])
! 	
! 	def stat(self, name):
! 		self.checkfile(name)
! 		size = os.stat(name)[ST_SIZE]
! 		mtime = time.localtime(os.stat(name)[ST_MTIME])
! 		return size, mtime
! 	
! 	def info(self, name):
! 		sum = self.sum(name)
! 		size = os.stat(name)[ST_SIZE]
! 		mtime = time.localtime(os.stat(name)[ST_MTIME])
! 		return sum, size, mtime
! 	
! 	def _list(self, function, list):
! 		if list is None:
! 			list = self.listfiles()
! 		res = []
! 		for name in list:
! 			try:
! 				res.append((name, function(name)))
! 			except (os.error, IOError):
! 				res.append((name, None))
! 		return res
! 	
! 	def sumlist(self, list = None):
! 		return self._list(self.sum, list)
! 	
! 	def statlist(self, list = None):
! 		return self._list(self.stat, list)
! 	
! 	def mtimelist(self, list = None):
! 		return self._list(self.mtime, list)
! 	
! 	def sizelist(self, list = None):
! 		return self._list(self.size, list)
! 	
! 	def infolist(self, list = None):
! 		return self._list(self.info, list)
! 	
! 	def _dict(self, function, list):
! 		if list is None:
! 			list = self.listfiles()
! 		dict = {}
! 		for name in list:
! 			try:
! 				dict[name] = function(name)
! 			except (os.error, IOError):
! 				pass
! 		return dict
! 	
! 	def sumdict(self, list = None):
! 		return self.dict(self.sum, list)
! 	
! 	def sizedict(self, list = None):
! 		return self.dict(self.size, list)
! 	
! 	def mtimedict(self, list = None):
! 		return self.dict(self.mtime, list)
! 	
! 	def statdict(self, list = None):
! 		return self.dict(self.stat, list)
! 	
! 	def infodict(self, list = None):
! 		return self._dict(self.info, list)
! 	
! 	def read(self, name, offset = 0, length = -1):
! 		self.checkfile(name)
! 		f = open(name)
! 		f.seek(offset)
! 		if length == 0:
! 			data = ''
! 		elif length < 0:
! 			data = f.read()
! 		else:
! 			data = f.read(length)
! 		f.close()
! 		return data
! 	
! 	def create(self, name):
! 		self.check(name)
! 		if os.path.exists(name):
! 			self.checkfile(name)
! 			bname = name + '~'
! 			try:
! 				os.unlink(bname)
! 			except os.error:
! 				pass
! 			os.rename(name, bname)
! 		f = open(name, 'w')
! 		f.close()
! 	
! 	def write(self, name, data, offset = 0):
! 		self.checkfile(name)
! 		f = open(name, 'r+')
! 		f.seek(offset)
! 		f.write(data)
! 		f.close()
! 	
! 	def mkdir(self, name):
! 		self.check(name)
! 		os.mkdir(name, 0777)
! 	
! 	def rmdir(self, name):
! 		self.check(name)
! 		os.rmdir(name)
  
  
  class FSProxyServer(FSProxyLocal, server.Server):
! 	
! 	def __init__(self, address, verbose = server.VERBOSE):
! 		FSProxyLocal.__init__(self)
! 		server.Server.__init__(self, address, verbose)
! 	
! 	def _close(self):
! 		server.Server._close(self)
! 		FSProxyLocal._close(self)
! 	
! 	def _serve(self):
! 		server.Server._serve(self)
! 		# Retreat into start directory
! 		while self._dirstack: self.back()
  
  
  class FSProxyClient(client.Client):
! 	
! 	def __init__(self, address, verbose = client.VERBOSE):
! 		client.Client.__init__(self, address, verbose)
  
  
  def test():
! 	import string
! 	import sys
! 	if sys.argv[1:]:
! 		port = string.atoi(sys.argv[1])
! 	else:
! 		port = 4127
! 	proxy = FSProxyServer(('', port))
! 	proxy._serverloop()
  
  
  if __name__ == '__main__':
! 	test()
--- 35,322 ----
  
  class FSProxyLocal:
! 
!     def __init__(self):
!         self._dirstack = []
!         self._ignore = ['*.pyc'] + self._readignore()
! 
!     def _close(self):
!         while self._dirstack:
!             self.back()
! 
!     def _readignore(self):
!         file = self._hide('ignore')
!         try:
!             f = open(file)
!         except IOError:
!             file = self._hide('synctree.ignorefiles')
!             try:
!                 f = open(file)
!             except IOError:
!                 return []
!         ignore = []
!         while 1:
!             line = f.readline()
!             if not line: break
!             if line[-1] == '\n': line = line[:-1]
!             ignore.append(line)
!         f.close()
!         return ignore
! 
!     def _hidden(self, name):
!         if os.name == 'mac':
!             return name[0] == '(' and name[-1] == ')'
!         else:
!             return name[0] == '.'
! 
!     def _hide(self, name):
!         if os.name == 'mac':
!             return '(%s)' % name
!         else:
!             return '.%s' % name
! 
!     def visible(self, name):
!         if len(name) > maxnamelen: return 0
!         if name[-1] == '~': return 0
!         if name in skipnames: return 0
!         if self._hidden(name): return 0
!         head, tail = os.path.split(name)
!         if head or not tail: return 0
!         if macfs:
!             if os.path.exists(name) and not os.path.isdir(name):
!                 try:
!                     fs = macfs.FSSpec(name)
!                     c, t = fs.GetCreatorType()
!                     if t != 'TEXT': return 0
!                 except macfs.error, msg:
!                     print "***", name, msg
!                     return 0
!         else:
!             if os.path.islink(name): return 0
!             if '\0' in open(name, 'rb').read(512): return 0
!         for ign in self._ignore:
!             if fnmatch.fnmatch(name, ign): return 0
!         return 1
! 
!     def check(self, name):
!         if not self.visible(name):
!             raise os.error, "protected name %s" % repr(name)
! 
!     def checkfile(self, name):
!         self.check(name)
!         if not os.path.isfile(name):
!             raise os.error, "not a plain file %s" % repr(name)
! 
!     def pwd(self):
!         return os.getcwd()
! 
!     def cd(self, name):
!         self.check(name)
!         save = os.getcwd(), self._ignore
!         os.chdir(name)
!         self._dirstack.append(save)
!         self._ignore = self._ignore + self._readignore()
! 
!     def back(self):
!         if not self._dirstack:
!             raise os.error, "empty directory stack"
!         dir, ignore = self._dirstack[-1]
!         os.chdir(dir)
!         del self._dirstack[-1]
!         self._ignore = ignore
! 
!     def _filter(self, files, pat = None):
!         if pat:
!             def keep(name, pat = pat):
!                 return fnmatch.fnmatch(name, pat)
!             files = filter(keep, files)
!         files = filter(self.visible, files)
!         files.sort()
!         return files
! 
!     def list(self, pat = None):
!         files = os.listdir(os.curdir)
!         return self._filter(files, pat)
! 
!     def listfiles(self, pat = None):
!         files = os.listdir(os.curdir)
!         files = filter(os.path.isfile, files)
!         return self._filter(files, pat)
! 
!     def listsubdirs(self, pat = None):
!         files = os.listdir(os.curdir)
!         files = filter(os.path.isdir, files)
!         return self._filter(files, pat)
! 
!     def exists(self, name):
!         return self.visible(name) and os.path.exists(name)
! 
!     def isdir(self, name):
!         return self.visible(name) and os.path.isdir(name)
! 
!     def islink(self, name):
!         return self.visible(name) and os.path.islink(name)
! 
!     def isfile(self, name):
!         return self.visible(name) and os.path.isfile(name)
! 
!     def sum(self, name):
!         self.checkfile(name)
!         BUFFERSIZE = 1024*8
!         f = open(name)
!         sum = md5.new()
!         while 1:
!             buffer = f.read(BUFFERSIZE)
!             if not buffer:
!                 break
!             sum.update(buffer)
!         return sum.digest()
! 
!     def size(self, name):
!         self.checkfile(name)
!         return os.stat(name)[ST_SIZE]
! 
!     def mtime(self, name):
!         self.checkfile(name)
!         return time.localtime(os.stat(name)[ST_MTIME])
! 
!     def stat(self, name):
!         self.checkfile(name)
!         size = os.stat(name)[ST_SIZE]
!         mtime = time.localtime(os.stat(name)[ST_MTIME])
!         return size, mtime
! 
!     def info(self, name):
!         sum = self.sum(name)
!         size = os.stat(name)[ST_SIZE]
!         mtime = time.localtime(os.stat(name)[ST_MTIME])
!         return sum, size, mtime
! 
!     def _list(self, function, list):
!         if list is None:
!             list = self.listfiles()
!         res = []
!         for name in list:
!             try:
!                 res.append((name, function(name)))
!             except (os.error, IOError):
!                 res.append((name, None))
!         return res
! 
!     def sumlist(self, list = None):
!         return self._list(self.sum, list)
! 
!     def statlist(self, list = None):
!         return self._list(self.stat, list)
! 
!     def mtimelist(self, list = None):
!         return self._list(self.mtime, list)
! 
!     def sizelist(self, list = None):
!         return self._list(self.size, list)
! 
!     def infolist(self, list = None):
!         return self._list(self.info, list)
! 
!     def _dict(self, function, list):
!         if list is None:
!             list = self.listfiles()
!         dict = {}
!         for name in list:
!             try:
!                 dict[name] = function(name)
!             except (os.error, IOError):
!                 pass
!         return dict
! 
!     def sumdict(self, list = None):
!         return self.dict(self.sum, list)
! 
!     def sizedict(self, list = None):
!         return self.dict(self.size, list)
! 
!     def mtimedict(self, list = None):
!         return self.dict(self.mtime, list)
! 
!     def statdict(self, list = None):
!         return self.dict(self.stat, list)
! 
!     def infodict(self, list = None):
!         return self._dict(self.info, list)
! 
!     def read(self, name, offset = 0, length = -1):
!         self.checkfile(name)
!         f = open(name)
!         f.seek(offset)
!         if length == 0:
!             data = ''
!         elif length < 0:
!             data = f.read()
!         else:
!             data = f.read(length)
!         f.close()
!         return data
! 
!     def create(self, name):
!         self.check(name)
!         if os.path.exists(name):
!             self.checkfile(name)
!             bname = name + '~'
!             try:
!                 os.unlink(bname)
!             except os.error:
!                 pass
!             os.rename(name, bname)
!         f = open(name, 'w')
!         f.close()
! 
!     def write(self, name, data, offset = 0):
!         self.checkfile(name)
!         f = open(name, 'r+')
!         f.seek(offset)
!         f.write(data)
!         f.close()
! 
!     def mkdir(self, name):
!         self.check(name)
!         os.mkdir(name, 0777)
! 
!     def rmdir(self, name):
!         self.check(name)
!         os.rmdir(name)
  
  
  class FSProxyServer(FSProxyLocal, server.Server):
! 
!     def __init__(self, address, verbose = server.VERBOSE):
!         FSProxyLocal.__init__(self)
!         server.Server.__init__(self, address, verbose)
! 
!     def _close(self):
!         server.Server._close(self)
!         FSProxyLocal._close(self)
! 
!     def _serve(self):
!         server.Server._serve(self)
!         # Retreat into start directory
!         while self._dirstack: self.back()
  
  
  class FSProxyClient(client.Client):
! 
!     def __init__(self, address, verbose = client.VERBOSE):
!         client.Client.__init__(self, address, verbose)
  
  
  def test():
!     import string
!     import sys
!     if sys.argv[1:]:
!         port = string.atoi(sys.argv[1])
!     else:
!         port = 4127
!     proxy = FSProxyServer(('', port))
!     proxy._serverloop()
  
  
  if __name__ == '__main__':
!     test()

Index: client.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Demo/pdist/client.py,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** client.py	12 Feb 2004 17:35:02 -0000	1.5
--- client.py	18 Jul 2004 05:56:08 -0000	1.6
***************
*** 13,128 ****
  
  class Client:
! 	
! 	"""RPC Client class.  No need to derive a class -- it's fully generic."""
! 	
! 	def __init__(self, address, verbose = VERBOSE):
! 		self._pre_init(address, verbose)
! 		self._post_init()
! 	
! 	def _pre_init(self, address, verbose = VERBOSE):
! 		if type(address) == type(0):
! 			address = ('', address)
! 		self._address = address
! 		self._verbose = verbose
! 		if self._verbose: print "Connecting to %s ..." % repr(address)
! 		self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
! 		self._socket.connect(address)
! 		if self._verbose: print "Connected."
! 		self._lastid = 0 # Last id for which a reply has been received
! 		self._nextid = 1 # Id of next request
! 		self._replies = {} # Unprocessed replies
! 		self._rf = self._socket.makefile('r')
! 		self._wf = self._socket.makefile('w')
! 	
! 	def _post_init(self):
! 		self._methods = self._call('.methods')
! 	
! 	def __del__(self):
! 		self._close()
! 	
! 	def _close(self):
! 		if self._rf: self._rf.close()
! 		self._rf = None
! 		if self._wf: self._wf.close()
! 		self._wf = None
! 		if self._socket: self._socket.close()
! 		self._socket = None
! 	
! 	def __getattr__(self, name):
! 		if name in self._methods:
! 			method = _stub(self, name)
! 			setattr(self, name, method) # XXX circular reference
! 			return method
! 		raise AttributeError, name
! 	
! 	def _setverbose(self, verbose):
! 		self._verbose = verbose
! 	
! 	def _call(self, name, *args):
! 		return self._vcall(name, args)
! 	
! 	def _vcall(self, name, args):
! 		return self._recv(self._vsend(name, args))
! 	
! 	def _send(self, name, *args):
! 		return self._vsend(name, args)
! 	
! 	def _send_noreply(self, name, *args):
! 		return self._vsend(name, args, 0)
! 	
! 	def _vsend_noreply(self, name, args):
! 		return self._vsend(name, args, 0)
! 	
! 	def _vsend(self, name, args, wantreply = 1):
! 		id = self._nextid
! 		self._nextid = id+1
! 		if not wantreply: id = -id
! 		request = (name, args, id)
! 		if self._verbose > 1: print "sending request: %s" % repr(request)
! 		wp = pickle.Pickler(self._wf)
! 		wp.dump(request)
! 		return id
! 	
! 	def _recv(self, id):
! 		exception, value, rid = self._vrecv(id)
! 		if rid != id:
! 			raise RuntimeError, "request/reply id mismatch: %d/%d" % (id, rid)
! 		if exception is None:
! 			return value
! 		x = exception
! 		if hasattr(__builtin__, exception):
! 			x = getattr(__builtin__, exception)
! 		elif exception in ('posix.error', 'mac.error'):
! 			x = os.error
! 		if x == exception:
! 			exception = x
! 		raise exception, value		
! 	
! 	def _vrecv(self, id):
! 		self._flush()
! 		if self._replies.has_key(id):
! 			if self._verbose > 1: print "retrieving previous reply, id = %d" % id
! 			reply = self._replies[id]
! 			del self._replies[id]
! 			return reply
! 		aid = abs(id)
! 		while 1:
! 			if self._verbose > 1: print "waiting for reply, id = %d" % id
! 			rp = pickle.Unpickler(self._rf)
! 			reply = rp.load()
! 			del rp
! 			if self._verbose > 1: print "got reply: %s" % repr(reply)
! 			rid = reply[2]
! 			arid = abs(rid)
! 			if arid == aid:
! 				if self._verbose > 1: print "got it"
! 				return reply
! 			self._replies[rid] = reply
! 			if arid > aid:
! 				if self._verbose > 1: print "got higher id, assume all ok"
! 				return (None, None, id)
! 	
! 	def _flush(self):
! 		self._wf.flush()
  
  
--- 13,128 ----
  
  class Client:
! 
!     """RPC Client class.  No need to derive a class -- it's fully generic."""
! 
!     def __init__(self, address, verbose = VERBOSE):
!         self._pre_init(address, verbose)
!         self._post_init()
! 
!     def _pre_init(self, address, verbose = VERBOSE):
!         if type(address) == type(0):
!             address = ('', address)
!         self._address = address
!         self._verbose = verbose
!         if self._verbose: print "Connecting to %s ..." % repr(address)
!         self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
!         self._socket.connect(address)
!         if self._verbose: print "Connected."
!         self._lastid = 0 # Last id for which a reply has been received
!         self._nextid = 1 # Id of next request
!         self._replies = {} # Unprocessed replies
!         self._rf = self._socket.makefile('r')
!         self._wf = self._socket.makefile('w')
! 
!     def _post_init(self):
!         self._methods = self._call('.methods')
! 
!     def __del__(self):
!         self._close()
! 
!     def _close(self):
!         if self._rf: self._rf.close()
!         self._rf = None
!         if self._wf: self._wf.close()
!         self._wf = None
!         if self._socket: self._socket.close()
!         self._socket = None
! 
!     def __getattr__(self, name):
!         if name in self._methods:
!             method = _stub(self, name)
!             setattr(self, name, method) # XXX circular reference
!             return method
!         raise AttributeError, name
! 
!     def _setverbose(self, verbose):
!         self._verbose = verbose
! 
!     def _call(self, name, *args):
!         return self._vcall(name, args)
! 
!     def _vcall(self, name, args):
!         return self._recv(self._vsend(name, args))
! 
!     def _send(self, name, *args):
!         return self._vsend(name, args)
! 
!     def _send_noreply(self, name, *args):
!         return self._vsend(name, args, 0)
! 
!     def _vsend_noreply(self, name, args):
!         return self._vsend(name, args, 0)
! 
!     def _vsend(self, name, args, wantreply = 1):
!         id = self._nextid
!         self._nextid = id+1
!         if not wantreply: id = -id
!         request = (name, args, id)
!         if self._verbose > 1: print "sending request: %s" % repr(request)
!         wp = pickle.Pickler(self._wf)
!         wp.dump(request)
!         return id
! 
!     def _recv(self, id):
!         exception, value, rid = self._vrecv(id)
!         if rid != id:
!             raise RuntimeError, "request/reply id mismatch: %d/%d" % (id, rid)
!         if exception is None:
!             return value
!         x = exception
!         if hasattr(__builtin__, exception):
!             x = getattr(__builtin__, exception)
!         elif exception in ('posix.error', 'mac.error'):
!             x = os.error
!         if x == exception:
!             exception = x
!         raise exception, value
! 
!     def _vrecv(self, id):
!         self._flush()
!         if self._replies.has_key(id):
!             if self._verbose > 1: print "retrieving previous reply, id = %d" % id
!             reply = self._replies[id]
!             del self._replies[id]
!             return reply
!         aid = abs(id)
!         while 1:
!             if self._verbose > 1: print "waiting for reply, id = %d" % id
!             rp = pickle.Unpickler(self._rf)
!             reply = rp.load()
!             del rp
!             if self._verbose > 1: print "got reply: %s" % repr(reply)
!             rid = reply[2]
!             arid = abs(rid)
!             if arid == aid:
!                 if self._verbose > 1: print "got it"
!                 return reply
!             self._replies[rid] = reply
!             if arid > aid:
!                 if self._verbose > 1: print "got higher id, assume all ok"
!                 return (None, None, id)
! 
!     def _flush(self):
!         self._wf.flush()
  
  
***************
*** 132,158 ****
  class SecureClient(Client, Security):
  
! 	def __init__(self, *args):
! 		import string
! 		apply(self._pre_init, args)
! 		Security.__init__(self)
! 		self._wf.flush()
! 		line = self._rf.readline()
! 		challenge = string.atoi(string.strip(line))
! 		response = self._encode_challenge(challenge)
! 		line = repr(long(response))
! 		if line[-1] in 'Ll': line = line[:-1]
! 		self._wf.write(line + '\n')
! 		self._wf.flush()
! 		self._post_init()
  
  class _stub:
- 	
- 	"""Helper class for Client -- each instance serves as a method of the client."""
- 	
- 	def __init__(self, client, name):
- 		self._client = client
- 		self._name = name
- 	
- 	def __call__(self, *args):
- 		return self._client._vcall(self._name, args)
  
--- 132,157 ----
  class SecureClient(Client, Security):
  
!     def __init__(self, *args):
!         import string
!         apply(self._pre_init, args)
!         Security.__init__(self)
!         self._wf.flush()
!         line = self._rf.readline()
!         challenge = string.atoi(string.strip(line))
!         response = self._encode_challenge(challenge)
!         line = repr(long(response))
!         if line[-1] in 'Ll': line = line[:-1]
!         self._wf.write(line + '\n')
!         self._wf.flush()
!         self._post_init()
  
  class _stub:
  
+     """Helper class for Client -- each instance serves as a method of the client."""
+ 
+     def __init__(self, client, name):
+         self._client = client
+         self._name = name
+ 
+     def __call__(self, *args):
+         return self._client._vcall(self._name, args)

Index: cmdfw.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Demo/pdist/cmdfw.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** cmdfw.py	12 Feb 2004 17:35:02 -0000	1.3
--- cmdfw.py	18 Jul 2004 05:56:08 -0000	1.4
***************
*** 4,144 ****
  class CommandFrameWork:
  
! 	"""Framework class for command line interfaces like CVS.
  
! 	The general command line structure is
  
! 		command [flags] subcommand [subflags] [argument] ...
  
! 	There's a class variable GlobalFlags which specifies the
! 	global flags options.  Subcommands are defined by defining
! 	methods named do_<subcommand>.  Flags for the subcommand are
! 	defined by defining class or instance variables named
! 	flags_<subcommand>.  If there's no command, method default()
! 	is called.  The __doc__ strings for the do_ methods are used
! 	for the usage message, printed after the general usage message
! 	which is the class variable UsageMessage.  The class variable
! 	PostUsageMessage is printed after all the do_ methods' __doc__
! 	strings.  The method's return value can be a suggested exit
! 	status.  [XXX Need to rewrite this to clarify it.]
  
! 	Common usage is to derive a class, instantiate it, and then call its
! 	run() method; by default this takes its arguments from sys.argv[1:].
! 	"""
  
! 	UsageMessage = \
! 	  "usage: (name)s [flags] subcommand [subflags] [argument] ..."
  
! 	PostUsageMessage = None
  
! 	GlobalFlags = ''
  
! 	def __init__(self):
! 		"""Constructor, present for completeness."""
! 		pass
  
! 	def run(self, args = None):
! 		"""Process flags, subcommand and options, then run it."""
! 		import getopt, sys
! 		if args is None: args = sys.argv[1:]
! 		try:
! 			opts, args = getopt.getopt(args, self.GlobalFlags)
! 		except getopt.error, msg:
! 			return self.usage(msg)
! 		self.options(opts)
! 		if not args:
! 			self.ready()
! 			return self.default()
! 		else:
! 			cmd = args[0]
! 			mname = 'do_' + cmd
! 			fname = 'flags_' + cmd
! 			try:
! 				method = getattr(self, mname)
! 			except AttributeError:
! 				return self.usage("command %r unknown" % (cmd,))
! 			try:
! 				flags = getattr(self, fname)
! 			except AttributeError:
! 				flags = ''
! 			try:
! 				opts, args = getopt.getopt(args[1:], flags)
! 			except getopt.error, msg:
! 				return self.usage(
! 					"subcommand %s: " % cmd + str(msg))
! 			self.ready()
! 			return method(opts, args)
  
! 	def options(self, opts):
! 		"""Process the options retrieved by getopt.
! 		Override this if you have any options."""
! 		if opts:
! 			print "-"*40
! 			print "Options:"
! 			for o, a in opts:
! 				print 'option', o, 'value', repr(a)
! 			print "-"*40
  
! 	def ready(self):
! 		"""Called just before calling the subcommand."""
! 		pass
  
! 	def usage(self, msg = None):
! 		"""Print usage message.  Return suitable exit code (2)."""
! 		if msg: print msg
! 		print self.UsageMessage % {'name': self.__class__.__name__}
! 		docstrings = {}
! 		c = self.__class__
! 		while 1:
! 			for name in dir(c):
! 				if name[:3] == 'do_':
! 					if docstrings.has_key(name):
! 						continue
! 					try:
! 						doc = getattr(c, name).__doc__
! 					except:
! 						doc = None
! 					if doc:
! 						docstrings[name] = doc
! 			if not c.__bases__:
! 				break
! 			c = c.__bases__[0]
! 		if docstrings:
! 			print "where subcommand can be:"
! 			names = docstrings.keys()
! 			names.sort()
! 			for name in names:
! 				print docstrings[name]
! 		if self.PostUsageMessage:
! 			print self.PostUsageMessage
! 		return 2
  
! 	def default(self):
! 		"""Default method, called when no subcommand is given.
! 		You should always override this."""
! 		print "Nobody expects the Spanish Inquisition!"
  
  
  def test():
! 	"""Test script -- called when this module is run as a script."""
! 	import sys
! 	class Hello(CommandFrameWork):
! 		def do_hello(self, opts, args):
! 			"hello -- print 'hello world', needs no arguments"
! 			print "Hello, world"
! 	x = Hello()
! 	tests = [
! 		[],
! 		['hello'],
! 		['spam'],
! 		['-x'],
! 		['hello', '-x'],
! 		None,
! 		]
! 	for t in tests:
! 		print '-'*10, t, '-'*10
! 		sts = x.run(t)
! 		print "Exit status:", repr(sts)
  
  
  if __name__ == '__main__':
! 	test()
--- 4,144 ----
  class CommandFrameWork:
  
!     """Framework class for command line interfaces like CVS.
  
!     The general command line structure is
  
!             command [flags] subcommand [subflags] [argument] ...
  
!     There's a class variable GlobalFlags which specifies the
!     global flags options.  Subcommands are defined by defining
!     methods named do_<subcommand>.  Flags for the subcommand are
!     defined by defining class or instance variables named
!     flags_<subcommand>.  If there's no command, method default()
!     is called.  The __doc__ strings for the do_ methods are used
!     for the usage message, printed after the general usage message
!     which is the class variable UsageMessage.  The class variable
!     PostUsageMessage is printed after all the do_ methods' __doc__
!     strings.  The method's return value can be a suggested exit
!     status.  [XXX Need to rewrite this to clarify it.]
  
!     Common usage is to derive a class, instantiate it, and then call its
!     run() method; by default this takes its arguments from sys.argv[1:].
!     """
  
!     UsageMessage = \
!       "usage: (name)s [flags] subcommand [subflags] [argument] ..."
  
!     PostUsageMessage = None
  
!     GlobalFlags = ''
  
!     def __init__(self):
!         """Constructor, present for completeness."""
!         pass
  
!     def run(self, args = None):
!         """Process flags, subcommand and options, then run it."""
!         import getopt, sys
!         if args is None: args = sys.argv[1:]
!         try:
!             opts, args = getopt.getopt(args, self.GlobalFlags)
!         except getopt.error, msg:
!             return self.usage(msg)
!         self.options(opts)
!         if not args:
!             self.ready()
!             return self.default()
!         else:
!             cmd = args[0]
!             mname = 'do_' + cmd
!             fname = 'flags_' + cmd
!             try:
!                 method = getattr(self, mname)
!             except AttributeError:
!                 return self.usage("command %r unknown" % (cmd,))
!             try:
!                 flags = getattr(self, fname)
!             except AttributeError:
!                 flags = ''
!             try:
!                 opts, args = getopt.getopt(args[1:], flags)
!             except getopt.error, msg:
!                 return self.usage(
!                         "subcommand %s: " % cmd + str(msg))
!             self.ready()
!             return method(opts, args)
  
!     def options(self, opts):
!         """Process the options retrieved by getopt.
!         Override this if you have any options."""
!         if opts:
!             print "-"*40
!             print "Options:"
!             for o, a in opts:
!                 print 'option', o, 'value', repr(a)
!             print "-"*40
  
!     def ready(self):
!         """Called just before calling the subcommand."""
!         pass
  
!     def usage(self, msg = None):
!         """Print usage message.  Return suitable exit code (2)."""
!         if msg: print msg
!         print self.UsageMessage % {'name': self.__class__.__name__}
!         docstrings = {}
!         c = self.__class__
!         while 1:
!             for name in dir(c):
!                 if name[:3] == 'do_':
!                     if docstrings.has_key(name):
!                         continue
!                     try:
!                         doc = getattr(c, name).__doc__
!                     except:
!                         doc = None
!                     if doc:
!                         docstrings[name] = doc
!             if not c.__bases__:
!                 break
!             c = c.__bases__[0]
!         if docstrings:
!             print "where subcommand can be:"
!             names = docstrings.keys()
!             names.sort()
!             for name in names:
!                 print docstrings[name]
!         if self.PostUsageMessage:
!             print self.PostUsageMessage
!         return 2
  
!     def default(self):
!         """Default method, called when no subcommand is given.
!         You should always override this."""
!         print "Nobody expects the Spanish Inquisition!"
  
  
  def test():
!     """Test script -- called when this module is run as a script."""
!     import sys
!     class Hello(CommandFrameWork):
!         def do_hello(self, opts, args):
!             "hello -- print 'hello world', needs no arguments"
!             print "Hello, world"
!     x = Hello()
!     tests = [
!             [],
!             ['hello'],
!             ['spam'],
!             ['-x'],
!             ['hello', '-x'],
!             None,
!             ]
!     for t in tests:
!         print '-'*10, t, '-'*10
!         sts = x.run(t)
!         print "Exit status:", repr(sts)
  
  
  if __name__ == '__main__':
!     test()














More information about the Python-checkins mailing list