Notion task manager toy example
import datetime | |
import random | |
import time | |
from multiprocessing import Lock | |
from notion.client import * | |
from notion.block import * | |
mutex = Lock() | |
token_v2 = "<redacted>" | |
client = NotionClient(token_v2=token_v2, start_monitoring=False) | |
page = client.get_block("https://www.notion.so/learningequality/Task-Manager-8a948144e0d04a25b30f1846d730f9d9") | |
log = client.get_block("https://www.notion.so/learningequality/Task-Manager-8a948144e0d04a25b30f1846d730f9d9#a8247c1908ab4292b3de1024f2403ef7") | |
collection = client.get_block("https://www.notion.so/learningequality/fe3c3a8c6aa24e37a3931b4708c45d71?v=4c79d24b0a4d4155ac52fe964d3d759c").collection | |
log_lines = [] | |
happy_results = { | |
"Delete all data": "The data was all deleted.", | |
"Fold paper airplane": "Your airplane is the BEST!", | |
"Feed the penguins": "Penguins are suffoncified.", | |
} | |
sad_results = { | |
"Delete all data": ["Insufficient permissions.", "Computer says no.", "I'm sorry, Dave..."], | |
"Fold paper airplane": ["Spontaneous combustion.", "OWWWW PAPERCUT!!!", "Oops, that was your diploma."], | |
"Feed the penguins": ["Penguins have a tummyache. :(", "We ran out of food.", "Polar bear invasion!"], | |
} | |
def write_to_log(line): | |
global log_lines | |
line = "{}\t{}".format(datetime.datetime.now().strftime("%H:%M:%S"), line) | |
log_lines.append(line) | |
log_lines = log_lines[-10:] | |
log.title = "\n".join(log_lines) | |
def sleep_with_updates(record, start_time, sleep=0.001, interval=0.3): | |
while sleep > 0: | |
record.elapsed = int(time.time() - start_time) | |
time.sleep(sleep if sleep < interval else interval) | |
sleep -= interval | |
def run_job(record): | |
start_time = time.time() | |
record.result = "" | |
record.elapsed = 0 | |
record.status = "Starting" | |
write_to_log("Starting task '{}'...".format(record.task_name)) | |
sleep_with_updates(record, start_time, random.randint(1, 3)) | |
record.status = "Active" | |
write_to_log("Task '{}' is now running!".format(record.task_name)) | |
sleep_with_updates(record, start_time, random.randint(3, 6)) | |
diceroll = random.randint(0, 6) | |
sadness = sad_results[record.task_name] | |
if diceroll >= len(sadness): | |
record.result = happy_results[record.task_name] | |
record.status = "Completed" | |
write_to_log("Completed '{}'. {}".format(record.task_name, record.result)) | |
else: | |
record.result = sadness[diceroll] | |
record.status = "Error" | |
write_to_log("Error running '{}': {}".format(record.task_name, record.result)) | |
def row_callback(record, changes): | |
with mutex: | |
start = record.start | |
record.start = False | |
if start: | |
if record.status in [None, "Completed", "Error"]: | |
run_job(record) | |
def register_row_callbacks(collection): | |
for row in collection.get_rows(): | |
row.add_callback(row_callback, callback_id="row_callback") | |
def collection_callback(record, difference, changes): | |
register_row_callbacks(record) | |
collection.add_callback(collection_callback) | |
register_row_callbacks(collection) | |
client.start_monitoring() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment