3 import gdata.spreadsheet.text_db
4 import gdata.spreadsheet.service
9 def get_key_for_dbname(gd_client, dbname):
10 feed = gd_client.GetSpreadsheetsFeed()
11 for i, entry in enumerate(feed.entry):
12 if entry.title.text == dbname:
13 # get key for this db.
14 return feed.entry[i].id.text.rsplit('/', 1)[1]
17 def get_worksheet_for_key(gd_client, key, sheetname):
18 feed = gd_client.GetWorksheetsFeed(key)
19 for i, entry in enumerate(feed.entry):
20 if entry.title.text == sheetname:
21 # get id for worksheet
22 return feed.entry[i].id.text.rsplit('/', 1)[1]
26 def get_row_for_update(gd_client, key, wksht_id, date):
27 feed = gd_client.GetListFeed(key, wksht_id)
28 for i, entry in enumerate(feed.entry):
29 #print entry.custom['date'].text
30 if date in entry.custom['date'].text:
32 for k in entry.custom: e[k] = entry.custom[k].text
37 def update_row(gd_client, key, wksht_id, index, row_data):
38 feed = gd_client.GetListFeed(key, wksht_id)
39 entry = gd_client.UpdateRow( feed.entry[index], row_data)
40 if isinstance(entry, gdata.spreadsheet.SpreadsheetsList):
44 def get_db(client, name):
45 db_list = client.GetDatabases(name=name)
47 db = client.CreateDatabase(name)
52 def get_table(db, table_name, type_list=None):
54 table_list = db.GetTables(name=table_name)
58 if len(table_list) == 0:
59 table = db.CreateTable(table_name, type_list)
65 def add_record(table, data):
66 row = table.AddRecord(data)
70 from optparse import OptionParser
71 parser = OptionParser()
73 parser.set_defaults(database="MonitorStats",
75 labels="date,good,offline,down,online,disabled,failboot,safeboot",
83 parser.add_option("", "--email", dest="email", help="")
84 parser.add_option("", "--password", dest="password", help="")
85 parser.add_option("", "--database", dest="database", help="")
86 parser.add_option("", "--create", dest="create", action="store_true", help="")
87 parser.add_option("", "--sheet", dest="sheet", help="")
88 parser.add_option("", "--labels", dest="labels", help="")
89 parser.add_option("", "--values", dest="values", help="")
90 parser.add_option("", "--valuelist", dest="valuelist", help="")
91 parser.add_option("", "--update", dest="update", help="")
92 parser.add_option("", "--prefix", dest="prefix", help="add a prefix to numeric headers")
94 (config, args) = parser.parse_args()
95 if len(sys.argv) == 1:
100 password = config.password
101 client = gdata.spreadsheet.text_db.DatabaseClient(email, password)
102 gd_client = gdata.spreadsheet.service.SpreadsheetsService() # text_db.DatabaseClient(email, password)
103 gd_client.email = email
104 gd_client.password = password
105 gd_client.source = "add-record-1"
106 gd_client.ProgrammaticLogin()
109 config.labels = config.labels.split(',')
110 config.labels = [config.labels[0] ] + [ config.prefix + l for l in config.labels[1:] ]
114 config.values = config.values.replace("+", " ")
115 config.values = config.values.split(',')
116 data_list = [dict(zip(config.labels, config.values))]
119 elif config.valuelist:
120 vl_file = open(config.valuelist, 'r')
123 values = line.split(',')
124 data_list.append(dict(zip(config.labels, values)))
127 key = get_key_for_dbname(gd_client, config.database)
128 wksht_id = get_worksheet_for_key(gd_client, key, config.sheet)
129 (index, row_data) = get_row_for_update(gd_client, key, wksht_id, config.update)
130 if index == 0 : print "failed to find row!"; sys.exit(1)
131 # update values from command-line over existing values from row
132 row_data.update( dict(zip(config.labels, config.values)) )
133 update_row(gd_client, key, wksht_id, index, row_data)
136 db = get_db(client, config.database)
137 table = get_table(db, config.sheet, config.labels)
138 for data in data_list:
139 print "Adding data: %s" % data
140 add_record(table, data)
142 # obj = simplejson.load(sys.stdin)
147 # data = dict(zip(config.labels.split(','), config.values.split(',')))
148 # add_record(table, data)
149 # #add_record(config, o, sheet)
151 if __name__ == '__main__':