Blob


1 #!/usr/bin/env python
3 import sys
4 import getopt, sqlite3
6 class ParseMactime():
7 def __init__(self, verboseFlag):
8 self.db_name = "timeline.db"
9 self.conn = None
10 self.cursor = None
11 self.verbose = verboseFlag
13 def connect_to_db(self):
14 self.conn = sqlite3.connect(self.db_name)
15 self.cursor = self.conn.cursor()
16 self.conn.text_factory = str
18 def clear_tables(self):
19 # Clean all tables
20 try:
21 self.cursor.execute("DROP TABLE tl")
22 except sqlite3.OperationalError:
23 print "Warning >>> Nothing to clean."
24 # Date,Size,Type,Mode,UID,GID,Meta,File Name
25 self.cursor.execute("""CREATE TABLE tl (
26 datum TEXT,
27 size INT,
28 type TEXT,
29 mode TEXT,
30 uid TEXT,
31 gid TEXT,
32 meta TEXT,
33 file TEXT)
34 """)
36 self.conn.commit()
37 print "Info >>> Initalized table(s)"
39 def parse_csv(self, fileName):
40 try:
41 f = open(fileName)
42 except Exception:
43 print ">>> Cannot open file %s" % fileName
44 sys.exit(1)
46 for l in f:
47 l = l.strip()
48 if len(l) <= 0:
49 continue
50 sl = l.split(',')
52 # Comma delimited mactime file has always 8 entries. If we detect
53 # more than 8, we have commas in the filename
54 if len(sl) > 8:
55 sl[7] = "".join(sl[7:])
56 if self.verbose:
57 print ">>> Found bogus entry with length %d, shorten it to 8: %s" % (len(sl), sl[7])
59 try:
60 date = sl[0]
61 size = int(sl[1])
62 ftype = sl[2]
63 mode = sl[3]
64 uid = sl[4]
65 gid = sl[5]
66 meta = sl[6]
67 fname = sl[7]
68 except IndexError as e:
69 print ">>> Parsing error: %s" % str(e)
70 continue
72 query = "INSERT INTO tl VALUES (?,?,?,?,?,?,?,?)"
73 values = (date,size,ftype,mode,uid,gid,meta,fname)
74 self.cursor.execute(query, values)
76 self.conn.commit()
77 f.close()
79 def usage(msg = ""):
80 print "Usage"
81 print
82 print " --initdb - Initialize SQLite database (destroys all data!)"
83 print " --import <csv-file> - Import timeline from CSV file (comma separated)"
84 print
85 print " -v - Be more verbose"
86 print
87 print "%s" % msg
88 sys.exit(1)
90 def main():
91 try:
92 opts, args = getopt.getopt(sys.argv[1:], 'hv',
93 ["import=", "initdb"])
94 except getopt.GetoptError as err:
95 usage(str(err))
97 if len(opts) == 0:
98 usage("")
100 importCsv = ""
101 importCsvF = 0
102 initDB = 0
103 verboseFlag = 0
105 for opt, arg in opts:
106 if opt == '-h':
107 usage("")
108 elif opt == '--import':
109 importCsv = arg
110 importCsvF = 1
111 elif opt == '--initdb':
112 initDB = 1
113 elif opt == '-v':
114 verboseFlag = 1
115 else:
116 usage("Unrecognized Option")
118 p = ParseMactime(verboseFlag)
119 p.connect_to_db()
121 if initDB > 0:
122 p.clear_tables()
123 elif importCsvF > 0:
124 p.parse_csv(importCsv)
126 main()