JAA-ATS-Tool / connect_google.py
saitejatirunagari's picture
Initial commit: JAA ATS Tool — PM job search + AI assessment + ATS resume gen
7ff6662
Raw
History Blame
6.44 kB
"""
connect_google.py - Quick Google Sheets authentication.
Run this ONCE. It opens your browser, you log in with Google,
and the token is saved. After that, python main.py writes to your sheet automatically.
Usage: python connect_google.py
"""
import os, sys, webbrowser
from pathlib import Path
from dotenv import load_dotenv
load_dotenv()
SHEET_ID = os.getenv("GOOGLE_SHEET_ID", "1Ehxt3eortehbtySdtgcSrMhCqmxIMUAmvRqSkII0HJk")
STEP1_URL = "https://console.cloud.google.com/projectcreate"
APIS_URL = "https://console.cloud.google.com/apis/library"
CREDS_URL = "https://console.cloud.google.com/apis/credentials"
SHEET_URL = f"https://docs.google.com/spreadsheets/d/{SHEET_ID}/edit"
def main():
print()
print("=" * 60)
print(" Google Sheets Connection Setup")
print(" Job Automation Agent")
print("=" * 60)
print()
# Check if already connected
if Path("google_token.json").exists():
print("Token file found. Testing connection...")
if test_connection():
print()
print("Already connected! Run: python main.py")
return
else:
print("Token expired. Re-authenticating...")
Path("google_token.json").unlink(missing_ok=True)
if Path("google_credentials.json").exists():
print("Service account found. Testing...")
if test_connection():
print("Connected via service account!")
return
if Path("google_oauth_client.json").exists():
print("OAuth client found. Opening browser for login...")
do_oauth()
return
# Need to set up from scratch
print("No credentials found. Let's set this up (5 minutes).")
print()
print("SETUP STEPS:")
print("-" * 40)
print()
print("Step 1: Create a Google Cloud Project")
print(" -> Opening https://console.cloud.google.com/projectcreate")
input(" Press Enter to open browser...")
webbrowser.open(STEP1_URL)
print()
print("Step 2: Enable required APIs")
print(" -> Search for and enable:")
print(" - 'Google Sheets API'")
print(" - 'Google Drive API'")
input(" Press Enter to open API Library...")
webbrowser.open(APIS_URL)
input(" Press Enter when both APIs are enabled...")
print()
print("Step 3: Create OAuth Credentials")
print(" -> Click '+ CREATE CREDENTIALS' -> 'OAuth client ID'")
print(" -> Application type: Desktop app")
print(" -> Name: Job Automation Agent")
print(" -> Click CREATE")
print(" -> Click DOWNLOAD JSON")
print(f" -> Save as 'google_oauth_client.json' in this folder:")
print(f" {os.path.abspath('.')}")
input(" Press Enter to open Credentials page...")
webbrowser.open(CREDS_URL)
input(" Press Enter after saving google_oauth_client.json here...")
print()
if not Path("google_oauth_client.json").exists():
print("ERROR: google_oauth_client.json not found.")
print(f"Please save it to: {os.path.abspath('google_oauth_client.json')}")
return
print()
print("IMPORTANT: Before logging in, you MUST add your email as a test user.")
print("(This is why you got 'Access blocked' error)")
print()
print("Step 4: Add yourself as a Test User")
print(" -> Go to OAuth consent screen")
print(" -> Scroll to 'Test users' section")
print(" -> Click '+ Add users'")
print(" -> Add: saitejatirunagari@gmail.com")
print(" -> Click Save")
input(" Press Enter to open OAuth consent screen...")
webbrowser.open("https://console.cloud.google.com/apis/credentials/consent")
input(" Press Enter after adding your email as test user...")
print()
do_oauth()
def do_oauth():
"""Run the OAuth browser flow and save token."""
try:
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
SCOPES = [
"https://www.googleapis.com/auth/spreadsheets",
"https://www.googleapis.com/auth/drive",
]
print()
print("Opening browser for Google login...")
print("(Log in with your Google account and click Allow)")
print()
flow = InstalledAppFlow.from_client_secrets_file("google_oauth_client.json", SCOPES)
creds = flow.run_local_server(port=0, open_browser=True)
Path("google_token.json").write_text(creds.to_json())
print("Token saved to google_token.json")
if test_connection():
print()
print("=" * 60)
print(" Connected successfully!")
print(" Run: python main.py")
print(" Your Google Sheet will be updated automatically.")
print(f" Sheet: {SHEET_URL}")
print("=" * 60)
else:
print("Connection test failed. Check the sheet URL in .env")
except Exception as e:
print(f"OAuth failed: {e}")
print()
print("Try the service account method instead:")
print(" python setup_google.py")
def test_connection() -> bool:
"""Test if credentials work."""
try:
import gspread
from google.oauth2.service_account import Credentials as SACredentials
from google.oauth2.credentials import Credentials as OAuthCredentials
SCOPES = [
"https://www.googleapis.com/auth/spreadsheets",
"https://www.googleapis.com/auth/drive",
]
creds = None
# Try service account
if Path("google_credentials.json").exists():
creds = SACredentials.from_service_account_file("google_credentials.json", scopes=SCOPES)
# Try OAuth token
elif Path("google_token.json").exists():
from google.auth.transport.requests import Request
creds = OAuthCredentials.from_authorized_user_file("google_token.json", SCOPES)
if creds.expired and creds.refresh_token:
creds.refresh(Request())
Path("google_token.json").write_text(creds.to_json())
if creds is None:
return False
client = gspread.authorize(creds)
sh = client.open_by_key(SHEET_ID)
print(f" Connected to: '{sh.title}'")
return True
except Exception as e:
print(f" Connection failed: {e}")
return False
if __name__ == "__main__":
main()