Spaces:
Running
on
Zero
Running
on
Zero
File size: 3,876 Bytes
d1ed09d |
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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
#-----------------------------------------------------------------------------
# Copyright (c) 2012 - 2022, Anaconda, Inc., and Bokeh Contributors.
# All rights reserved.
#
# The full license is in the file LICENSE.txt, distributed with this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Boilerplate
#-----------------------------------------------------------------------------
from __future__ import annotations
import logging # isort:skip
log = logging.getLogger(__name__)
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
# Standard library imports
import os
from os.path import join
from subprocess import Popen
from typing import List
# Bokeh imports
from . import __version__
from .core.types import PathLike
from .settings import settings
from .util.compiler import _nodejs_path
#-----------------------------------------------------------------------------
# Globals and constants
#-----------------------------------------------------------------------------
__all__ = ("init", "build")
#-----------------------------------------------------------------------------
# General API
#-----------------------------------------------------------------------------
def init(base_dir: PathLike, *, interactive: bool = False,
bokehjs_version: str | None = None, debug: bool = False) -> bool:
"""
Initialize a directory as a new bokeh extension.
Arguments:
base_dir (str) : The location of the extension.
interactive (bool) : Guide the user step-by-step.
bokehjs_version (str) : Use a specific version of bokehjs.
debug (bool) : Allow for remote debugging.
Returns:
bool
"""
args: List[str] = []
if interactive:
args.append("--interactive")
if bokehjs_version:
args.extend(["--bokehjs-version", bokehjs_version])
proc = _run_command("init", base_dir, args, debug)
return proc.returncode == 0
def build(base_dir: PathLike, *, rebuild: bool = False, debug: bool = False) -> bool:
"""
Build a bokeh extension in the given directory.
Arguments:
base_dir (str) : The location of the extension.
rebuild (bool) : Ignore caches and rebuild from scratch.
debug (bool) : Allow for remote debugging.
Returns:
bool
"""
args: List[str] = []
if rebuild:
args.append("--rebuild")
proc = _run_command("build", base_dir, args, debug)
return proc.returncode == 0
#-----------------------------------------------------------------------------
# Dev API
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Private API
#-----------------------------------------------------------------------------
def _run_command(command: str, base_dir: PathLike, args: List[str], debug: bool = False) -> Popen[bytes]:
bokehjs_dir = settings.bokehjsdir()
if debug:
compiler_script = join(bokehjs_dir, "js", "compiler", "main.js")
else:
compiler_script = join(bokehjs_dir, "js", "compiler.js")
cmd = [
"--no-deprecation",
compiler_script,
command,
"--base-dir", os.fspath(base_dir),
"--bokehjs-dir", bokehjs_dir,
"--bokeh-version", __version__,
]
if debug:
cmd.insert(0, "--inspect-brk")
cmd.extend(args)
proc = Popen([_nodejs_path()] + cmd)
proc.communicate()
return proc
#-----------------------------------------------------------------------------
# Code
#-----------------------------------------------------------------------------
|