def do_fallback(fallback_servers, base_path, path_info): _, ext = os.path.splitext(path_info) path_info = path_info.lstrip("/") path_info, action_tuples = parse_action_tuples(path_info) path_info = path_info + ext if ".." in path_info: return (False, "bad path") fallback_url = match_fallback(fallback_servers, path_info) if not fallback_url: return (False, "no matching fallback") output_file = os.path.join(base_path, path_info) if not os.path.lexists(output_file): o = urllib.URLopener() try: (tmpfn, httpmsg) = o.retrieve(fallback_url) makedirs(os.path.dirname(output_file)) shutil.move(tmpfn, output_file) return (True, tmpfn) except IOError, e: return (False, (e, (fallback_url, output_file)))
def test(self): self.assertEqual( ("c05-v2-final-orioles-12-x-large", []), utils.parse_action_tuples("c05-v2-final-orioles-12-x-large") ) self.assertEqual( ("c05-v2-final-orioles-12-x-large", [("r", "100x100")]), utils.parse_action_tuples( "c05-v2-final-orioles-12-x-large_r100x100" ) ) self.assertEqual( ("final-orioles-12-x-large", [("r", "100x100")]), utils.parse_action_tuples("final-orioles-12-x-large_r100x100") ) self.assertEqual( ("foo_bar", []), utils.parse_action_tuples("foo_bar") ) self.assertEqual( ("foo_bar", [("r", "100")]), utils.parse_action_tuples("foo_bar_r100") ) self.assertEqual( ("c1088", []), utils.parse_action_tuples("c1088") ) self.assertEqual( ("c1088-1_1", []), utils.parse_action_tuples("c1088-1_1") ) self.assertEqual( ("c1088", [("c", "0-0-100-100")]), utils.parse_action_tuples("c1088_c0-0-100-100") )