annotate Demo/pdist/FSProxy.py @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents d6350a318997
children 2bc66f1df7cc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2652
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 """File System Proxy.
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 Provide an OS-neutral view on a file system, locally or remotely.
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 The functionality is geared towards implementing some sort of
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 rdist-like utility between a Mac and a UNIX system.
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 The module defines three classes:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
8
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 FSProxyLocal -- used for local access
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 FSProxyServer -- used on the server side of remote access
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 FSProxyClient -- used on the client side of remote access
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
12
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 The remote classes are instantiated with an IP address and an optional
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 verbosity flag.
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 """
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
16
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 import server
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 import client
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 import md5
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 import os
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 import fnmatch
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 from stat import *
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 import time
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 import fnmatch
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
25
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 if os.name == 'mac':
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 import macfs
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 maxnamelen = 31
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 else:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 macfs = None
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 maxnamelen = 255
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
32
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 skipnames = (os.curdir, os.pardir)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
34
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
35
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 class FSProxyLocal:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
37
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 def __init__(self):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 self._dirstack = []
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 self._ignore = ['*.pyc'] + self._readignore()
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
41
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 def _close(self):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 while self._dirstack:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 self.back()
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
45
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 def _readignore(self):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 file = self._hide('ignore')
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 try:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 f = open(file)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 except IOError:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 file = self._hide('synctree.ignorefiles')
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 try:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 f = open(file)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 except IOError:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 return []
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 ignore = []
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 while 1:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 line = f.readline()
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 if not line: break
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 if line[-1] == '\n': line = line[:-1]
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 ignore.append(line)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 f.close()
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 return ignore
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
64
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 def _hidden(self, name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 if os.name == 'mac':
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 return name[0] == '(' and name[-1] == ')'
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 else:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 return name[0] == '.'
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
70
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 def _hide(self, name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 if os.name == 'mac':
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 return '(%s)' % name
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 else:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 return '.%s' % name
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
76
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 def visible(self, name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 if len(name) > maxnamelen: return 0
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 if name[-1] == '~': return 0
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
80 if name in skipnames: return 0
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 if self._hidden(name): return 0
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
82 head, tail = os.path.split(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
83 if head or not tail: return 0
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
84 if macfs:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 if os.path.exists(name) and not os.path.isdir(name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 try:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 fs = macfs.FSSpec(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
88 c, t = fs.GetCreatorType()
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 if t != 'TEXT': return 0
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
90 except macfs.error, msg:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
91 print "***", name, msg
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
92 return 0
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
93 else:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
94 if os.path.islink(name): return 0
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
95 if '\0' in open(name, 'rb').read(512): return 0
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 for ign in self._ignore:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
97 if fnmatch.fnmatch(name, ign): return 0
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
98 return 1
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
99
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
100 def check(self, name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
101 if not self.visible(name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
102 raise os.error, "protected name %s" % repr(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
103
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
104 def checkfile(self, name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
105 self.check(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
106 if not os.path.isfile(name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
107 raise os.error, "not a plain file %s" % repr(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
108
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
109 def pwd(self):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
110 return os.getcwd()
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
111
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
112 def cd(self, name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
113 self.check(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
114 save = os.getcwd(), self._ignore
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
115 os.chdir(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
116 self._dirstack.append(save)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
117 self._ignore = self._ignore + self._readignore()
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
118
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
119 def back(self):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
120 if not self._dirstack:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
121 raise os.error, "empty directory stack"
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
122 dir, ignore = self._dirstack[-1]
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
123 os.chdir(dir)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 del self._dirstack[-1]
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
125 self._ignore = ignore
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
126
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
127 def _filter(self, files, pat = None):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 if pat:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
129 def keep(name, pat = pat):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
130 return fnmatch.fnmatch(name, pat)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
131 files = filter(keep, files)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
132 files = filter(self.visible, files)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
133 files.sort()
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
134 return files
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
135
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
136 def list(self, pat = None):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
137 files = os.listdir(os.curdir)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
138 return self._filter(files, pat)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
139
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
140 def listfiles(self, pat = None):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
141 files = os.listdir(os.curdir)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
142 files = filter(os.path.isfile, files)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
143 return self._filter(files, pat)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
144
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
145 def listsubdirs(self, pat = None):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
146 files = os.listdir(os.curdir)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
147 files = filter(os.path.isdir, files)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
148 return self._filter(files, pat)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
149
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
150 def exists(self, name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
151 return self.visible(name) and os.path.exists(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
152
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
153 def isdir(self, name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
154 return self.visible(name) and os.path.isdir(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
155
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
156 def islink(self, name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
157 return self.visible(name) and os.path.islink(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
158
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
159 def isfile(self, name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
160 return self.visible(name) and os.path.isfile(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
161
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
162 def sum(self, name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
163 self.checkfile(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
164 BUFFERSIZE = 1024*8
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
165 f = open(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
166 sum = md5.new()
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
167 while 1:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
168 buffer = f.read(BUFFERSIZE)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
169 if not buffer:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
170 break
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
171 sum.update(buffer)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
172 return sum.digest()
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
173
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
174 def size(self, name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
175 self.checkfile(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
176 return os.stat(name)[ST_SIZE]
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
177
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
178 def mtime(self, name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
179 self.checkfile(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
180 return time.localtime(os.stat(name)[ST_MTIME])
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
181
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
182 def stat(self, name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
183 self.checkfile(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
184 size = os.stat(name)[ST_SIZE]
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
185 mtime = time.localtime(os.stat(name)[ST_MTIME])
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
186 return size, mtime
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
187
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
188 def info(self, name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
189 sum = self.sum(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
190 size = os.stat(name)[ST_SIZE]
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
191 mtime = time.localtime(os.stat(name)[ST_MTIME])
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
192 return sum, size, mtime
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
193
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
194 def _list(self, function, list):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
195 if list is None:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
196 list = self.listfiles()
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
197 res = []
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
198 for name in list:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
199 try:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
200 res.append((name, function(name)))
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
201 except (os.error, IOError):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
202 res.append((name, None))
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
203 return res
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
204
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
205 def sumlist(self, list = None):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
206 return self._list(self.sum, list)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
207
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
208 def statlist(self, list = None):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
209 return self._list(self.stat, list)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
210
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
211 def mtimelist(self, list = None):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
212 return self._list(self.mtime, list)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
213
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
214 def sizelist(self, list = None):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
215 return self._list(self.size, list)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
216
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
217 def infolist(self, list = None):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
218 return self._list(self.info, list)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
219
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
220 def _dict(self, function, list):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
221 if list is None:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
222 list = self.listfiles()
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
223 dict = {}
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
224 for name in list:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
225 try:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
226 dict[name] = function(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
227 except (os.error, IOError):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
228 pass
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
229 return dict
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
230
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
231 def sumdict(self, list = None):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
232 return self.dict(self.sum, list)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
233
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
234 def sizedict(self, list = None):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
235 return self.dict(self.size, list)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
236
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
237 def mtimedict(self, list = None):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
238 return self.dict(self.mtime, list)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
239
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
240 def statdict(self, list = None):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
241 return self.dict(self.stat, list)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
242
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
243 def infodict(self, list = None):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
244 return self._dict(self.info, list)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
245
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
246 def read(self, name, offset = 0, length = -1):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
247 self.checkfile(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
248 f = open(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
249 f.seek(offset)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
250 if length == 0:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
251 data = ''
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
252 elif length < 0:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
253 data = f.read()
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
254 else:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
255 data = f.read(length)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
256 f.close()
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
257 return data
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
258
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
259 def create(self, name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
260 self.check(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
261 if os.path.exists(name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
262 self.checkfile(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
263 bname = name + '~'
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
264 try:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
265 os.unlink(bname)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
266 except os.error:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
267 pass
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
268 os.rename(name, bname)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
269 f = open(name, 'w')
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
270 f.close()
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
271
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
272 def write(self, name, data, offset = 0):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
273 self.checkfile(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
274 f = open(name, 'r+')
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
275 f.seek(offset)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
276 f.write(data)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
277 f.close()
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
278
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
279 def mkdir(self, name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
280 self.check(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
281 os.mkdir(name, 0777)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
282
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
283 def rmdir(self, name):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
284 self.check(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
285 os.rmdir(name)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
286
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
287
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
288 class FSProxyServer(FSProxyLocal, server.Server):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
289
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
290 def __init__(self, address, verbose = server.VERBOSE):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
291 FSProxyLocal.__init__(self)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
292 server.Server.__init__(self, address, verbose)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
293
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
294 def _close(self):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
295 server.Server._close(self)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
296 FSProxyLocal._close(self)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
297
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
298 def _serve(self):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
299 server.Server._serve(self)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
300 # Retreat into start directory
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
301 while self._dirstack: self.back()
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
302
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
303
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
304 class FSProxyClient(client.Client):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
305
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
306 def __init__(self, address, verbose = client.VERBOSE):
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
307 client.Client.__init__(self, address, verbose)
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
308
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
309
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
310 def test():
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
311 import string
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
312 import sys
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
313 if sys.argv[1:]:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
314 port = string.atoi(sys.argv[1])
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
315 else:
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
316 port = 4127
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
317 proxy = FSProxyServer(('', port))
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
318 proxy._serverloop()
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
319
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
320
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
321 if __name__ == '__main__':
d6350a318997 commit -- why not
Guido van Rossum <guido@python.org>
parents:
diff changeset
322 test()