From 12c0abd31bc183373089f077aa9509a7a0fd770a Mon Sep 17 00:00:00 2001 From: iN0mad Date: Thu, 1 Jan 2026 18:49:02 +0100 Subject: [PATCH] Add direct Google Calendar push script --- docs/scripts/direct_calendar_push.py | 111 +++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100755 docs/scripts/direct_calendar_push.py diff --git a/docs/scripts/direct_calendar_push.py b/docs/scripts/direct_calendar_push.py new file mode 100755 index 0000000..97655bd --- /dev/null +++ b/docs/scripts/direct_calendar_push.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python3 +""" +Direct Google Calendar API integration +Requires: pip install google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client +""" +import json +import os +import sys +from pathlib import Path + +try: + from google.oauth2.credentials import Credentials + from google.auth.transport.requests import Request + from googleapiclient.discovery import build + from googleapiclient.errors import HttpError +except ImportError: + print("āŒ Missing dependencies. Install with:") + print(" pip install google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client") + sys.exit(1) + +# Configuration +SCOPES = ['https://www.googleapis.com/auth/calendar'] +EVENTS_FILE = '/home/serhii/stack/scrum/repo/docs/calendar_events_s1.json' +TOKEN_FILE = '/home/serhii/.config/google_calendar_token.json' +CREDENTIALS_FILE = '/home/serhii/.config/google_calendar_credentials.json' + +def get_credentials(): + """Get valid user credentials from storage or OAuth flow""" + creds = None + + # Check if token file exists + if os.path.exists(TOKEN_FILE): + creds = Credentials.from_authorized_user_file(TOKEN_FILE, SCOPES) + + # If no valid credentials, need to authenticate + if not creds or not creds.valid: + if creds and creds.expired and creds.refresh_token: + creds.refresh(Request()) + else: + print("āŒ No valid credentials found.") + print("\nšŸ“Œ To authenticate:") + print("1. Go to https://console.cloud.google.com/") + print("2. Create OAuth 2.0 credentials") + print("3. Download credentials.json") + print(f"4. Save it to: {CREDENTIALS_FILE}") + print("5. Run this script again") + return None + + # Save credentials for next run + with open(TOKEN_FILE, 'w') as token: + token.write(creds.to_json()) + + return creds + +def create_events(service, events): + """Create calendar events""" + created_count = 0 + + for event in events: + try: + created_event = service.events().insert( + calendarId='primary', + body=event + ).execute() + + print(f"āœ… Created: {event['summary']}") + print(f" šŸ”— {created_event.get('htmlLink')}") + created_count += 1 + + except HttpError as error: + print(f"āŒ Error creating event: {error}") + + return created_count + +def main(): + print("šŸ“… Google Calendar Direct Push") + print("="*60) + + # Load events + if not os.path.exists(EVENTS_FILE): + print(f"āŒ Events file not found: {EVENTS_FILE}") + return + + with open(EVENTS_FILE, 'r') as f: + events = json.load(f) + + print(f"šŸ“‹ Loaded {len(events)} events") + + # Get credentials + creds = get_credentials() + if not creds: + return + + # Build service + try: + service = build('calendar', 'v3', credentials=creds) + print("āœ… Connected to Google Calendar API") + except Exception as e: + print(f"āŒ Failed to connect: {e}") + return + + # Create events + print("\nšŸš€ Creating events...") + created = create_events(service, events) + + print("\n" + "="*60) + print(f"āœ… Successfully created {created}/{len(events)} events") + print("="*60) + +if __name__ == '__main__': + main()