-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinitialize.py
More file actions
70 lines (57 loc) · 2.05 KB
/
initialize.py
File metadata and controls
70 lines (57 loc) · 2.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
"""One-time setup script for the Google Suite plugin.
Installs required Python dependencies.
Called by the Init button in Agent Zero's Plugin List UI.
Must define main() returning 0 on success, non-zero on failure."""
import logging
import shutil
import subprocess
import sys
from pathlib import Path
logger = logging.getLogger("google_init")
def _find_python():
"""Find the correct Python interpreter (prefer A0 venv)."""
venv_python = Path("/opt/venv-a0/bin/python")
if venv_python.exists():
return str(venv_python)
return sys.executable
def _install(pip_name: str, python: str):
"""Install a package using uv (preferred) or pip as fallback."""
uv = shutil.which("uv")
if uv:
subprocess.check_call([uv, "pip", "install", pip_name, "--python", python])
else:
subprocess.check_call([python, "-m", "pip", "install", pip_name])
def main():
python = _find_python()
deps = {
"google.auth": "google-auth>=2.0",
"google_auth_oauthlib": "google-auth-oauthlib>=1.0",
"googleapiclient": "google-api-python-client>=2.0",
"dateutil": "python-dateutil>=2.8",
"yaml": "pyyaml>=6.0,<7",
}
failed = []
for import_name, pip_name in deps.items():
try:
result = subprocess.run(
[python, "-c", f"import {import_name}"],
capture_output=True,
)
if result.returncode == 0:
logger.info(f"[Google Plugin] {pip_name} already installed.")
continue
except Exception:
pass
logger.info(f"[Google Plugin] Installing {pip_name}...")
try:
_install(pip_name, python)
except subprocess.CalledProcessError as e:
logger.error(f"Failed to install {pip_name}: {e}")
failed.append(pip_name)
if failed:
logger.error(f"[Google Plugin] Failed to install: {', '.join(failed)}")
return 1
logger.info("[Google Plugin] All dependencies ready.")
return 0
if __name__ == "__main__":
sys.exit(main())