| 20 | |
| 21 | |
| 22 | def check_dependencies( |
| 23 | launch_server: Optional[bool], DefaultAddons: Optional[bool] |
| 24 | ) -> None: |
| 25 | logger.debug("[Init] Step 1: Checking dependencies...") |
| 26 | required_modules: Dict[str, str] = {} |
| 27 | if launch_server is not None and DefaultAddons is not None: |
| 28 | required_modules["camoufox"] = "camoufox (for server and addons)" |
| 29 | elif launch_server is not None: |
| 30 | required_modules["camoufox_server"] = "camoufox.server" |
| 31 | logger.warning( |
| 32 | " 'camoufox.server' imported, but 'camoufox.DefaultAddons' not imported. Addon exclusion functionality may be limited." |
| 33 | ) |
| 34 | missing_py_modules: List[str] = [] |
| 35 | dependencies_ok = True |
| 36 | if required_modules: |
| 37 | for module_name, install_package_name in required_modules.items(): |
| 38 | try: |
| 39 | __import__(module_name) |
| 40 | logger.debug(f"Module '{module_name}' found.") |
| 41 | except ImportError: |
| 42 | logger.error( |
| 43 | f" Module '{module_name}' (package: '{install_package_name}') not found." |
| 44 | ) |
| 45 | missing_py_modules.append(install_package_name) |
| 46 | dependencies_ok = False |
| 47 | else: |
| 48 | # Check if internal launch mode, if so camoufox must be importable |
| 49 | is_any_internal_arg = any(arg.startswith("--internal-") for arg in sys.argv) |
| 50 | if is_any_internal_arg and (launch_server is None or DefaultAddons is None): |
| 51 | logger.error( |
| 52 | " Internal launch mode (--internal-*) requires 'camoufox' package, but failed to import." |
| 53 | ) |
| 54 | dependencies_ok = False |
| 55 | elif not is_any_internal_arg: |
| 56 | logger.debug( |
| 57 | "Internal launch mode not requested and camoufox.server not imported, skipping 'camoufox' Python package check." |
| 58 | ) |
| 59 | |
| 60 | try: |
| 61 | from server import app as server_app_check |
| 62 | |
| 63 | if server_app_check: |
| 64 | logger.debug("[Init] Successfully imported app object from server.py") |
| 65 | except ImportError as e_import_server: |
| 66 | logger.error( |
| 67 | f" Cannot import 'app' object from 'server.py': {e_import_server}", |
| 68 | exc_info=True, |
| 69 | ) |
| 70 | logger.error("Please ensure 'server.py' file exists and has no import errors.") |
| 71 | dependencies_ok = False |
| 72 | |
| 73 | if not dependencies_ok: |
| 74 | logger.error("-------------------------------------------------") |
| 75 | logger.error("Dependency check failed!") |
| 76 | if missing_py_modules: |
| 77 | logger.error(f"Missing Python libraries: {', '.join(missing_py_modules)}") |
| 78 | logger.error( |
| 79 | f" Please try installing with pip: pip install {' '.join(missing_py_modules)}" |