Added functionality to delete old occourences
This commit is contained in:
@@ -82,6 +82,10 @@ def update_page(page_id, properties, icon=None):
|
||||
return _request("PATCH", f"/pages/{page_id}", body)
|
||||
|
||||
|
||||
def archive_page(page_id):
|
||||
return _request("PATCH", f"/pages/{page_id}", {"archived": True})
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Property extraction
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -294,6 +298,7 @@ def sync():
|
||||
created = 0
|
||||
updated = 0
|
||||
skipped = 0
|
||||
desired_keys = set()
|
||||
|
||||
for page in recurring_pages:
|
||||
cfg = parse_recurring_event(page)
|
||||
@@ -306,6 +311,7 @@ def sync():
|
||||
f"{len(occurrences)} occurrence(s) computed.")
|
||||
for occ in occurrences:
|
||||
key = (cfg["name"], occ.isoformat())
|
||||
desired_keys.add(key)
|
||||
props = _build_calendar_properties(cfg, occ, today)
|
||||
icon = cfg["icon"]
|
||||
if key in existing:
|
||||
@@ -315,7 +321,36 @@ def sync():
|
||||
create_page(props, icon=icon)
|
||||
created += 1
|
||||
|
||||
print(f"Done. Created {created}, updated {updated}, skipped {skipped}.")
|
||||
# Purge stale recurring entries: any calendar page marked as recurring
|
||||
# that no longer corresponds to a desired (name, date) occurrence.
|
||||
archived = _purge_stale(calendar_pages, desired_keys)
|
||||
|
||||
print(f"Done. Created {created}, updated {updated}, archived {archived}, "
|
||||
f"skipped {skipped}.")
|
||||
|
||||
|
||||
def _purge_stale(calendar_pages, desired_keys):
|
||||
archived = 0
|
||||
for page in calendar_pages:
|
||||
# Skip pages that are already archived / in trash.
|
||||
if page.get("archived") or page.get("in_trash"):
|
||||
continue
|
||||
props = page["properties"]
|
||||
# Only consider entries flagged as recurring — manual entries are
|
||||
# always left untouched.
|
||||
is_recurring = props.get("Is Recurring", {}).get("checkbox", False)
|
||||
if not is_recurring:
|
||||
continue
|
||||
name = _title_text(props["Event Name"])
|
||||
d = _date_start(props["Date"])
|
||||
if not name or not d:
|
||||
continue
|
||||
key = (name, d.isoformat())
|
||||
if key not in desired_keys:
|
||||
archive_page(page["id"])
|
||||
archived += 1
|
||||
print(f" Archived stale occurrence: {name} @ {d.isoformat()}")
|
||||
return archived
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user