comparison upreckon/files.py @ 174:e0b2fbd7ebe0

Improved built-in output validator; added conf. var. binary The built-in output validator now reads blocks rather than lines, which should make it faster. There is also a new configuration variable called binary, which defaults to False and specifies whether the built-in output validator should not try to translate line breaks. Finally, when binary is false, the built-in output validator now translates line breaks even if it the reference output is in a tape archive.
author Oleg Oshmyan <chortos@inbox.lv>
date Sat, 18 Jun 2011 02:55:17 +0100
parents f8041e1e4d0d
children 0d657576b1ac
comparison
equal deleted inserted replaced
170:b993d9257400 174:e0b2fbd7ebe0
58 def extract(self, name, target): 58 def extract(self, name, target):
59 member = self.file.getmember(name) 59 member = self.file.getmember(name)
60 member.name = target 60 member.name = target
61 self.file.extract(member) 61 self.file.extract(member)
62 62
63 # TODO: somehow automagically emulate universal line break support
64 def open(self, name): 63 def open(self, name):
65 return self.file.extractfile(name) 64 return self.file.extractfile(name)
66 65
67 def exists(self, queried_name): 66 def exists(self, queried_name):
68 if not hasattr(self, '_namelist'): 67 if not hasattr(self, '_namelist'):
115 else: 114 else:
116 member.filename = os.path.relpath(target) 115 member.filename = os.path.relpath(target)
117 self.file.extract(member) 116 self.file.extract(member)
118 117
119 def open(self, name): 118 def open(self, name):
120 return self.file.open(name, 'rU') 119 return self.file.open(name, 'r')
121 120
122 def exists(self, queried_name): 121 def exists(self, queried_name):
123 if not hasattr(self, '_namelist'): 122 if not hasattr(self, '_namelist'):
124 names = set() 123 names = set()
125 for name in self.file.namelist(): 124 for name in self.file.namelist():
230 if hasattr(file, '__exit__'): 229 if hasattr(file, '__exit__'):
231 return file 230 return file
232 else: 231 else:
233 return contextlib.closing(file) 232 return contextlib.closing(file)
234 else: 233 else:
235 return open(self.real_path, 'rU') 234 return open(self.real_path, 'rb')
236 235
237 def copy(self, target): 236 def copy(self, target):
238 if self.archive: 237 if self.archive:
239 self.archive.extract(self.real_path, target) 238 self.archive.extract(self.real_path, target)
240 else: 239 else: