RaspberryPi-Security-Camera / SecurityCamera / SpreadSheet.py
SpreadSheet.py
Raw
import gspread
import json
from oauth2client.client import SignedJwtAssertionCredentials
from datetime import date, datetime, timedelta


def initializeParams():
    today = date.today()
    todayDt = int(today.strftime("%d"))
    currentMth = int(today.strftime("%m"))
    currentYr = int(today.strftime("%Y"))

    TotalDays = 0

    def monthName(currentMth):
        if currentMth == 1:
            return 'Jan'
        if currentMth == 2:
            return 'Feb'
        if currentMth == 3:
            return 'Mar'
        if currentMth == 4:
            return 'Apr'
        if currentMth == 5:
            return 'May'
        if currentMth == 6:
            return 'Jun'
        if currentMth == 7:
            return 'Jul'
        if currentMth == 8:
            return 'Aug'
        if currentMth == 9:
            return 'Sep'
        if currentMth == 10:
            return 'Oct'
        if currentMth == 11:
            return 'Nov'
        if currentMth == 12:
            return 'Dec'

    def LeapYearCalc(year):
        # Python program to check if the input year is a leap year or not
        leapYear = 'N'
        # To get year (integer input) from the user
        # year = int(input("Enter a year: "))
        if (year % 4) == 0:
            if (year % 100) == 0:
                if (year % 400) == 0:
                    leapYear = 'Y'
                else:
                    leapYear = 'N'
            else:
                leapYear = 'Y'
        else:
            leapYear = 'N'

        return leapYear

    def genSpSheets(Year, Month, TtlDays, sh):
        for i in range(1, int(TtlDays) + 1, 1):
            ttl = str(Year) + '_' + str(Month) + '_' + str(i)
            worksheet = sh.add_worksheet(title=ttl, rows="1000", cols="6")

    LY = LeapYearCalc(currentYr)

    if (LY == 'Y'):
        if currentMth in (1, 3, 5, 7, 8, 10, 12):
            TotalDays = 31
        elif currentMth == 2:
            TotalDays = 29
        else:
            TotalDays = 30
    else:
        if currentMth in (1, 3, 5, 7, 8, 10, 12):
            TotalDays = 31
        elif currentMth == 2:
            TotalDays = 28
        else:
            TotalDays = 30

    MySpreedSheet = str(monthName(currentMth)) + "_" + str(currentYr) + '_sheet1'

    json_key = json.load(open('/home/pi/SecurityCamera/creds.json'))  # json credentials
    scope = ['https://spreadsheets.google.com/feeds',
             'https://www.googleapis.com/auth/drive']

    credentials = SignedJwtAssertionCredentials(json_key['client_email'], json_key['private_key'].encode(),
                                                scope)  # get email and key from creds

    gc = gspread.authorize(credentials)  # authenticate with Google

    try:
        sh = gc.open(MySpreedSheet)
        sheet = sh.get_worksheet(int(todayDt) - 1)
        return sheet
    except:
        sh = gc.create(MySpreedSheet)
        # worksheet = sh.add_worksheet(title="20190901", rows="10000", cols="20")
        genSpSheets(str(currentYr), str(currentMth), int(TotalDays), sh)
        sh.del_worksheet(sh.worksheet("Sheet1"))
        sh.share('Enter Email address of Google Drive here', perm_type='user', role='writer')
        sheetOpn = gc.open(MySpreedSheet)
        sheet = sh.get_worksheet(int(todayDt) - 1)
        return sheet


def next_available_row(sheet):
    str_list = list(filter(None, sheet.col_values(1)))
    return str(len(str_list) + 1)


def insertLogRec(date, filename, fileType, server, fileUrl):
    sheet = initializeParams()
    next_row = next_available_row(sheet)
    index = int(next_row)

    if next_row == '1':
        row = ['Date', 'File Name', "File Type", "File stored on", "File URL"]
        sheet.insert_row(row, index)
        next_row = '2'
        index = 2

        row = [date, filename, fileType, server, fileUrl]
        sheet.insert_row(row, index)
    else:
        row = [date, filename, fileType, server, fileUrl]
        sheet.insert_row(row, index)