Spaces:
Runtime error
Runtime error
import subprocess | |
import sys | |
import asyncio | |
from .async_logger import AsyncLogger, LogLevel | |
# Initialize logger | |
logger = AsyncLogger(log_level=LogLevel.DEBUG, verbose=True) | |
def post_install(): | |
"""Run all post-installation tasks""" | |
logger.info("Running post-installation setup...", tag="INIT") | |
install_playwright() | |
run_migration() | |
logger.success("Post-installation setup completed!", tag="COMPLETE") | |
def install_playwright(): | |
logger.info("Installing Playwright browsers...", tag="INIT") | |
try: | |
# subprocess.check_call([sys.executable, "-m", "playwright", "install", "--with-deps", "--force", "chrome"]) | |
subprocess.check_call([sys.executable, "-m", "playwright", "install", "--with-deps", "--force", "chromium"]) | |
logger.success("Playwright installation completed successfully.", tag="COMPLETE") | |
except subprocess.CalledProcessError as e: | |
# logger.error(f"Error during Playwright installation: {e}", tag="ERROR") | |
logger.warning(f"Please run '{sys.executable} -m playwright install --with-deps' manually after the installation.") | |
except Exception as e: | |
# logger.error(f"Unexpected error during Playwright installation: {e}", tag="ERROR") | |
logger.warning(f"Please run '{sys.executable} -m playwright install --with-deps' manually after the installation.") | |
def run_migration(): | |
"""Initialize database during installation""" | |
try: | |
logger.info("Starting database initialization...", tag="INIT") | |
from crawl4ai.async_database import async_db_manager | |
asyncio.run(async_db_manager.initialize()) | |
logger.success("Database initialization completed successfully.", tag="COMPLETE") | |
except ImportError: | |
logger.warning("Database module not found. Will initialize on first use.") | |
except Exception as e: | |
logger.warning(f"Database initialization failed: {e}") | |
logger.warning("Database will be initialized on first use") | |
async def run_doctor(): | |
"""Test if Crawl4AI is working properly""" | |
logger.info("Running Crawl4AI health check...", tag="INIT") | |
try: | |
from .async_webcrawler import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode | |
browser_config = BrowserConfig( | |
headless=True, | |
browser_type="chromium", | |
ignore_https_errors=True, | |
light_mode=True, | |
viewport_width=1280, | |
viewport_height=720 | |
) | |
run_config = CrawlerRunConfig( | |
cache_mode=CacheMode.BYPASS, | |
screenshot=True, | |
) | |
async with AsyncWebCrawler(config=browser_config) as crawler: | |
logger.info("Testing crawling capabilities...", tag="TEST") | |
result = await crawler.arun( | |
url="https://crawl4ai.com", | |
config=run_config | |
) | |
if result and result.markdown: | |
logger.success("✅ Crawling test passed!", tag="COMPLETE") | |
return True | |
else: | |
raise Exception("Failed to get content") | |
except Exception as e: | |
logger.error(f"❌ Test failed: {e}", tag="ERROR") | |
return False | |
def doctor(): | |
"""Entry point for the doctor command""" | |
import asyncio | |
return asyncio.run(run_doctor()) | |