1
1
from googleapiclient .discovery import build
2
2
from uuid import uuid4
3
3
from google .auth .transport .requests import Request
4
- from pathlib import Path
5
4
from google_auth_oauthlib .flow import InstalledAppFlow
6
5
from typing import Dict , List
7
- from pickle import load , dump
6
+ import os
7
+ from google .oauth2 .credentials import Credentials
8
+
9
+ SCOPES = ["https://www.googleapis.com/auth/calendar" ]
8
10
9
11
10
12
class CreateMeet :
11
- def __init__ (self , attendees : Dict [str , str ], event_time : Dict [str , str ], topic ):
13
+ def __init__ (self , attendees : Dict [str , str ],
14
+ event_time : Dict [str , str ], topic ):
12
15
authe = self ._auth ()
13
- attendees = [{"email" : e } for e in attendees .values ()]
16
+ attendees_list = [{"email" : e } for e in attendees .values ()]
14
17
self .event_states = self ._create_event (
15
- attendees , event_time , authe , topic )
18
+ attendees_list , event_time , authe , topic )
16
19
17
20
@staticmethod
18
- def _create_event (attendees : List [Dict [str , str ]], event_time , authe : build , topic ):
21
+ def _create_event (
22
+ attendees : List [Dict [str , str ]], event_time , authe : build , Topic ):
19
23
event = {"conferenceData" : {"createRequest" : {"requestId" : f"{ uuid4 ().hex } " , "conferenceSolutionKey" : {"type" : "hangoutsMeet" }}},
20
24
"attendees" : attendees ,
21
25
"start" : {"dateTime" : event_time ["start" ], 'timeZone' : 'Asia/Kolkata' },
22
26
"end" : {"dateTime" : event_time ["end" ], 'timeZone' : 'Asia/Kolkata' },
23
- "summary" : topic ,
27
+ "summary" : Topic ,
24
28
"reminders" : {"useDefault" : True }
25
29
}
26
30
event = authe .events ().insert (calendarId = "primary" , sendNotifications = True ,
@@ -29,23 +33,24 @@ def _create_event(attendees: List[Dict[str, str]], event_time, authe: build, top
29
33
30
34
@staticmethod
31
35
def _auth ():
32
- token_file , scopes = Path (
33
- "./token.pickle" ), ["https://www.googleapis.com/auth/calendar" ]
34
- credentials = None
35
- if token_file .exists ():
36
- with open (token_file , "rb" ) as token :
37
- credentials = load (token )
38
- if not credentials or not credentials .valid :
39
- if credentials and credentials .expired and credentials .refresh_token :
40
- credentials .refresh (Request ())
36
+ creds = None
37
+ if os .path .exists ("token.json" ):
38
+ creds = Credentials .from_authorized_user_file ("token.json" , SCOPES )
39
+ # If there are no (valid) credentials available, let the user log in.
40
+ if not creds or not creds .valid :
41
+ if creds and creds .expired and creds .refresh_token :
42
+ creds .refresh (Request ())
41
43
else :
42
44
flow = InstalledAppFlow .from_client_secrets_file (
43
- 'credentials.json' , scopes )
44
- credentials = flow .run_local_server (port = 0 )
45
- with open (token_file , "wb" ) as token :
46
- dump (credentials , token )
47
- calendar_service = build ("calendar" , "v3" , credentials = credentials )
48
- return calendar_service
45
+ "credentials.json" , SCOPES
46
+ )
47
+ creds = flow .run_local_server (port = 0 )
48
+ # Save the credentials for the next run
49
+ with open ("token.json" , "w" ) as token :
50
+ token .write (creds .to_json ())
51
+
52
+ service = build ("calendar" , "v3" , credentials = creds )
53
+ return service
49
54
50
55
51
56
print ('------------------------------' )
@@ -60,9 +65,10 @@ def _auth():
60
65
emails = list (
61
66
input ('Enter the emails of guests separated by 1 space each : ' ).strip ().split ())
62
67
topic = input ('Enter the topic of the meeting : ' )
68
+
63
69
time = {
64
- 'start' : date + 'T' + start + ':00.000000' ,
65
- 'end' : date + 'T' + end + ':00.000000'
70
+ 'start' : date + 'T' + start + ':00.000000' ,
71
+ 'end' : date + 'T' + end + ':00.000000'
66
72
}
67
73
guests = {email : email for email in emails }
68
74
meet = CreateMeet (guests , time , topic )
@@ -72,4 +78,4 @@ def _auth():
72
78
print ('-- Meeting Details --' )
73
79
print ('---------------------' )
74
80
for key in keys :
75
- print (key + ' : ' , details [key ])
81
+ print (key + ' : ' , details [key ])
0 commit comments