11import os
22from datetime import datetime , timedelta
3+ from typing import Optional
34
45from nylas import Client
5- from nylas .models .notetakers import NotetakerMeetingSettings , MeetingProvider
6- from nylas .models .events import EventMetadata
6+ from nylas .models .notetakers import Notetaker
7+ from nylas .models .events import (
8+ UpdateEventRequest ,
9+ CreateEventRequest ,
10+ EventNotetakerRequest ,
11+ EventNotetakerSettings ,
12+ CreateTimespan ,
13+ CreateEventQueryParams ,
14+ UpdateEventQueryParams ,
15+ CreateAutocreate ,
16+ CreateEventNotetaker
17+ )
718
819# Initialize the Nylas client
920nylas = Client (
@@ -18,92 +29,147 @@ def create_event_with_notetaker():
1829 # Create the event
1930 start_time = datetime .now () + timedelta (days = 1 )
2031 end_time = start_time + timedelta (hours = 1 )
21-
22- event = nylas .events .create (
32+
33+
34+ # Create the request body with proper types
35+ request_body = CreateEventRequest (
2336 title = "Project Planning Meeting" ,
2437 description = "Initial project planning and resource allocation" ,
25- start_time = start_time ,
26- end_time = end_time ,
27- metadata = EventMetadata (
28- project_id = "PROJ-123" ,
29- priority = "high"
38+ when = CreateTimespan (
39+ start_time = int (start_time .timestamp ()),
40+ end_time = int (end_time .timestamp ())
41+ ),
42+ metadata = {
43+ "project_id" : "PROJ-123" ,
44+ "priority" : "high"
45+ },
46+ conferencing = CreateAutocreate (
47+ provider = "Google Meet" ,
48+ autocreate = {}
49+ ),
50+ notetaker = CreateEventNotetaker (
51+ name = "Nylas Notetaker" ,
52+ meeting_settings = EventNotetakerSettings (
53+ video_recording = True ,
54+ audio_recording = True ,
55+ transcription = True
56+ )
3057 )
3158 )
3259
33- # Create a Notetaker bot for the event
34- notetaker = nylas .notetakers .invite (
35- meeting_link = event .conferencing .details .meeting_url ,
36- name = "Project Planning Notetaker" ,
37- meeting_settings = NotetakerMeetingSettings (
38- video_recording = True ,
39- audio_recording = True ,
40- transcription = True
41- )
60+ # Create the query parameters
61+ query_params = CreateEventQueryParams (
62+ calendar_id = os .getenv ("NYLAS_CALENDAR_ID" )
4263 )
4364
44- print (f"Created event with ID: { event .id } " )
45- print (f"Created Notetaker with ID: { notetaker .id } " )
46- return event , notetaker
65+ event = nylas .events .create (
66+ identifier = os .getenv ("NYLAS_GRANT_ID" ),
67+ request_body = request_body ,
68+ query_params = query_params
69+ )
70+
71+ return event
4772
48- def get_event_notetaker (event_id ):
73+
74+ def get_event_notetaker (event_id : str ) -> Optional [Notetaker ]:
4975 """Demonstrates how to retrieve the Notetaker associated with an event."""
5076 print ("\n === Retrieving Event Notetaker ===" )
5177
5278 # First get the event to get the Notetaker ID
53- event = nylas .events .find (event_id )
54- if not event .notetaker or not event .notetaker .id :
79+ try :
80+ event = nylas .events .find (
81+ identifier = os .getenv ("NYLAS_GRANT_ID" ),
82+ event_id = event_id ,
83+ query_params = {"calendar_id" : os .getenv ("NYLAS_CALENDAR_ID" )}
84+ )
85+ except Exception as e :
86+ print (f"Error getting event: { e } " )
87+ return None
88+
89+ if not event .data .notetaker or not event .data .notetaker .id :
5590 print (f"No Notetaker found for event { event_id } " )
5691 return None
5792
58- notetaker = nylas .notetakers .find (event .notetaker .id )
93+ notetaker = nylas .notetakers .find (notetaker_id = event .data . notetaker .id , identifier = os . getenv ( "NYLAS_GRANT_ID" ) )
5994 print (f"Found Notetaker for event { event_id } :" )
60- print (f"- ID: { notetaker .id } " )
61- print (f"- State: { notetaker .state } " )
62- print (f"- Meeting Provider: { notetaker .meeting_provider } " )
95+ print (f"- ID: { notetaker .data .id } " )
96+ print (f"- State: { notetaker .data .state } " )
97+ print (f"- Meeting Provider: { notetaker .data .meeting_provider } " )
98+ print (f"- Meeting Settings:" )
99+ print (f" - Video Recording: { notetaker .data .meeting_settings .video_recording } " )
100+ print (f" - Audio Recording: { notetaker .data .meeting_settings .audio_recording } " )
101+ print (f" - Transcription: { notetaker .data .meeting_settings .transcription } " )
63102
64103 return notetaker
65104
66- def update_event_and_notetaker (event_id , notetaker_id ):
105+ def update_event_and_notetaker (event_id : str , notetaker_id : str ):
67106 """Demonstrates how to update both an event and its Notetaker."""
68107 print ("\n === Updating Event and Notetaker ===" )
69108
70- # Update the event
71- updated_event = nylas .events .update (
72- event_id ,
109+ # Create the notetaker meeting settings
110+ notetaker_settings = EventNotetakerSettings (
111+ video_recording = False ,
112+ audio_recording = True ,
113+ transcription = False
114+ )
115+
116+ # Create the notetaker request
117+ notetaker = EventNotetakerRequest (
118+ id = notetaker_id ,
119+ name = "Updated Nylas Notetaker" ,
120+ meeting_settings = notetaker_settings
121+ )
122+
123+ # Create the update request with proper types
124+ request_body = UpdateEventRequest (
73125 title = "Updated Project Planning Meeting" ,
74126 description = "Revised project planning with new timeline" ,
75- metadata = EventMetadata (
76- project_id = "PROJ-123" ,
77- priority = "urgent"
78- )
127+ metadata = {
128+ "project_id" : "PROJ-123" ,
129+ "priority" : "urgent"
130+ },
131+ notetaker = notetaker
79132 )
80133
81- # Update the Notetaker
82- updated_notetaker = nylas .notetakers .update (
83- notetaker_id ,
84- name = "Updated Project Planning Notetaker" ,
85- meeting_settings = NotetakerMeetingSettings (
86- video_recording = True ,
87- audio_recording = True ,
88- transcription = True
89- )
134+ # Create the query parameters
135+ query_params = UpdateEventQueryParams (
136+ calendar_id = os .getenv ("NYLAS_CALENDAR_ID" )
137+ )
138+
139+ updated_event = nylas .events .update (
140+ identifier = os .getenv ("NYLAS_GRANT_ID" ),
141+ event_id = event_id ,
142+ request_body = request_body ,
143+ query_params = query_params
90144 )
91145
92- print (f"Updated event with ID: { updated_event .id } " )
93- print (f"Updated Notetaker with ID: { updated_notetaker .id } " )
94- return updated_event , updated_notetaker
146+ return updated_event
95147
96148def main ():
97149 """Main function to run all demo examples."""
98150 try :
99151 # Create an event with a Notetaker
100- event , notetaker = create_event_with_notetaker ()
152+ event = create_event_with_notetaker ()
153+ if not event :
154+ print ("Failed to create event" )
155+ return
156+
157+ print (f"Created event with ID: { event .data .id } " )
158+ print (f"Event Notetaker ID: { event .data .notetaker .id } " )
101159
102160 # Get the Notetaker for the event
103- get_event_notetaker (event .id )
161+ notetaker = get_event_notetaker (event .data .id )
162+ if not notetaker :
163+ print (f"Failed to get Notetaker for event { event .data .id } " )
164+ return
104165
105166 # Update both the event and its Notetaker
106- updated_event , updated_notetaker = update_event_and_notetaker (event .id , notetaker .id )
167+ updated_event = update_event_and_notetaker (event .data .id , notetaker .data .id )
168+ if not updated_event :
169+ print (f"Failed to update event { event .data .id } " )
170+ return
171+
172+ print (f"Updated event with ID: { updated_event .data .id } " )
107173
108174 except Exception as e :
109175 print (f"An error occurred: { str (e )} " )
0 commit comments