CRUD with Google Calendar API & Python
Tags: python, googlecalendar, crud, nelsoncode
Published: 2022-08-11 02:02:00

Install dependencies

requirements.txt
```txt
google-api-python-client 
google-auth-httplib2 
google-auth-oauthlib
```
```bash
pip install -r requirements.txt
```

get_service.py

```python
from os import path
import pickle
from google.auth.transport.requests import Request
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build

# IF YOU MODIFY THE SCOPE DELETE THE TOKEN.TXT FILE

SCOPES = ['https://www.googleapis.com/auth/calendar.events',
          'https://www.googleapis.com/auth/calendar']

# THE TOKEN.TXT FILE STORES THE USER'S UPGRADE AND ACCESS TOKENS

# creds.json -> Credentials in Oauth0

def get_crendetials_google():
    # OPEN THE BROWSER TO AUTHORIZE
    flow = InstalledAppFlow.from_client_secrets_file("creds.json", SCOPES)
    creds = flow.run_local_server(port=0)

    # SAVE CREDENTIALS
    pickle.dump(creds, open("token.txt", "wb"))
    return creds

def get_calendar_service():
    creds = None
    if path.exists("token.txt"):
        creds = pickle.load(open("token.txt", "rb"))
    # IF IT EXPIRED WE REFRESH THE CREDENTIALS
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            creds = get_crendetials_google()
    service = build("calendar", "v3", credentials=creds)
    return service
```

creds.json
```json
{
  "web": {
    "client_id": "",
    "project_id": "",
    "auth_uri": "",
    "token_uri": "",
    "auth_provider_x509_cert_url": "",
    "client_secret": "",
    "redirect_uris": ["http://localhost/"]
  }
}
```

### Template JSON

```json
{
  "summary": "Important event!",
  "location": "virtual event (Slack)",
  "description": "this is a description",
  "start": {
    "dateTime": "2021-12-10T10:00:00",
    "timeZone": "America/El_Salvador"
  },
  "end": {
    "dateTime": "2021-12-10T11:00:00",
    "timeZone": "America/El_Salvador"
  },
  "attendees": [{ "email": "email@gmail.com" }],
  "reminders": {
    "useDefault": false,
    "overrides": [
      { "method": "email", "minutes": 30 },
      { "method": "popup", "minutes": 10 }
    ]
  }
}
```

### CRUD Google Calendar

calendar.py

```python
from functions.get_service import get_calendar_service
from responses.response_json import response_json


service = get_calendar_service()


def create_event(template: dict):
    try:
        response = service.events().insert(calendarId="primary", body=template).execute()
        return response
    except Exception as e:
        return e.message


def get_event(eventId: str):
    try:
        response = service.events().get(calendarId="primary", eventId=eventId).execute()
        return response
    except Exception as e:
        return e.message


def delete_event(eventId: str):
    try:
        response = service.events().delete(calendarId="primary", eventId=eventId).execute()
        return response
    except Exception as e:
        return e.message


def update_event(eventId: str, template: dict):
    try:
        response = service.events().update(calendarId='primary',
                                           eventId=eventId, body=template).execute()
        return response
    except Exception as e:
        return e.message
```