PromptWarElection / app /google_services.py
Mr-TD's picture
feat: initialize 2026 Election Assistant web application with real-time tracking and comprehensive event documentation
3c4d71f
"""
Google Services Integration Module
Provides Google Translate, Google Calendar link generation,
and Google Maps polling station lookup functionality.
"""
import os
import urllib.parse
from datetime import datetime, timedelta
from typing import Optional
def get_google_maps_api_key() -> Optional[str]:
"""Return the Maps API key if configured, else None."""
key = os.getenv('GOOGLE_MAPS_API_KEY', '')
if key and key != 'your-google-maps-api-key-here':
return key
return None
def is_translate_enabled() -> bool:
"""Check whether Google Translate widget is enabled."""
return os.getenv('GOOGLE_TRANSLATE_ENABLED', 'true').lower() == 'true'
def build_calendar_url(
title: str,
start_date: datetime,
description: str = '',
location: str = 'India',
duration_hours: int = 24,
) -> str:
"""
Build a Google Calendar event creation URL.
Args:
title: Event title (e.g. "Phase 1 — Polling Day")
start_date: datetime of event start
description: Event description
location: Event location string
duration_hours: Duration of the event in hours
Returns:
Google Calendar URL that opens the "create event" form pre-filled.
"""
end_date = start_date + timedelta(hours=duration_hours)
# Google Calendar expects dates in compact ISO format
fmt = '%Y%m%dT%H%M%SZ'
dates = f"{start_date.strftime(fmt)}/{end_date.strftime(fmt)}"
params = {
'action': 'TEMPLATE',
'text': title,
'dates': dates,
'details': description,
'location': location,
'sf': 'true',
'output': 'xml',
}
return 'https://calendar.google.com/calendar/render?' + urllib.parse.urlencode(params)
def build_maps_embed_url(query: str = 'Election Commission Office near me') -> Optional[str]:
"""
Build a Google Maps Embed API URL for polling station lookup.
Args:
query: Search query for the map embed
Returns:
Embed URL string, or None if API key is not configured.
"""
api_key = get_google_maps_api_key()
if not api_key:
return None
params = {
'key': api_key,
'q': query,
'zoom': '12',
}
return 'https://www.google.com/maps/embed/v1/search?' + urllib.parse.urlencode(params)
def get_google_config() -> dict:
"""
Return safe public Google configuration for frontend use.
Never exposes full API keys — only presence flags.
"""
return {
'translate_enabled': is_translate_enabled(),
'maps_available': get_google_maps_api_key() is not None,
'maps_key': get_google_maps_api_key(), # Embed API key is public by design
'calendar_supported': True,
}