Spaces:
Runtime error
Runtime error
Raymond Weitekamp
feat: add HF authentication setup and testing infrastructure - Add save_hf_storage_state.py for auth state management - Add check_hf_login.py for login verification - Update test_local.sh with Playwright setup - Add .cursor rules for test-first development - Update requirements.txt with new dependencies
fcd4d8a
import asyncio | |
import os | |
import sys | |
from playwright.async_api import async_playwright | |
async def wait_for_enter(): | |
# Print the prompt and flush immediately so it's visible. | |
print("Press Enter to exit...", flush=True) | |
loop = asyncio.get_event_loop() | |
# Run sys.stdin.readline in the default executor so we don't block the event loop. | |
await loop.run_in_executor(None, sys.stdin.readline) | |
async def save_storage_state(): | |
auth_state_path = "auth_state.json" | |
print("\n=== Starting Authentication State Check ===") | |
# Check if auth state exists and print the result | |
has_auth_state = os.path.exists(auth_state_path) | |
if has_auth_state: | |
print(f"✓ Found existing auth_state.json at: {os.path.abspath(auth_state_path)}") | |
else: | |
print("✗ No existing auth_state.json found. Will create new authentication state.") | |
print("\n=== Launching Browser ===") | |
async with async_playwright() as playwright: | |
print("• Launching Chromium...") | |
browser = await playwright.chromium.launch(headless=False) | |
if has_auth_state: | |
print("• Loading stored authentication state...") | |
context = await browser.new_context(storage_state=auth_state_path) | |
else: | |
print("• Starting fresh browser context...") | |
context = await browser.new_context() | |
print("• Opening new page...") | |
page = await context.new_page() | |
print("• Navigating to Hugging Face...") | |
await page.goto("https://huggingface.co") | |
await page.wait_for_load_state("networkidle") | |
print("\n=== Instructions ===") | |
print("1. Please check if you're logged in.") | |
print("2. If not, log in manually in the browser window.") | |
print("3. When ready to exit and save the current state, hit Enter below.\n") | |
# Await the blocking call to wait for the user to press Enter. | |
await wait_for_enter() | |
print("\n=== Saving State ===") | |
await context.storage_state(path=auth_state_path) | |
print(f"✓ Authentication state saved to: {os.path.abspath(auth_state_path)}") | |
print("\n=== Cleaning Up ===") | |
print("• Closing browser...") | |
await browser.close() | |
print("✓ Done!") | |
if __name__ == "__main__": | |
asyncio.run(save_storage_state()) |