DEV Community

Cover image for CRUD with Google Calendar API & Python
Nelson Hernández
Nelson Hernández

Posted on

10 4

CRUD with Google Calendar API & Python

Install dependencies

requirements.txt

google-api-python-client 
google-auth-httplib2 
google-auth-oauthlib
Enter fullscreen mode Exit fullscreen mode
pip install -r requirements.txt
Enter fullscreen mode Exit fullscreen mode

get_service.py

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
Enter fullscreen mode Exit fullscreen mode

creds.json

{
  "web": {
    "client_id": "",
    "project_id": "",
    "auth_uri": "",
    "token_uri": "",
    "auth_provider_x509_cert_url": "",
    "client_secret": "",
    "redirect_uris": ["http://localhost/"]
  }
}
Enter fullscreen mode Exit fullscreen mode

Template 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 }
    ]
  }
}
Enter fullscreen mode Exit fullscreen mode

CRUD Google Calendar

calendar.py

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
Enter fullscreen mode Exit fullscreen mode

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs