KamalamSivakumar commited on
Commit
4e4dcb2
·
verified ·
1 Parent(s): 809c6e1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +89 -97
app.py CHANGED
@@ -1,97 +1,89 @@
1
- from fastapi import FastAPI, Request
2
- from fastapi.middleware.cors import CORSMiddleware
3
- from pydantic import BaseModel
4
- from google.oauth2.credentials import Credentials
5
- from google_auth_oauthlib.flow import InstalledAppFlow
6
- from googleapiclient.discovery import build
7
- from google.auth.transport.requests import Request as GoogleRequest
8
- import os
9
- import logging
10
-
11
- # ---------- FastAPI Setup ----------
12
- app = FastAPI()
13
-
14
- origins = [
15
- "https://e04c-49-206-114-222.ngrok-free.app",
16
- "http://localhost:8501"
17
- ]
18
-
19
- app.add_middleware(
20
- CORSMiddleware,
21
- allow_origins=origins,
22
- allow_credentials=True,
23
- allow_methods=["*"],
24
- allow_headers=["*"],
25
- )
26
-
27
- # ---------- Pydantic Schema ----------
28
- class EventDetails(BaseModel):
29
- summary: str
30
- location: str | None = ''
31
- description: str | None = ''
32
- attendees: list[dict] | None = []
33
- start: str
34
- end: str
35
- timeZone: str | None = 'Asia/Kolkata'
36
-
37
- # ---------- Schedule Endpoint ----------
38
- @app.post("/schedule")
39
- async def schedule_event(event_details: EventDetails):
40
- SCOPES = ['https://www.googleapis.com/auth/calendar']
41
- creds = None
42
-
43
- if os.path.exists('token.json'):
44
- creds = Credentials.from_authorized_user_file('token.json', SCOPES)
45
-
46
- if not creds or not creds.valid:
47
- if creds and creds.expired and creds.refresh_token:
48
- creds.refresh(GoogleRequest())
49
- else:
50
- flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
51
- flow.redirect_uri = 'urn:ietf:wg:oauth:2.0:oob'
52
- auth_url, _ = flow.authorization_url(prompt='consent')
53
- print(f"Go to this URL: {auth_url}")
54
- code = input("Enter the authorization code: ")
55
- flow.fetch_token(code=code)
56
- creds = flow.credentials
57
- with open('token.json', 'w') as token:
58
- token.write(creds.to_json())
59
-
60
- try:
61
- service = build('calendar', 'v3', credentials=creds)
62
- logging.info(f"Service type: {type(service)}")
63
-
64
- event = {
65
- 'summary': event_details.summary,
66
- 'location': event_details.location,
67
- 'description': event_details.description,
68
- 'attendees': event_details.attendees,
69
- 'start': {
70
- 'dateTime': event_details.start,
71
- 'timeZone': event_details.timeZone,
72
- },
73
- 'end': {
74
- 'dateTime': event_details.end,
75
- 'timeZone': event_details.timeZone,
76
- },
77
- 'reminders': {
78
- 'useDefault': False,
79
- 'overrides': [
80
- {'method': 'email', 'minutes': 24 * 60},
81
- {'method': 'popup', 'minutes': 10},
82
- ],
83
- },
84
- }
85
-
86
- created_event = service.events().insert(calendarId='primary', body=event, sendUpdates='all').execute()
87
- return {
88
- "status": "success",
89
- "event_link": created_event.get('htmlLink'),
90
- "message": f"Event created: {created_event.get('summary')}"
91
- }
92
-
93
- except Exception as e:
94
- return {
95
- "status": "error",
96
- "error_message": str(e)
97
- }
 
1
+ from fastapi import FastAPI
2
+ from fastapi.middleware.cors import CORSMiddleware
3
+ from pydantic import BaseModel
4
+ from google.oauth2.credentials import Credentials
5
+ from googleapiclient.discovery import build
6
+ from google.auth.transport.requests import Request as GoogleRequest
7
+ import os
8
+ import logging
9
+
10
+ app = FastAPI()
11
+
12
+ # CORS settings (update with your frontends if needed)
13
+ origins = [
14
+ "*",
15
+ ]
16
+
17
+ app.add_middleware(
18
+ CORSMiddleware,
19
+ allow_origins=origins,
20
+ allow_credentials=True,
21
+ allow_methods=["*"],
22
+ allow_headers=["*"],
23
+ )
24
+
25
+ # Schema for incoming request
26
+ class EventDetails(BaseModel):
27
+ summary: str
28
+ location: str | None = ''
29
+ description: str | None = ''
30
+ attendees: list[dict] | None = []
31
+ start: str # ISO format datetime
32
+ end: str # ISO format datetime
33
+ timeZone: str | None = 'Asia/Kolkata'
34
+
35
+ @app.post("/schedule")
36
+ async def schedule_event(event_details: EventDetails):
37
+ SCOPES = ['https://www.googleapis.com/auth/calendar']
38
+ creds = None
39
+
40
+ if os.path.exists('token.json'):
41
+ creds = Credentials.from_authorized_user_file('token.json', SCOPES)
42
+
43
+ if not creds or not creds.valid:
44
+ if creds and creds.expired and creds.refresh_token:
45
+ creds.refresh(GoogleRequest())
46
+ else:
47
+ return {
48
+ "status": "error",
49
+ "message": "Missing or invalid token. Please run locally to generate token.json."
50
+ }
51
+
52
+ try:
53
+ service = build('calendar', 'v3', credentials=creds)
54
+
55
+ event = {
56
+ 'summary': event_details.summary,
57
+ 'location': event_details.location,
58
+ 'description': event_details.description,
59
+ 'attendees': event_details.attendees,
60
+ 'start': {
61
+ 'dateTime': event_details.start,
62
+ 'timeZone': event_details.timeZone,
63
+ },
64
+ 'end': {
65
+ 'dateTime': event_details.end,
66
+ 'timeZone': event_details.timeZone,
67
+ },
68
+ 'reminders': {
69
+ 'useDefault': False,
70
+ 'overrides': [
71
+ {'method': 'email', 'minutes': 24 * 60},
72
+ {'method': 'popup', 'minutes': 10},
73
+ ],
74
+ },
75
+ }
76
+
77
+ created_event = service.events().insert(calendarId='primary', body=event, sendUpdates='all').execute()
78
+
79
+ return {
80
+ "status": "success",
81
+ "event_link": created_event.get('htmlLink'),
82
+ "message": f"Event created: {created_event.get('summary')}"
83
+ }
84
+
85
+ except Exception as e:
86
+ return {
87
+ "status": "error",
88
+ "message": str(e)
89
+ }