scheduled tasks

This commit is contained in:
samerbam 2023-08-27 00:25:56 -04:00
parent eb31eccdc1
commit 8199fe4432
6 changed files with 94 additions and 34 deletions

View File

@ -1,5 +1,6 @@
TODO:
- check if first run (api call) and show google calendar login button
* schedule pypi every().day() or smth like that at (time to print)-5 minutes to update calendar and get ready to print new daily list
* parse calendar list to database format and call save_todos() with list of Todos
- parse calendar list to database format and call save_todos() with list of Todos
- Start uvicorn on device startup (using gunicorn + sysmtectl)
* remove from recurring list api call

View File

@ -11,6 +11,7 @@ from .utils import VerifyToken
from .database import TodoDatabase
from .thermal_print import ThermalPrinter
from .sync_calendar import SyncData
from .tododatatypes import *
import errno
import os
@ -31,35 +32,35 @@ printer = ThermalPrinter(data)
class Todo(BaseModel):
time: str
task: str
recurring: bool
# class Todo(BaseModel):
# time: str
# task: str
# recurring: bool
class TodoList(BaseModel):
date: str #Always selected date OLD TEXT: #Either current date in %Y-%m-%d format or "recurring" for a recurring task
todos: list[Todo]
# class TodoList(BaseModel):
# date: str #Always selected date OLD TEXT: #Either current date in %Y-%m-%d format or "recurring" for a recurring task
# todos: list[Todo]
class TodoDate(BaseModel):
date: str
# date: str = datetime.today().strftime('%Y-%m-%d')
# class TodoDate(BaseModel):
# date: str
# # date: str = datetime.today().strftime('%Y-%m-%d')
class PrintAction(BaseModel):
date: str = datetime.today().strftime('%Y-%m-%d')
action: str #Options:
# all (pulls current todos from date, needs date)
# sudoku (prints a random sudoku)
# todos (prints only dates todos)
# wordsearch (prints a random wordsearch)
# quote (prints a random quote)
# greeting (prints a greeting)
# sentence (prints a custom message)
sentence: str = ""
# class PrintAction(BaseModel):
# date: str = datetime.today().strftime('%Y-%m-%d')
# action: str #Options:
# # all (pulls current todos from date, needs date)
# # sudoku (prints a random sudoku)
# # todos (prints only dates todos)
# # wordsearch (prints a random wordsearch)
# # quote (prints a random quote)
# # greeting (prints a greeting)
# # sentence (prints a custom message)
# sentence: str = ""
class GoogleUpdate(BaseModel):
code: str
# class GoogleUpdate(BaseModel):
# code: str
# @app.get("/api/public")
# def public():

View File

