|
|
@@ -0,0 +1,144 @@
|
|
|
+#!/usr/bin/env python3
|
|
|
+import uuid
|
|
|
+import hashlib
|
|
|
+from datetime import datetime
|
|
|
+from sys import argv
|
|
|
+
|
|
|
+from prettytable import PrettyTable, HEADER
|
|
|
+
|
|
|
+EVENTS = [
|
|
|
+ {
|
|
|
+ "start": "20230526T140000Z",
|
|
|
+ "end": "20230526T160000Z",
|
|
|
+ "track": "Math",
|
|
|
+ "topic": "Elliptic Curves",
|
|
|
+ "title": "Introduction to Elliptic Curves",
|
|
|
+ "#": 1,
|
|
|
+ "recording": "",
|
|
|
+ },
|
|
|
+
|
|
|
+ {
|
|
|
+ "start": "20230530T140000Z",
|
|
|
+ "end": "20230530T160000Z",
|
|
|
+ "track": "Math",
|
|
|
+ "topic": "Abstract Algebra",
|
|
|
+ "title": "Group Structure and Homomorphisms",
|
|
|
+ "#": 1,
|
|
|
+ "recording": "",
|
|
|
+ },
|
|
|
+
|
|
|
+ {
|
|
|
+ "start": "20230615T140000Z",
|
|
|
+ "end": "20230615T160000Z",
|
|
|
+ "track": "Research",
|
|
|
+ "topic": "Consensus",
|
|
|
+ "title": "DarkFi Consensus Algorithm and Control Theory",
|
|
|
+ "#": 1,
|
|
|
+ "recording": "",
|
|
|
+ },
|
|
|
+
|
|
|
+ {
|
|
|
+ "start": "20230622T140000Z",
|
|
|
+ "end": "20230622T160000Z",
|
|
|
+ "track": "Dev",
|
|
|
+ "topic": "Consensus",
|
|
|
+ "title": "Walkthrough the Consensus code",
|
|
|
+ "#": 2,
|
|
|
+ "recording": "",
|
|
|
+ },
|
|
|
+
|
|
|
+ {
|
|
|
+ "start": "20230629T140000Z",
|
|
|
+ "end": "20230629T160000Z",
|
|
|
+ "track": "Dev",
|
|
|
+ "topic": "Event Graph",
|
|
|
+ "title": "Walkthrough the Event Graph",
|
|
|
+ "#": 1,
|
|
|
+ "recording": "",
|
|
|
+ },
|
|
|
+]
|
|
|
+
|
|
|
+def print_table():
|
|
|
+ x = PrettyTable()
|
|
|
+ x.field_names = ["Date", "Track", "Topic", "#", "Title", "Calendar", "Recording"]
|
|
|
+ x.align = "l"
|
|
|
+ x.hrules = HEADER
|
|
|
+ x.junction_char = "|"
|
|
|
+
|
|
|
+ for event in EVENTS:
|
|
|
+ timestamp = event["start"]
|
|
|
+ parsed = datetime.strptime(timestamp, "%Y%m%dT%H%M%SZ")
|
|
|
+ formatted = parsed.strftime("%a %d %b %Y %H:%M UTC")
|
|
|
+
|
|
|
+ s = ''.join(ch if ch.isalnum() else '' for ch in event["title"])
|
|
|
+ ics_file = f"{event['start']}_{s}.ics"
|
|
|
+
|
|
|
+ x.add_row([
|
|
|
+ formatted,
|
|
|
+ event["track"],
|
|
|
+ event["topic"],
|
|
|
+ event["#"],
|
|
|
+ event["title"],
|
|
|
+ f"[dl]({ics_file})",
|
|
|
+ f"[dl]({event['recording']})",
|
|
|
+ ])
|
|
|
+
|
|
|
+ print("# Developer Seminars\n")
|
|
|
+ print("Weekly seminars on DarkFi, cryptography, code and other topics.")
|
|
|
+ print("Each seminar is usually 2 hours long\n")
|
|
|
+ print(x)
|
|
|
+ print("\nThe link for calls is")
|
|
|
+ print("[meet.jit.si/darkfi-seminar](https://meet.jit.si/darkfi-seminar).")
|
|
|
+ print("\nFor the math seminars, we use a collaborative whiteboard called")
|
|
|
+ print("[therapy](https://github.com/narodnik/therapy) that we made.")
|
|
|
+ print("The canvas will also be shared on Jitsi calls.\n")
|
|
|
+ print("Videos will be uploaded online and linked here.")
|
|
|
+ print("Join [our chat](https://darkrenaissance.github.io/darkfi/misc/ircd/ircd.html")
|
|
|
+ print("for more info. Links and text chat will happen there during the calls.")
|
|
|
+
|
|
|
+
|
|
|
+def print_ics():
|
|
|
+ for event in EVENTS:
|
|
|
+ ics = []
|
|
|
+ ics.append("BEGIN:VCALENDAR")
|
|
|
+ ics.append("VERSION:2.0")
|
|
|
+ ics.append("PRODID:-//dark.fi//Seminars//EN")
|
|
|
+ ics.append("BEGIN:VEVENT")
|
|
|
+ ics.append(f"SUMMARY:DarkFi Seminar: {event['title']}")
|
|
|
+ m = hashlib.md5()
|
|
|
+ m.update((event["start"] + event["title"]).encode("utf-8"))
|
|
|
+ ics.append(f"UID:{uuid.UUID(m.hexdigest())}")
|
|
|
+ ics.append(f"DTSTART:{event['start']}")
|
|
|
+ ics.append(f"DTEND:{event['end']}")
|
|
|
+ ics.append(f"DTSTAMP:{event['start']}")
|
|
|
+ ics.append(f"CATEGORIES:{event['topic']}")
|
|
|
+ ics.append("URL:https://meet.jit.si/darkfi-seminar")
|
|
|
+ ics.append("END:VEVENT")
|
|
|
+ ics.append("END:VCALENDAR")
|
|
|
+
|
|
|
+ s = ''.join(ch if ch.isalnum() else '' for ch in event["title"])
|
|
|
+ ics_file = f"{event['start']}_{s}.ics"
|
|
|
+
|
|
|
+ with open(f"book/development/{ics_file}", "w") as f:
|
|
|
+ f.write('\n'.join(ics))
|
|
|
+ f.write('\n')
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+def usage():
|
|
|
+ print("usage: Use --ics or --table as a flag")
|
|
|
+ exit(1)
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ if len(argv) != 2:
|
|
|
+ usage()
|
|
|
+
|
|
|
+ if argv[1] == "--ics":
|
|
|
+ print_ics()
|
|
|
+ exit(0)
|
|
|
+
|
|
|
+ if argv[1] == "--table":
|
|
|
+ print_table()
|
|
|
+ exit(0)
|
|
|
+
|
|
|
+ main()
|