scripts/dtrx

branch
trunk
changeset 125
c4495fc7d00d
parent 123
8570c14304bb
equal deleted inserted replaced
124:19c34f5fc8eb 125:c4495fc7d00d
36 import sys 36 import sys
37 import tempfile 37 import tempfile
38 import termios 38 import termios
39 import textwrap 39 import textwrap
40 import traceback 40 import traceback
41 import urllib
41 42
42 try: 43 try:
43 set 44 set
44 except NameError: 45 except NameError:
45 from sets import Set as set 46 from sets import Set as set
1077 if error and self.did_list: 1078 if error and self.did_list:
1078 logger.error("lister failed: ignore above listing for %s" % 1079 logger.error("lister failed: ignore above listing for %s" %
1079 (filename,)) 1080 (filename,))
1080 return error 1081 return error
1081 1082
1083 class UrlHandler(urllib.FancyURLopener):
1084 def http_error_default(self, url, fp, errcode, errmsg, headers):
1085 urllib.URLopener.http_error_default(self, url, fp, errcode, errmsg, headers)
1086
1087 def is_url(self, url):
1088 if url.startswith("http://"):
1089 return True
1090
1091 def fetch(self, url):
1092 i = url.rfind('/')
1093 filename = url[i+1:]
1094 try:
1095 self.retrieve(url, filename)
1096 except IOError:
1097 return False, "Failed to fetch "+url
1098 return True, filename
1099
1082 1100
1083 class ExtractorApplication(object): 1101 class ExtractorApplication(object):
1084 def __init__(self, arguments): 1102 def __init__(self, arguments):
1085 for signal_num in (signal.SIGINT, signal.SIGTERM): 1103 for signal_num in (signal.SIGINT, signal.SIGTERM):
1086 signal.signal(signal_num, self.abort) 1104 signal.signal(signal_num, self.abort)
1227 logger.error(' '.join(message)) 1245 logger.error(' '.join(message))
1228 self.show_stderr(logger.error, stderr) 1246 self.show_stderr(logger.error, stderr)
1229 return True 1247 return True
1230 1248
1231 def run(self): 1249 def run(self):
1250 urlhandler = UrlHandler();
1232 if self.options.show_list: 1251 if self.options.show_list:
1233 action = ListAction 1252 action = ListAction
1234 else: 1253 else:
1235 action = ExtractionAction 1254 action = ExtractionAction
1236 self.action = action(self.options, self.archives.values()[0]) 1255 self.action = action(self.options, self.archives.values()[0])
1237 while self.archives: 1256 while self.archives:
1238 self.current_directory, self.filenames = self.archives.popitem() 1257 self.current_directory, self.filenames = self.archives.popitem()
1239 os.chdir(self.current_directory) 1258 os.chdir(self.current_directory)
1240 for filename in self.filenames: 1259 for filename in self.filenames:
1260 if urlhandler.is_url(filename):
1261 error, filename = urlhandler.fetch(filename)
1241 builder = ExtractorBuilder(filename, self.options) 1262 builder = ExtractorBuilder(filename, self.options)
1242 error = (self.check_file(filename) or 1263 error = (self.check_file(filename) or
1243 self.try_extractors(filename, builder.get_extractor())) 1264 self.try_extractors(filename, builder.get_extractor()))
1244 if error: 1265 if error:
1245 if error != True: 1266 if error != True:

mercurial