local storage and google docs finished
diff --git a/config.py b/config.py
index 26e9800..57888c3 100644
--- a/config.py
+++ b/config.py
@@ -3,4 +3,5 @@
WORK_SHEET = "Worksheet"
COL_COUNT = 2
ROW_COUNT = 10
-DEFAULT_FILE_PATH="test.json"
+DEFAULT_FILE_PATH = "test.json"
+OUTPUT_FILE = "output.json"
diff --git a/make_report.py b/make_report.py
index 0dd363d..eb99ae8 100644
--- a/make_report.py
+++ b/make_report.py
@@ -2,9 +2,9 @@
import argparse
import json
-from config import DEFAULT_FILE_PATH, PASSWORD, EMAIL, \
- WORK_SHEET, DOCUMENT_ID, ROW_COUNT
-from gspread.exceptions import WorksheetNotFound
+from config import DEFAULT_FILE_PATH, \
+ WORK_SHEET, DOCUMENT_ID, ROW_COUNT, OUTPUT_FILE
+from storage_api import DiskStorage, GoogleDocsStorage, get_work_sheet, append_row
def load_data(file_name):
@@ -14,39 +14,6 @@
#getting worksheet from sheet or create it with specified column names.
-def get_work_sheet(sheet, name, column_names):
- try:
- work_sheet = sheet.worksheet(name)
- except WorksheetNotFound:
- work_sheet = sheet.add_worksheet(title=name, rows=ROW_COUNT,
- cols=max(40, len(column_names)))
-
- for i in range(1, len(column_names) + 1):
- work_sheet.update_cell(1, i, column_names[i - 1])
-
- return work_sheet
-
-
-def get_row_number(work_sheet):
- num = 2
-
- while num < work_sheet.row_count and work_sheet.cell(num, 1).value != "":
- num += 1
-
- if num == work_sheet.row_count:
- work_sheet.append_row(["" for x in range(work_sheet.col_count)])
-
- return num
-
-
-def append_row(work_sheet, row):
- row_number = get_row_number(work_sheet)
-
- i = 1
- for k in row.keys():
- work_sheet.update_cell(row_number, i, row[k])
- i += 1
-
def make_report(email, password, data):
gc = gspread.login(email, password)
@@ -56,9 +23,15 @@
append_row(work_sheet, data)
-def main(file_name, email, password):
+def main(file_name, email, password, mode):
data = load_data(file_name)
- make_report(email, password, data)
+
+ if mode == 'local':
+ storage = DiskStorage(OUTPUT_FILE)
+ else:
+ storage = GoogleDocsStorage(DOCUMENT_ID, WORK_SHEET, email, password)
+
+ storage.store(data)
if __name__ == '__main__':
@@ -70,8 +43,7 @@
parser.add_argument('-p', '--password', help='user password',
default="1234")
parser.add_argument('-m', '--mode', help='mode type local or global',
- default=DEFAULT_FILE_PATH)
+ default='local')
results = parser.parse_args()
- print results
- # main(file_name, email, password)
+ main(results.name, results.email, results.password, results.mode)
diff --git a/storage_api.py b/storage_api.py
index 2b571dd..c0a9cb1 100644
--- a/storage_api.py
+++ b/storage_api.py
@@ -1,6 +1,41 @@
-import gspread
-from config import EMAIL, PASSWORD, DOCUMENT_ID, WORK_SHEET
-from make_report import get_work_sheet, append_row
+from gspread import WorksheetNotFound, login
+import json
+import os
+from config import ROW_COUNT
+
+
+def get_work_sheet(sheet, name, column_names):
+ try:
+ work_sheet = sheet.worksheet(name)
+ except WorksheetNotFound:
+ work_sheet = sheet.add_worksheet(title=name, rows=ROW_COUNT,
+ cols=max(40, len(column_names)))
+
+ for i in range(1, len(column_names) + 1):
+ work_sheet.update_cell(1, i, column_names[i - 1])
+
+ return work_sheet
+
+
+def get_row_number(work_sheet):
+ num = 2
+
+ while num < work_sheet.row_count and work_sheet.cell(num, 1).value != "":
+ num += 1
+
+ if num == work_sheet.row_count:
+ work_sheet.append_row(["" for x in range(work_sheet.col_count)])
+
+ return num
+
+
+def append_row(work_sheet, row):
+ row_number = get_row_number(work_sheet)
+
+ i = 1
+ for k in row.keys():
+ work_sheet.update_cell(row_number, i, row[k])
+ i += 1
class Measurement(object):
@@ -14,9 +49,17 @@
class Storage(object):
+ def store(self, data):
+ pass
- def __init__(self, email, password, doc_id, work_sheet_name):
- self.gc = gspread.login(email, password)
+ def retrieve(self, id):
+ pass
+
+
+class GoogleDocsStorage(Storage):
+
+ def __init__(self, doc_id, work_sheet_name, email=None, password=None):
+ self.gc = login(email, password)
self.sh = self.gc.open_by_key(doc_id)
self.work_sheet = get_work_sheet(self.sh, work_sheet_name, 40)
@@ -29,12 +72,9 @@
if row_number != -1:
vals = self.work_sheet.row_values(row_number)
m = Measurement()
- m.build = vals["build_id"]
- del vals["build_id"]
- m.build_type = vals["type"]
- del vals["type"]
- m.md5 = vals["iso_md5"]
- del vals["iso_md5"]
+ m.build = vals.pop("build_id")
+ m.build_type = vals.pop("type")
+ m.md5 = vals.pop("iso_md5")
m.results = {k: vals[k] for k in vals.keys()}
else:
return None
@@ -47,3 +87,36 @@
return -1
+class DiskStorage(Storage):
+ def __init__(self, file_name):
+ self.file_name = file_name
+
+ if not os.path.exists(file_name):
+ with open(file_name, "w+") as f:
+ f.write(json.dumps([]))
+
+ def store(self, data):
+ with open(self.file_name, "rt") as f:
+ raw_data = f.read()
+ document = json.loads(raw_data)
+ document.append(data)
+
+ with open(self.file_name, "w+") as f:
+ f.write(json.dumps(document))
+
+ def retrieve(self, id):
+ with open(self.file_name, "rt") as f:
+ raw_data = f.read()
+ document = json.loads(raw_data)
+
+ for row in document:
+ if row["build_id"] == id:
+ m = Measurement()
+ m.build = row.pop("build_id")
+ m.build_type = row.pop("type")
+ m.md5 = row.pop("iso_md5")
+ m.results = {k: row[k] for k in row.keys()}
+
+ return m
+ return None
+