11from enum import Enum
2-
3- from .node .node import NodeBackend
4- from .browser_main .browser_main import BrowserMainBackend
5- from .browser_worker .browser_worker import BrowserWorkerBackend
2+ import textwrap
63
74
85class BackendFamilyType (str , Enum ):
@@ -23,10 +20,53 @@ def get_backend_type_family(backend):
2320 return BackendFamilyType .browser
2421
2522
23+ def ensure_playwright_imports ():
24+ try :
25+ import playwright
26+ except ModuleNotFoundError as e :
27+ msg = """\n
28+ pyks-code-runner error:
29+
30+ * Cannot import playwright!
31+
32+ to use the browser-{worker/main} backends
33+ playwright needs to be installed.
34+
35+ Install playwight with:
36+
37+ * conda:
38+
39+ conda install -c microsoft playwright
40+
41+ * mamba:
42+
43+ mamba install -c microsoft playwright
44+
45+ * micromamba:
46+
47+ micromamb install -c microsoft playwright
48+
49+ * pip:
50+
51+ python -m pip install playwright
52+
53+ """
54+ raise ModuleNotFoundError (textwrap .dedent (msg ))
55+
56+
2657def get_backend_cls (backend_type ):
2758 if backend_type == BackendType .node :
59+ from .node .node import NodeBackend
60+
2861 return NodeBackend
62+
2963 elif backend_type == BackendType .browser_main :
64+ ensure_playwright_imports ()
65+ from .browser_main .browser_main import BrowserMainBackend
66+
3067 return BrowserMainBackend
3168 elif backend_type == BackendType .browser_worker :
69+ ensure_playwright_imports ()
70+ from .browser_worker .browser_worker import BrowserWorkerBackend
71+
3272 return BrowserWorkerBackend
0 commit comments