@ -8,10 +8,11 @@ from googleapiclient.errors import HttpError
import os
import json
import datetime
import schedule
from .database import TodoDatabase
from .tododatatypes import Todo
data = TodoDatabase()
@ -52,6 +53,7 @@ class SyncData():
self.get_new_creds()
self.get_calendar_events()
schedule.every(1).day.at("07:55").do(self.get_calendar_events)
def get_new_creds(self, code=""):
@ -127,11 +129,11 @@ class SyncData():
day_end_for = day_end.astimezone(ZoneInfo("UTC")).strftime('%Y-%m-%dT%H:%M:%S.%fZ')
# print(day_start.tzname())
print(day_start)
print(day_end)
print(day_start.astimezone(ZoneInfo("UTC")).strftime('%Y-%m-%dT%H:%M:%S.%fZ'))
print(day_end.astimezone(ZoneInfo("UTC")).strftime('%Y-%m-%dT%H:%M:%S.%fZ'))
print(datetime.utcnow().isoformat() + 'Z')
# print(day_start)
# print(day_end)
# print(day_start.astimezone(ZoneInfo("UTC")).strftime('%Y-%m-%dT%H:%M:%S.%fZ'))
# print(day_end.astimezone(ZoneInfo("UTC")).strftime('%Y-%m-%dT%H:%M:%S.%fZ'))
# print(datetime.utcnow().isoformat() + 'Z')
try:
@ -148,13 +150,33 @@ class SyncData():
print('No upcoming events found.')
return
print(str(len(events)) + " events found")
# Prints the start and name of the next 10 events
# event format: {'kind': 'calendar#event', 'etag': '"3386046190326000"', 'id': '0migcv6t729ph1kirhiauej3eh', 'status': 'confirmed', 'htmlLink': 'https://www.google.com/calendar/event?eid=MG1pZ2N2NnQ3MjlwaDFraXJoaWF1ZWozZWggYmFtLmltLnNhbUBt', 'created': '2023-08-26T04:11:35.000Z', 'updated': '2023-08-26T04:11:35.163Z', 'summary': 'test', 'creator': {'email': 'bam.im.sam@gmail.com', 'self': True}, 'organizer': {'email': 'bam.im.sam@gmail.com', 'self': True}, 'start': {'dateTime': '2023-08-27T14:30:00-04:00', 'timeZone': 'America/Toronto'}, 'end': {'dateTime': '2023-08-27T15:30:00-04:00', 'timeZone': 'America/Toronto'}, 'iCalUID': '0migcv6t729ph1kirhiauej3eh@google.com', 'sequence': 0, 'reminders': {'useDefault': True}, 'eventType': 'default'}
formatted_todo_list = []
# print(events)
for event in events:
print(event)
# print(event)
start = event['start'].get('dateTime', event['start'].get('date'))
end = event['end'].get('dateTime', event['end'].get('date'))
print(start, "->", end, event['summary'])
# print(event)
# print(start, "->", end, event['summary'])
start_parsed = datetime.strptime(start, "%Y-%m-%dT%H:%M:%S%z").strftime("%-I:%M%p") #2023-08-26T15:30:00-04:00
end_parsed = datetime.strptime(end, "%Y-%m-%dT%H:%M:%S%z").strftime("%-I:%M%p") #2023-08-26T15:30:00-04:00
# print("parsed: ", start_parsed, "to", end_parsed, event['summary'])
if 'summary' in event:
# {"time": start_parsed + " to " + end_parsed, "task": event['summary'], "recurring": False}
formatted_todo_list.append(Todo(time=start_parsed + " to " + end_parsed, task=event['summary'], recurring=False))
# formatted_todo_list.append({"time": start_parsed + " to " + end_parsed, "task": event['summary'], "recurring": False})
else:
formatted_todo_list.append(Todo(time=start_parsed + " to " + end_parsed, task='No Title', recurring=False))
# formatted_todo_list.append({"time": start_parsed + " to " + end_parsed, "task": 'No Title', "recurring": False})
# print(formatted_todo_list)
data.save_todos(day_start.strftime("%Y-%m-%d"), formatted_todo_list)
except HttpError as error:
print('An error occurred: %s' % error)

View File

@ -35,6 +35,7 @@ import usb
from wonderwords import RandomWord
from datetime import datetime
import textwrap
import schedule
from .sudoku_generator import *
@ -56,6 +57,7 @@ class ThermalPrinter():
self.p = Dummy()
print("Try running `export DYLD_LIBRARY_PATH=/opt/homebrew/lib` if on m1 mac. source: https://github.com/pyusb/pyusb/issues/355#issuecomment-1062798576")
# raise
schedule.every().day.at("08:00").do(self.print_default)
def print_custom(self, text=""):
self.p.set(align="left")

View File

@ -0,0 +1,32 @@
from pydantic import BaseModel
from datetime import datetime
class Todo(BaseModel):
time: str
task: str
recurring: bool
class TodoList(BaseModel):
date: str #Always selected date OLD TEXT: #Either current date in %Y-%m-%d format or "recurring" for a recurring task
todos: list[Todo]
class TodoDate(BaseModel):
date: str
# date: str = datetime.today().strftime('%Y-%m-%d')
class PrintAction(BaseModel):
date: str = datetime.today().strftime('%Y-%m-%d')
action: str #Options:
# all (pulls current todos from date, needs date)
# sudoku (prints a random sudoku)
# todos (prints only dates todos)
# wordsearch (prints a random wordsearch)
# quote (prints a random quote)
# greeting (prints a greeting)
# sentence (prints a custom message)
sentence: str = ""
class GoogleUpdate(BaseModel):
code: str

View File

@ -23,3 +23,5 @@ google-api-python-client
google-auth
google-auth-oauthlib
google-auth-httplib2
gunicorn
schedule