Skip to content

Commit 66f5c6e

Browse files
committed
Enable server-side rendering of Vega plots
1 parent 5e94ffa commit 66f5c6e

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

Dockerfile

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,13 @@ COPY notebook/notebook.patch /usr/local/lib/python3.6/site-packages/notebook
194194
RUN cd /usr/local/lib/python3.6/site-packages/notebook \
195195
&& patch -p0 < notebook.patch
196196

197+
# Install Node and vega-cli for server-side image rendering
198+
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash -
199+
RUN apt-get -y install nodejs
200+
RUN npm install -g --unsafe-perm vega-cli@5.4.0 vega-lite@2.7.0
201+
COPY notebook/vega-cli.patch /usr/lib/node_modules
202+
RUN cd /usr/lib/node_modules && patch -p0 < vega-cli.patch
203+
197204
# Install One Codex Python lib
198205
RUN pip install --no-cache onecodex[all]==0.5.4
199206

notebook/vega-cli.patch

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
diff -Naur vega-cli/src/args.js vega-cli-patched/src/args.js
2+
--- vega-cli/src/args.js 1985-10-26 01:15:00.000000000 -0700
3+
+++ vega-cli/src/args.js 2019-07-18 12:19:39.000000000 -0700
4+
@@ -39,6 +39,10 @@
5+
.describe('h', 'Include XML header and SVG doctype.');
6+
}
7+
8+
+ args.boolean('vl')
9+
+ .alias('vl', 'vegaLite')
10+
+ .describe('vl', 'Compile spec as Vega-Lite.');
11+
+
12+
args.number('s')
13+
.alias('s', 'scale')
14+
.default('s', 1)
15+
diff -Naur vega-cli/src/render.js vega-cli-patched/src/render.js
16+
--- vega-cli/src/render.js 1985-10-26 01:15:00.000000000 -0700
17+
+++ vega-cli-patched/src/render.js 2019-07-18 12:19:39.000000000 -0700
18+
@@ -1,4 +1,5 @@
19+
const vega = require('vega'),
20+
+ vl = require('vega-lite'),
21+
path = require('path'),
22+
args = require('./args'),
23+
read = require('./read');
24+
@@ -44,6 +45,11 @@
25+
26+
// instantiate view and invoke headless render method
27+
function render(spec) {
28+
+ // use vega-lite, if specified
29+
+ if (arg.vegaLite) {
30+
+ spec = vl.compile(spec, { logger: vega.logger(loglevel, 'warn') }).spec;
31+
+ }
32+
+
33+
const view = new vega.View(vega.parse(spec, config), {
34+
loader: vega.loader({baseURL: base}), // load files from base path
35+
logger: vega.logger(loglevel, 'error'), // route all logging to stderr

0 commit comments

Comments
 (0)