16f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato#!/usr/bin/env python2.5 26f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato 36f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onoratoimport cgi 46f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onoratoimport os 56f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onoratoimport shutil 66f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onoratoimport sys 76f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onoratoimport sqlite3 86f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato 96f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe OnoratoSCREENS = 5 106f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe OnoratoCOLUMNS = 4 116f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe OnoratoROWS = 4 12bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson ChungHOTSEAT_SIZE = 5 136f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe OnoratoCELL_SIZE = 110 146f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato 156f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe OnoratoDIR = "db_files" 166f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe OnoratoAUTO_FILE = DIR + "/launcher.db" 176f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe OnoratoINDEX_FILE = DIR + "/index.html" 186f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato 196f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onoratodef usage(): 206f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato print "usage: print_db.py launcher.db -- prints a launcher.db" 216f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato print "usage: print_db.py -- adb pulls a launcher.db from a device" 226f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato print " and prints it" 236f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato print 246f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato print "The dump will be created in a directory called db_files in cwd." 256f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato print "This script will delete any db_files directory you have now" 266f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato 276f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato 286f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onoratodef make_dir(): 296f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato shutil.rmtree(DIR, True) 306f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato os.makedirs(DIR) 316f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato 326f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onoratodef pull_file(fn): 336f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato print "pull_file: " + fn 346f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato rv = os.system("adb pull" 356f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato + " /data/data/com.android.launcher/databases/launcher.db" 366f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato + " " + fn); 376f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato if rv != 0: 386f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato print "adb pull failed" 396f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato sys.exit(1) 406f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato 416f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onoratodef get_favorites(conn): 426f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato c = conn.cursor() 436f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato c.execute("SELECT * FROM favorites") 446f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato columns = [d[0] for d in c.description] 456f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato rows = [] 466f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato for row in c: 476f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato rows.append(row) 486f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato return columns,rows 496f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato 506f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onoratodef print_intent(out, id, i, cell): 516f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato if cell: 526f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato out.write("""<span class="intent" title="%s">shortcut</span>""" % ( 536f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato cgi.escape(cell, True) 546f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato )) 556f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato 566f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato 576f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onoratodef print_icon(out, id, i, cell): 586f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato if cell: 596f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato icon_fn = "icon_%d.png" % id 606f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato out.write("""<img src="%s">""" % ( icon_fn )) 616f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato f = file(DIR + "/" + icon_fn, "w") 626f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato f.write(cell) 636f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato f.close() 646f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato 656f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onoratodef print_cell(out, id, i, cell): 666f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato if not cell is None: 676f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato out.write(cgi.escape(str(cell))) 686f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato 696f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe OnoratoFUNCTIONS = { 706f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato "intent": print_intent, 716f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato "icon": print_icon 726f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato} 736f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato 74bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chungdef render_cell_info(out, cell, occupied): 75bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung if cell is None: 76bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung out.write(" <td width=%d height=%d></td>\n" % 77bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung (CELL_SIZE, CELL_SIZE)) 78bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung elif cell == occupied: 79bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung pass 80bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung else: 81bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung cellX = cell["cellX"] 82bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung cellY = cell["cellY"] 83bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung spanX = cell["spanX"] 84bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung spanY = cell["spanY"] 85bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung intent = cell["intent"] 86bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung if intent: 87bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung title = "title=\"%s\"" % cgi.escape(cell["intent"], True) 88bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung else: 89bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung title = "" 90bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung out.write((" <td colspan=%d rowspan=%d width=%d height=%d" 91bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung + " bgcolor=#dddddd align=center valign=middle %s>") % ( 92bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung spanX, spanY, 93bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung (CELL_SIZE*spanX), (CELL_SIZE*spanY), 94bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung title)) 95bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung itemType = cell["itemType"] 96bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung if itemType == 0: 97bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung out.write("""<img src="icon_%d.png">\n""" % ( cell["_id"] )) 98bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung out.write("<br/>\n") 99bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung out.write(cgi.escape(cell["title"]) + " <br/><i>(app)</i>") 100bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung elif itemType == 1: 101bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung out.write("""<img src="icon_%d.png">\n""" % ( cell["_id"] )) 102bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung out.write("<br/>\n") 103bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung out.write(cgi.escape(cell["title"]) + " <br/><i>(shortcut)</i>") 104bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung elif itemType == 2: 105bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung out.write("""<i>folder</i>""") 106bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung elif itemType == 3: 107bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung out.write("""<i>live folder</i>""") 108bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung elif itemType == 4: 109bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung out.write("<i>widget %d</i><br/>\n" % cell["appWidgetId"]) 110bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung elif itemType == 1000: 111bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung out.write("""<i>clock</i>""") 112bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung elif itemType == 1001: 113bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung out.write("""<i>search</i>""") 114bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung elif itemType == 1002: 115bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung out.write("""<i>photo frame</i>""") 116bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung else: 117bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung out.write("<b>unknown type: %d</b>" % itemType) 118bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung out.write("</td>\n") 119bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung 1206f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onoratodef process_file(fn): 1216f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato print "process_file: " + fn 1226f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato conn = sqlite3.connect(fn) 1236f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato columns,rows = get_favorites(conn) 1246f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato data = [dict(zip(columns,row)) for row in rows] 1256f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato 1266f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato out = file(INDEX_FILE, "w") 1276f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato out.write("""<html> 1286f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato<head> 1296f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato<style type="text/css"> 1306f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato.intent { 1316f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato font-style: italic; 1326f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato} 1336f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato</style> 1346f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato</head> 1356f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato<body> 1366f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato""") 1376f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato 1386f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato # Data table 1396f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato out.write("<b>Favorites table</b><br/>\n") 1406f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato out.write("""<html> 1416f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato<table border=1 cellspacing=0 cellpadding=4> 1426f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato<tr> 1436f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato""") 1446f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato print_functions = [] 1456f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato for col in columns: 1466f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato print_functions.append(FUNCTIONS.get(col, print_cell)) 1476f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato for i in range(0,len(columns)): 1486f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato col = columns[i] 1496f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato out.write(""" <th>%s</th> 1506f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato""" % ( col )) 1516f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato out.write(""" 1526f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato</tr> 1536f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato""") 1546f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato for row in rows: 1556f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato out.write("""<tr> 1566f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato""") 1576f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato for i in range(0,len(row)): 1586f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato cell = row[i] 1596f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato # row[0] is always _id 1606f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato out.write(""" <td>""") 1616f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato print_functions[i](out, row[0], row, cell) 1626f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato out.write("""</td> 1636f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato""") 1646f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato out.write("""</tr> 1656f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato""") 1666f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato out.write("""</table> 1676f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato""") 1686f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato 169bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung # Hotseat 170bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung hotseat = [] 171bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung for i in range(0, HOTSEAT_SIZE): 172bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung hotseat.append(None) 173bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung for row in data: 174bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung if row["container"] != -101: 175bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung continue 176bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung screen = row["screen"] 177bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung hotseat[screen] = row 178bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung out.write("<br/><b>Hotseat</b><br/>\n") 179bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung out.write("<table class=layout border=1 cellspacing=0 cellpadding=4>\n") 180bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung for cell in hotseat: 181bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung render_cell_info(out, cell, None) 182bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung out.write("</table>\n") 183bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung 1846f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato # Pages 1856f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato screens = [] 1866f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato for i in range(0,SCREENS): 1876f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato screen = [] 1886f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato for j in range(0,ROWS): 1896f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato m = [] 1906f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato for k in range(0,COLUMNS): 1916f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato m.append(None) 1926f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato screen.append(m) 1936f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato screens.append(screen) 1946f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato occupied = "occupied" 1956f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato for row in data: 1966f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato screen = screens[row["screen"]] 1976f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato # desktop 1986f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato if row["container"] != -100: 1996f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato continue 2006f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato cellX = row["cellX"] 2016f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato cellY = row["cellY"] 2026f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato spanX = row["spanX"] 2036f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato spanY = row["spanY"] 2046f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato for j in range(cellY, cellY+spanY): 2056f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato for k in range(cellX, cellX+spanX): 2066f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato screen[j][k] = occupied 2076f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato screen[cellY][cellX] = row 2086f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato i=0 2096f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato for screen in screens: 2106f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato out.write("<br/><b>Screen %d</b><br/>\n" % i) 2116f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato out.write("<table class=layout border=1 cellspacing=0 cellpadding=4>\n") 2126f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato for m in screen: 2136f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato out.write(" <tr>\n") 2146f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato for cell in m: 215bfc003a953a3ce509fe0851fa589c31fbc2ba57eWinson Chung render_cell_info(out, cell, occupied) 2166f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato out.write("</tr>\n") 2176f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato out.write("</table>\n") 2186f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato i=i+1 2196f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato 2206f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato out.write(""" 2216f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato</body> 2226f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato</html> 2236f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato""") 2246f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato 2256f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato out.close() 2266f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato 2276f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onoratodef main(argv): 2286f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato if len(argv) == 1: 2296f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato make_dir() 2306f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato pull_file(AUTO_FILE) 2316f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato process_file(AUTO_FILE) 2326f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato elif len(argv) == 2: 2336f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato make_dir() 2346f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato process_file(argv[1]) 2356f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato else: 2366f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato usage() 2376f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato 2386f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onoratoif __name__=="__main__": 2396f9d4bd7c401896814d499d7a5280f91c7ed9d3cJoe Onorato main(sys.argv) 240