class NotionInterface: def __init__(self): self.token_v2 = TOKEN_V2 self.client = NotionClient(token_v2=self.token_v2) self.strava_page_title = "Strava" self.strava_table_title = "Activity Logbook" def get_strava_page(self): strava_page = None for page in self.client.get_top_level_pages(): if self.strava_page_title == page.title: strava_page = page if strava_page is None: raise LookupError( f"Unable to find Strava page, is there a page with a " f"title of '{self.strava_page_title}' in your workspace?" ) return strava_page def create_activity_log_table(self): strava_page = self.get_strava_page() # Check if we've a table already for block in strava_page.children: if hasattr(block, 'title') and block.title == self.strava_table_title: return block # Create a table strava_table = strava_page.children.add_new(CollectionViewBlock) strava_table.collection = self.client.get_collection( self.client.create_record("collection", parent=strava_table, schema=SCHEMA) ) strava_table.title = self.strava_table_title strava_table.views.add_new(view_type="table") return strava_table def add_row_to_table(self, table, data): # HACK - needs to happen to work! table.collection.parent.views rows = table.collection.get_rows() if not any([r.name == data.name and r.date.start.date() == data.start_date_local.date() for r in rows]): row = table.collection.add_row() row.set_property("title", data.name) row.set_property("date", data.start_date_local) row.set_property("type", data.type) row.set_property("distance (m)", data.distance) row.set_property("time (s)", data.moving_time) row.set_property("cals", data.kilojoules) print(f'Added {data.name} on {data.start_date_local} to Notion!') else: print(f'Skipping {data.name} for {data.start_date_local}')
def launch(token): client = NotionClient(token_v2=token) pages = client.get_top_level_pages() console, _ = find_first(pages, type="page", title="console") callouts = find_all(console.children, type="callout") assert len(callouts) >= 2 status = StatusBlock(*callouts[0], console.children) automata = AutomataBlock(*callouts[-1], console.children) log = automata.output.log commands = [] log("started, looking for commands...") for block, index in callouts[1:-1]: log(f" found '{block.title}', hooking up... ") try: commands.append(CommandBlock(block, index, console.children)) except Exception as e: log(f" failed, {e.args[0]}") continue log("all hooked up, executing...") for command in commands: log(f" running '{command.block.title}'") globs = { "dir": dir, "type": type, "getattr": getattr, "setattr": setattr, "pages": pages, "find_all": find_all, "find_first": find_first, } if out := command.run(globs): log(f" failed, {out}")