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: |