From 29a69a546c3ff0a62e932b224bb932dce71602f6 Mon Sep 17 00:00:00 2001 From: Charlie Newey Date: Mon, 4 Dec 2017 14:27:11 +0000 Subject: [PATCH 01/29] Fixes incorrect date type inference in #6432. (#6433) --- beakerx/beakerx/tabledisplay/tabledisplay.py | 2 +- beakerx/beakerx/tabledisplay/tableitems.py | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/beakerx/beakerx/tabledisplay/tabledisplay.py b/beakerx/beakerx/tabledisplay/tabledisplay.py index 70b591e933..10167b1ef9 100644 --- a/beakerx/beakerx/tabledisplay/tabledisplay.py +++ b/beakerx/beakerx/tabledisplay/tabledisplay.py @@ -155,7 +155,7 @@ def convert_type(object_type, value): return "integer" if object_type == "uint64": return "int64" - if is_date(value): + if object_type.startswith("datetime64"): return "time" if isinstance(value, str): return "string" diff --git a/beakerx/beakerx/tabledisplay/tableitems.py b/beakerx/beakerx/tabledisplay/tableitems.py index 6efd39fbc0..028ea8ada1 100644 --- a/beakerx/beakerx/tabledisplay/tableitems.py +++ b/beakerx/beakerx/tabledisplay/tableitems.py @@ -43,15 +43,15 @@ class ColumnType(Enum): class DateType: type = "Date" - + def __init__(self, value): - self.timestamp = parse(value).timestamp() * 1000 + self.timestamp = parse(str(value)).timestamp() * 1000 class DataBarsRenderer: type = "DataBars" includeText = True - + def __init__(self, x): self.includeText = x @@ -60,7 +60,7 @@ class DecimalStringFormat: type = "decimal" minDecimals = 4 maxDecimals = 4 - + def __init__(self, min=4, max=4): self.minDecimals = min self.maxDecimals = max @@ -96,8 +96,8 @@ class TableDisplayCellHighlighter: FULL_ROW = HighlightStyle.FULL_ROW SINGLE_COLUMN = HighlightStyle.SINGLE_COLUMN defaultStyle = HighlightStyle.FULL_ROW - + @staticmethod def getHeatmapHighlighter(colName, style=defaultStyle, minVal=None, maxVal=None, minColor=None, maxColor=None): return HeatmapHighlighter (colName, style, minVal, maxVal, minColor, maxColor) - \ No newline at end of file + From d723bc3514cedb67c53063f4b62e3f20e7cc36e0 Mon Sep 17 00:00:00 2001 From: jaroslawmalekcodete Date: Mon, 4 Dec 2017 15:54:41 +0100 Subject: [PATCH 02/29] #6395: enable import magic command for all kernels (#6449) --- .../beakerx/evaluator/BaseEvaluator.java | 42 +++++++++- .../twosigma/beakerx/evaluator/Evaluator.java | 3 +- .../beakerx/evaluator/EvaluatorManager.java | 9 ++- .../beakerx/kernel/AddImportStatus.java | 22 +++++ .../com/twosigma/beakerx/kernel/Imports.java | 13 +-- .../com/twosigma/beakerx/kernel/Kernel.java | 4 +- .../beakerx/kernel/KernelFunctionality.java | 2 +- .../functionality/AddImportMagicCommand.java | 34 ++------ .../twosigma/beakerx/KernelExecutionTest.java | 80 ++++++++++++++++++- .../java/com/twosigma/beakerx/KernelTest.java | 5 +- .../beakerx/evaluator/EvaluatorTest.java | 1 - .../twosigma/beakerx/kernel/ImportsTest.java | 4 +- .../clojure/evaluator/ClojureEvaluator.java | 6 +- .../clojure/kernel/ClojureKernelTest.java | 16 ++++ .../beakerx/javash/kernel/JavaKernelTest.java | 4 + kernel/kotlin/build.gradle | 8 +- .../evaluator/ReplWithClassLoaderFactory.java | 2 +- .../kotlin/kernel/KotlinKernelTest.java | 5 ++ 18 files changed, 203 insertions(+), 57 deletions(-) create mode 100644 kernel/base/src/main/java/com/twosigma/beakerx/kernel/AddImportStatus.java diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/evaluator/BaseEvaluator.java b/kernel/base/src/main/java/com/twosigma/beakerx/evaluator/BaseEvaluator.java index 0fce1cd783..bd185cb8ef 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/evaluator/BaseEvaluator.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/evaluator/BaseEvaluator.java @@ -15,9 +15,12 @@ */ package com.twosigma.beakerx.evaluator; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; +import com.google.common.reflect.ClassPath; import com.twosigma.beakerx.DefaultJVMVariables; import com.twosigma.beakerx.jvm.threads.CellExecutor; +import com.twosigma.beakerx.kernel.AddImportStatus; import com.twosigma.beakerx.kernel.Classpath; import com.twosigma.beakerx.kernel.ImportPath; import com.twosigma.beakerx.kernel.Imports; @@ -27,6 +30,7 @@ import org.apache.commons.io.FileUtils; import java.io.File; +import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Collection; @@ -81,11 +85,15 @@ public List addJarsToClasspath(List paths) { } @Override - public void addImport(ImportPath anImport) { - boolean add = imports.add(anImport); - if (add) { + public AddImportStatus addImport(ImportPath anImport) { + if (!isImportPathValid(anImport)) { + return AddImportStatus.ERROR; + } + AddImportStatus add = imports.add(anImport); + if (AddImportStatus.ADDED.equals(add)) { addImportToClassLoader(anImport); } + return add; } @Override @@ -216,4 +224,32 @@ private File getOrCreateFile(String pathToMavenRepo) { return theDir; } + private boolean isImportPathValid(ImportPath anImport) { + String importToCheck = anImport.asString(); + if (importToCheck.endsWith(".*")) { + return isValidImportWithWildcard(importToCheck); + } else { + return isValidClassImport(importToCheck); + } + } + + private boolean isValidClassImport(String importToCheck) { + try { + getClassLoader().loadClass(importToCheck); + return true; + } catch (ClassNotFoundException e) { + return false; + } + } + + private boolean isValidImportWithWildcard(String importToCheck) { + try { + String packageWithoutWildcard = importToCheck.substring(0, importToCheck.lastIndexOf(".")); + ImmutableSet topLevelClasses = ClassPath.from(getClassLoader()).getTopLevelClasses(packageWithoutWildcard); + return !topLevelClasses.isEmpty(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/evaluator/Evaluator.java b/kernel/base/src/main/java/com/twosigma/beakerx/evaluator/Evaluator.java index 8daf4e9866..11fce43307 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/evaluator/Evaluator.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/evaluator/Evaluator.java @@ -15,6 +15,7 @@ */ package com.twosigma.beakerx.evaluator; +import com.twosigma.beakerx.kernel.AddImportStatus; import com.twosigma.beakerx.kernel.Repos; import java.io.IOException; import java.nio.file.Path; @@ -65,7 +66,7 @@ public interface Evaluator { String addRepo(String name, String url); - void addImport(ImportPath anImport); + AddImportStatus addImport(ImportPath anImport); void removeImport(ImportPath anImport); diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/evaluator/EvaluatorManager.java b/kernel/base/src/main/java/com/twosigma/beakerx/evaluator/EvaluatorManager.java index 6c985dbecc..c31496175f 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/evaluator/EvaluatorManager.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/evaluator/EvaluatorManager.java @@ -18,6 +18,7 @@ import com.twosigma.beakerx.autocomplete.AutocompleteResult; import com.twosigma.beakerx.jvm.object.SimpleEvaluationObject; import com.twosigma.beakerx.jvm.object.SimpleEvaluationObjectWithTime; +import com.twosigma.beakerx.kernel.AddImportStatus; import com.twosigma.beakerx.kernel.Classpath; import com.twosigma.beakerx.kernel.ImportPath; import com.twosigma.beakerx.kernel.Imports; @@ -130,10 +131,12 @@ public Imports getImports() { return this.evaluator.getImports(); } - public Repos getRepos() { return this.evaluator.getRepos(); } + public Repos getRepos() { + return this.evaluator.getRepos(); + } - public void addImport(ImportPath anImport) { - this.evaluator.addImport(anImport); + public AddImportStatus addImport(ImportPath anImport) { + return this.evaluator.addImport(anImport); } public void removeImport(ImportPath anImport) { diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/AddImportStatus.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/AddImportStatus.java new file mode 100644 index 0000000000..cf55b1a2ae --- /dev/null +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/AddImportStatus.java @@ -0,0 +1,22 @@ +/* + * Copyright 2017 TWO SIGMA OPEN SOURCE, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.twosigma.beakerx.kernel; + +public enum AddImportStatus { + ADDED, + EXISTS, + ERROR +} diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/Imports.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/Imports.java index e07137601e..3b3d88fe68 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/Imports.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/Imports.java @@ -20,6 +20,8 @@ import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkNotNull; +import static com.twosigma.beakerx.kernel.AddImportStatus.ADDED; +import static com.twosigma.beakerx.kernel.AddImportStatus.EXISTS; public class Imports { @@ -30,13 +32,14 @@ public List getImportPaths() { return imports; } - public boolean add(ImportPath anImport) { + public AddImportStatus add(ImportPath anImport) { checkNotNull(anImport); - if (!this.imports.contains(anImport)) { - clear(); - return this.imports.add(anImport); + if (this.imports.contains(anImport)) { + return EXISTS; } - return false; + clear(); + this.imports.add(anImport); + return ADDED; } public boolean remove(ImportPath anImport) { diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/Kernel.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/Kernel.java index 63c472a053..5e07ebf248 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/Kernel.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/Kernel.java @@ -234,8 +234,8 @@ public Imports getImports() { } @Override - public void addImport(ImportPath anImport) { - this.evaluatorManager.addImport(anImport); + public AddImportStatus addImport(ImportPath anImport) { + return this.evaluatorManager.addImport(anImport); } @Override diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/KernelFunctionality.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/KernelFunctionality.java index 67fec29267..4883c7c0ba 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/KernelFunctionality.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/KernelFunctionality.java @@ -79,7 +79,7 @@ public interface KernelFunctionality { String addRepo(String name, String url); - void addImport(ImportPath anImport); + AddImportStatus addImport(ImportPath anImport); void removeImport(ImportPath anImport); diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/AddImportMagicCommand.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/AddImportMagicCommand.java index 7d173edc81..f93966940a 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/AddImportMagicCommand.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/AddImportMagicCommand.java @@ -15,17 +15,13 @@ */ package com.twosigma.beakerx.kernel.magic.command.functionality; -import com.twosigma.beakerx.jvm.object.SimpleEvaluationObject; +import com.twosigma.beakerx.kernel.AddImportStatus; import com.twosigma.beakerx.kernel.ImportPath; import com.twosigma.beakerx.kernel.KernelFunctionality; import com.twosigma.beakerx.kernel.magic.command.MagicCommandExecutionParam; import com.twosigma.beakerx.kernel.magic.command.MagicCommandFunctionality; import com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutcomeItem; import com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutput; -import com.twosigma.beakerx.message.Message; - -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; import static com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutcomeItem.Status.ERROR; import static com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutcomeItem.Status.OK; @@ -53,33 +49,15 @@ public boolean matchCommand(String command) { @Override public MagicCommandOutcomeItem execute(MagicCommandExecutionParam param) { String command = param.getCommand(); - int executionCount = param.getExecutionCount(); String[] parts = command.split(" "); if (parts.length != 2) { return new MagicCommandOutput(OK, kernel.getImports().toString()); } - - this.kernel.addImport(new ImportPath(parts[1])); - - if (isValidImport(executionCount)) { - return new MagicCommandOutput(OK); - } - - this.kernel.removeImport(new ImportPath(parts[1])); - - return new MagicCommandOutput(ERROR, "Could not import " + parts[1] + ", class not found."); - } - - private boolean isValidImport(int executionCount) { - try { - CompletableFuture validImportFuture = new CompletableFuture<>(); - kernel.executeCode("", new Message(), executionCount, - seo -> validImportFuture.complete(!seo.getStatus().equals(SimpleEvaluationObject.EvaluationStatus.ERROR))); - - return validImportFuture.get(); - } catch (InterruptedException | ExecutionException e) { - return Boolean.FALSE; + ImportPath anImport = new ImportPath(parts[1]); + AddImportStatus status = this.kernel.addImport(anImport); + if (AddImportStatus.ERROR.equals(status)) { + return new MagicCommandOutput(ERROR, "Could not import " + parts[1]); } + return new MagicCommandOutput(OK); } - } diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java index 3110ade731..b3756feee2 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java @@ -19,6 +19,7 @@ import com.twosigma.beakerx.kernel.comm.Comm; import com.twosigma.beakerx.kernel.magic.command.CodeFactory; import com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutcome; +import com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutcomeItem; import com.twosigma.beakerx.message.Message; import com.twosigma.beakerx.mimetype.MIMEContainer; import org.junit.Test; @@ -32,6 +33,7 @@ import static com.twosigma.beakerx.evaluator.EvaluatorResultTestWatcher.waitForResult; import static com.twosigma.beakerx.evaluator.EvaluatorResultTestWatcher.waitForSentMessage; import static com.twosigma.beakerx.kernel.handler.MagicCommandExecutor.executeMagicCommands; +import static com.twosigma.beakerx.kernel.magic.command.functionality.AddImportMagicCommand.IMPORT; import static com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathAddJarMagicCommand.CLASSPATH_ADD_JAR; import static com.twosigma.beakerx.kernel.magic.command.functionality.LoadMagicMagicCommand.LOAD_MAGIC; import static org.assertj.core.api.Assertions.assertThat; @@ -119,7 +121,7 @@ private void addJarWithCustomMagicCommand() throws InterruptedException { } @Test - public void addImportFromDemoJar() throws Exception { + public void shouldImportFromAddedDemoJar() throws Exception { //given //when addDemoJar(); @@ -154,9 +156,81 @@ private void addDemoJar() { String allCode = CLASSPATH_ADD_JAR + " " + DEMO_JAR; Code code = CodeFactory.create(allCode, new Message(), getKernel()); MagicCommandOutcome result = executeMagicCommands(code, 1, getKernel()); - MIMEContainer message = result.getItems().get(0).getMIMEContainer().get(); - assertThat(getText(message)).contains("Added jar: [" + DEMO_JAR_NAME + "]"); + MagicCommandOutcomeItem.Status status = result.getItems().get(0).getStatus(); + assertThat(status).isEqualTo(MagicCommandOutcomeItem.Status.OK); } + @Test + public void shouldImportDemoClassByMagicCommand() throws Exception { + //given + addDemoJar(); + String path = pathToDemoClassFromAddedDemoJar(); + //when + MagicCommandOutcomeItem.Status status = importDemoClassByMagicCommand(IMPORT + " " + path).getStatus(); + //then + assertThat(status).isEqualTo(MagicCommandOutcomeItem.Status.OK); + verifyImportedDemoClassByMagicCommand(); + } + + private MagicCommandOutcomeItem importDemoClassByMagicCommand(String allCode) { + Code code = CodeFactory.create(allCode, new Message(), getKernel()); + MagicCommandOutcome result = executeMagicCommands(code, 2, getKernel()); + return result.getItems().get(0); + } + protected void verifyImportedDemoClassByMagicCommand() throws InterruptedException { + String allCode = getObjectTestMethodFromAddedDemoJar(); + Message message = getExecuteRequestMessage(allCode); + getKernelSocketsService().handleMsg(message); + Optional idleMessage = waitForIdleMessage(getKernelSocketsService().getKernelSockets()); + assertThat(idleMessage).isPresent(); + waitForResult(getKernelSocketsService().getKernelSockets()); + Map actual = ((Map) getKernelSocketsService().getExecuteResultMessage().get().getContent().get(Comm.DATA)); + String value = (String) actual.get("text/plain"); + assertThat(value).isEqualTo("Demo_test_123"); + } + + protected String pathToDemoClassFromAddedDemoJar() { + return "com.example.Demo"; + } + + protected String getObjectTestMethodFromAddedDemoJar() { + return "new Demo().getObjectTest()"; + } + + @Test + public void shouldImportDemoClassWithWildcardByMagicCommand() throws Exception { + //given + addDemoJar(); + String path = pathToDemoClassFromAddedDemoJar(); + String allCode = IMPORT + " " + path.substring(0, path.lastIndexOf(".")) + ".*"; + //when + MagicCommandOutcomeItem.Status status = importDemoClassByMagicCommand(allCode).getStatus(); + //then + assertThat(status).isEqualTo(MagicCommandOutcomeItem.Status.OK); + verifyImportedDemoClassByMagicCommand(); + } + + @Test + public void shouldNotImportClassesFromUnknownPackageWithWildcardByMagicCommand() throws Exception { + //given + String path = pathToDemoClassFromAddedDemoJar(); + String allCode = IMPORT + " " + (path.substring(0, path.lastIndexOf(".")) + "Unknown.*"); + addDemoJar(); + //when + MagicCommandOutcomeItem result = importDemoClassByMagicCommand(allCode); + //then + assertThat(result.getStatus()).isEqualTo(MagicCommandOutcomeItem.Status.ERROR); + assertThat((String)result.getMIMEContainer().get().getData()).contains("Could not import"); + } + + @Test + public void shouldNotImportUnknownClassByMagicCommand() throws Exception { + //given + String allCode = IMPORT + " " + pathToDemoClassFromAddedDemoJar() + "UnknownClass"; + //when + MagicCommandOutcomeItem.Status status = importDemoClassByMagicCommand(allCode).getStatus(); + //then + assertThat(status).isEqualTo(MagicCommandOutcomeItem.Status.ERROR); + } } diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/KernelTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/KernelTest.java index ca542b8d65..beaf866761 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/KernelTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/KernelTest.java @@ -24,6 +24,7 @@ import com.twosigma.beakerx.handler.Handler; import com.twosigma.beakerx.jvm.object.SimpleEvaluationObject; import com.twosigma.beakerx.jvm.object.SimpleEvaluationObjectWithTime; +import com.twosigma.beakerx.kernel.AddImportStatus; import com.twosigma.beakerx.kernel.Classpath; import com.twosigma.beakerx.kernel.EvaluatorParameters; import com.twosigma.beakerx.kernel.ImportPath; @@ -214,8 +215,8 @@ public String addRepo(String name, String url) { } @Override - public void addImport(ImportPath anImport) { - this.evaluatorManager.addImport(anImport); + public AddImportStatus addImport(ImportPath anImport) { + return this.evaluatorManager.addImport(anImport); } @Override diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorTest.java index d3eef0325f..e23b9eea9f 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorTest.java @@ -47,7 +47,6 @@ public class EvaluatorTest extends BaseEvaluator { private int resetEnvironmentCounter = 0; private BeakerxUrlClassLoader loader = new BeakerxUrlClassLoader(Thread.currentThread().getContextClassLoader()); - public EvaluatorTest() { this("idEvaluatorTest", "sIdEvaluatorTest", TestBeakerCellExecutor.cellExecutor(), KERNEL_PARAMETERS); } diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/kernel/ImportsTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/ImportsTest.java index 1f61de953e..0f257c7be3 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/kernel/ImportsTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/ImportsTest.java @@ -34,8 +34,8 @@ public void shouldNotHaveDuplications() throws Exception { //given ImportPath anImport = new ImportPath("com.twosigma.beakerx.widgets.integers.IntSlider"); //when - assertThat(imports.add(anImport)).isTrue(); - assertThat(imports.add(anImport)).isFalse(); + assertThat(imports.add(anImport)).isEqualTo(AddImportStatus.ADDED); + assertThat(imports.add(anImport)).isEqualTo(AddImportStatus.EXISTS); //then assertThat(imports.getImportPaths()).containsExactly(new ImportPath("com.twosigma.beakerx.widgets.integers.IntSlider")); } diff --git a/kernel/clojure/src/main/java/com/twosigma/beakerx/clojure/evaluator/ClojureEvaluator.java b/kernel/clojure/src/main/java/com/twosigma/beakerx/clojure/evaluator/ClojureEvaluator.java index 1d5c534793..5c44051cfb 100644 --- a/kernel/clojure/src/main/java/com/twosigma/beakerx/clojure/evaluator/ClojureEvaluator.java +++ b/kernel/clojure/src/main/java/com/twosigma/beakerx/clojure/evaluator/ClojureEvaluator.java @@ -112,13 +112,17 @@ protected void doResetEnvironment() { } private void addImportPathToShell(ImportPath s) { + ClassLoader oldLoader = Thread.currentThread().getContextClassLoader(); + Thread.currentThread().setContextClassLoader(loader); String ss = s.asString(); if (!ss.isEmpty()) { try { loader.loadClass(ss); clojureLoadString.invoke(String.format("(import '%s)", ss)); } catch (ClassNotFoundException e) { - logger.error("Could not create class while loading notebook: " + ss); + throw new RuntimeException("Could not create class while loading notebook: " + ss); + } finally { + Thread.currentThread().setContextClassLoader(oldLoader); } } } diff --git a/kernel/clojure/src/test/java/com/twosigma/beakerx/clojure/kernel/ClojureKernelTest.java b/kernel/clojure/src/test/java/com/twosigma/beakerx/clojure/kernel/ClojureKernelTest.java index d808d01f92..3997345dba 100644 --- a/kernel/clojure/src/test/java/com/twosigma/beakerx/clojure/kernel/ClojureKernelTest.java +++ b/kernel/clojure/src/test/java/com/twosigma/beakerx/clojure/kernel/ClojureKernelTest.java @@ -94,6 +94,17 @@ protected String codeForVerifyingAddedDemoJar() { "(. demo getObjectTest)"; } + @Override + protected String pathToDemoClassFromAddedDemoJar() { + return "com.example.Demo"; + } + + @Override + protected String getObjectTestMethodFromAddedDemoJar() { + return "(def demo (new Demo))\n" + + "(. demo getObjectTest)"; + } + @Test public void evaluateFibSeq() throws Exception { //given @@ -185,4 +196,9 @@ private void verifyTableDisplay(KernelSocketsServiceTest kernelSocketsService) { assertThat(values.get(1).get(0)).isEqualTo(2); } + @Test + public void shouldImportDemoClassWithWildcardByMagicCommand() throws Exception { + // clojure doesn't support wildcard + } + } \ No newline at end of file diff --git a/kernel/java/src/test/java/com/twosigma/beakerx/javash/kernel/JavaKernelTest.java b/kernel/java/src/test/java/com/twosigma/beakerx/javash/kernel/JavaKernelTest.java index d5aab38945..acc1cd40ce 100644 --- a/kernel/java/src/test/java/com/twosigma/beakerx/javash/kernel/JavaKernelTest.java +++ b/kernel/java/src/test/java/com/twosigma/beakerx/javash/kernel/JavaKernelTest.java @@ -77,5 +77,9 @@ protected String codeForVerifyingAddedDemoJar() { "return new Demo().getObjectTest();"; } + @Override + protected String getObjectTestMethodFromAddedDemoJar() { + return "return new Demo().getObjectTest();"; + } } \ No newline at end of file diff --git a/kernel/kotlin/build.gradle b/kernel/kotlin/build.gradle index e7f611d92b..120f5aebcc 100644 --- a/kernel/kotlin/build.gradle +++ b/kernel/kotlin/build.gradle @@ -40,10 +40,10 @@ repositories { dependencies { provided project(':base') - compile group: 'org.jetbrains.kotlin', name: 'kotlin-compiler', version: '1.1.3' - compile group: 'org.jetbrains.kotlin', name: 'kotlin-script-runtime', version: '1.1.3' - compile group: 'org.jetbrains.kotlin', name: 'kotlin-runtime', version: '1.1.3' - compile group: 'org.jetbrains.kotlin', name: 'kotlin-reflect', version: '1.1.3' + compile group: 'org.jetbrains.kotlin', name: 'kotlin-compiler-embeddable', version: '1.2.0' + compile group: 'org.jetbrains.kotlin', name: 'kotlin-script-runtime', version: '1.2.0' + compile group: 'org.jetbrains.kotlin', name: 'kotlin-runtime', version: '1.2.0' + compile group: 'org.jetbrains.kotlin', name: 'kotlin-reflect', version: '1.2.0' testCompile project(':base').sourceSets.test.output } diff --git a/kernel/kotlin/src/main/java/com/twosigma/beakerx/kotlin/evaluator/ReplWithClassLoaderFactory.java b/kernel/kotlin/src/main/java/com/twosigma/beakerx/kotlin/evaluator/ReplWithClassLoaderFactory.java index 994f7ca107..37b3049734 100644 --- a/kernel/kotlin/src/main/java/com/twosigma/beakerx/kotlin/evaluator/ReplWithClassLoaderFactory.java +++ b/kernel/kotlin/src/main/java/com/twosigma/beakerx/kotlin/evaluator/ReplWithClassLoaderFactory.java @@ -32,9 +32,9 @@ import java.util.Arrays; import java.util.List; -import static com.intellij.openapi.util.Disposer.newDisposable; import static org.jetbrains.kotlin.cli.jvm.config.JvmContentRootsKt.addJvmClasspathRoot; import static org.jetbrains.kotlin.cli.jvm.config.JvmContentRootsKt.addJvmClasspathRoots; +import static org.jetbrains.kotlin.com.intellij.openapi.util.Disposer.newDisposable; public class ReplWithClassLoaderFactory { diff --git a/kernel/kotlin/src/test/java/com/twosigma/beakerx/kotlin/kernel/KotlinKernelTest.java b/kernel/kotlin/src/test/java/com/twosigma/beakerx/kotlin/kernel/KotlinKernelTest.java index 25de6d2e06..bf232ca204 100644 --- a/kernel/kotlin/src/test/java/com/twosigma/beakerx/kotlin/kernel/KotlinKernelTest.java +++ b/kernel/kotlin/src/test/java/com/twosigma/beakerx/kotlin/kernel/KotlinKernelTest.java @@ -71,4 +71,9 @@ protected String codeForVerifyingAddedDemoJar() { "Demo().getObjectTest()"; } + @Override + protected String getObjectTestMethodFromAddedDemoJar() { + return "Demo().getObjectTest()"; + } + } From b3574d0ca7a170e7b3bf66060d5edf0605ab83e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Pior?= Date: Mon, 4 Dec 2017 22:36:49 +0100 Subject: [PATCH 03/29] #6330 plots with specific range, show both ends (#6435) * #6330 fix d3 NaN error in console when there is no yAxisR * #6330 include top/right grid line * #6330 add top/rigth layout margin to avoid label truncation * #6330 fix rendering right YAxis ticks * #6330 include values almost in range (epsilon=1e-12) * #6330 fix issue with croping when paning --- beakerx/js/src/plot/plotScope.js | 12 ++++++------ beakerx/js/src/plot/plotUtils.js | 4 ++-- beakerx/js/src/plot/std/plotaxis.js | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/beakerx/js/src/plot/plotScope.js b/beakerx/js/src/plot/plotScope.js index 298e2c6b18..b4b0538d08 100644 --- a/beakerx/js/src/plot/plotScope.js +++ b/beakerx/js/src/plot/plotScope.js @@ -193,9 +193,9 @@ define([ this.renderFixed = 1; this.layout = { // TODO, specify space for left/right y-axis, also avoid half-shown labels bottomLayoutMargin : 30, - topLayoutMargin : 0, + topLayoutMargin : 30, leftLayoutMargin : calcVertLayoutMargin.call(this, this.stdmodel.yAxis), - rightLayoutMargin : this.stdmodel.yAxisR ? calcVertLayoutMargin(this.stdmodel.yAxisR) : 0, + rightLayoutMargin : this.stdmodel.yAxisR ? calcVertLayoutMargin(this.stdmodel.yAxisR) : 30, legendMargin : 10, legendBoxSize : 10 }; @@ -728,7 +728,7 @@ define([ PlotScope.prototype.renderGridlineTicks = function() { var tickLength = this.gridlineTickLength; - var mapX = this.data2scrX, mapY = this.data2scrY; + var mapX = this.data2scrX, mapY = this.data2scrY, mapY_r = this.data2scrY_r; var focus = this.focus; var model = this.stdmodel; if (model.xAxis.showGridlineLabels !== false) { @@ -770,9 +770,9 @@ define([ "id" : "tick_yr_" + i, "class" : "plot-tick", "x1" : mapX(focus.xr), - "y1" : mapY(y), + "y1" : mapY_r(y), "x2" : mapX(focus.xr) + tickLength, - "y2" : mapY(y) + "y2" : mapY_r(y) }); } } @@ -1515,7 +1515,7 @@ define([ "class" : "plot-coverbox", "x" : W - self.layout.rightLayoutMargin, "y" : 0, - "width" : self.stdmodel.yAxisR ? self.layout.rightLayoutMargin : 10, + "width" : self.layout.rightLayoutMargin, "height" : H }); diff --git a/beakerx/js/src/plot/plotUtils.js b/beakerx/js/src/plot/plotUtils.js index 2b25604a02..8b1bb0c848 100644 --- a/beakerx/js/src/plot/plotUtils.js +++ b/beakerx/js/src/plot/plotUtils.js @@ -313,8 +313,8 @@ define([ xr : model.userFocus.xr, yl : model.userFocus.yl, yr : model.userFocus.yr, - yl_r : model.userFocus.yl_r, - yr_r : model.userFocus.yr_r + yl_r : model.yAxisR !== null ? model.userFocus.yl_r : model.userFocus.yl, + yr_r : model.yAxisR !== null ? model.userFocus.yr_r : model.userFocus.yr }; if (focus.xl == null) { diff --git a/beakerx/js/src/plot/std/plotaxis.js b/beakerx/js/src/plot/std/plotaxis.js index f2bd6a101b..5e77d815b7 100644 --- a/beakerx/js/src/plot/std/plotaxis.js +++ b/beakerx/js/src/plot/std/plotaxis.js @@ -282,7 +282,7 @@ define([ } } } else { - while (plotUtils.lt(val, valr)) { + while (plotUtils.lte(val, valr) || plotUtils.lte(val, valr+1e-12)) { var pct = this.getPercent(val); lines.push(pct); val = normalize(plotUtils.plus(val, w)); From 176c1261cfdef451f7b26065cc23db1f8bb8b825 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Tue, 5 Dec 2017 00:38:47 +0300 Subject: [PATCH 04/29] delete beakerxTest dirs (#6397) * delete beakerxTest dirs * use deleteOnExit() * fix tests --- .../java/com/twosigma/beakerx/KernelTest.java | 13 +++++++---- .../beakerx/evaluator/EvaluatorBaseTest.java | 22 ++++++++++++++++++- .../beakerx/evaluator/EvaluatorTest.java | 4 +++- kernel/build.gradle | 1 - .../evaluator/ClojureEvaluatorTest.java | 6 +++++ .../beakerx/groovy/TestGroovyEvaluator.java | 11 ++++++++++ .../evaluator/GroovyBaseEvaluatorTest.java | 6 +++++ .../evaluator/JavaBaseEvaluatorTest.java | 6 +++++ .../evaluator/KotlinBaseEvaluatorTest.java | 6 +++++ .../beakerx/scala/TestScalaEvaluator.java | 6 +++++ .../evaluator/ScalaBaseEvaluatorTest.java | 6 +++++ .../beakerx/sql/SQLBaseEvaluatorTest.java | 7 ++++++ 12 files changed, 87 insertions(+), 7 deletions(-) diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/KernelTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/KernelTest.java index beaf866761..25412d6cd6 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/KernelTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/KernelTest.java @@ -81,10 +81,7 @@ public class KernelTest implements KernelFunctionality { private String code; private Path tempFolder; - public MavenJarResolver.ResolverParams mavenResolverParam = new MavenJarResolver.ResolverParams( - new File(TEST_MVN_CACHE).getAbsolutePath(), - getTempFolder().toString() + MavenJarResolver.MVN_DIR, - true); + public MavenJarResolver.ResolverParams mavenResolverParam = null; private List magicCommandTypes = null; @@ -95,6 +92,7 @@ public KernelTest() { public KernelTest(String id) { this.id = id; + initMavenResolverParam(); initMagicCommands(); KernelManager.register(this); } @@ -102,10 +100,17 @@ public KernelTest(String id) { public KernelTest(String id, Evaluator evaluator) { this.id = id; this.evaluatorManager = new EvaluatorManager(this, evaluator); + initMavenResolverParam(); initMagicCommands(); KernelManager.register(this); } + private void initMavenResolverParam(){ + this.mavenResolverParam = new MavenJarResolver.ResolverParams( + new File(TEST_MVN_CACHE).getAbsolutePath(), + getTempFolder().toString() + MavenJarResolver.MVN_DIR, + true); + } private void initMagicCommands() { this.magicCommandTypes = new ArrayList<>(); diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorBaseTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorBaseTest.java index dd9e905cac..5101cbe42c 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorBaseTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorBaseTest.java @@ -20,6 +20,7 @@ import org.junit.Test; import java.nio.file.Files; +import java.nio.file.Path; import static com.twosigma.beakerx.evaluator.EvaluatorResultTestWatcher.waitForResult; import static com.twosigma.beakerx.jvm.object.SimpleEvaluationObject.EvaluationStatus.ERROR; @@ -28,10 +29,29 @@ public abstract class EvaluatorBaseTest { + public static final String TEMP_DIR_NAME = "beakerxTest"; + public abstract BaseEvaluator evaluator(); protected abstract BaseEvaluator createNewEvaluator(); + protected abstract BaseEvaluator createNewEvaluator(TempFolderFactory tempFolderFactory); + + public static TempFolderFactory getTestTempFolderFactoryWithoutDeleteOnExit() { + return new TempFolderFactory() { + @Override + public Path createTempFolder() { + Path path; + try { + path = Files.createTempDirectory(TEMP_DIR_NAME); + } catch (Exception e) { + throw new RuntimeException(e); + } + return path; + } + }; + } + @Test public void shouldDivide16By2() throws Exception { //given @@ -99,7 +119,7 @@ public void returnPrintln() throws Exception { @Test public void shouldCreateAndRemoveTempFolder() throws Exception { //given - BaseEvaluator groovyEvaluator = createNewEvaluator(); + BaseEvaluator groovyEvaluator = createNewEvaluator(getTestTempFolderFactoryWithoutDeleteOnExit()); //when assertThat(Files.exists(groovyEvaluator.getTempFolder())).isTrue(); groovyEvaluator.exit(); diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorTest.java index e23b9eea9f..3b2933a8b1 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorTest.java @@ -36,6 +36,7 @@ public class EvaluatorTest extends BaseEvaluator { + public static final EvaluatorParameters KERNEL_PARAMETERS = new EvaluatorParameters(new HashedMap()); private SimpleEvaluationObject seo; private String code; @@ -66,7 +67,8 @@ public static TempFolderFactory getTestTempFolderFactory() { public Path createTempFolder() { Path path; try { - path = Files.createTempDirectory("beakerxTest"); + path = Files.createTempDirectory(EvaluatorBaseTest.TEMP_DIR_NAME); + path.toFile().deleteOnExit(); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/kernel/build.gradle b/kernel/build.gradle index 1a2bac82eb..5339a14859 100644 --- a/kernel/build.gradle +++ b/kernel/build.gradle @@ -41,7 +41,6 @@ subprojects { } } - test.finalizedBy jacocoTestReport test { diff --git a/kernel/clojure/src/test/java/com/twosigma/beakerx/clojure/evaluator/ClojureEvaluatorTest.java b/kernel/clojure/src/test/java/com/twosigma/beakerx/clojure/evaluator/ClojureEvaluatorTest.java index 5d317c4c27..a517459c54 100644 --- a/kernel/clojure/src/test/java/com/twosigma/beakerx/clojure/evaluator/ClojureEvaluatorTest.java +++ b/kernel/clojure/src/test/java/com/twosigma/beakerx/clojure/evaluator/ClojureEvaluatorTest.java @@ -2,6 +2,7 @@ import com.twosigma.beakerx.evaluator.BaseEvaluator; import com.twosigma.beakerx.evaluator.EvaluatorBaseTest; +import com.twosigma.beakerx.evaluator.TempFolderFactory; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -28,6 +29,11 @@ protected BaseEvaluator createNewEvaluator() { return new ClojureEvaluator("id", "sid", cellExecutor(), getTestTempFolderFactory(), KERNEL_PARAMETERS); } + @Override + protected BaseEvaluator createNewEvaluator(TempFolderFactory tempFolderFactory) { + return new ClojureEvaluator("id", "sid", cellExecutor(), tempFolderFactory, KERNEL_PARAMETERS); + } + @Override public BaseEvaluator evaluator() { return evaluator; diff --git a/kernel/groovy/src/test/java/com/twosigma/beakerx/groovy/TestGroovyEvaluator.java b/kernel/groovy/src/test/java/com/twosigma/beakerx/groovy/TestGroovyEvaluator.java index 0ff756dcb1..f542507bb5 100644 --- a/kernel/groovy/src/test/java/com/twosigma/beakerx/groovy/TestGroovyEvaluator.java +++ b/kernel/groovy/src/test/java/com/twosigma/beakerx/groovy/TestGroovyEvaluator.java @@ -16,6 +16,7 @@ package com.twosigma.beakerx.groovy; import com.twosigma.beakerx.evaluator.BaseEvaluator; +import com.twosigma.beakerx.evaluator.TempFolderFactory; import com.twosigma.beakerx.groovy.evaluator.GroovyEvaluator; import com.twosigma.beakerx.groovy.kernel.GroovyDefaultVariables; import com.twosigma.beakerx.kernel.EvaluatorParameters; @@ -38,6 +39,16 @@ public static BaseEvaluator groovyEvaluator() { return evaluator; } + public static BaseEvaluator groovyEvaluator(TempFolderFactory tempFolderFactory) { + GroovyEvaluator evaluator = new GroovyEvaluator( + "id", + "sid", + cellExecutor(), + tempFolderFactory, + getKernelParameters()); + return evaluator; + } + private static EvaluatorParameters getKernelParameters() { HashMap kernelParameters = new HashMap<>(); kernelParameters.put(IMPORTS, new GroovyDefaultVariables().getImports()); diff --git a/kernel/groovy/src/test/java/com/twosigma/beakerx/groovy/evaluator/GroovyBaseEvaluatorTest.java b/kernel/groovy/src/test/java/com/twosigma/beakerx/groovy/evaluator/GroovyBaseEvaluatorTest.java index 3568234eb6..715a931054 100644 --- a/kernel/groovy/src/test/java/com/twosigma/beakerx/groovy/evaluator/GroovyBaseEvaluatorTest.java +++ b/kernel/groovy/src/test/java/com/twosigma/beakerx/groovy/evaluator/GroovyBaseEvaluatorTest.java @@ -17,6 +17,7 @@ import com.twosigma.beakerx.evaluator.BaseEvaluator; import com.twosigma.beakerx.evaluator.EvaluatorBaseTest; +import com.twosigma.beakerx.evaluator.TempFolderFactory; import com.twosigma.beakerx.groovy.TestGroovyEvaluator; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -40,6 +41,11 @@ protected BaseEvaluator createNewEvaluator(){ return TestGroovyEvaluator.groovyEvaluator(); } + @Override + protected BaseEvaluator createNewEvaluator(TempFolderFactory tempFolderFactory) { + return TestGroovyEvaluator.groovyEvaluator(tempFolderFactory); + } + @Override public BaseEvaluator evaluator() { return evaluator; diff --git a/kernel/java/src/test/java/com/twosigma/beakerx/javash/evaluator/JavaBaseEvaluatorTest.java b/kernel/java/src/test/java/com/twosigma/beakerx/javash/evaluator/JavaBaseEvaluatorTest.java index 26d315a20d..7a161e0a28 100644 --- a/kernel/java/src/test/java/com/twosigma/beakerx/javash/evaluator/JavaBaseEvaluatorTest.java +++ b/kernel/java/src/test/java/com/twosigma/beakerx/javash/evaluator/JavaBaseEvaluatorTest.java @@ -17,6 +17,7 @@ import com.twosigma.beakerx.evaluator.BaseEvaluator; import com.twosigma.beakerx.evaluator.EvaluatorBaseTest; +import com.twosigma.beakerx.evaluator.TempFolderFactory; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -43,6 +44,11 @@ protected BaseEvaluator createNewEvaluator() { return new JavaEvaluator("id", "sid", cellExecutor(), getTestTempFolderFactory(), KERNEL_PARAMETERS); } + @Override + protected BaseEvaluator createNewEvaluator(TempFolderFactory tempFolderFactory) { + return new JavaEvaluator("id", "sid", cellExecutor(), tempFolderFactory, KERNEL_PARAMETERS); + } + @Override public BaseEvaluator evaluator() { return evaluator; diff --git a/kernel/kotlin/src/test/java/com/twosigma/beakerx/kotlin/evaluator/KotlinBaseEvaluatorTest.java b/kernel/kotlin/src/test/java/com/twosigma/beakerx/kotlin/evaluator/KotlinBaseEvaluatorTest.java index 6b266ee768..1f46047bc1 100644 --- a/kernel/kotlin/src/test/java/com/twosigma/beakerx/kotlin/evaluator/KotlinBaseEvaluatorTest.java +++ b/kernel/kotlin/src/test/java/com/twosigma/beakerx/kotlin/evaluator/KotlinBaseEvaluatorTest.java @@ -17,6 +17,7 @@ import com.twosigma.beakerx.evaluator.BaseEvaluator; import com.twosigma.beakerx.evaluator.EvaluatorBaseTest; +import com.twosigma.beakerx.evaluator.TempFolderFactory; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -43,6 +44,11 @@ protected BaseEvaluator createNewEvaluator() { return new KotlinEvaluator("id", "sid", cellExecutor(), getTestTempFolderFactory(), KERNEL_PARAMETERS); } + @Override + protected BaseEvaluator createNewEvaluator(TempFolderFactory tempFolderFactory) { + return new KotlinEvaluator("id", "sid", cellExecutor(), tempFolderFactory, KERNEL_PARAMETERS); + } + @Override public BaseEvaluator evaluator() { return evaluator; diff --git a/kernel/scala/src/test/java/com/twosigma/beakerx/scala/TestScalaEvaluator.java b/kernel/scala/src/test/java/com/twosigma/beakerx/scala/TestScalaEvaluator.java index f00a3eae07..374b60c372 100644 --- a/kernel/scala/src/test/java/com/twosigma/beakerx/scala/TestScalaEvaluator.java +++ b/kernel/scala/src/test/java/com/twosigma/beakerx/scala/TestScalaEvaluator.java @@ -15,6 +15,7 @@ */ package com.twosigma.beakerx.scala; +import com.twosigma.beakerx.evaluator.TempFolderFactory; import com.twosigma.beakerx.kernel.EvaluatorParameters; import com.twosigma.beakerx.scala.evaluator.NoBeakerxObjectTestFactory; import com.twosigma.beakerx.scala.evaluator.ScalaEvaluator; @@ -33,6 +34,11 @@ public static ScalaEvaluator evaluator() { return evaluator; } + public static ScalaEvaluator evaluator(TempFolderFactory tempFolderFactory) { + ScalaEvaluator evaluator = new ScalaEvaluator("id", "sid", null, cellExecutor(), new NoBeakerxObjectTestFactory(), tempFolderFactory, getKernelParameters()); + return evaluator; + } + public static EvaluatorParameters getKernelParameters() { HashMap kernelParameters = new HashMap<>(); kernelParameters.put(IMPORTS, new ScalaDefaultVariables().getImports()); diff --git a/kernel/scala/src/test/java/com/twosigma/beakerx/scala/evaluator/ScalaBaseEvaluatorTest.java b/kernel/scala/src/test/java/com/twosigma/beakerx/scala/evaluator/ScalaBaseEvaluatorTest.java index cb6de7d419..e334ab837c 100644 --- a/kernel/scala/src/test/java/com/twosigma/beakerx/scala/evaluator/ScalaBaseEvaluatorTest.java +++ b/kernel/scala/src/test/java/com/twosigma/beakerx/scala/evaluator/ScalaBaseEvaluatorTest.java @@ -17,6 +17,7 @@ import com.twosigma.beakerx.evaluator.BaseEvaluator; import com.twosigma.beakerx.evaluator.EvaluatorBaseTest; +import com.twosigma.beakerx.evaluator.TempFolderFactory; import com.twosigma.beakerx.scala.TestScalaEvaluator; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -40,6 +41,11 @@ protected BaseEvaluator createNewEvaluator(){ return TestScalaEvaluator.evaluator(); } + @Override + protected BaseEvaluator createNewEvaluator(TempFolderFactory tempFolderFactory) { + return TestScalaEvaluator.evaluator(tempFolderFactory); + } + @Override public BaseEvaluator evaluator() { return evaluator; diff --git a/kernel/sql/src/test/java/com/twosigma/beakerx/sql/SQLBaseEvaluatorTest.java b/kernel/sql/src/test/java/com/twosigma/beakerx/sql/SQLBaseEvaluatorTest.java index 4f2adaa8cb..c4f3895fdc 100644 --- a/kernel/sql/src/test/java/com/twosigma/beakerx/sql/SQLBaseEvaluatorTest.java +++ b/kernel/sql/src/test/java/com/twosigma/beakerx/sql/SQLBaseEvaluatorTest.java @@ -18,6 +18,7 @@ import com.twosigma.beakerx.evaluator.BaseEvaluator; import com.twosigma.beakerx.evaluator.EvaluatorBaseTest; import com.twosigma.beakerx.evaluator.EvaluatorTest; +import com.twosigma.beakerx.evaluator.TempFolderFactory; import com.twosigma.beakerx.kernel.EvaluatorParameters; import com.twosigma.beakerx.sql.evaluator.SQLEvaluator; import org.junit.AfterClass; @@ -53,6 +54,12 @@ protected BaseEvaluator createNewEvaluator() { return evaluator; } + @Override + protected BaseEvaluator createNewEvaluator(TempFolderFactory tempFolderFactory) { + SQLEvaluator evaluator = new SQLEvaluator("shellId1", "sessionId1", cellExecutor(), tempFolderFactory, kernelParameters()); + return evaluator; + } + @Override public BaseEvaluator evaluator() { return evaluator; From 109ddc3d72355342059808abbb8f69ca1d7cc6ff Mon Sep 17 00:00:00 2001 From: Scott Draves Date: Tue, 5 Dec 2017 09:02:21 -0500 Subject: [PATCH 05/29] remove unused script --- test/run_notebook.py | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100644 test/run_notebook.py diff --git a/test/run_notebook.py b/test/run_notebook.py deleted file mode 100644 index 7a5463f02d..0000000000 --- a/test/run_notebook.py +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright 2017 TWO SIGMA OPEN SOURCE, LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import subprocess -import os - -here = os.path.abspath(os.path.dirname(__file__)) -beakerx_dir = os.path.abspath(os.path.join(here, "..")) - -# start jupyter notebook -nb_command = 'source activate beakerx & jupyter notebook --no-browser --notebook-dir="%s"' % beakerx_dir -beakerx = subprocess.Popen(nb_command, shell=True, executable="/bin/bash", preexec_fn=os.setsid, stderr=subprocess.STDOUT, stdout=subprocess.PIPE) -# wait for notebook server to start up -while 1: - line = beakerx.stdout.readline().decode('utf-8').strip() - if not line: - continue - print(line) - if 'The Jupyter Notebook is running' in line: - break From 77673bdebd00a04277ccef0b7aa89407382a6b0b Mon Sep 17 00:00:00 2001 From: jaroslawmalekcodete Date: Tue, 5 Dec 2017 17:42:34 +0100 Subject: [PATCH 06/29] #6451: remove deprecated API (#6457) --- .../com/twosigma/beakerx/javash/evaluator/ParserUtil.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kernel/java/src/main/java/com/twosigma/beakerx/javash/evaluator/ParserUtil.java b/kernel/java/src/main/java/com/twosigma/beakerx/javash/evaluator/ParserUtil.java index 8019dd906f..1cc95f680d 100644 --- a/kernel/java/src/main/java/com/twosigma/beakerx/javash/evaluator/ParserUtil.java +++ b/kernel/java/src/main/java/com/twosigma/beakerx/javash/evaluator/ParserUtil.java @@ -23,9 +23,9 @@ import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.text.translate.AggregateTranslator; -import org.apache.commons.lang3.text.translate.CharSequenceTranslator; -import org.apache.commons.lang3.text.translate.UnicodeUnescaper; +import org.apache.commons.text.translate.AggregateTranslator; +import org.apache.commons.text.translate.CharSequenceTranslator; +import org.apache.commons.text.translate.UnicodeUnescaper; import java.util.Deque; import java.util.LinkedList; From 4278c0286282d7df80abe997cb11df03842b247b Mon Sep 17 00:00:00 2001 From: Robert Bidas Date: Tue, 5 Dec 2017 17:43:27 +0100 Subject: [PATCH 07/29] #6436 delete cpp kernel and its documentation (#6455) --- doc/cpp/Cpp.ipynb | 129 - kernel/cpp/.gitignore | 9 - kernel/cpp/build.gradle | 205 -- kernel/cpp/kernel.json | 6 - kernel/cpp/kernel_debug.json | 6 - kernel/cpp/logo-32x32.png | Bin 544 -> 0 bytes kernel/cpp/logo-64x64.png | Bin 987 -> 0 bytes kernel/cpp/src/main/antlr4/CPP14.g4 | 2341 ----------------- .../beakerx/cpp/evaluator/CppCodeRunner.java | 233 -- .../beakerx/cpp/evaluator/CppEvaluator.java | 127 - .../cpp/evaluator/CppWorkerThread.java | 125 - .../cpp/handlers/CppCommOpenHandler.java | 44 - .../cpp/handlers/CppKernelInfoHandler.java | 48 - .../com/twosigma/beakerx/cpp/kernel/Cpp.java | 90 - .../cpp/kernel/CppDefaultVariables.java | 25 - .../beakerx/cpp/kernel/Extractor.java | 155 -- .../beakerx/cpp/utils/CLangCommand.java | 44 - .../beakerx/cpp/utils/CellGobblerManager.java | 85 - .../twosigma/beakerx/cpp/utils/CppKernel.java | 64 - .../beakerx/cpp/utils/TempCppFiles.java | 106 - kernel/cpp/src/main/resources/CRun.cpp | 62 - kernel/cpp/src/main/resources/beakerx.hpp | 193 -- .../beakerx/cpp/CppKernelMainTest.java | 111 - .../cpp/handlers/CppCommOpenHandlerTest.java | 67 - .../handlers/CppKernelFunctionalityTest.java | 31 - .../handlers/CppKernelInfoHandlerTest.java | 105 - 26 files changed, 4411 deletions(-) delete mode 100644 doc/cpp/Cpp.ipynb delete mode 100644 kernel/cpp/.gitignore delete mode 100644 kernel/cpp/build.gradle delete mode 100644 kernel/cpp/kernel.json delete mode 100644 kernel/cpp/kernel_debug.json delete mode 100644 kernel/cpp/logo-32x32.png delete mode 100644 kernel/cpp/logo-64x64.png delete mode 100644 kernel/cpp/src/main/antlr4/CPP14.g4 delete mode 100644 kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/evaluator/CppCodeRunner.java delete mode 100644 kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/evaluator/CppEvaluator.java delete mode 100644 kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/evaluator/CppWorkerThread.java delete mode 100644 kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/handlers/CppCommOpenHandler.java delete mode 100644 kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/handlers/CppKernelInfoHandler.java delete mode 100644 kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/kernel/Cpp.java delete mode 100644 kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/kernel/CppDefaultVariables.java delete mode 100644 kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/kernel/Extractor.java delete mode 100644 kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/utils/CLangCommand.java delete mode 100644 kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/utils/CellGobblerManager.java delete mode 100644 kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/utils/CppKernel.java delete mode 100644 kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/utils/TempCppFiles.java delete mode 100644 kernel/cpp/src/main/resources/CRun.cpp delete mode 100644 kernel/cpp/src/main/resources/beakerx.hpp delete mode 100644 kernel/cpp/src/test/java/com/twosigma/beakerx/cpp/CppKernelMainTest.java delete mode 100644 kernel/cpp/src/test/java/com/twosigma/beakerx/cpp/handlers/CppCommOpenHandlerTest.java delete mode 100644 kernel/cpp/src/test/java/com/twosigma/beakerx/cpp/handlers/CppKernelFunctionalityTest.java delete mode 100644 kernel/cpp/src/test/java/com/twosigma/beakerx/cpp/handlers/CppKernelInfoHandlerTest.java diff --git a/doc/cpp/Cpp.ipynb b/doc/cpp/Cpp.ipynb deleted file mode 100644 index 87ca13e62a..0000000000 --- a/doc/cpp/Cpp.ipynb +++ /dev/null @@ -1,129 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "// A basic C++ cell\n", - "// define a beakerx_main function with an optional parameter for the return value\n", - "#include \n", - "void beakerx_main(){\n", - " std::cout << \"Hello world 1!\" << std::endl;\n", - " return;\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "null\n", - "Hello world 2!\n" - ] - }, - "execution_count": 3, - "output_type": "execute_result", - "metadata": {} - } - ], - "source": [ - "// A basic C++ cell\n", - "// define a beakerx_main function with an optional parameter for the return value\n", - "#include \n", - "void beakerx_main(){\n", - " std::cout << \"Hello world 2!\" << std::endl;\n", - " return;\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "null" - ] - }, - "execution_count": 5, - "output_type": "execute_result", - "metadata": {} - } - ], - "source": [ - "// You can define functions\n", - "#include \n", - "std::string distant;\n", - "void setDistant(){\n", - " distant = std::string(\"This is far away\");\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "/tmp/beakerx_2ad09f22-01d6-4feb-8bf1-0a10627a1b68775373743641203437/liba922dbe1-89a5-48ba-afcf-73e16126c398.so: undefined symbol: _Z7distantB5cxx11" - ] - }, - "execution_count": 6, - "output_type": "execute_result", - "metadata": {} - } - ], - "source": [ - "// right now we don't support this functionality (https://github.com/twosigma/beakerx/issues/5228)\n", - "// and call functions defined in other C++ cells\n", - "#include \n", - "#include \n", - "extern std::string distant;\n", - "extern void setDistant();\n", - "\n", - "void beakerx_main(std::string &ret){\n", - " setDistant();\n", - " ret = distant;\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "" - ] - } - ], - "metadata": { - "beakerx_kernel_parameters": {}, - "kernelspec": { - "display_name": "C++", - "language": "cpp", - "name": "cpp" - }, - "language_info": { - "codemirror_mode": "C++", - "file_extension": ".cpp", - "mimetype": "", - "name": "cpp", - "nbconverter_exporter": "", - "pygments_lexer": "", - "version": "" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} \ No newline at end of file diff --git a/kernel/cpp/.gitignore b/kernel/cpp/.gitignore deleted file mode 100644 index 553c142c7a..0000000000 --- a/kernel/cpp/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -/build/ -/src/main/java/com/twosigma/beakerx/cpp/autocomplete -/src/main/resources/libCRun.jnilib -/src/main/resources/CppKernel.h -/src/main/resources/cpp -/src/main/resources/cpp.bat -/.classpath -/.project -/bin/ diff --git a/kernel/cpp/build.gradle b/kernel/cpp/build.gradle deleted file mode 100644 index 43c491cf77..0000000000 --- a/kernel/cpp/build.gradle +++ /dev/null @@ -1,205 +0,0 @@ -/* - * Copyright 2017 TWO SIGMA OPEN SOURCE, LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -apply plugin: 'application' -apply plugin: 'java' - -sourceCompatibility = 1.8 - -def final kernelIdName = 'cpp' -ext.kernelIdName = kernelIdName -def final toReplace = '__PATH__' - -mainClassName = 'com.twosigma.beakerx.cpp.kernel.Cpp' - -configurations { - antlr -} - -repositories { - mavenCentral() -} - -dependencies { - provided project(':base') - compile group: 'org.abstractmeta', name: 'compilation-toolbox', version: '0.3.2' - compile group: 'org.antlr', name: 'antlr4-runtime', version: '4.5' - antlr group: 'org.antlr', name: 'antlr4', version: '4.5' - compile 'commons-io:commons-io:2.5' - - testCompile project(':base').sourceSets.test.output - testCompile group: 'org.assertj', name: 'assertj-core', version: '3.6.1' - testCompile group: 'junit', name: 'junit', version: '4.12' -} - -task antlr4_java(type: JavaExec) { - main = "org.antlr.v4.Tool" - workingDir = "src/main/antlr4/" - args = ["CPP14.g4", "-o", "../java/com/twosigma/beakerx/cpp/autocomplete", "-listener", "-no-visitor", "-package", "com.twosigma.beakerx.cpp.autocomplete", "-encoding", "UTF-8"] - classpath = configurations.antlr -} - -compileJava.dependsOn antlr4_java - -compileJava { - options.compilerArgs << '-Xlint:deprecation' - options.compilerArgs << '-Xlint:unchecked' -} - -task prepareJson(dependsOn: 'build') { - doLast { - println "Prepare JSON for Jupyter notebook" - println "Copy kernel.json to build/libs/json/ and replacing PATH with cpp.jar path" - - def jarLocation = file('build/libs/cpp.jar').getAbsolutePath() - jarLocation = jarLocation.replace("\\", "/"); - def text = file('kernel.json').text.replace(toReplace, jarLocation) - def folder = file('build/libs/json') - if (!folder.exists()) { - println "Creating folder build/libs/json" - folder.mkdirs() - } - - file('build/libs/json/kernel.json').withWriter { w -> - w << text - } - } -} - -task kernelInstall(dependsOn: 'prepareJson') { - doLast { - println "Installing 'cpp' to jupyter notebook" - - def hashStdOut = new ByteArrayOutputStream() - def jsonFolder = file('build/libs/json/').getAbsolutePath(); - exec { - commandLine "jupyter", - "kernelspec", - "install", - "--sys-prefix", - "--replace", - "--name", - kernelIdName, - jsonFolder; - standardOutput = hashStdOut - } - println hashStdOut.toString().trim(); - println "DONE" - } -} - -def osName = System.properties['os.name'] -def mac = false -def win = false -def linux = false -def platform = '' -if (osName.startsWith('Mac')) { - mac = true - platform = 'darwin' -} else if (osName.startsWith('Windows')) { - win = true - platform = 'win32' -} else if (osName.startsWith('Linux')) { - linux = true - platform = 'linux' -} - -def java_home = System.properties.'java.home' - -task makeCppKernelHeader(type: Exec) { - workingDir './build/classes/main' - def jvmDir = project(':cpp').projectDir - commandLine 'javah', '-cp', "${jvmDir}/build/classes/main", '-jni', '-o', '../../../src/main/resources/CppKernel.h', 'com.twosigma.beakerx.cpp.utils.CppKernel' -} - -task makeCRunLib(type: Exec, dependsOn: ['makeCppKernelHeader']) { - inputs.file('./src/main/resources/CRun.cpp') - outputs.file('./src/main/resources/libCRun.jnilib') - workingDir './src/main/resources' - if (mac) { - commandLine 'clang++', '-m64', '-shared', '-fPIC', '--std=c++11', '-I', "${java_home}/../include", '-I', "${java_home}/../include/darwin", '-o', 'libCRun.jnilib', 'CRun.cpp' - } else if (linux) { - commandLine 'clang++', '-m64', '-shared', '-fPIC', '--std=c++11', '-I', "${java_home}/../include", '-I', "${java_home}/../include/linux", '-o', 'libCRun.jnilib', 'CRun.cpp' - } else { - commandLine 'cmd', '/c', 'echo C++ on windows is not supported' - } -} - -compileJava.finalizedBy makeCRunLib - -startScripts { - defaultJvmOpts = ['-Djava.awt.headless=' + 'true'] - doLast { - // Remove too-long-classpath and use wildcard ( works for java 6 and above only) - windowsScript.text = windowsScript.text.replaceAll('set CLASSPATH=.*', 'set CLASSPATH=.;%APP_HOME%/libs/*;' + "${libsDir.absolutePath}/*") - unixScript.text = unixScript.text.replaceAll('CLASSPATH=\\$APP_HOME.*', 'CLASSPATH=\\$APP_HOME/libs/*:' + "${libsDir.absolutePath}/*") - } -} - -task copyRunnerScripts { - doLast { - copy { - from './build/scripts' - into './src/main/resources/' - } - copy { - from './build/scripts' - into './build/resources/main/' - } - } -} - -startScripts.finalizedBy copyRunnerScripts - -jar { - manifest { - attributes "Main-Class": "$mainClassName" - } - - from { - configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } - } { - exclude "META-INF/*.SF" - exclude "META-INF/*.DSA" - exclude "META-INF/*.RSA" - } -} - -task jarWithScripts(type: Jar) { - manifest { - attributes "Main-Class": "$mainClassName" - } - baseName = project.name - with jar -} - -copyRunnerScripts.finalizedBy jarWithScripts - -jacocoTestReport { - reports { - html.enabled = true - xml.enabled = false - csv.enabled = false - } - afterEvaluate { - classDirectories = files(classDirectories.files.collect { - fileTree(dir: it, exclude: 'com/twosigma/beakerx/cpp/autocomplete/CPP14*') - }) - } -} - -staticContent { - ext.executeStaticContent = false -} diff --git a/kernel/cpp/kernel.json b/kernel/cpp/kernel.json deleted file mode 100644 index 6570e24242..0000000000 --- a/kernel/cpp/kernel.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "argv": [ "java", "-jar", ${PATH}, "{connection_file}" ], - "display_name": "C++", - "language": "cpp", - "env": { "PS1":"cpp>"} -} \ No newline at end of file diff --git a/kernel/cpp/kernel_debug.json b/kernel/cpp/kernel_debug.json deleted file mode 100644 index 49f0b7acda..0000000000 --- a/kernel/cpp/kernel_debug.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "argv": [ "java", "-jar", "-Xdebug", "-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9110", ${PATH}, "{connection_file}" ], - "display_name": "C++", - "language": "cpp", - "env": { "PS1":"cpp>"} -} diff --git a/kernel/cpp/logo-32x32.png b/kernel/cpp/logo-32x32.png deleted file mode 100644 index f53da4d7d6e418a7ca393e459458b16c2a658b6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&pI+gONwy%7rUz22e<{#5JPCIX^cyHLrxhxhOTUBsE2$ zJhLQ2!QIn0AiR-JoPmL{!_&nvB;sIF|%^Ai~ug%2|{2eS8AC0t=#%$J}TzIfj> z1!tE9Le1-zDKHxw3m-nL9xoA=yXSbpk0;t~_xJx7%;i&F>1t>#Eqr)V<~N=_HaQko zkEF?`RQ&zMp6irwRL7mok58;^|Nno+Id}dwBtAT4&0}BxH+h4RXz~f)Ybg&NrzQi{ zS~D{3ECq-4vczE;l`+}Xx%i|4Ytp9R}ZP?=3;&`u%2Lz(a?VUEx z(c9?|HcR@PUCk%eznd3MV6dL^_tjbcU)B$f_uChkv0EGemHqJIWw=GOcWlEyz90V{ z>mU9+{l3Ca8<*6Cu17mh=NTFR!H3Tq4ZoPqOg^z%>!Xp*>^%QT%pQ82pM$qb*vw6p zlmLRdzyFSZ_;=X9tsdx!f(^#T98SWo_N1CihUHc{NV9_siIC_vGMOTkI5qo?d#G8j#m^dRZM!=%K7l%$j&pT3%dY?t`=SNSZDn3vFn&Eognq*WI4Nt7PAP|mRY=bl#qMdS|A- z>y4Efuh(4r`B$#~_PM8r|Nr^%zb^gMDqizr7YdIo_$Wmf96zy7l2k&m0dZrRH37SFq32JalJO$mq0 z`6of(%jlSRER z86H2*B=AGv(U+aaFMj99i87v?``S44XV>cWJ3?+cY5e&cd|T~!&@RjF*3Ur}@&D#n zUwywQoAt&Tw`=R?Ej$&!C{y&M_Usu)0vfFd&>lZSY z_!|x{WBb70_hN-~$dvpgB7Yew{yK){Z88nBXJEefFn`N|u)hp@GCr;bf4z?v`fg7$ zlr~{D*zwuBFRL)&e*#B(kxkz8+!#Ca(~d<+GGG0F)!pEe<_Xwl+FomIBO-3KvwD5- zpQE$epX+6FZ(RX)!010Jj2XA zK^%ewi^Hd diff --git a/kernel/cpp/src/main/antlr4/CPP14.g4 b/kernel/cpp/src/main/antlr4/CPP14.g4 deleted file mode 100644 index 61cd698f79..0000000000 --- a/kernel/cpp/src/main/antlr4/CPP14.g4 +++ /dev/null @@ -1,2341 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015 Camiloasc1 - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of copyright holders nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - ******************************************************************************/ - -/******************************************************************************* - * C++14 Grammar for ANTLR v4 - * - * Based on n4140 draft paper - * https://github.com/cplusplus/draft/blob/master/papers/n4140.pdf - * and - * http://www.nongnu.org/hcb/ - * - * Possible Issues: - * - * Input must avoid conditional compilation blocks (this grammar ignores any preprocessor directive) - * GCC extensions not yet supported (not try parse preprocessor output) - * Lexer issue with pure-specifier rule ('0' token) - Solution in embedded java - * Right angle bracket (C++11) - Solution '>>' and '>>=' are not tokens, only '>' - * - ******************************************************************************/ -grammar CPP14; - -/*Basic concepts*/ -translationunit -: - declarationseq? EOF -; - -/*Expressions*/ -primaryexpression -: - literal - | This - | '(' expression ')' - | idexpression - | lambdaexpression -; - -idexpression -: - unqualifiedid - | qualifiedid -; - -unqualifiedid -: - Identifier - | operatorfunctionid - | conversionfunctionid - | literaloperatorid - | '~' classname - | '~' decltypespecifier - | templateid -; - -qualifiedid -: - nestednamespecifier Template? unqualifiedid -; - -nestednamespecifier -: - '::' - | typename '::' - | namespacename '::' - | decltypespecifier '::' - | nestednamespecifier Identifier '::' - | nestednamespecifier Template? simpletemplateid '::' -; - -lambdaexpression -: - lambdaintroducer lambdadeclarator? compoundstatement -; - -lambdaintroducer -: - '[' lambdacapture? ']' -; - -lambdacapture -: - capturedefault - | capturelist - | capturedefault ',' capturelist -; - -capturedefault -: - '&' - | '=' -; - -capturelist -: - capture '...'? - | capturelist ',' capture '...'? -; - -capture -: - simplecapture - | initcapture -; - -simplecapture -: - Identifier - | '&' Identifier - | This -; - -initcapture -: - Identifier initializer - | '&' Identifier initializer -; - -lambdadeclarator -: - '(' parameterdeclarationclause ')' Mutable? exceptionspecification? - attributespecifierseq? trailingreturntype? -; - -postfixexpression -: - primaryexpression - | postfixexpression '[' expression ']' - | postfixexpression '[' bracedinitlist ']' - | postfixexpression '(' expressionlist? ')' - | simpletypespecifier '(' expressionlist? ')' - | typenamespecifier '(' expressionlist? ')' - | simpletypespecifier bracedinitlist - | typenamespecifier bracedinitlist - | postfixexpression '.' Template? idexpression - | postfixexpression '->' Template? idexpression - | postfixexpression '.' pseudodestructorname - | postfixexpression '->' pseudodestructorname - | postfixexpression '++' - | postfixexpression '--' - | Dynamic_cast '<' typeid '>' '(' expression ')' - | Static_cast '<' typeid '>' '(' expression ')' - | Reinterpret_cast '<' typeid '>' '(' expression ')' - | Const_cast '<' typeid '>' '(' expression ')' - | Typeid '(' expression ')' - | Typeid '(' typeid ')' -; - -expressionlist -: - initializerlist -; - -pseudodestructorname -: - nestednamespecifier? typename '::' '~' typename - | nestednamespecifier Template simpletemplateid '::' '~' typename - | nestednamespecifier? '~' typename - | '~' decltypespecifier -; - -unaryexpression -: - postfixexpression - | '++' castexpression - | '--' castexpression - | unaryoperator castexpression - | Sizeof unaryexpression - | Sizeof '(' typeid ')' - | Sizeof '...' '(' Identifier ')' - | Alignof '(' typeid ')' - | noexceptexpression - | newexpression - | deleteexpression -; - -unaryoperator -: - '|' - | '*' - | '&' - | '+' - | '!' - | '~' -; - -newexpression -: - '::'? New newplacement? newtypeid newinitializer? - | '::'? New newplacement? '(' typeid ')' newinitializer? -; - -newplacement -: - '(' expressionlist ')' -; - -newtypeid -: - typespecifierseq newdeclarator? -; - -newdeclarator -: - ptroperator newdeclarator? - | noptrnewdeclarator -; - -noptrnewdeclarator -: - '[' expression ']' attributespecifierseq? - | noptrnewdeclarator '[' constantexpression ']' attributespecifierseq? -; - -newinitializer -: - '(' expressionlist? ')' - | bracedinitlist -; - -deleteexpression -: - '::'? Delete castexpression - | '::'? Delete '[' ']' castexpression -; - -noexceptexpression -: - Noexcept '(' expression ')' -; - -castexpression -: - unaryexpression - | '(' typeid ')' castexpression -; - -pmexpression -: - castexpression - | pmexpression '.*' castexpression - | pmexpression '->*' castexpression -; - -multiplicativeexpression -: - pmexpression - | multiplicativeexpression '*' pmexpression - | multiplicativeexpression '/' pmexpression - | multiplicativeexpression '%' pmexpression -; - -additiveexpression -: - multiplicativeexpression - | additiveexpression '+' multiplicativeexpression - | additiveexpression '-' multiplicativeexpression -; - -shiftexpression -: - additiveexpression - | shiftexpression '<<' additiveexpression - | shiftexpression rightShift additiveexpression -; - -relationalexpression -: - shiftexpression - | relationalexpression '<' shiftexpression - | relationalexpression '>' shiftexpression - | relationalexpression '<=' shiftexpression - | relationalexpression '>=' shiftexpression -; - -equalityexpression -: - relationalexpression - | equalityexpression '==' relationalexpression - | equalityexpression '!=' relationalexpression -; - -andexpression -: - equalityexpression - | andexpression '&' equalityexpression -; - -exclusiveorexpression -: - andexpression - | exclusiveorexpression '^' andexpression -; - -inclusiveorexpression -: - exclusiveorexpression - | inclusiveorexpression '|' exclusiveorexpression -; - -logicalandexpression -: - inclusiveorexpression - | logicalandexpression '&&' inclusiveorexpression -; - -logicalorexpression -: - logicalandexpression - | logicalorexpression '||' logicalandexpression -; - -conditionalexpression -: - logicalorexpression - | logicalorexpression '?' expression ':' assignmentexpression -; - -assignmentexpression -: - conditionalexpression - | logicalorexpression assignmentoperator initializerclause - | throwexpression -; - -assignmentoperator -: - '=' - | '*=' - | '/=' - | '%=' - | '+=' - | '-=' - | rightShiftAssign - | '<<=' - | '&=' - | '^=' - | '|=' -; - -expression -: - assignmentexpression - | expression ',' assignmentexpression -; - -constantexpression -: - conditionalexpression -; -/*Statements*/ -statement -: - labeledstatement - | attributespecifierseq? expressionstatement - | attributespecifierseq? compoundstatement - | attributespecifierseq? selectionstatement - | attributespecifierseq? iterationstatement - | attributespecifierseq? jumpstatement - | declarationstatement - | attributespecifierseq? tryblock -; - -labeledstatement -: - attributespecifierseq? Identifier ':' statement - | attributespecifierseq? Case constantexpression ':' statement - | attributespecifierseq? Default ':' statement -; - -expressionstatement -: - expression? ';' -; - -compoundstatement -: - '{' statementseq? '}' -; - -statementseq -: - statement - | statementseq statement -; - -selectionstatement -: - If '(' condition ')' statement - | If '(' condition ')' statement Else statement - | Switch '(' condition ')' statement -; - -condition -: - expression - | attributespecifierseq? declspecifierseq declarator '=' initializerclause - | attributespecifierseq? declspecifierseq declarator bracedinitlist -; - -iterationstatement -: - While '(' condition ')' statement - | Do statement While '(' expression ')' ';' - | For '(' forinitstatement condition? ';' expression? ')' statement - | For '(' forrangedeclaration ':' forrangeinitializer ')' statement -; - -forinitstatement -: - expressionstatement - | simpledeclaration -; - -forrangedeclaration -: - attributespecifierseq? declspecifierseq declarator -; - -forrangeinitializer -: - expression - | bracedinitlist -; - -jumpstatement -: - Break ';' - | Continue ';' - | Return expression? ';' - | Return bracedinitlist ';' - | Goto Identifier ';' -; - -declarationstatement -: - blockdeclaration -; - -/*Declarations*/ -declarationseq -: - declaration - | declarationseq declaration -; - -declaration -: - blockdeclaration - | functiondefinition - | templatedeclaration - | explicitinstantiation - | explicitspecialization - | linkagespecification - | namespacedefinition - | emptydeclaration - | attributedeclaration -; - -blockdeclaration -: - simpledeclaration - | asmdefinition - | namespacealiasdefinition - | usingdeclaration - | usingdirective - | static_assertdeclaration - | aliasdeclaration - | opaqueenumdeclaration -; - -aliasdeclaration -: - Using Identifier attributespecifierseq? '=' typeid ';' -; - -simpledeclaration -: - declspecifierseq? initdeclaratorlist? ';' - | attributespecifierseq declspecifierseq? initdeclaratorlist ';' -; - -static_assertdeclaration -: - Static_assert '(' constantexpression ',' Stringliteral ')' ';' -; - -emptydeclaration -: - ';' -; - -attributedeclaration -: - attributespecifierseq ';' -; - -declspecifier -: - storageclassspecifier - | typespecifier - | functionspecifier - | Friend - | Typedef - | Constexpr -; - -declspecifierseq -: - declspecifier attributespecifierseq? - | declspecifier declspecifierseq -; - -storageclassspecifier -: - Register - | Static - | Thread_local - | Extern - | Mutable -; - -functionspecifier -: - Inline - | Virtual - | Explicit -; - -typedefname -: - Identifier -; - -typespecifier -: - trailingtypespecifier - | classspecifier - | enumspecifier -; - -trailingtypespecifier -: - simpletypespecifier - | elaboratedtypespecifier - | typenamespecifier - | cvqualifier -; - -typespecifierseq -: - typespecifier attributespecifierseq? - | typespecifier typespecifierseq -; - -trailingtypespecifierseq -: - trailingtypespecifier attributespecifierseq? - | trailingtypespecifier trailingtypespecifierseq -; - -simpletypespecifier -: - nestednamespecifier? typename - | nestednamespecifier Template simpletemplateid - | Char - | Char16 - | Char32 - | Wchar - | Bool - | Short - | Int - | Long - | Signed - | Unsigned - | Float - | Double - | Void - | Auto - | decltypespecifier -; - -typename -: - classname - | enumname - | typedefname - | simpletemplateid -; - -decltypespecifier -: - Decltype '(' expression ')' - | Decltype '(' Auto ')' -; - -elaboratedtypespecifier -: - classkey attributespecifierseq? nestednamespecifier? Identifier - | classkey simpletemplateid - | classkey nestednamespecifier Template? simpletemplateid - | Enum nestednamespecifier? Identifier -; - -enumname -: - Identifier -; - -enumspecifier -: - enumhead '{' enumeratorlist? '}' - | enumhead '{' enumeratorlist ',' '}' -; - -enumhead -: - enumkey attributespecifierseq? Identifier? enumbase? - | enumkey attributespecifierseq? nestednamespecifier Identifier enumbase? -; - -opaqueenumdeclaration -: - enumkey attributespecifierseq? Identifier enumbase? ';' -; - -enumkey -: - Enum - | Enum Class - | Enum Struct -; - -enumbase -: - ':' typespecifierseq -; - -enumeratorlist -: - enumeratordefinition - | enumeratorlist ',' enumeratordefinition -; - -enumeratordefinition -: - enumerator - | enumerator '=' constantexpression -; - -enumerator -: - Identifier -; - -namespacename -: - originalnamespacename - | namespacealias -; - -originalnamespacename -: - Identifier -; - -namespacedefinition -: - namednamespacedefinition - | unnamednamespacedefinition -; - -namednamespacedefinition -: - originalnamespacedefinition - | extensionnamespacedefinition -; - -originalnamespacedefinition -: - Inline? Namespace Identifier '{' namespacebody '}' -; - -extensionnamespacedefinition -: - Inline? Namespace originalnamespacename '{' namespacebody '}' -; - -unnamednamespacedefinition -: - Inline? Namespace '{' namespacebody '}' -; - -namespacebody -: - declarationseq? -; - -namespacealias -: - Identifier -; - -namespacealiasdefinition -: - Namespace Identifier '=' qualifiednamespacespecifier ';' -; - -qualifiednamespacespecifier -: - nestednamespecifier? namespacename -; - -usingdeclaration -: - Using Typename? nestednamespecifier unqualifiedid ';' - | Using '::' unqualifiedid ';' -; - -usingdirective -: - attributespecifierseq? Using Namespace nestednamespecifier? namespacename ';' -; - -asmdefinition -: - Asm '(' Stringliteral ')' ';' -; - -linkagespecification -: - Extern Stringliteral '{' declarationseq? '}' - | Extern Stringliteral declaration -; - -attributespecifierseq -: - attributespecifier - | attributespecifierseq attributespecifier -; - -attributespecifier -: - '[' '[' attributelist ']' ']' - | alignmentspecifier -; - -alignmentspecifier -: - Alignas '(' typeid '...'? ')' - | Alignas '(' constantexpression '...'? ')' -; - -attributelist -: - attribute? - | attributelist ',' attribute? - | attribute '...' - | attributelist ',' attribute '...' -; - -attribute -: - attributetoken attributeargumentclause? -; - -attributetoken -: - Identifier - | attributescopedtoken -; - -attributescopedtoken -: - attributenamespace '::' Identifier -; - -attributenamespace -: - Identifier -; - -attributeargumentclause -: - '(' balancedtokenseq ')' -; - -balancedtokenseq -: - balancedtoken? - | balancedtokenseq balancedtoken -; - -balancedtoken -: - '(' balancedtokenseq ')' - | '[' balancedtokenseq ']' - | '{' balancedtokenseq '}' - /*any token other than a parenthesis , a bracket , or a brace*/ -; - -/*Declarators*/ -initdeclaratorlist -: - initdeclarator - | initdeclaratorlist ',' initdeclarator -; - -initdeclarator -: - declarator initializer? -; - -declarator -: - ptrdeclarator - | noptrdeclarator parametersandqualifiers trailingreturntype -; - -ptrdeclarator -: - noptrdeclarator - | ptroperator ptrdeclarator -; - -noptrdeclarator -: - declaratorid attributespecifierseq? - | noptrdeclarator parametersandqualifiers - | noptrdeclarator '[' constantexpression? ']' attributespecifierseq? - | '(' ptrdeclarator ')' -; - -parametersandqualifiers -: - '(' parameterdeclarationclause ')' cvqualifierseq? refqualifier? - exceptionspecification? attributespecifierseq? -; - -trailingreturntype -: - '->' trailingtypespecifierseq abstractdeclarator? -; - -ptroperator -: - '*' attributespecifierseq? cvqualifierseq? - | '&' attributespecifierseq? - | '&&' attributespecifierseq? - | nestednamespecifier '*' attributespecifierseq? cvqualifierseq? -; - -cvqualifierseq -: - cvqualifier cvqualifierseq? -; - -cvqualifier -: - Const - | Volatile -; - -refqualifier -: - '&' - | '&&' -; - -declaratorid -: - '...'? idexpression -; - -typeid -: - typespecifierseq abstractdeclarator? -; - -abstractdeclarator -: - ptrabstractdeclarator - | noptrabstractdeclarator? parametersandqualifiers trailingreturntype - | abstractpackdeclarator -; - -ptrabstractdeclarator -: - noptrabstractdeclarator - | ptroperator ptrabstractdeclarator? -; - -noptrabstractdeclarator -: - noptrabstractdeclarator parametersandqualifiers - | parametersandqualifiers - | noptrabstractdeclarator '[' constantexpression? ']' attributespecifierseq? - | '[' constantexpression? ']' attributespecifierseq? - | '(' ptrabstractdeclarator ')' -; - -abstractpackdeclarator -: - noptrabstractpackdeclarator - | ptroperator abstractpackdeclarator -; - -noptrabstractpackdeclarator -: - noptrabstractpackdeclarator parametersandqualifiers - | noptrabstractpackdeclarator '[' constantexpression? ']' - attributespecifierseq? - | '...' -; - -parameterdeclarationclause -: - parameterdeclarationlist? '...'? - | parameterdeclarationlist ',' '...' -; - -parameterdeclarationlist -: - parameterdeclaration - | parameterdeclarationlist ',' parameterdeclaration -; - -parameterdeclaration -: - attributespecifierseq? declspecifierseq declarator - | attributespecifierseq? declspecifierseq declarator '=' initializerclause - | attributespecifierseq? declspecifierseq abstractdeclarator? - | attributespecifierseq? declspecifierseq abstractdeclarator? '=' - initializerclause -; - -functiondefinition -: - attributespecifierseq? declspecifierseq? declarator virtspecifierseq? - functionbody -; - -functionbody -: - ctorinitializer? compoundstatement - | functiontryblock - | '=' Default ';' - | '=' Delete ';' -; - -initializer -: - braceorequalinitializer - | '(' expressionlist ')' -; - -braceorequalinitializer -: - '=' initializerclause - | bracedinitlist -; - -initializerclause -: - assignmentexpression - | bracedinitlist -; - -initializerlist -: - initializerclause '...'? - | initializerlist ',' initializerclause '...'? -; - -bracedinitlist -: - '{' initializerlist ','? '}' - | '{' '}' -; - -/*Classes*/ -classname -: - Identifier - | simpletemplateid -; - -classspecifier -: - classhead '{' memberspecification? '}' -; - -classhead -: - classkey attributespecifierseq? classheadname classvirtspecifier? baseclause? - | classkey attributespecifierseq? baseclause? -; - -classheadname -: - nestednamespecifier? classname -; - -classvirtspecifier -: - Final -; - -classkey -: - Class - | Struct - | Union -; - -memberspecification -: - memberdeclaration memberspecification? - | accessspecifier ':' memberspecification? -; - -memberdeclaration -: - attributespecifierseq? declspecifierseq? memberdeclaratorlist? ';' - | functiondefinition - | usingdeclaration - | static_assertdeclaration - | templatedeclaration - | aliasdeclaration - | emptydeclaration -; - -memberdeclaratorlist -: - memberdeclarator - | memberdeclaratorlist ',' memberdeclarator -; - -memberdeclarator -: - declarator virtspecifierseq? purespecifier? - | declarator braceorequalinitializer? - | Identifier? attributespecifierseq? ':' constantexpression -; - -virtspecifierseq -: - virtspecifier - | virtspecifierseq virtspecifier -; - -virtspecifier -: - Override - | Final -; - -/* -purespecifier: - '=' '0'//Conflicts with the lexer - ; - */ -purespecifier -: - Assign val = Integerliteral - {if($val.text.compareTo("0")!=0) throw new InputMismatchException(this);} - -; - -/*Derived classes*/ -baseclause -: - ':' basespecifierlist -; - -basespecifierlist -: - basespecifier '...'? - | basespecifierlist ',' basespecifier '...'? -; - -basespecifier -: - attributespecifierseq? basetypespecifier - | attributespecifierseq? Virtual accessspecifier? basetypespecifier - | attributespecifierseq? accessspecifier Virtual? basetypespecifier -; - -classordecltype -: - nestednamespecifier? classname - | decltypespecifier -; - -basetypespecifier -: - classordecltype -; - -accessspecifier -: - Private - | Protected - | Public -; - -/*Special member functions*/ -conversionfunctionid -: - Operator conversiontypeid -; - -conversiontypeid -: - typespecifierseq conversiondeclarator? -; - -conversiondeclarator -: - ptroperator conversiondeclarator? -; - -ctorinitializer -: - ':' meminitializerlist -; - -meminitializerlist -: - meminitializer '...'? - | meminitializer '...'? ',' meminitializerlist -; - -meminitializer -: - meminitializerid '(' expressionlist? ')' - | meminitializerid bracedinitlist -; - -meminitializerid -: - classordecltype - | Identifier -; - -/*Overloading*/ -operatorfunctionid -: - Operator operator -; - -literaloperatorid -: - Operator Stringliteral Identifier - | Operator Userdefinedstringliteral -; - -/*Templates*/ -templatedeclaration -: - Template '<' templateparameterlist '>' declaration -; - -templateparameterlist -: - templateparameter - | templateparameterlist ',' templateparameter -; - -templateparameter -: - typeparameter - | parameterdeclaration -; - -typeparameter -: - Class '...'? Identifier? - | Class Identifier? '=' typeid - | Typename '...'? Identifier? - | Typename Identifier? '=' typeid - | Template '<' templateparameterlist '>' Class '...'? Identifier? - | Template '<' templateparameterlist '>' Class Identifier? '=' idexpression -; - -simpletemplateid -: - templatename '<' templateargumentlist? '>' -; - -templateid -: - simpletemplateid - | operatorfunctionid '<' templateargumentlist? '>' - | literaloperatorid '<' templateargumentlist? '>' -; - -templatename -: - Identifier -; - -templateargumentlist -: - templateargument '...'? - | templateargumentlist ',' templateargument '...'? -; - -templateargument -: - constantexpression - | typeid - | idexpression -; - -typenamespecifier -: - Typename nestednamespecifier Identifier - | Typename nestednamespecifier Template? simpletemplateid -; - -explicitinstantiation -: - Extern? Template declaration -; - -explicitspecialization -: - Template '<' '>' declaration -; - -/*Exception handling*/ -tryblock -: - Try compoundstatement handlerseq -; - -functiontryblock -: - Try ctorinitializer? compoundstatement handlerseq -; - -handlerseq -: - handler handlerseq? -; - -handler -: - Catch '(' exceptiondeclaration ')' compoundstatement -; - -exceptiondeclaration -: - attributespecifierseq? typespecifierseq declarator - | attributespecifierseq? typespecifierseq abstractdeclarator? - | '...' -; - -throwexpression -: - Throw assignmentexpression? -; - -exceptionspecification -: - dynamicexceptionspecification - | noexceptspecification -; - -dynamicexceptionspecification -: - Throw '(' typeidlist? ')' -; - -typeidlist -: - typeid '...'? - | typeidlist ',' typeid '...'? -; - -noexceptspecification -: - Noexcept '(' constantexpression ')' - | Noexcept -; - -/*Preprocessing directives*/ -Directive -: - '#' ~[\r\n]* -> skip -; - -/*Lexer*/ - -/*Keywords*/ -Alignas -: - 'alignas' -; - -Alignof -: - 'alignof' -; - -Asm -: - 'asm' -; - -Auto -: - 'auto' -; - -Bool -: - 'bool' -; - -Break -: - 'break' -; - -Case -: - 'case' -; - -Catch -: - 'catch' -; - -Char -: - 'char' -; - -Char16 -: - 'char16_t' -; - -Char32 -: - 'char32_t' -; - -Class -: - 'class' -; - -Const -: - 'const' -; - -Constexpr -: - 'constexpr' -; - -Const_cast -: - 'const_cast' -; - -Continue -: - 'continue' -; - -Decltype -: - 'decltype' -; - -Default -: - 'default' -; - -Delete -: - 'delete' -; - -Do -: - 'do' -; - -Double -: - 'double' -; - -Dynamic_cast -: - 'dynamic_cast' -; - -Else -: - 'else' -; - -Enum -: - 'enum' -; - -Explicit -: - 'explicit' -; - -Export -: - 'export' -; - -Extern -: - 'extern' -; - -False -: - 'false' -; - -Final -: - 'final' -; - -Float -: - 'float' -; - -For -: - 'for' -; - -Friend -: - 'friend' -; - -Goto -: - 'goto' -; - -If -: - 'if' -; - -Inline -: - 'inline' -; - -Int -: - 'int' -; - -Long -: - 'long' -; - -Mutable -: - 'mutable' -; - -Namespace -: - 'namespace' -; - -New -: - 'new' -; - -Noexcept -: - 'noexcept' -; - -Nullptr -: - 'nullptr' -; - -Operator -: - 'operator' -; - -Override -: - 'override' -; - -Private -: - 'private' -; - -Protected -: - 'protected' -; - -Public -: - 'public' -; - -Register -: - 'register' -; - -Reinterpret_cast -: - 'reinterpret_cast' -; - -Return -: - 'return' -; - -Short -: - 'short' -; - -Signed -: - 'signed' -; - -Sizeof -: - 'sizeof' -; - -Static -: - 'static' -; - -Static_assert -: - 'static_assert' -; - -Static_cast -: - 'static_cast' -; - -Struct -: - 'struct' -; - -Switch -: - 'switch' -; - -Template -: - 'template' -; - -This -: - 'this' -; - -Thread_local -: - 'thread_local' -; - -Throw -: - 'throw' -; - -True -: - 'true' -; - -Try -: - 'try' -; - -Typedef -: - 'typedef' -; - -Typeid -: - 'typeid' -; - -Typename -: - 'typename' -; - -Union -: - 'union' -; - -Unsigned -: - 'unsigned' -; - -Using -: - 'using' -; - -Virtual -: - 'virtual' -; - -Void -: - 'void' -; - -Volatile -: - 'volatile' -; - -Wchar -: - 'wchar_t' -; - -While -: - 'while' -; - -/*Operators*/ -LeftParen -: - '(' -; - -RightParen -: - ')' -; - -LeftBracket -: - '[' -; - -RightBracket -: - ']' -; - -LeftBrace -: - '{' -; - -RightBrace -: - '}' -; - -Plus -: - '+' -; - -Minus -: - '-' -; - -Star -: - '*' -; - -Div -: - '/' -; - -Mod -: - '%' -; - -Caret -: - '^' -; - -And -: - '&' -; - -Or -: - '|' -; - -Tilde -: - '~' -; - -Not -: - '!' -; - -Assign -: - '=' -; - -Less -: - '<' -; - -Greater -: - '>' -; - -PlusAssign -: - '+=' -; - -MinusAssign -: - '-=' -; - -StarAssign -: - '*=' -; - -DivAssign -: - '/=' -; - -ModAssign -: - '%=' -; - -XorAssign -: - '^=' -; - -AndAssign -: - '&=' -; - -OrAssign -: - '|=' -; - -LeftShift -: - '<<' -; - -rightShift -: -//'>>' - Greater Greater -; - -LeftShiftAssign -: - '<<=' -; - -rightShiftAssign -: -//'>>=' - Greater Greater Assign -; - -Equal -: - '==' -; - -NotEqual -: - '!=' -; - -LessEqual -: - '<=' -; - -GreaterEqual -: - '>=' -; - -AndAnd -: - '&&' -; - -OrOr -: - '||' -; - -PlusPlus -: - '++' -; - -MinusMinus -: - '--' -; - -Comma -: - ',' -; - -ArrowStar -: - '->*' -; - -Arrow -: - '->' -; - -Question -: - '?' -; - -Colon -: - ':' -; - -Doublecolon -: - '::' -; - -Semi -: - ';' -; - -Dot -: - '.' -; - -DotStar -: - '.*' -; - -Ellipsis -: - '...' -; - -operator -: - New - | Delete - | New '[' ']' - | Delete '[' ']' - | '+' - | '-' - | '*' - | '/' - | '%' - | '^' - | '&' - | '|' - | '~' - | '!' - | '=' - | '<' - | '>' - | '+=' - | '-=' - | '*=' - | '/=' - | '%=' - | '^=' - | '&=' - | '|=' - | '<<' - | rightShift - | rightShiftAssign - | '<<=' - | '==' - | '!=' - | '<=' - | '>=' - | '&&' - | '||' - | '++' - | '--' - | ',' - | '->*' - | '->' - | '(' ')' - | '[' ']' -; - -/*Lexer*/ -fragment -Hexquad -: - HEXADECIMALDIGIT HEXADECIMALDIGIT HEXADECIMALDIGIT HEXADECIMALDIGIT -; - -fragment -Universalcharactername -: - '\\u' Hexquad - | '\\U' Hexquad Hexquad -; - -Identifier -: -/* - Identifiernondigit - | Identifier Identifiernondigit - | Identifier DIGIT - */ - Identifiernondigit - ( - Identifiernondigit - | DIGIT - )* -; - -fragment -Identifiernondigit -: - NONDIGIT - | Universalcharactername - /* other implementation defined characters*/ -; - -fragment -NONDIGIT -: - [a-zA-Z_] -; - -fragment -DIGIT -: - [0-9] -; - -literal -: - Integerliteral - | Characterliteral - | Floatingliteral - | Stringliteral - | booleanliteral - | pointerliteral - | userdefinedliteral -; - -Integerliteral -: - Decimalliteral Integersuffix? - | Octalliteral Integersuffix? - | Hexadecimalliteral Integersuffix? - | Binaryliteral Integersuffix? -; - -Decimalliteral -: - NONZERODIGIT - ( - '\''? DIGIT - )* -; - -Octalliteral -: - '0' - ( - '\''? OCTALDIGIT - )* -; - -Hexadecimalliteral -: - ( - '0x' - | '0X' - ) HEXADECIMALDIGIT - ( - '\''? HEXADECIMALDIGIT - )* -; - -Binaryliteral -: - ( - '0b' - | '0B' - ) BINARYDIGIT - ( - '\''? BINARYDIGIT - )* -; - -fragment -NONZERODIGIT -: - [1-9] -; - -fragment -OCTALDIGIT -: - [0-7] -; - -fragment -HEXADECIMALDIGIT -: - [0-9a-fA-F] -; - -fragment -BINARYDIGIT -: - [01] -; - -Integersuffix -: - Unsignedsuffix Longsuffix? - | Unsignedsuffix Longlongsuffix? - | Longsuffix Unsignedsuffix? - | Longlongsuffix Unsignedsuffix? -; - -fragment -Unsignedsuffix -: - [uU] -; - -fragment -Longsuffix -: - [lL] -; - -fragment -Longlongsuffix -: - 'll' - | 'LL' -; - -Characterliteral -: - '\'' Cchar+ '\'' - | 'u' '\'' Cchar+ '\'' - | 'U' '\'' Cchar+ '\'' - | 'L' '\'' Cchar+ '\'' -; - -fragment -Cchar -: - ~['\\\r\n] - | Escapesequence - | Universalcharactername -; - -fragment -Escapesequence -: - Simpleescapesequence - | Octalescapesequence - | Hexadecimalescapesequence -; - -fragment -Simpleescapesequence -: - '\\\'' - | '\\"' - | '\\?' - | '\\\\' - | '\\a' - | '\\b' - | '\\f' - | '\\n' - | '\\r' - | '\\t' - | '\\v' -; - -fragment -Octalescapesequence -: - '\\' OCTALDIGIT - | '\\' OCTALDIGIT OCTALDIGIT - | '\\' OCTALDIGIT OCTALDIGIT OCTALDIGIT -; - -fragment -Hexadecimalescapesequence -: - '\\x' HEXADECIMALDIGIT+ -; - -Floatingliteral -: - Fractionalconstant Exponentpart? Floatingsuffix? - | Digitsequence Exponentpart Floatingsuffix? -; - -fragment -Fractionalconstant -: - Digitsequence? '.' Digitsequence - | Digitsequence '.' -; - -fragment -Exponentpart -: - 'e' SIGN? Digitsequence - | 'E' SIGN? Digitsequence -; - -fragment -SIGN -: - [+-] -; - -fragment -Digitsequence -: - DIGIT - ( - '\''? DIGIT - )* -; - -fragment -Floatingsuffix -: - [flFL] -; - -Stringliteral -: - Encodingprefix? '"' Schar* '"' - | Encodingprefix? 'R' Rawstring -; - -fragment -Encodingprefix -: - 'u8' - | 'u' - | 'U' - | 'L' -; - -fragment -Schar -: - ~["\\\r\n] - | Escapesequence - | Universalcharactername -; - -fragment -Rawstring /* '"' dcharsequence? '(' rcharsequence? ')' dcharsequence? '"' */ -: - '"' .*? '(' .*? ')' .*? '"' -; - -booleanliteral -: - False - | True -; - -pointerliteral -: - Nullptr -; - -userdefinedliteral -: - Userdefinedintegerliteral - | Userdefinedfloatingliteral - | Userdefinedstringliteral - | Userdefinedcharacterliteral -; - -Userdefinedintegerliteral -: - Decimalliteral Udsuffix - | Octalliteral Udsuffix - | Hexadecimalliteral Udsuffix - | Binaryliteral Udsuffix -; - -Userdefinedfloatingliteral -: - Fractionalconstant Exponentpart? Udsuffix - | Digitsequence Exponentpart Udsuffix -; - -Userdefinedstringliteral -: - Stringliteral Udsuffix -; - -Userdefinedcharacterliteral -: - Characterliteral Udsuffix -; - -fragment -Udsuffix -: - Identifier -; - -Whitespace -: - [ \t]+ -> skip -; - -Newline -: - ( - '\r' '\n'? - | '\n' - ) -> skip -; - -BlockComment -: - '/*' .*? '*/' -> skip -; - -LineComment -: - '//' ~[\r\n]* -> skip -; \ No newline at end of file diff --git a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/evaluator/CppCodeRunner.java b/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/evaluator/CppCodeRunner.java deleted file mode 100644 index 7040c8a099..0000000000 --- a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/evaluator/CppCodeRunner.java +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright 2017 TWO SIGMA OPEN SOURCE, LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.twosigma.beakerx.cpp.evaluator; - -import com.twosigma.beakerx.cpp.autocomplete.CPP14Lexer; -import com.twosigma.beakerx.cpp.autocomplete.CPP14Parser; -import com.twosigma.beakerx.cpp.kernel.Extractor; -import com.twosigma.beakerx.cpp.utils.CellGobblerManager; -import com.twosigma.beakerx.evaluator.InternalVariable; -import com.twosigma.beakerx.jvm.object.SimpleEvaluationObject; -import org.antlr.v4.runtime.ANTLRInputStream; -import org.antlr.v4.runtime.CommonTokenStream; -import org.antlr.v4.runtime.ParserRuleContext; -import org.antlr.v4.runtime.tree.ParseTreeWalker; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.BufferedInputStream; -import java.io.EOFException; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.ObjectInputStream; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.lang.reflect.InvocationTargetException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.StandardOpenOption; -import java.util.ArrayList; -import java.util.List; - -class CppCodeRunner implements Runnable { - - private static final Logger logger = LoggerFactory.getLogger(CppCodeRunner.class.getName()); - - private CppEvaluator cppEvaluator; - private final SimpleEvaluationObject theOutput; - private final String theCode; - private final String theCellId; - private Process cellProc; - - CppCodeRunner(CppEvaluator cppEvaluator, SimpleEvaluationObject out, String code, String theCellId) { - this.cppEvaluator = cppEvaluator; - this.theOutput = out; - this.theCode = code; - this.theCellId = theCellId; - } - - private String createMainCaller(String type) { - StringBuilder builder = new StringBuilder(); - if (type != "void") { - builder.append("JNIEnv *globEnv;\n"); - builder.append("jobject globObj;\n"); - builder.append("\nextern \"C\" jobject call_beakerx_main(JNIEnv *e,jobject o) {\n"); - builder.append("\t" + "globEnv=e;\n"); - builder.append("\t" + "globObj=o;\n"); - builder.append("\t" + type + " ret;\n"); - builder.append("\t" + "beakerx_main(ret);\n"); - builder.append("\t" + "return Beakerx::convert(ret);\n"); - } else { - builder.append("JNIEnv *globEnv;\n"); - builder.append("jobject globObj;\n"); - builder.append("\nextern \"C\" void call_beakerx_main(JNIEnv *e,jobject o) {\n"); - builder.append("\t" + "globEnv=e;\n"); - builder.append("\t" + "globObj=o;\n"); - builder.append("beakerx_main();\n"); - builder.append("return;\n"); - } - builder.append("}\n"); - return builder.toString(); - } - - @Override - public void run() { - theOutput.setOutputHandler(); - - InternalVariable.setValue(theOutput); - - try { - // Parse code to find beakerx_main and type - CPP14Lexer lexer = new CPP14Lexer(new ANTLRInputStream(theCode)); - // Get a list of matched tokens - CommonTokenStream tokens = new CommonTokenStream(lexer); - // Pass the tokens to the parser - CPP14Parser parser = new CPP14Parser(tokens); - // Parse code - ParserRuleContext t = parser.translationunit(); - ParseTreeWalker walker = new ParseTreeWalker(); - Extractor extractor = new Extractor(); - walker.walk(extractor, t); - String cellType = extractor.returnType; - int beakerMainLastToken = extractor.beakerMainLastToken; - - cellType = cellType.replaceAll(">>", "> >"); - - String processedCode = theCode; - // If beakerx_main was found - if (!cellType.equals("none")) { - int beakerMainEnd = tokens.get(beakerMainLastToken).getStopIndex(); - StringBuilder builder = new StringBuilder(theCode); - builder.insert(beakerMainEnd + 1, createMainCaller(cellType)); - // builder.insert(0, "extern Beakerx beakerx;\n"); - builder.insert(0, "#include \n"); - processedCode = builder.toString(); - } - - // Create .cpp file - String tmpDir = cppEvaluator.getTempCppFiles().getPath(); - Path filePath = Paths.get(tmpDir + "/" + theCellId + ".cpp"); - Files.write(filePath, processedCode.getBytes(), StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); - // Prepare to compile - String inputFile = tmpDir + "/" + theCellId + ".cpp"; - String outputFile = tmpDir + "/lib" + theCellId + ".so"; - ArrayList clangCommand = new ArrayList<>(cppEvaluator.getCompileCommand()); - clangCommand.add("-o"); - clangCommand.add(outputFile); - clangCommand.add(inputFile); - clangCommand.addAll(cppEvaluator.getUserFlags()); - - ProcessBuilder pb; - - if (System.getenv("BEAKER_CPP_DEBUG") != null) { - logger.info("Compiling with:"); - StringBuilder builder = new StringBuilder(); - for (String s : clangCommand) { - builder.append(s + " "); - } - logger.info(builder.toString()); - } - - // Compile - pb = new ProcessBuilder(clangCommand); - pb.directory(new File(System.getProperty("user.dir"))); - pb.redirectInput(ProcessBuilder.Redirect.PIPE); - pb.redirectOutput(ProcessBuilder.Redirect.PIPE); - pb.redirectError(ProcessBuilder.Redirect.PIPE); - Process p = pb.start(); - CellGobblerManager.getInstance().startCellGobbler(p.getInputStream(), "stderr", theOutput); - CellGobblerManager.getInstance().startCellGobbler(p.getErrorStream(), "stderr", theOutput); - if ((p.waitFor()) == 0) { - cppEvaluator.getLoadedCells().add(theCellId); - } else { - theOutput.error("Compilation failed"); - theOutput.finished(null); - } - - Object ret; - - // Execute if type is recognized - if (!cellType.equals("none")) { - List runCommand = new ArrayList<>(); - runCommand.add(cppEvaluator.getTempCppFiles().getPath() + "/cpp"); - runCommand.add(CppEvaluator.EXECUTE); - runCommand.add(cppEvaluator.getSessionId()); - runCommand.add(theCellId); - runCommand.add(cellType); - runCommand.add(cppEvaluator.getTempCppFiles().getPath()); - - for (String cell : cppEvaluator.getLoadedCells()) { - if (!cell.equals(theCellId)) { - runCommand.add(cell); - } - } - - pb = new ProcessBuilder(runCommand); - pb.directory(new File(System.getProperty("user.dir"))); - pb.redirectInput(ProcessBuilder.Redirect.PIPE); - pb.redirectOutput(ProcessBuilder.Redirect.PIPE); - pb.redirectError(ProcessBuilder.Redirect.PIPE); - this.cellProc = pb.start(); - CellGobblerManager.getInstance().startCellGobbler(cellProc.getInputStream(), "stdout", theOutput); - CellGobblerManager.getInstance().startCellGobbler(cellProc.getErrorStream(), "stderr", theOutput); - if ((cellProc.waitFor()) == 0) { - try { - InputStream file = new FileInputStream(tmpDir + "/" + theCellId + ".result"); - InputStream buffer = new BufferedInputStream(file); - ObjectInputStream input = new ObjectInputStream(buffer); - ret = input.readObject(); - theOutput.finished(ret); - } catch (EOFException ex) { - logger.info("EOFException!"); - theOutput.error("Failed to read serialized cell output"); - } catch (IOException ex) { - logger.info("IOException!"); - theOutput.error("Failed to read serialized cell output"); - } - } else { - theOutput.error("Execution failed"); - } - } else - theOutput.finished(null); - - } catch (Throwable e) { - if (e instanceof InvocationTargetException) - e = ((InvocationTargetException) e).getTargetException(); - if ((e instanceof InterruptedException) || (e instanceof ThreadDeath)) { - theOutput.error(INTERUPTED_MSG); - } else { - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - e.printStackTrace(pw); - theOutput.error(sw.toString()); - } - } finally { - if (theOutput != null) { - theOutput.executeCodeCallback(); - } - } - theOutput.clrOutputHandler(); - } - - public void cancelExecution() { - if (cellProc != null) { - cellProc.destroy(); - } - } -} diff --git a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/evaluator/CppEvaluator.java b/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/evaluator/CppEvaluator.java deleted file mode 100644 index 303cc66cd7..0000000000 --- a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/evaluator/CppEvaluator.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright 2015 TWO SIGMA OPEN SOURCE, LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.twosigma.beakerx.cpp.evaluator; - -import com.twosigma.beakerx.autocomplete.AutocompleteResult; -import com.twosigma.beakerx.cpp.utils.TempCppFiles; -import com.twosigma.beakerx.cpp.utils.CLangCommand; -import com.twosigma.beakerx.evaluator.BaseEvaluator; -import com.twosigma.beakerx.evaluator.JobDescriptor; -import com.twosigma.beakerx.jvm.object.SimpleEvaluationObject; -import com.twosigma.beakerx.jvm.threads.BeakerCellExecutor; -import com.twosigma.beakerx.jvm.threads.CellExecutor; -import com.twosigma.beakerx.kernel.KernelParameters; -import com.twosigma.beakerx.kernel.PathToJar; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Optional; - -import static com.twosigma.beakerx.kernel.Utils.uuid; - -public class CppEvaluator extends BaseEvaluator { - public static final String EXECUTE = "execute"; - private List compileCommand; - private CppWorkerThread workerThread; - private List userFlags = new ArrayList<>(); - private TempCppFiles tempCppFiles; - private HashSet loadedCells; - - public CppEvaluator(String id, String sId, CellExecutor cellExecutor) { - super(id, sId, cellExecutor); - tempCppFiles = new TempCppFiles(id); - compileCommand = CLangCommand.compileCommand(tempCppFiles); - loadedCells = new HashSet<>(); - workerThread = new CppWorkerThread(this); - workerThread.start(); - } - - public CppEvaluator(String id, String sId) { - this(id, sId, new BeakerCellExecutor("cpp")); - } - - @Override - public AutocompleteResult autocomplete(String code, int caretPosition) { - return null; - } - - @Override - public void killAllThreads() { - // executor.killAllThreads(); - } - - @Override - public void cancelExecution() { - workerThread.cancelExecution(); - } - - @Override - protected void doResetEnvironment() { - loadedCells.clear(); - workerThread.halt(); - } - - public void exit() { - tempCppFiles.close(); - workerThread.doExit(); - cancelExecution(); - workerThread.halt(); - } - - @Override - public void initKernel(KernelParameters kernelParameters) { - } - - @Override - public void setShellOptions(KernelParameters kernelParameters) throws IOException { - Optional flagStringOptional = kernelParameters.getParam("flagString", String.class); - if (flagStringOptional.isPresent()) { - String[] flags = flagStringOptional.get().split("\\s+"); - userFlags = new ArrayList<>(Arrays.asList(flags)); - resetEnvironment(); - } - } - - @Override - protected boolean addJar(PathToJar path) { - return false; - } - - @Override - public void evaluate(SimpleEvaluationObject seo, String code) { - // send job to thread - workerThread.add(new JobDescriptor(code, seo, uuid())); - } - - public List getUserFlags() { - return userFlags; - } - - public TempCppFiles getTempCppFiles() { - return tempCppFiles; - } - - public HashSet getLoadedCells() { - return loadedCells; - } - - public List getCompileCommand() { - return compileCommand; - } -} diff --git a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/evaluator/CppWorkerThread.java b/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/evaluator/CppWorkerThread.java deleted file mode 100644 index a6ed71b776..0000000000 --- a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/evaluator/CppWorkerThread.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright 2017 TWO SIGMA OPEN SOURCE, LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.twosigma.beakerx.cpp.evaluator; - -import com.twosigma.beakerx.NamespaceClient; -import com.twosigma.beakerx.evaluator.JobDescriptor; -import com.twosigma.beakerx.evaluator.WorkerThread; - -class CppWorkerThread extends WorkerThread { - - private CppEvaluator cppEvaluator; - private CppCodeRunner cppCodeRunner; - protected boolean exit; - - public CppWorkerThread(CppEvaluator cppEvaluator) { - super("cpp worker"); - this.cppEvaluator = cppEvaluator; - exit = false; - } - /* - * This thread performs all the evaluation - */ - - public void run() { - JobDescriptor j = null; - NamespaceClient nc = null; - - - while (!exit) { - try { - // wait for work - syncObject.acquire(); - - // get next job descriptor - j = jobQueue.poll(); - if (j == null) - continue; - - j.outputObject.started(); - - nc = NamespaceClient.getBeaker(cppEvaluator.getSessionId()); - nc.setOutputObj(j.outputObject); - - // normalize and analyze code - String code = normalizeCode(j.codeToBeExecuted); - - cppCodeRunner = new CppCodeRunner(cppEvaluator, j.outputObject, code, j.cellId); - if (!cppEvaluator.executeTask(cppCodeRunner)) { - j.outputObject.error(INTERUPTED_MSG); - } - if (nc != null) { - nc.setOutputObj(null); - nc = null; - } - j = null; - } catch (Throwable e) { - e.printStackTrace(); - } finally { - if (nc != null) { - nc.setOutputObj(null); - nc = null; - } - } - } - NamespaceClient.delBeaker(cppEvaluator.getSessionId()); - } - - /* - * This function does: - * 1) remove comments - * 2) ensure we have a cr after each ';' (if not inside double quotes or single quotes) - * 3) remove empty lines - */ - - protected String normalizeCode(String code) { - String c1 = code.replaceAll("\r\n", "\n").replaceAll("(?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|(?://.*)", ""); - StringBuilder c2 = new StringBuilder(); - boolean indq = false; - boolean insq = false; - for (int i = 0; i < c1.length(); i++) { - char c = c1.charAt(i); - switch (c) { - case '"': - if (!insq && i > 0 && c1.charAt(i - 1) != '\\') - indq = !indq; - break; - case '\'': - if (!indq && i > 0 && c1.charAt(i - 1) != '\\') - insq = !insq; - break; - case ';': - if (!indq && !insq) { - c2.append(c); - c = '\n'; - } - break; - } - c2.append(c); - } - return c2.toString().replaceAll("\n\n+", "\n").trim(); - } - - public void cancelExecution() { - if (cppCodeRunner != null) { - cppCodeRunner.cancelExecution(); - } - } - - public void doExit() { - this.exit = true; - } -} diff --git a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/handlers/CppCommOpenHandler.java b/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/handlers/CppCommOpenHandler.java deleted file mode 100644 index 8793904237..0000000000 --- a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/handlers/CppCommOpenHandler.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2017 TWO SIGMA OPEN SOURCE, LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.twosigma.beakerx.cpp.handlers; - -import com.twosigma.beakerx.kernel.comm.KernelControlCommandListHandler; -import com.twosigma.beakerx.kernel.comm.KernelControlInterrupt; -import com.twosigma.beakerx.kernel.comm.TargetNamesEnum; -import com.twosigma.beakerx.kernel.handler.CommOpenHandler; -import com.twosigma.beakerx.kernel.KernelFunctionality; -import com.twosigma.beakerx.handler.Handler; -import com.twosigma.beakerx.message.Message; - -public class CppCommOpenHandler extends CommOpenHandler{ - - private Handler[] KERNEL_CONTROL_CHANNEL_HANDLERS = { - new KernelControlInterrupt(kernel), - new KernelControlCommandListHandler(kernel)}; - - public CppCommOpenHandler(KernelFunctionality kernel) { - super(kernel); - } - - public Handler[] getKernelControlChanelHandlers(String targetName){ - if(TargetNamesEnum.KERNEL_CONTROL_CHANNEL.getTargetName().equalsIgnoreCase(targetName)){ - return (Handler[]) KERNEL_CONTROL_CHANNEL_HANDLERS; - }else{ - return (Handler[]) new Handler[0]; - } - } - -} \ No newline at end of file diff --git a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/handlers/CppKernelInfoHandler.java b/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/handlers/CppKernelInfoHandler.java deleted file mode 100644 index 7f772cda46..0000000000 --- a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/handlers/CppKernelInfoHandler.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2017 TWO SIGMA OPEN SOURCE, LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.twosigma.beakerx.cpp.handlers; - -import com.twosigma.beakerx.KernelInfoHandler; -import com.twosigma.beakerx.kernel.KernelFunctionality; - -import java.io.Serializable; -import java.util.HashMap; - -public class CppKernelInfoHandler extends KernelInfoHandler { - - public CppKernelInfoHandler(KernelFunctionality kernel) { - super(kernel); - } - - @Override - protected HashMap doLanguageInfo(HashMap languageInfo) { - languageInfo.put("name", "cpp"); - languageInfo.put("version", ""); - languageInfo.put("mimetype", ""); - languageInfo.put("file_extension", ".cpp"); - languageInfo.put("codemirror_mode", "C++"); - languageInfo.put("nbconverter_exporter", ""); - return languageInfo; - } - - @Override - protected HashMap doContent(HashMap content) { - content.put("implementation", "cpp"); - content.put("banner", "BeakerX kernel for C++"); - return content; - } - -} \ No newline at end of file diff --git a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/kernel/Cpp.java b/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/kernel/Cpp.java deleted file mode 100644 index f8596d4c24..0000000000 --- a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/kernel/Cpp.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2017 TWO SIGMA OPEN SOURCE, LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.twosigma.beakerx.cpp.kernel; - -import com.twosigma.beakerx.cpp.evaluator.CppEvaluator; -import com.twosigma.beakerx.cpp.handlers.CppCommOpenHandler; -import com.twosigma.beakerx.cpp.handlers.CppKernelInfoHandler; -import com.twosigma.beakerx.cpp.utils.CppKernel; -import com.twosigma.beakerx.evaluator.Evaluator; -import com.twosigma.beakerx.kernel.KernelParameters; -import com.twosigma.beakerx.kernel.handler.CommOpenHandler; -import com.twosigma.beakerx.kernel.Kernel; -import com.twosigma.beakerx.kernel.KernelConfigurationFile; -import com.twosigma.beakerx.kernel.KernelRunner; -import com.twosigma.beakerx.kernel.KernelSocketsFactory; -import com.twosigma.beakerx.kernel.KernelSocketsFactoryImpl; -import com.twosigma.beakerx.handler.KernelHandler; -import com.twosigma.beakerx.message.Message; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; - -import static com.twosigma.beakerx.DefaultJVMVariables.IMPORTS; -import static com.twosigma.beakerx.cpp.evaluator.CppEvaluator.EXECUTE; - import static com.twosigma.beakerx.kernel.Utils.uuid; - -public class Cpp extends Kernel { - - public Cpp(final String id, final Evaluator evaluator, KernelSocketsFactory kernelSocketsFactory) { - super(id, evaluator, kernelSocketsFactory); - } - - @Override - public CommOpenHandler getCommOpenHandler(Kernel kernel) { - return new CppCommOpenHandler(kernel); - } - - @Override - public KernelHandler getKernelInfoHandler(Kernel kernel) { - return new CppKernelInfoHandler(kernel); - } - - public static void main(final String[] args) throws InterruptedException, IOException { - if ((args.length > 4) && (args[0].equals(EXECUTE))) { - executeCppCode(args); - } else { - KernelRunner.run(() -> { - String id = uuid(); - KernelSocketsFactoryImpl kernelSocketsFactory = new KernelSocketsFactoryImpl(new KernelConfigurationFile(args)); - return new Cpp(id, new CppEvaluator(id, id), kernelSocketsFactory); - }); - } - } - - private static void executeCppCode(String[] args) { - //String sessionId = args[1]; - String mainCell = args[2]; - String type = args[3]; - String tempDirectory = args[4]; - CppKernel kern = new CppKernel(tempDirectory); - - List otherCells = new ArrayList<>(Arrays.asList(args)); - // Remove first four arguments - otherCells.subList(0, 5).clear(); - kern.execute(mainCell, type, tempDirectory, otherCells); - } - - @Override - public KernelParameters getKernelParameters() { - HashMap kernelParameters = new HashMap<>(); - kernelParameters.put(IMPORTS, new CppDefaultVariables().getImports()); - return new KernelParameters(kernelParameters); - } -} \ No newline at end of file diff --git a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/kernel/CppDefaultVariables.java b/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/kernel/CppDefaultVariables.java deleted file mode 100644 index 329b42246b..0000000000 --- a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/kernel/CppDefaultVariables.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2017 TWO SIGMA OPEN SOURCE, LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.twosigma.beakerx.cpp.kernel; - -import com.twosigma.beakerx.DefaultJVMVariables; - -public class CppDefaultVariables extends DefaultJVMVariables { - - public CppDefaultVariables() { - } - -} \ No newline at end of file diff --git a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/kernel/Extractor.java b/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/kernel/Extractor.java deleted file mode 100644 index 41ecf39092..0000000000 --- a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/kernel/Extractor.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright 2015 TWO SIGMA OPEN SOURCE, LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.twosigma.beakerx.cpp.kernel; - -import com.twosigma.beakerx.cpp.autocomplete.CPP14BaseListener; -import com.twosigma.beakerx.cpp.autocomplete.CPP14Parser; -import org.antlr.v4.runtime.ParserRuleContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; - -public class Extractor extends CPP14BaseListener { - - private static final Logger logger = LoggerFactory.getLogger(Extractor.class.getName()); - - public int beakerMainLastToken; - public String returnType = "none"; - // Top level function declarations are at depth 4 in the AST - // generated with the CPP14 grammar. - private final int topFuncDepth = 4; - - private static String buildType(String declarator, String type) { - StringBuilder builder = new StringBuilder(type); - int i = 0; - while ((i < declarator.length()) && (declarator.charAt(i) == '*')){ - builder.append('*'); - ++i; - } - return builder.toString(); - } - - private static boolean isSupported(String type) { - // Validate primitives - switch(type){ - case "int": - case "double": - case "float": - case "bool": - case "std::string": - case "char*": - case "void": - return true; - default: - break; - } - // Validate containers - int leftBrack = type.indexOf('<'); - int rightBrack = type.lastIndexOf('>'); - if ((leftBrack < 0) || (rightBrack < 0)) { - return false; - } - String container = type.substring(0, leftBrack); - String content = type.substring(leftBrack + 1, rightBrack); - // Split contents into units - ArrayList contents = new ArrayList(); - int bracketDepth = 0; - int comma = -1; - int i = 0; - while (i < content.length()){ - switch (content.charAt(i)){ - case '<': - bracketDepth++; - break; - case '>': - bracketDepth--; - break; - case ',': - if (bracketDepth == 0){ - String substr = content.substring(comma + 1, i); - contents.add(substr); - comma = i; - } - break; - default: - break; - } - i++; - } - contents.add(content.substring(comma + 1, i)); - - // System.out.println("Container is: " + container); - // for (String s : contents) { - // System.out.println("It contains: " + s); - // } - // Support containers with - switch(container){ - case "std::vector": - case "std::map": - for (String contained : contents){ - if (!isSupported(contained)){ - return false; - } - } - return true; - default: - break; - } - - return false; - } - - @Override public void exitFunctiondefinition(CPP14Parser.FunctiondefinitionContext ctx) { - int depth = ctx.depth(); - CPP14Parser.DeclaratorContext decl = ctx.declarator(); - String declText = decl.getText(); - if((depth == topFuncDepth) && (decl != null) && (declText.contains("beakerx_main"))) { - ParserRuleContext declSpecSeq = ctx.declspecifierseq(); - CPP14Parser.ParameterdeclarationlistContext paramsList = - decl.ptrdeclarator().noptrdeclarator().parametersandqualifiers().parameterdeclarationclause() - .parameterdeclarationlist(); - String type = "void"; - if (paramsList != null){ - type = paramsList.parameterdeclaration().declspecifierseq().getText(); - } - - ParserRuleContext params = decl.parametersandqualifiers(); - ParserRuleContext virtSpecSeq = ctx.virtspecifierseq(); - ParserRuleContext attrSpecSeq = ctx.attributespecifierseq(); - if ((paramsList != null) && (paramsList.parameterdeclarationlist() != null)) { - logger.info("The beakerx_main function must have zero or one paramters."); - return; - } else if (attrSpecSeq != null) { - logger.info("The beakerx_main function must not have attributes."); - return; - } else if (virtSpecSeq != null) { - logger.info("The beakerx_main function cannot be virtual."); - return; - } - - if(declSpecSeq != null) { - beakerMainLastToken = ctx.getSourceInterval().b; - if (isSupported(type)){ - returnType = type; - } else { - logger.info("Beakerx cannot recognize the return type of your cell."); - } - } - } - return; - } -} \ No newline at end of file diff --git a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/utils/CLangCommand.java b/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/utils/CLangCommand.java deleted file mode 100644 index de093afa1c..0000000000 --- a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/utils/CLangCommand.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2017 TWO SIGMA OPEN SOURCE, LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.twosigma.beakerx.cpp.utils; - -import java.util.ArrayList; -import java.util.List; - -public class CLangCommand { - - public static List compileCommand(TempCppFiles tempCppFiles) { - List compileCommand = new ArrayList<>(); - compileCommand.add("clang++"); - compileCommand.add("-shared"); - if (System.getProperty("os.name").toLowerCase().startsWith("mac")) { - compileCommand.add("-undefined"); - compileCommand.add("dynamic_lookup"); - } - compileCommand.add("-fPIC"); - compileCommand.add("-m64"); - compileCommand.add("-Wno-return-type-c-linkage"); - compileCommand.add("-I"); - compileCommand.add(tempCppFiles.getPath()); - compileCommand.add("-I"); - compileCommand.add(System.getProperty("java.home") + "/../include"); - compileCommand.add("-I"); - compileCommand.add(System.getProperty("java.home") + "/../include/linux"); - compileCommand.add("-I"); - compileCommand.add(System.getProperty("java.home") + "/../include/darwin"); - return compileCommand; - } -} diff --git a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/utils/CellGobblerManager.java b/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/utils/CellGobblerManager.java deleted file mode 100644 index 395402e0bf..0000000000 --- a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/utils/CellGobblerManager.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2015 TWO SIGMA OPEN SOURCE, LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.twosigma.beakerx.cpp.utils; - -import com.google.common.util.concurrent.ThreadFactoryBuilder; -import com.twosigma.beakerx.jvm.object.SimpleEvaluationObject; - -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; - -public class CellGobblerManager { - - private static final CellGobblerManager instance = new CellGobblerManager(); - private final ExecutorService executor = Executors.newCachedThreadPool(new ThreadFactoryBuilder().setNameFormat("CellGobbler-%d").build()); - - public static CellGobblerManager getInstance() { - return instance; - } - - private CellGobblerManager() {} - - public Future startCellGobbler(InputStream inputStream, String type, SimpleEvaluationObject output) { - return executor.submit(new CellGobbler(inputStream, type, output)); - } - - private static class CellGobbler implements Runnable { - - private static volatile boolean shutdownInprogress = false; - - private final InputStream is; - private final String type; - private final SimpleEvaluationObject output; - - private boolean isStillWaiting; - - private CellGobbler( - InputStream is, - String type, - SimpleEvaluationObject output) { - this.is = is; - this.type = type; - this.output = output; - } - - public static void shuttingDown() { - shutdownInprogress = true; - } - - @Override - public void run() { - try (BufferedReader br = new BufferedReader(new InputStreamReader(is))) { - String line; - while ((line = br.readLine()) != null) { - if (this.type.equals("stderr")) { - output.appendError(line + "\n"); - } else { - output.appendOutput(line + "\n"); - } - } - } catch (Exception ioe) { - ioe.printStackTrace(); - if (!shutdownInprogress) { - ioe.printStackTrace(); - } - } - } - } -} diff --git a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/utils/CppKernel.java b/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/utils/CppKernel.java deleted file mode 100644 index faad59fa2f..0000000000 --- a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/utils/CppKernel.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2017 TWO SIGMA OPEN SOURCE, LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.twosigma.beakerx.cpp.utils; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.BufferedOutputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.ObjectOutputStream; -import java.util.List; - -public class CppKernel { - - private static final Logger logger = LoggerFactory.getLogger(CppKernel.class.getName()); - - public native boolean cLoad(String fileName); - - public native Object cLoadAndRun(String fileName, String type); - - public CppKernel(final String tempDirectory) { - System.load(tempDirectory + "/" + TempCppFiles.LIB_CRUN_JNILIB); - } - - public int execute(final String mainCell, final String type, final String tempDirectory, List otherCells) { - - // look at an issue https://github.com/twosigma/beakerx/issues/5228 - //loadSharedObjects(tempDirectory, otherCells); - - Object ret = cLoadAndRun(tempDirectory + "/lib" + mainCell + ".so", type); - - try { - FileOutputStream file = new FileOutputStream(tempDirectory + "/" + mainCell + ".result"); - BufferedOutputStream buffer = new BufferedOutputStream(file); - ObjectOutputStream output = new ObjectOutputStream(buffer); - output.writeObject(ret); - output.close(); - } catch (IOException ex) { - logger.warn("Could not load file"); - return 1; - } - return 0; - } - - private void loadSharedObjects(String tempDirectory, List otherCells) { - for (String cell : otherCells) { - cLoad(tempDirectory + "/lib" + cell + ".so"); - } - } -} \ No newline at end of file diff --git a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/utils/TempCppFiles.java b/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/utils/TempCppFiles.java deleted file mode 100644 index d16a39cc31..0000000000 --- a/kernel/cpp/src/main/java/com/twosigma/beakerx/cpp/utils/TempCppFiles.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright 2017 TWO SIGMA OPEN SOURCE, LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.twosigma.beakerx.cpp.utils; - -import org.apache.commons.io.FileUtils; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.nio.file.Files; -import java.nio.file.Path; - -public class TempCppFiles { - - public static final String BEAKER_HPP = "beakerx.hpp"; - public static final String CPP = "cpp"; - public static final String CPP_BAT = "cpp.bat"; - public static final String CPP_KERNEL_H = "CppKernel.h"; - public static final String LIB_CRUN_JNILIB = "libCRun.jnilib"; - - public static final String BEAKERX = "beakerx_"; - private Path tempDirectory; - - public TempCppFiles(String prefix) { - tempDirectory = getTempDirectory(BEAKERX + prefix); - copyFile(BEAKER_HPP); - copyFile(CPP); - copyFile(CPP_BAT); - copyFile(CPP_KERNEL_H); - copyFile(LIB_CRUN_JNILIB); - addShutdownHookToDeleteTempDirectory(); - } - - public synchronized void close() { - try { - if (tempDirectory != null) { - FileUtils.deleteDirectory(tempDirectory.toFile()); - tempDirectory = null; - } - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - private void addShutdownHookToDeleteTempDirectory() { - Runtime.getRuntime().addShutdownHook(new Thread() { - @Override - public void run() { - super.run(); - close(); - } - }); - } - - private void copyFile(String fileName) { - InputStream is = this.getClass().getClassLoader().getResourceAsStream(fileName); - - OutputStream os = null; - try { - os = new FileOutputStream(tempDirectory.toString() + "/" + fileName); - byte[] buffer = new byte[4096]; - int length; - while ((length = is.read(buffer)) > 0) { - os.write(buffer, 0, length); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - os.close(); - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - File file = new File(tempDirectory.toString() + "/" + fileName); - file.setExecutable(true); - } - - private Path getTempDirectory(String prefix) { - try { - return Files.createTempDirectory(prefix); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - public String getPath() { - return tempDirectory.toString(); - } -} diff --git a/kernel/cpp/src/main/resources/CRun.cpp b/kernel/cpp/src/main/resources/CRun.cpp deleted file mode 100644 index 79f0008263..0000000000 --- a/kernel/cpp/src/main/resources/CRun.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2015 TWO SIGMA OPEN SOURCE, LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "CppKernel.h" -#include "beakerx.hpp" -#include -#include -#include - -JNIEXPORT jboolean JNICALL Java_com_twosigma_beakerx_cpp_utils_CppKernel_cLoad(JNIEnv *env, jobject obj, jstring jfile) { - const char* file = env->GetStringUTFChars(jfile, NULL); - void* handle = dlopen(file, RTLD_LAZY | RTLD_GLOBAL); - if (handle == NULL){ - return false; - } else { - return true; - } -} - -JNIEXPORT jobject JNICALL Java_com_twosigma_beakerx_cpp_utils_CppKernel_cLoadAndRun(JNIEnv *env, jobject obj, jstring jfile, jstring jtype) { - const char* file = env->GetStringUTFChars(jfile, NULL); - void* handle; - - handle = dlopen(file, RTLD_LAZY | RTLD_GLOBAL); - if (handle == NULL){ - return env->NewStringUTF(dlerror()); - } - - const char* type = env->GetStringUTFChars(jtype, NULL); - - handle = dlsym(handle, "call_beakerx_main"); - if (handle == NULL) { - return env->NewStringUTF(dlerror()); - } - - jobject ret = NULL; - if (strcmp(type, "void") == 0){ - void (*mainCaller)(JNIEnv *,jobject) = reinterpret_cast(reinterpret_cast(handle)); - mainCaller(env,obj); - } else { - jobject (*mainCaller)(JNIEnv *,jobject) = reinterpret_cast(reinterpret_cast(handle)); - ret = mainCaller(env,obj); - } - - return ret; -} - -int main(){ - return 0; -} diff --git a/kernel/cpp/src/main/resources/beakerx.hpp b/kernel/cpp/src/main/resources/beakerx.hpp deleted file mode 100644 index 1cb0da17e2..0000000000 --- a/kernel/cpp/src/main/resources/beakerx.hpp +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright 2015 TWO SIGMA OPEN SOURCE, LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include -#include -#include -#include -#include -#include - -extern JNIEnv *globEnv; -extern jobject globObj; - -class Beakerx { -public: - Beakerx(){ - - } - // Convert - static jobject convert(int conv){ - jclass typeClass = globEnv->FindClass("java/lang/Integer"); - jmethodID typeInit = globEnv->GetMethodID(typeClass, "", "(I)V"); - return globEnv->NewObject(typeClass, typeInit, conv); - } - static jobject convert(bool conv){ - jclass typeClass = globEnv->FindClass("java/lang/Boolean"); - jmethodID typeInit = globEnv->GetMethodID(typeClass, "", "(Z)V"); - return globEnv->NewObject(typeClass, typeInit, conv); - } - static jobject convert(float conv){ - jclass typeClass = globEnv->FindClass("java/lang/Float"); - jmethodID typeInit = globEnv->GetMethodID(typeClass, "", "(F)V"); - return globEnv->NewObject(typeClass, typeInit, conv); - } - static jobject convert(double conv){ - jclass typeClass = globEnv->FindClass("java/lang/Double"); - jmethodID typeInit = globEnv->GetMethodID(typeClass, "", "(D)V"); - return globEnv->NewObject(typeClass, typeInit, conv); - } - static jobject convert(char* conv){ - return (jobject) globEnv->NewStringUTF(conv); - } - static jobject convert(std::string conv){ - return (jobject) globEnv->NewStringUTF(conv.c_str()); - } - template - static jobject convert(std::vector vec){ - jclass typeClass = globEnv->FindClass("java/util/Vector"); - jmethodID typeInit = globEnv->GetMethodID(typeClass, "", "(I)V"); - jmethodID jadd = globEnv->GetMethodID(typeClass, "add", "(Ljava/lang/Object;)Z"); - jobject jvec = globEnv->NewObject(typeClass, typeInit, vec.size()); - for(int i = 0; i < vec.size(); i++){ - globEnv->CallBooleanMethod(jvec, jadd, convert(vec[i])); - } - return jvec; - } - template - static jobject convert(std::map theMap){ - jclass typeClass = globEnv->FindClass("java/util/HashMap"); - jmethodID typeInit = globEnv->GetMethodID(typeClass, "", "()V"); - jmethodID jput = globEnv->GetMethodID(typeClass, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); - jobject jmap = globEnv->NewObject(typeClass, typeInit); - for(typename std::map::iterator it = theMap.begin(); it != theMap.end(); ++it){ - globEnv->CallBooleanMethod(jmap, jput, convert(it->first), convert(it->second)); - } - return jmap; - } - - // Unconvert - static int unconvert(jobject obj, int &ref){ - jclass typeClass = globEnv->FindClass("java/lang/Integer"); - jmethodID getValue = globEnv->GetMethodID(typeClass, "intValue", "()I"); - jint jret = globEnv->CallIntMethod(obj, getValue); - ref = (int) jret; - return 1; - } - static int unconvert(jobject obj, bool &ref){ - jclass typeClass = globEnv->FindClass("java/lang/Boolean"); - jmethodID getValue = globEnv->GetMethodID(typeClass, "floatValue", "()Z"); - jint jret = globEnv->CallBooleanMethod(obj, getValue); - ref = (bool) jret; - return 1; - } - static int unconvert(jobject obj, float &ref){ - jclass typeClass = globEnv->FindClass("java/lang/Float"); - jmethodID getValue = globEnv->GetMethodID(typeClass, "floatValue", "()F"); - jint jret = globEnv->CallFloatMethod(obj, getValue); - ref = (float) jret; - return 1; - } - static int unconvert(jobject obj, double &ref){ - jclass typeClass = globEnv->FindClass("java/lang/Double"); - jmethodID getValue = globEnv->GetMethodID(typeClass, "doubleValue", "()D"); - jdouble jret = globEnv->CallDoubleMethod(obj, getValue); - ref = (double) jret; - return 1; - } - static int unconvert(jobject obj, std::string &ref){ - jstring jstr = (jstring) obj; - const char* str = globEnv->GetStringUTFChars(jstr, NULL); - ref = std::string(str); - return 1; - } - static int unconvert(jobject obj, char* ref){ - jstring jstr = (jstring) obj; - const char* str = globEnv->GetStringUTFChars(jstr, NULL); - ref = strdup(str); - return 1; - } - // Javascript arrays become java arraylists - template - static int unconvert(jobject obj, std::vector &ref){ - ref = std::vector(); - // Get array list size - jclass typeClass = globEnv->FindClass("java/util/ArrayList"); - jmethodID getLength = globEnv->GetMethodID(typeClass, "size", "()I"); - jmethodID get = globEnv->GetMethodID(typeClass, "get", "(I)Ljava/lang/Object;"); - jint length = globEnv->CallIntMethod(obj, getLength); - // Iterate array, push each into ref - for (jint i = 0; i < length; ++i){ - jobject jElement = globEnv->CallObjectMethod(obj, get, i); - T element; - unconvert(jElement, element); - ref.push_back(element); - } - return 1; - } - // Javascript arrays become java arraylists - template - static int unconvert(jobject jmap, std::map &ref){ - ref = std::map(); - // Get array list size - jclass mapClass = globEnv->FindClass("java/util/HashMap"); - jclass setClass = globEnv->FindClass("java/util/Set"); - jclass iteratorClass = globEnv->FindClass("java/util/Iterator"); - jclass mapEntryClass = globEnv->FindClass("java/util/Map$Entry"); - jmethodID getEntrySet = globEnv->GetMethodID(mapClass, "entrySet", "()Ljava/util/Set;"); - jmethodID getIterator = globEnv->GetMethodID(setClass, "iterator", "()Ljava/util/Iterator;"); - jmethodID hasNext = globEnv->GetMethodID(iteratorClass, "hasNext", "()Z"); - jmethodID next = globEnv->GetMethodID(iteratorClass, "next", "()Ljava/lang/Object;"); - jmethodID getKey = globEnv->GetMethodID(mapEntryClass, "getKey", "()Ljava/lang/Object;"); - jmethodID getValue = globEnv->GetMethodID(mapEntryClass, "getValue", "()Ljava/lang/Object;"); - - jobject entrySet = globEnv->CallObjectMethod(jmap, getEntrySet); - jobject iterator = globEnv->CallObjectMethod(entrySet, getIterator); - while(globEnv->CallBooleanMethod(iterator, hasNext)) { - jobject jentry = globEnv->CallObjectMethod(iterator, next); - jobject jkey = globEnv->CallObjectMethod(jentry, getKey); - jobject jvalue = globEnv->CallObjectMethod(jentry, getValue); - T1 key; - T2 value; - unconvert(jkey, key); - unconvert(jvalue, value); - ref[key] = value; - } - return 1; - } - - // Beakerx object - template - static int get(std::string name, T &ret) { - jstring jname = globEnv->NewStringUTF(name.c_str()); - jclass beakerxClass = globEnv->FindClass("com/twosigma/beakerx/cpp/utils/CppKernel"); - jmethodID javaBeakerxGet = globEnv->GetStaticMethodID(beakerxClass, "beakerxGet", "(Ljava/lang/String;)Ljava/lang/Object;"); - jobject obj = globEnv->CallStaticObjectMethod(beakerxClass, javaBeakerxGet, jname); - unconvert(obj, ret); - return 1; - } - - template - static int set(std::string name, T val){ - jstring jname = globEnv->NewStringUTF(name.c_str()); - jobject jval = convert(val); - jclass beakerxClass = globEnv->FindClass("com/twosigma/beakerx/cpp/utils/CppKernel"); - jmethodID javaBeakerxSet = globEnv->GetStaticMethodID(beakerxClass, "beakerxSet", "(Ljava/lang/String;Ljava/lang/Object;)I"); - jint ret = globEnv->CallStaticIntMethod(beakerxClass, javaBeakerxSet, jname, jval); - return (int) ret; - } -}; - -Beakerx beakerx; \ No newline at end of file diff --git a/kernel/cpp/src/test/java/com/twosigma/beakerx/cpp/CppKernelMainTest.java b/kernel/cpp/src/test/java/com/twosigma/beakerx/cpp/CppKernelMainTest.java deleted file mode 100644 index 8bb46448dd..0000000000 --- a/kernel/cpp/src/test/java/com/twosigma/beakerx/cpp/CppKernelMainTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright 2017 TWO SIGMA OPEN SOURCE, LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.twosigma.beakerx.cpp; - -import com.twosigma.beakerx.KernelSocketsServiceTest; -import com.twosigma.beakerx.cpp.evaluator.CppEvaluator; -import com.twosigma.beakerx.cpp.kernel.Cpp; -import com.twosigma.beakerx.kernel.comm.Comm; -import com.twosigma.beakerx.kernel.KernelParameters; -import com.twosigma.beakerx.kernel.KernelRunner; -import com.twosigma.beakerx.message.Message; -import org.junit.After; -import org.junit.Before; - -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; - -import static com.twosigma.MessageAssertions.verifyExecuteReplyMessage; -import static com.twosigma.beakerx.MessageFactoryTest.getExecuteRequestMessage; -import static com.twosigma.beakerx.evaluator.EvaluatorResultTestWatcher.waitForIdleMessage; -import static com.twosigma.beakerx.evaluator.EvaluatorResultTestWatcher.waitForResult; -import static com.twosigma.beakerx.evaluator.EvaluatorResultTestWatcher.waitForSentMessage; -import static com.twosigma.beakerx.evaluator.TestBeakerCellExecutor.cellExecutor; -import static org.assertj.core.api.Assertions.assertThat; - -public class CppKernelMainTest { - - private Cpp kernel; - - private KernelSocketsServiceTest kernelSocketsService; - - @Before - public void setUp() throws Exception { - String sessionId = "sessionId1"; - CppEvaluator evaluator = new CppEvaluator(sessionId, sessionId, cellExecutor()); - evaluator.setShellOptions(kernelParameters()); - kernelSocketsService = new KernelSocketsServiceTest(); - kernel = new Cpp(sessionId, evaluator, kernelSocketsService); - Thread kernelThread = new Thread(() -> KernelRunner.run(() -> kernel)); - kernelThread.start(); - kernelSocketsService.waitForSockets(); - } - - @After - public void tearDown() throws Exception { - kernelSocketsService.shutdown(); - kernelThread.join(); - } - - //@Test //disabled because of problem on jenkins - public void evaluate() throws Exception { - //given - String code = "" + - "// A basic C++ cell\n" + - "// define a beakerx_main function with an optional parameter for the return value\n" + - "#include \n" + - "void beakerx_main(){\n" + - " std::cout << \"Hello world!\" << std::endl;\n" + - " return;\n" + - "}"; - - Message message = getExecuteRequestMessage(code); - //when - kernelSocketsService.handleMsg(message); - //then - Optional idleMessage = waitForIdleMessage(kernelSocketsService.getKernelSockets()); - assertThat(idleMessage).isPresent(); - waitForResult(kernelSocketsService.getKernelSockets()); - verifyPublishedMsgs(kernelSocketsService); - verifyResult(kernelSocketsService.getExecuteResultMessage().get()); - waitForSentMessage(kernelSocketsService.getKernelSockets()); - verifySentMsgs(kernelSocketsService); - } - - private void verifyPublishedMsgs(KernelSocketsServiceTest service) { - assertThat(service.getBusyMessage()).isPresent(); - assertThat(service.getExecuteInputMessage()).isPresent(); - assertThat(service.getExecuteResultMessage()).isPresent(); - assertThat(service.getIdleMessage()).isPresent(); - } - - private void verifySentMsgs(KernelSocketsServiceTest service) { - verifyExecuteReplyMessage(service.getReplyMessage()); - } - - private void verifyResult(Message result) { - Map actual = ((Map) result.getContent().get(Comm.DATA)); - String value = (String) actual.get("text/plain"); - assertThat(value).isEqualTo("null\nHello world!\n"); - } - - private KernelParameters kernelParameters() { - Map params = new HashMap<>(); - return new KernelParameters(params); - } - -} \ No newline at end of file diff --git a/kernel/cpp/src/test/java/com/twosigma/beakerx/cpp/handlers/CppCommOpenHandlerTest.java b/kernel/cpp/src/test/java/com/twosigma/beakerx/cpp/handlers/CppCommOpenHandlerTest.java deleted file mode 100644 index 3cb407c307..0000000000 --- a/kernel/cpp/src/test/java/com/twosigma/beakerx/cpp/handlers/CppCommOpenHandlerTest.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2017 TWO SIGMA OPEN SOURCE, LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.twosigma.beakerx.cpp.handlers; - -import com.twosigma.beakerx.kernel.comm.TargetNamesEnum; -import com.twosigma.beakerx.jupyter.handler.JupyterHandlerTest; -import com.twosigma.beakerx.handler.Handler; -import com.twosigma.beakerx.message.Message; -import org.assertj.core.api.Assertions; -import org.junit.Before; -import org.junit.Test; - -import java.io.IOException; - -public class CppCommOpenHandlerTest { - - private CppKernelFunctionalityTest kernel; - private CppCommOpenHandler commOpenHandler; - private String targetName = TargetNamesEnum.KERNEL_CONTROL_CHANNEL.getTargetName(); - - @Before - public void setUp() throws IOException { - kernel = new CppKernelFunctionalityTest(); - commOpenHandler = new CppCommOpenHandler(kernel); - } - - @Test - public void handleMessage_shouldSendShellSocketMessage() throws Exception { - //given - Message message = JupyterHandlerTest.initOpenMessage(); - //when - commOpenHandler.handle(message); - //then - Assertions.assertThat(kernel.getSentMessages()).isNotEmpty(); - } - - @Test - public void getControlHandlersWithEmptyString_returnEmptyHandlersArray() throws Exception { - //when - Handler[] handlers = commOpenHandler.getKernelControlChanelHandlers(""); - //then - Assertions.assertThat(handlers).isEmpty(); - } - - @Test - public void getControlHandlersWithTargetName_returnNotEmptyHandlersArray() throws Exception { - //when - Handler[] handlers = commOpenHandler.getKernelControlChanelHandlers(targetName); - //then - Assertions.assertThat(handlers).isNotEmpty(); - } - -} diff --git a/kernel/cpp/src/test/java/com/twosigma/beakerx/cpp/handlers/CppKernelFunctionalityTest.java b/kernel/cpp/src/test/java/com/twosigma/beakerx/cpp/handlers/CppKernelFunctionalityTest.java deleted file mode 100644 index 5144501b84..0000000000 --- a/kernel/cpp/src/test/java/com/twosigma/beakerx/cpp/handlers/CppKernelFunctionalityTest.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2017 TWO SIGMA OPEN SOURCE, LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.twosigma.beakerx.cpp.handlers; - -import com.twosigma.beakerx.KernelTest; - -public class CppKernelFunctionalityTest extends KernelTest { - - public CppKernelFunctionalityTest() { - this("CppKernelTestId1"); - } - - public CppKernelFunctionalityTest(String id) { - super(id); - } - -} \ No newline at end of file diff --git a/kernel/cpp/src/test/java/com/twosigma/beakerx/cpp/handlers/CppKernelInfoHandlerTest.java b/kernel/cpp/src/test/java/com/twosigma/beakerx/cpp/handlers/CppKernelInfoHandlerTest.java deleted file mode 100644 index b189458727..0000000000 --- a/kernel/cpp/src/test/java/com/twosigma/beakerx/cpp/handlers/CppKernelInfoHandlerTest.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright 2017 TWO SIGMA OPEN SOURCE, LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.twosigma.beakerx.cpp.handlers; - -import com.twosigma.beakerx.message.Header; -import com.twosigma.beakerx.message.Message; -import com.twosigma.beakerx.message.MessageTest; -import org.assertj.core.api.Assertions; -import org.junit.After; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; - -import java.io.Serializable; -import java.util.Map; - - import static com.twosigma.beakerx.kernel.msg.JupyterMessages.KERNEL_INFO_REPLY; - -public class CppKernelInfoHandlerTest { - - private Message message; - private static CppKernelFunctionalityTest kernel; - private static CppKernelInfoHandler handler; - - @BeforeClass - public static void setUpClass() throws Exception { - kernel = new CppKernelFunctionalityTest(); - handler = new CppKernelInfoHandler(kernel); - } - - @Before - public void setUp() throws Exception { - message = MessageTest.createMessage(); - } - - @After - public void tearDown() throws Exception { - kernel.clearSentMessages(); - } - - @Test - public void handle_shouldSendMessage() throws Exception { - //when - handler.handle(message); - //then - Assertions.assertThat(kernel.getSentMessages()).isNotEmpty(); - } - - @Test - public void handle_sentMessageHasContent() throws Exception { - //when - handler.handle(message); - //then - Message sentMessage = kernel.getSentMessages().get(0); - Assertions.assertThat(sentMessage.getContent()).isNotEmpty(); - } - - @Test - public void handle_sentMessageHasHeaderTypeIsKernelInfoReply() throws Exception { - //when - handler.handle(message); - //then - Message sentMessage = kernel.getSentMessages().get(0); - Header header = sentMessage.getHeader(); - Assertions.assertThat(header).isNotNull(); - Assertions.assertThat(header.getType()).isEqualTo(KERNEL_INFO_REPLY.getName()); - } - - @Test - public void handle_sentMessageHasLanguageInfo() throws Exception { - //when - handler.handle(message); - //then - Message sentMessage = kernel.getSentMessages().get(0); - Map map = sentMessage.getContent(); - Assertions.assertThat(map).isNotNull(); - Assertions.assertThat(map.get("language_info")).isNotNull(); - } - - @Test - public void handle_messageContentHasCppLabel() throws Exception { - //when - handler.handle(message); - //then - Message sentMessage = kernel.getSentMessages().get(0); - Map map = sentMessage.getContent(); - Assertions.assertThat(map).isNotNull(); - Assertions.assertThat(map.get("implementation")).isEqualTo("cpp"); - } - -} From b942a78da2b5ae2f9e61a492c7e5d60bbb6b8098 Mon Sep 17 00:00:00 2001 From: jaroslawmalekcodete Date: Tue, 5 Dec 2017 17:45:08 +0100 Subject: [PATCH 08/29] jarek/6453: enable unimport magic command for all kernels (#6456) * #6453: enable unimport for clojure * #6453: add test for the rest of kernels * #6453: cleaning the code --- doc/clojure/Clojure.ipynb | 47 +++++++++++++- .../beakerx/evaluator/BaseEvaluator.java | 62 ++++++------------- .../classloader/BeakerxUrlClassLoader.java | 6 +- .../com/twosigma/beakerx/kernel/Imports.java | 42 ++++++++++++- .../twosigma/beakerx/KernelExecutionTest.java | 44 +++++++++++-- .../evaluator/EvaluatorResultTestWatcher.java | 11 ++++ .../beakerx/evaluator/EvaluatorTest.java | 4 +- .../twosigma/beakerx/kernel/ImportsTest.java | 11 +++- .../clojure/evaluator/ClojureEvaluator.java | 18 +++--- .../clojure/kernel/ClojureKernelTest.java | 4 ++ .../beakerx/javash/kernel/JavaKernelTest.java | 4 ++ .../kotlin/kernel/KotlinKernelTest.java | 4 ++ .../beakerx/scala/kernel/ScalaKernelTest.java | 5 ++ .../beakerx/sql/evaluator/SQLEvaluator.java | 2 +- 14 files changed, 199 insertions(+), 65 deletions(-) diff --git a/doc/clojure/Clojure.ipynb b/doc/clojure/Clojure.ipynb index b586803f1d..c4d2baeae9 100644 --- a/doc/clojure/Clojure.ipynb +++ b/doc/clojure/Clojure.ipynb @@ -160,11 +160,54 @@ ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": { "collapsed": true }, + "source": [ + "## Import/Unimport magic command" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%import com.twosigma.beakerx.widgets.integers.IntSlider" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "(new IntSlider)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%unimport com.twosigma.beakerx.widgets.integers.IntSlider" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "(new IntSlider)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, "outputs": [], "source": [] } diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/evaluator/BaseEvaluator.java b/kernel/base/src/main/java/com/twosigma/beakerx/evaluator/BaseEvaluator.java index bd185cb8ef..52748e2b82 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/evaluator/BaseEvaluator.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/evaluator/BaseEvaluator.java @@ -15,9 +15,7 @@ */ package com.twosigma.beakerx.evaluator; -import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; -import com.google.common.reflect.ClassPath; import com.twosigma.beakerx.DefaultJVMVariables; import com.twosigma.beakerx.jvm.threads.CellExecutor; import com.twosigma.beakerx.kernel.AddImportStatus; @@ -30,9 +28,9 @@ import org.apache.commons.io.FileUtils; import java.io.File; -import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; import java.util.List; @@ -59,9 +57,8 @@ public BaseEvaluator(String id, String sId, CellExecutor cellExecutor, TempFolde outDir = getOrCreateFile(tempFolder.toString() + File.separator + "outDir").getPath(); classPath = new Classpath(); classPath.add(new PathToJar(outDir)); - imports = new Imports(); repos = new Repos(); - configure(evaluatorParameters); + init(evaluatorParameters); } @Override @@ -86,10 +83,7 @@ public List addJarsToClasspath(List paths) { @Override public AddImportStatus addImport(ImportPath anImport) { - if (!isImportPathValid(anImport)) { - return AddImportStatus.ERROR; - } - AddImportStatus add = imports.add(anImport); + AddImportStatus add = imports.add(anImport, getClassLoader()); if (AddImportStatus.ADDED.equals(add)) { addImportToClassLoader(anImport); } @@ -131,10 +125,14 @@ protected boolean removeImportPath(ImportPath anImport) { return imports.remove(anImport); } - protected void configure(EvaluatorParameters kernelParameters) { + protected void init(EvaluatorParameters kernelParameters) { Map params = kernelParameters.getParams(); + initClasspath(params); + initImports(params); + } + + private void initClasspath(Map params) { Collection listOfClassPath = (Collection) params.get(DefaultJVMVariables.CLASSPATH); - Collection listOfImports = (Collection) params.get(DefaultJVMVariables.IMPORTS); if (listOfClassPath != null) { for (String line : listOfClassPath) { if (!line.trim().isEmpty()) { @@ -142,18 +140,27 @@ protected void configure(EvaluatorParameters kernelParameters) { } } } + } + + private void initImports(Map params) { + Collection listOfImports = (Collection) params.get(DefaultJVMVariables.IMPORTS); + List importPaths = new ArrayList<>(); if (listOfImports != null) { for (String line : listOfImports) { if (!line.trim().isEmpty()) { - imports.add(new ImportPath(line)); + importPaths.add(new ImportPath(line)); } } + if (this.imports != null) { + importPaths.addAll(this.imports.getImportPaths()); + } } + this.imports = new Imports(importPaths); } @Override public void setShellOptions(final EvaluatorParameters kernelParameters) { - configure(kernelParameters); + init(kernelParameters); resetEnvironment(); } @@ -223,33 +230,4 @@ private File getOrCreateFile(String pathToMavenRepo) { } return theDir; } - - private boolean isImportPathValid(ImportPath anImport) { - String importToCheck = anImport.asString(); - if (importToCheck.endsWith(".*")) { - return isValidImportWithWildcard(importToCheck); - } else { - return isValidClassImport(importToCheck); - } - } - - private boolean isValidClassImport(String importToCheck) { - try { - getClassLoader().loadClass(importToCheck); - return true; - } catch (ClassNotFoundException e) { - return false; - } - } - - private boolean isValidImportWithWildcard(String importToCheck) { - try { - String packageWithoutWildcard = importToCheck.substring(0, importToCheck.lastIndexOf(".")); - ImmutableSet topLevelClasses = ClassPath.from(getClassLoader()).getTopLevelClasses(packageWithoutWildcard); - return !topLevelClasses.isEmpty(); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - } diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/jvm/classloader/BeakerxUrlClassLoader.java b/kernel/base/src/main/java/com/twosigma/beakerx/jvm/classloader/BeakerxUrlClassLoader.java index 6185617e69..bbb584bc94 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/jvm/classloader/BeakerxUrlClassLoader.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/jvm/classloader/BeakerxUrlClassLoader.java @@ -31,7 +31,11 @@ public BeakerxUrlClassLoader(URL[] urls, ClassLoader parent) { } public BeakerxUrlClassLoader(ClassLoader parent) { - super(new URL[0], parent); + this(new URL[0], parent); + } + + public BeakerxUrlClassLoader() { + this(ClassLoader.getSystemClassLoader()); } public void addJar(URL url) { diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/Imports.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/Imports.java index 3b3d88fe68..8bec55432a 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/Imports.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/Imports.java @@ -15,6 +15,11 @@ */ package com.twosigma.beakerx.kernel; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableSet; +import com.google.common.reflect.ClassPath; + +import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -28,15 +33,22 @@ public class Imports { private List imports = new ArrayList<>(); private List importsAsStrings = null; + public Imports(List importPaths) { + this.imports = Preconditions.checkNotNull(importPaths); + } + public List getImportPaths() { return imports; } - public AddImportStatus add(ImportPath anImport) { + public AddImportStatus add(ImportPath anImport, ClassLoader classLoader) { checkNotNull(anImport); if (this.imports.contains(anImport)) { return EXISTS; } + if (!isImportPathValid(anImport, classLoader)) { + return AddImportStatus.ERROR; + } clear(); this.imports.add(anImport); return ADDED; @@ -78,4 +90,32 @@ private void clear() { public String toString() { return imports.stream().map(ImportPath::asString).collect(Collectors.joining("\n")); } + + private boolean isImportPathValid(ImportPath anImport, ClassLoader classLoader) { + String importToCheck = anImport.asString(); + if (importToCheck.endsWith(".*")) { + return isValidImportWithWildcard(importToCheck, classLoader); + } else { + return isValidClassImport(importToCheck, classLoader); + } + } + + private boolean isValidClassImport(String importToCheck, ClassLoader classLoader) { + try { + classLoader.loadClass(importToCheck); + return true; + } catch (ClassNotFoundException e) { + return false; + } + } + + private boolean isValidImportWithWildcard(String importToCheck, ClassLoader classLoader) { + try { + String packageWithoutWildcard = importToCheck.substring(0, importToCheck.lastIndexOf(".")); + ImmutableSet topLevelClasses = ClassPath.from(classLoader).getTopLevelClasses(packageWithoutWildcard); + return !topLevelClasses.isEmpty(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } } diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java index b3756feee2..9d93529045 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java @@ -29,6 +29,7 @@ import static com.twosigma.MessageAssertions.verifyExecuteReplyMessage; import static com.twosigma.beakerx.MessageFactoryTest.getExecuteRequestMessage; +import static com.twosigma.beakerx.evaluator.EvaluatorResultTestWatcher.waitForErrorMessage; import static com.twosigma.beakerx.evaluator.EvaluatorResultTestWatcher.waitForIdleMessage; import static com.twosigma.beakerx.evaluator.EvaluatorResultTestWatcher.waitForResult; import static com.twosigma.beakerx.evaluator.EvaluatorResultTestWatcher.waitForSentMessage; @@ -36,6 +37,7 @@ import static com.twosigma.beakerx.kernel.magic.command.functionality.AddImportMagicCommand.IMPORT; import static com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathAddJarMagicCommand.CLASSPATH_ADD_JAR; import static com.twosigma.beakerx.kernel.magic.command.functionality.LoadMagicMagicCommand.LOAD_MAGIC; +import static com.twosigma.beakerx.kernel.magic.command.functionality.UnImportMagicCommand.UNIMPORT; import static org.assertj.core.api.Assertions.assertThat; public abstract class KernelExecutionTest extends KernelSetUpFixtureTest { @@ -166,13 +168,13 @@ public void shouldImportDemoClassByMagicCommand() throws Exception { addDemoJar(); String path = pathToDemoClassFromAddedDemoJar(); //when - MagicCommandOutcomeItem.Status status = importDemoClassByMagicCommand(IMPORT + " " + path).getStatus(); + MagicCommandOutcomeItem.Status status = runMagicCommand(IMPORT + " " + path).getStatus(); //then assertThat(status).isEqualTo(MagicCommandOutcomeItem.Status.OK); verifyImportedDemoClassByMagicCommand(); } - private MagicCommandOutcomeItem importDemoClassByMagicCommand(String allCode) { + private MagicCommandOutcomeItem runMagicCommand(String allCode) { Code code = CodeFactory.create(allCode, new Message(), getKernel()); MagicCommandOutcome result = executeMagicCommands(code, 2, getKernel()); return result.getItems().get(0); @@ -205,7 +207,7 @@ public void shouldImportDemoClassWithWildcardByMagicCommand() throws Exception { String path = pathToDemoClassFromAddedDemoJar(); String allCode = IMPORT + " " + path.substring(0, path.lastIndexOf(".")) + ".*"; //when - MagicCommandOutcomeItem.Status status = importDemoClassByMagicCommand(allCode).getStatus(); + MagicCommandOutcomeItem.Status status = runMagicCommand(allCode).getStatus(); //then assertThat(status).isEqualTo(MagicCommandOutcomeItem.Status.OK); verifyImportedDemoClassByMagicCommand(); @@ -218,10 +220,10 @@ public void shouldNotImportClassesFromUnknownPackageWithWildcardByMagicCommand() String allCode = IMPORT + " " + (path.substring(0, path.lastIndexOf(".")) + "Unknown.*"); addDemoJar(); //when - MagicCommandOutcomeItem result = importDemoClassByMagicCommand(allCode); + MagicCommandOutcomeItem result = runMagicCommand(allCode); //then assertThat(result.getStatus()).isEqualTo(MagicCommandOutcomeItem.Status.ERROR); - assertThat((String)result.getMIMEContainer().get().getData()).contains("Could not import"); + assertThat((String) result.getMIMEContainer().get().getData()).contains("Could not import"); } @Test @@ -229,8 +231,38 @@ public void shouldNotImportUnknownClassByMagicCommand() throws Exception { //given String allCode = IMPORT + " " + pathToDemoClassFromAddedDemoJar() + "UnknownClass"; //when - MagicCommandOutcomeItem.Status status = importDemoClassByMagicCommand(allCode).getStatus(); + MagicCommandOutcomeItem.Status status = runMagicCommand(allCode).getStatus(); //then assertThat(status).isEqualTo(MagicCommandOutcomeItem.Status.ERROR); } + + @Test + public void shouldUnimportDemoClassByMagicCommand() throws Exception { + //given + addDemoJar(); + String path = pathToDemoClassFromAddedDemoJar(); + runMagicCommand(IMPORT + " " + path).getStatus(); + //when + MagicCommandOutcomeItem.Status status = runMagicCommand(UNIMPORT + " " + path).getStatus(); + //then + assertThat(status).isEqualTo(MagicCommandOutcomeItem.Status.OK); + verifyUnImportedDemoClassByMagicCommand(); + } + + protected void verifyUnImportedDemoClassByMagicCommand() throws InterruptedException { + String allCode = getObjectTestMethodFromAddedDemoJar(); + Message message = getExecuteRequestMessage(allCode); + getKernelSocketsService().handleMsg(message); + Optional idleMessage = waitForIdleMessage(getKernelSocketsService().getKernelSockets()); + assertThat(idleMessage).isPresent(); + Optional errorMessage = waitForErrorMessage(getKernelSocketsService().getKernelSockets()); + Object actual = ((Map) errorMessage.get().getContent()).get("text"); + String value = (String) actual; + assertThat(value).contains(unimportErrorMessage()); + } + + protected String unimportErrorMessage() { + return "unable"; + } + } diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorResultTestWatcher.java b/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorResultTestWatcher.java index 3c5179eb40..5e3d61dff6 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorResultTestWatcher.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorResultTestWatcher.java @@ -89,6 +89,17 @@ public static Optional waitForStreamMessage(KernelTest kernelTest) thro return sentMessage; } + public static Optional waitForErrorMessage(KernelSocketsTest socketsTest) throws InterruptedException { + int count = 0; + Optional idleMessage = getError(socketsTest); + while (!idleMessage.isPresent() && count < ATTEMPT) { + Thread.sleep(SLEEP_IN_MILLIS); + idleMessage = getError(socketsTest); + count++; + } + return idleMessage; + } + private static Optional getStreamMessage(KernelTest kernelTest) { List listMessagesByType = SearchMessages.getListMessagesByType(kernelTest.getPublishedMessages(), JupyterMessages.STREAM); return listMessagesByType.stream().findFirst(); diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorTest.java index 3b2933a8b1..febd15805b 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/evaluator/EvaluatorTest.java @@ -44,7 +44,7 @@ public class EvaluatorTest extends BaseEvaluator { private boolean cancelExecution; private boolean exit; private Classpath classpath = new Classpath(); - private Imports imports = new Imports(); + private Imports imports = new Imports(new ArrayList<>()); private int resetEnvironmentCounter = 0; private BeakerxUrlClassLoader loader = new BeakerxUrlClassLoader(Thread.currentThread().getContextClassLoader()); @@ -154,7 +154,7 @@ protected void addJarToClassLoader(PathToJar pathToJar) { @Override protected void addImportToClassLoader(ImportPath anImport) { - imports.add(anImport); + imports.add(anImport, loader); } @Override diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/kernel/ImportsTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/ImportsTest.java index 0f257c7be3..5af5803693 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/kernel/ImportsTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/ImportsTest.java @@ -15,18 +15,23 @@ */ package com.twosigma.beakerx.kernel; +import com.twosigma.beakerx.jvm.classloader.BeakerxUrlClassLoader; import org.junit.Before; import org.junit.Test; +import java.util.ArrayList; + import static org.assertj.core.api.Assertions.assertThat; public class ImportsTest { private Imports imports; + private BeakerxUrlClassLoader urlClassLoader; @Before public void setUp() throws Exception { - imports = new Imports(); + imports = new Imports(new ArrayList<>()); + urlClassLoader = new BeakerxUrlClassLoader(); } @Test @@ -34,8 +39,8 @@ public void shouldNotHaveDuplications() throws Exception { //given ImportPath anImport = new ImportPath("com.twosigma.beakerx.widgets.integers.IntSlider"); //when - assertThat(imports.add(anImport)).isEqualTo(AddImportStatus.ADDED); - assertThat(imports.add(anImport)).isEqualTo(AddImportStatus.EXISTS); + assertThat(imports.add(anImport, urlClassLoader)).isEqualTo(AddImportStatus.ADDED); + assertThat(imports.add(anImport, urlClassLoader)).isEqualTo(AddImportStatus.EXISTS); //then assertThat(imports.getImportPaths()).containsExactly(new ImportPath("com.twosigma.beakerx.widgets.integers.IntSlider")); } diff --git a/kernel/clojure/src/main/java/com/twosigma/beakerx/clojure/evaluator/ClojureEvaluator.java b/kernel/clojure/src/main/java/com/twosigma/beakerx/clojure/evaluator/ClojureEvaluator.java index 5c44051cfb..dec9bc857c 100644 --- a/kernel/clojure/src/main/java/com/twosigma/beakerx/clojure/evaluator/ClojureEvaluator.java +++ b/kernel/clojure/src/main/java/com/twosigma/beakerx/clojure/evaluator/ClojureEvaluator.java @@ -17,7 +17,9 @@ package com.twosigma.beakerx.clojure.evaluator; import clojure.lang.DynamicClassLoader; +import clojure.lang.Namespace; import clojure.lang.RT; +import clojure.lang.Symbol; import clojure.lang.Var; import com.google.common.base.Charsets; import com.google.common.io.Resources; @@ -89,11 +91,9 @@ protected void addImportToClassLoader(ImportPath anImport) { @Override protected void doResetEnvironment() { - loader = ClojureClassLoaderFactory.newInstance(classPath, outDir); - + init(); ClassLoader oldLoader = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(loader); - for (ImportPath s : imports.getImportPaths()) { addImportPathToShell(s); } @@ -158,16 +158,20 @@ private void init() { loader = ClojureClassLoaderFactory.newInstance(classPath, outDir); String loadFunctionPrefix = "run_str"; try { - String clojureInitScript = String.format(initScriptSource(), beaker_clojure_ns, shellId, - loadFunctionPrefix); - clojureLoadString = RT.var(String.format("%1$s_%2$s", beaker_clojure_ns, shellId), - String.format("%1$s_%2$s", loadFunctionPrefix, shellId)); + String clojureInitScript = String.format(initScriptSource(), beaker_clojure_ns, shellId, loadFunctionPrefix); + String ns = String.format("%1$s_%2$s", beaker_clojure_ns, shellId); + clearClojureNamespace(ns); + clojureLoadString = RT.var(ns, String.format("%1$s_%2$s", loadFunctionPrefix, shellId)); clojure.lang.Compiler.load(new StringReader(clojureInitScript)); } catch (IOException e) { logger.error(e.getMessage()); } } + private void clearClojureNamespace(String ns) { + Namespace.remove(Symbol.intern(null, ns)); + } + private String initScriptSource() throws IOException { URL url = this.getClass().getClassLoader().getResource("init_clojure_script.txt"); return Resources.toString(url, Charsets.UTF_8); diff --git a/kernel/clojure/src/test/java/com/twosigma/beakerx/clojure/kernel/ClojureKernelTest.java b/kernel/clojure/src/test/java/com/twosigma/beakerx/clojure/kernel/ClojureKernelTest.java index 3997345dba..70d729a646 100644 --- a/kernel/clojure/src/test/java/com/twosigma/beakerx/clojure/kernel/ClojureKernelTest.java +++ b/kernel/clojure/src/test/java/com/twosigma/beakerx/clojure/kernel/ClojureKernelTest.java @@ -201,4 +201,8 @@ public void shouldImportDemoClassWithWildcardByMagicCommand() throws Exception { // clojure doesn't support wildcard } + @Override + protected String unimportErrorMessage() { + return "Unable"; + } } \ No newline at end of file diff --git a/kernel/java/src/test/java/com/twosigma/beakerx/javash/kernel/JavaKernelTest.java b/kernel/java/src/test/java/com/twosigma/beakerx/javash/kernel/JavaKernelTest.java index acc1cd40ce..43ce08e11a 100644 --- a/kernel/java/src/test/java/com/twosigma/beakerx/javash/kernel/JavaKernelTest.java +++ b/kernel/java/src/test/java/com/twosigma/beakerx/javash/kernel/JavaKernelTest.java @@ -82,4 +82,8 @@ protected String getObjectTestMethodFromAddedDemoJar() { return "return new Demo().getObjectTest();"; } + @Override + protected String unimportErrorMessage() { + return "cannot find symbol"; + } } \ No newline at end of file diff --git a/kernel/kotlin/src/test/java/com/twosigma/beakerx/kotlin/kernel/KotlinKernelTest.java b/kernel/kotlin/src/test/java/com/twosigma/beakerx/kotlin/kernel/KotlinKernelTest.java index bf232ca204..e7afdec5c7 100644 --- a/kernel/kotlin/src/test/java/com/twosigma/beakerx/kotlin/kernel/KotlinKernelTest.java +++ b/kernel/kotlin/src/test/java/com/twosigma/beakerx/kotlin/kernel/KotlinKernelTest.java @@ -76,4 +76,8 @@ protected String getObjectTestMethodFromAddedDemoJar() { return "Demo().getObjectTest()"; } + @Override + protected String unimportErrorMessage() { + return "unresolved reference"; + } } diff --git a/kernel/scala/src/test/java/com/twosigma/beakerx/scala/kernel/ScalaKernelTest.java b/kernel/scala/src/test/java/com/twosigma/beakerx/scala/kernel/ScalaKernelTest.java index 45033fe54e..6747fa1e78 100644 --- a/kernel/scala/src/test/java/com/twosigma/beakerx/scala/kernel/ScalaKernelTest.java +++ b/kernel/scala/src/test/java/com/twosigma/beakerx/scala/kernel/ScalaKernelTest.java @@ -65,4 +65,9 @@ static Kernel createKernel(String sessionId, KernelSocketsFactory kernelSocketsF ScalaEvaluator evaluator = new ScalaEvaluator(sessionId, sessionId, null, cellExecutor(), new NoBeakerxObjectTestFactory(), getTestTempFolderFactory(), EvaluatorTest.KERNEL_PARAMETERS); return new Scala(sessionId, evaluator, kernelSocketsFactory, closeKernelAction); } + + @Override + protected String unimportErrorMessage() { + return "not found: type"; + } } \ No newline at end of file diff --git a/kernel/sql/src/main/java/com/twosigma/beakerx/sql/evaluator/SQLEvaluator.java b/kernel/sql/src/main/java/com/twosigma/beakerx/sql/evaluator/SQLEvaluator.java index 89338a5b92..3ee7069281 100644 --- a/kernel/sql/src/main/java/com/twosigma/beakerx/sql/evaluator/SQLEvaluator.java +++ b/kernel/sql/src/main/java/com/twosigma/beakerx/sql/evaluator/SQLEvaluator.java @@ -146,7 +146,7 @@ public AutocompleteResult autocomplete(String code, int caretPosition) { } @Override - protected void configure(EvaluatorParameters evaluatorParameters) { + protected void init(EvaluatorParameters evaluatorParameters) { // no configuration, we have to call setShellOptions witt evaluatorParameters } From d879770da84992f25fd6e0f16d6e947490934c59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Witkowski?= Date: Tue, 5 Dec 2017 18:02:18 +0100 Subject: [PATCH 09/29] #6369 Name Tutorials Systematically. (#6447) * #6369 Name Tutorials Systematically. * #6369 Adding missing doc/. * #6369 Uppercase first letter for main. --- StartHere.ipynb | 20 +++++++++---------- doc/clojure/{Clojure.ipynb => Main.ipynb} | 0 ...clojureNativeLib.ipynb => NativeLib.ipynb} | 0 ...roovy_demo.ipynb => AutoTranslation.ipynb} | 0 .../{big_table_test.ipynb => BigTable.ipynb} | 0 ...{chartingTutorial.ipynb => Charting.ipynb} | 0 .../{EasyFormDemos.ipynb => EasyForm.ipynb} | 0 .../{java_args.ipynb => JavaArgs.ipynb} | 0 doc/groovy/{Groovy.ipynb => Main.ipynb} | 0 ...{groovyNativeLib.ipynb => NativeLib.ipynb} | 0 ...hon_style.ipynb => PlotsPythonStyle.ipynb} | 0 doc/java/{Java.ipynb => Main.ipynb} | 0 .../{javaNativeLib.ipynb => NativeLib.ipynb} | 0 doc/kotlin/{Kotlin.ipynb => Main.ipynb} | 0 ...{kotlinNativeLib.ipynb => NativeLib.ipynb} | 0 ...rCategoryPlot.ipynb => CategoryPlot.ipynb} | 0 .../{NbviewerHeatmap.ipynb => Heatmap.ipynb} | 0 ...bviewerHistogram.ipynb => Histogram.ipynb} | 0 ...werJavaWidgets.ipynb => JavaWidgets.ipynb} | 0 ...{NbviewerTableApi.ipynb => TableApi.ipynb} | 0 .../{NbviewerTreemap.ipynb => Treemap.ipynb} | 0 ...ion_python.ipynb => Autotranslation.ipynb} | 0 ...ryPlot_python.ipynb => CategoryPlot.ipynb} | 0 ...honChartingAPI.ipynb => ChartingAPI.ipynb} | 0 ...syFormPythonDemos.ipynb => EasyForm.ipynb} | 0 .../{heatmap_python.ipynb => Heatmap.ipynb} | 0 ...histogram_python.ipynb => Histogram.ipynb} | 0 .../{init-cells.ipynb => InitCells.ipynb} | 0 ...> OutputContainersAndLayoutManagers.ipynb} | 0 .../{plot-js-api.ipynb => PlotJSAPI.ipynb} | 0 .../{tableApi_python.ipynb => TableAPI.ipynb} | 0 .../{treemap_python.ipynb => Treemap.ipynb} | 0 doc/scala/{Scala.ipynb => Main.ipynb} | 0 .../{scalaNativeLib.ipynb => NativeLib.ipynb} | 0 doc/sql/{SQL.ipynb => Main.ipynb} | 0 35 files changed, 10 insertions(+), 10 deletions(-) rename doc/clojure/{Clojure.ipynb => Main.ipynb} (100%) rename doc/clojure/{clojureNativeLib.ipynb => NativeLib.ipynb} (100%) rename doc/groovy/{autotranslation_groovy_demo.ipynb => AutoTranslation.ipynb} (100%) rename doc/groovy/{big_table_test.ipynb => BigTable.ipynb} (100%) rename doc/groovy/{chartingTutorial.ipynb => Charting.ipynb} (100%) rename doc/groovy/{EasyFormDemos.ipynb => EasyForm.ipynb} (100%) rename doc/groovy/{java_args.ipynb => JavaArgs.ipynb} (100%) rename doc/groovy/{Groovy.ipynb => Main.ipynb} (100%) rename doc/groovy/{groovyNativeLib.ipynb => NativeLib.ipynb} (100%) rename doc/groovy/{Plots_python_style.ipynb => PlotsPythonStyle.ipynb} (100%) rename doc/java/{Java.ipynb => Main.ipynb} (100%) rename doc/java/{javaNativeLib.ipynb => NativeLib.ipynb} (100%) rename doc/kotlin/{Kotlin.ipynb => Main.ipynb} (100%) rename doc/kotlin/{kotlinNativeLib.ipynb => NativeLib.ipynb} (100%) rename doc/nbviewer/{NbviewerCategoryPlot.ipynb => CategoryPlot.ipynb} (100%) rename doc/nbviewer/{NbviewerHeatmap.ipynb => Heatmap.ipynb} (100%) rename doc/nbviewer/{NbviewerHistogram.ipynb => Histogram.ipynb} (100%) rename doc/nbviewer/{NbviewerJavaWidgets.ipynb => JavaWidgets.ipynb} (100%) rename doc/nbviewer/{NbviewerTableApi.ipynb => TableApi.ipynb} (100%) rename doc/nbviewer/{NbviewerTreemap.ipynb => Treemap.ipynb} (100%) rename doc/python/{autotranslation_python.ipynb => Autotranslation.ipynb} (100%) rename doc/python/{categoryPlot_python.ipynb => CategoryPlot.ipynb} (100%) rename doc/python/{pythonChartingAPI.ipynb => ChartingAPI.ipynb} (100%) rename doc/python/{EasyFormPythonDemos.ipynb => EasyForm.ipynb} (100%) rename doc/python/{heatmap_python.ipynb => Heatmap.ipynb} (100%) rename doc/python/{histogram_python.ipynb => Histogram.ipynb} (100%) rename doc/python/{init-cells.ipynb => InitCells.ipynb} (100%) rename doc/python/{OutputContainersAndLayoutManagers_python.ipynb => OutputContainersAndLayoutManagers.ipynb} (100%) rename doc/python/{plot-js-api.ipynb => PlotJSAPI.ipynb} (100%) rename doc/python/{tableApi_python.ipynb => TableAPI.ipynb} (100%) rename doc/python/{treemap_python.ipynb => Treemap.ipynb} (100%) rename doc/scala/{Scala.ipynb => Main.ipynb} (100%) rename doc/scala/{scalaNativeLib.ipynb => NativeLib.ipynb} (100%) rename doc/sql/{SQL.ipynb => Main.ipynb} (100%) diff --git a/StartHere.ipynb b/StartHere.ipynb index 362d67544b..6bd145344b 100644 --- a/StartHere.ipynb +++ b/StartHere.ipynb @@ -13,39 +13,39 @@ "[The Jupyter documentation](http://jupyter-notebook.readthedocs.io/en/latest/examples/Notebook/Running%20Code.html) covers interacting with code cells, markdown, and notebooks. The tutorials below show the features of the BeakerX extension.\n", "\n", "### Languages\n", - "[Groovy](doc/groovy/Groovy.ipynb), [Java](doc/java/Java.ipynb), [Scala](doc/scala/Scala.ipynb), [Clojure](doc/clojure/Clojure.ipynb), [SQL](doc/sql/SQL.ipynb), [Kotlin](doc/kotlin/Kotlin.ipynb).\n", + "[Groovy](doc/groovy/Main.ipynb), [Java](doc/java/Main.ipynb), [Scala](doc/scala/Main.ipynb), [Clojure](doc/clojure/Main.ipynb), [SQL](doc/sql/Main.ipynb), [Kotlin](doc/kotlin/Main.ipynb).\n", "\n", "### Magics\n", - "[Timing](doc/groovy/TimeExecutionMeasurementWithMagicCommands.ipynb), [Classpath and Imports](doc/groovy/AddJarToClasspathMagicCommands.ipynb), [Properties, Heap Size and other JVM parameters](doc/groovy/java_args.ipynb), [Defining New Magics](doc/groovy/LoadMagicCommand.ipynb).\n", + "[Timing](doc/groovy/TimeExecutionMeasurementWithMagicCommands.ipynb), [Classpath and Imports](doc/groovy/AddJarToClasspathMagicCommands.ipynb), [Properties, Heap Size and other JVM parameters](doc/groovy/JavaArgs.ipynb), [Defining New Magics](doc/groovy/LoadMagicCommand.ipynb).\n", "\n", "### Autotranslation\n", - "[Python](doc/python/autotranslation_python.ipynb), [Groovy](doc/groovy/autotranslation_groovy_demo.ipynb)\n", + "[Python](doc/python/AutoTranslation.ipynb), [Groovy](doc/groovy/AutoTranslation.ipynb)\n", "\n", "### Groovy Plotting and Charting\n", - "[Example and Interaction](doc/groovy/chartingTutorial.ipynb), [Time Series and General APIs and Features](doc/groovy/PlotFeatures.ipynb), [Category Plots and Bar Charts](doc/groovy/categoryPlot.ipynb), [Levels of Detail](doc/groovy/levelsOfDetails.ipynb), [Histograms](doc/groovy/histogram.ipynb), [Heatmaps](doc/groovy/heatmap.ipynb), [Treemaps](doc/groovy/treemap.ipynb), [Plot Actions](doc/groovy/plotActions.ipynb), [Plot Seamless Updates](doc/groovy/Plots_python_style.ipynb), [Second Y Axis](doc/groovy/2ndYaxis.ipynb).\n", + "[Example and Interaction](doc/groovy/Charting.ipynb), [Time Series and General APIs and Features](doc/groovy/PlotFeatures.ipynb), [Category Plots and Bar Charts](doc/groovy/CategoryPlot.ipynb), [Levels of Detail](doc/groovy/LevelsOfDetails.ipynb), [Histograms](doc/groovy/Histogram.ipynb), [Heatmaps](doc/groovy/Heatmap.ipynb), [Treemaps](doc/groovy/Treemap.ipynb), [Plot Actions](doc/groovy/PlotActions.ipynb), [Plot Seamless Updates](doc/groovy/PlotsPythonStyle.ipynb), [Second Y Axis](doc/groovy/2ndYaxis.ipynb).\n", "\n", "### Table Display\n", - "[Groovy API including Actions](doc/groovy/tableApi.ipynb), [64-Bit Integers and BigNums](doc/groovy/bigInts.ipynb), [Automatic Display of Simple Data Structures](doc/groovy/MapLikeTable.ipynb), [Handling of Large Tables](doc/groovy/big_table_test.ipynb).\n", + "[Groovy API including Actions](doc/groovy/TableAPI.ipynb), [64-Bit Integers and BigNums](doc/groovy/BigInts.ipynb), [Automatic Display of Simple Data Structures](doc/groovy/MapLikeTable.ipynb), [Handling of Large Tables](doc/groovy/BigTable.ipynb).\n", "\n", "### BeakerX Plotting in Other Languages\n", - "[JavaScript](doc/python/plot-js-api.ipynb), [Python](doc/python/pythonChartingAPI.ipynb), [Scala](doc/scala/Plot.ipynb).\n", + "[JavaScript](doc/python/PlotJSAPI.ipynb), [Python](doc/python/ChartingAPI.ipynb), [Scala](doc/scala/Plot.ipynb).\n", "\n", "### Python\n", "\n", - "[Tables including pandas integration](doc/python/tableApi_python.ipynb), [Time Series](doc/python/pythonChartingAPI.ipynb), [Heatmaps](doc/python/heatmap_python.ipynb), [Category Plots](doc/python/categoryPlot_python.ipynb), [Treemaps](doc/python/treemap_python.ipynb), [Histograms](doc/python/histogram_python.ipynb), [EasyForm](doc/python/EasyFormPythonDemos.ipynb), [Output Containers](doc/python/OutputContainersAndLayoutManagers_python.ipynb).\n", + "[Tables including pandas integration](doc/python/TableAPI.ipynb), [Time Series](doc/python/ChartingAPI.ipynb), [Heatmaps](doc/python/Heatmap.ipynb), [Category Plots](doc/python/CategoryPlot.ipynb), [Treemaps](doc/python/Treemap.ipynb), [Histograms](doc/python/Histogram.ipynb), [EasyForm](doc/python/EasyForm.ipynb), [Output Containers](doc/python/OutputContainersAndLayoutManagers.ipynb).\n", "\n", "### Scala\n", - "[Tables](doc/scala/TableApi.ipynb), [Plotting](doc/scala/Plot.ipynb), [EasyForm](doc/scala/ScalaDemos.ipynb).\n", + "[Tables](doc/scala/TableAPI.ipynb), [Plotting](doc/scala/Plot.ipynb), [EasyForm](doc/scala/EasyForm.ipynb).\n", "\n", "### Media Outputs and Displayer Customization\n", "\n", "[Media and MIME Outputs](doc/groovy/Mime.ipynb), [Display of Null](doc/groovy/showNullExecutionResult.ipynb), [Custom Displayers and `jvm-repr`](doc/groovy/JvmRepr.ipynb).\n", "\n", "### Forms, Widgets, and Interaction\n", - "[EasyForm](doc/groovy/EasyFormDemos.ipynb), [Output Containers and Layout Managers](doc/groovy/OutputContainersAndLayoutManagers.ipynb), [Groovy interface to Jupyter JS Widgets](doc/groovy/JavaWidgets.ipynb), [Interactive recomputation](doc/groovy/interactive.ipynb).\n", + "[EasyForm](doc/groovy/EasyForm.ipynb), [Output Containers and Layout Managers](doc/groovy/OutputContainersAndLayoutManagers.ipynb), [Groovy interface to Jupyter JS Widgets](doc/groovy/JavaWidgets.ipynb), [Interactive recomputation](doc/groovy/Interactive.ipynb).\n", "\n", "### Automation\n", - "[Progress Reporting API](doc/groovy/ProgressUpdateReporting.ipynb), [Initialization Cells](doc/python/init-cells.ipynb), [Get Code](doc/groovy/CodeCell.ipynb).\n", + "[Progress Reporting API](doc/groovy/ProgressUpdateReporting.ipynb), [Initialization Cells](doc/python/InitCells.ipynb), [Get Code](doc/groovy/CodeCell.ipynb).\n", "\n", "### Tablesaw\n", "[Tablesaw](doc/groovy/Tablesaw.ipynb) Pandas for the JVM.\n", diff --git a/doc/clojure/Clojure.ipynb b/doc/clojure/Main.ipynb similarity index 100% rename from doc/clojure/Clojure.ipynb rename to doc/clojure/Main.ipynb diff --git a/doc/clojure/clojureNativeLib.ipynb b/doc/clojure/NativeLib.ipynb similarity index 100% rename from doc/clojure/clojureNativeLib.ipynb rename to doc/clojure/NativeLib.ipynb diff --git a/doc/groovy/autotranslation_groovy_demo.ipynb b/doc/groovy/AutoTranslation.ipynb similarity index 100% rename from doc/groovy/autotranslation_groovy_demo.ipynb rename to doc/groovy/AutoTranslation.ipynb diff --git a/doc/groovy/big_table_test.ipynb b/doc/groovy/BigTable.ipynb similarity index 100% rename from doc/groovy/big_table_test.ipynb rename to doc/groovy/BigTable.ipynb diff --git a/doc/groovy/chartingTutorial.ipynb b/doc/groovy/Charting.ipynb similarity index 100% rename from doc/groovy/chartingTutorial.ipynb rename to doc/groovy/Charting.ipynb diff --git a/doc/groovy/EasyFormDemos.ipynb b/doc/groovy/EasyForm.ipynb similarity index 100% rename from doc/groovy/EasyFormDemos.ipynb rename to doc/groovy/EasyForm.ipynb diff --git a/doc/groovy/java_args.ipynb b/doc/groovy/JavaArgs.ipynb similarity index 100% rename from doc/groovy/java_args.ipynb rename to doc/groovy/JavaArgs.ipynb diff --git a/doc/groovy/Groovy.ipynb b/doc/groovy/Main.ipynb similarity index 100% rename from doc/groovy/Groovy.ipynb rename to doc/groovy/Main.ipynb diff --git a/doc/groovy/groovyNativeLib.ipynb b/doc/groovy/NativeLib.ipynb similarity index 100% rename from doc/groovy/groovyNativeLib.ipynb rename to doc/groovy/NativeLib.ipynb diff --git a/doc/groovy/Plots_python_style.ipynb b/doc/groovy/PlotsPythonStyle.ipynb similarity index 100% rename from doc/groovy/Plots_python_style.ipynb rename to doc/groovy/PlotsPythonStyle.ipynb diff --git a/doc/java/Java.ipynb b/doc/java/Main.ipynb similarity index 100% rename from doc/java/Java.ipynb rename to doc/java/Main.ipynb diff --git a/doc/java/javaNativeLib.ipynb b/doc/java/NativeLib.ipynb similarity index 100% rename from doc/java/javaNativeLib.ipynb rename to doc/java/NativeLib.ipynb diff --git a/doc/kotlin/Kotlin.ipynb b/doc/kotlin/Main.ipynb similarity index 100% rename from doc/kotlin/Kotlin.ipynb rename to doc/kotlin/Main.ipynb diff --git a/doc/kotlin/kotlinNativeLib.ipynb b/doc/kotlin/NativeLib.ipynb similarity index 100% rename from doc/kotlin/kotlinNativeLib.ipynb rename to doc/kotlin/NativeLib.ipynb diff --git a/doc/nbviewer/NbviewerCategoryPlot.ipynb b/doc/nbviewer/CategoryPlot.ipynb similarity index 100% rename from doc/nbviewer/NbviewerCategoryPlot.ipynb rename to doc/nbviewer/CategoryPlot.ipynb diff --git a/doc/nbviewer/NbviewerHeatmap.ipynb b/doc/nbviewer/Heatmap.ipynb similarity index 100% rename from doc/nbviewer/NbviewerHeatmap.ipynb rename to doc/nbviewer/Heatmap.ipynb diff --git a/doc/nbviewer/NbviewerHistogram.ipynb b/doc/nbviewer/Histogram.ipynb similarity index 100% rename from doc/nbviewer/NbviewerHistogram.ipynb rename to doc/nbviewer/Histogram.ipynb diff --git a/doc/nbviewer/NbviewerJavaWidgets.ipynb b/doc/nbviewer/JavaWidgets.ipynb similarity index 100% rename from doc/nbviewer/NbviewerJavaWidgets.ipynb rename to doc/nbviewer/JavaWidgets.ipynb diff --git a/doc/nbviewer/NbviewerTableApi.ipynb b/doc/nbviewer/TableApi.ipynb similarity index 100% rename from doc/nbviewer/NbviewerTableApi.ipynb rename to doc/nbviewer/TableApi.ipynb diff --git a/doc/nbviewer/NbviewerTreemap.ipynb b/doc/nbviewer/Treemap.ipynb similarity index 100% rename from doc/nbviewer/NbviewerTreemap.ipynb rename to doc/nbviewer/Treemap.ipynb diff --git a/doc/python/autotranslation_python.ipynb b/doc/python/Autotranslation.ipynb similarity index 100% rename from doc/python/autotranslation_python.ipynb rename to doc/python/Autotranslation.ipynb diff --git a/doc/python/categoryPlot_python.ipynb b/doc/python/CategoryPlot.ipynb similarity index 100% rename from doc/python/categoryPlot_python.ipynb rename to doc/python/CategoryPlot.ipynb diff --git a/doc/python/pythonChartingAPI.ipynb b/doc/python/ChartingAPI.ipynb similarity index 100% rename from doc/python/pythonChartingAPI.ipynb rename to doc/python/ChartingAPI.ipynb diff --git a/doc/python/EasyFormPythonDemos.ipynb b/doc/python/EasyForm.ipynb similarity index 100% rename from doc/python/EasyFormPythonDemos.ipynb rename to doc/python/EasyForm.ipynb diff --git a/doc/python/heatmap_python.ipynb b/doc/python/Heatmap.ipynb similarity index 100% rename from doc/python/heatmap_python.ipynb rename to doc/python/Heatmap.ipynb diff --git a/doc/python/histogram_python.ipynb b/doc/python/Histogram.ipynb similarity index 100% rename from doc/python/histogram_python.ipynb rename to doc/python/Histogram.ipynb diff --git a/doc/python/init-cells.ipynb b/doc/python/InitCells.ipynb similarity index 100% rename from doc/python/init-cells.ipynb rename to doc/python/InitCells.ipynb diff --git a/doc/python/OutputContainersAndLayoutManagers_python.ipynb b/doc/python/OutputContainersAndLayoutManagers.ipynb similarity index 100% rename from doc/python/OutputContainersAndLayoutManagers_python.ipynb rename to doc/python/OutputContainersAndLayoutManagers.ipynb diff --git a/doc/python/plot-js-api.ipynb b/doc/python/PlotJSAPI.ipynb similarity index 100% rename from doc/python/plot-js-api.ipynb rename to doc/python/PlotJSAPI.ipynb diff --git a/doc/python/tableApi_python.ipynb b/doc/python/TableAPI.ipynb similarity index 100% rename from doc/python/tableApi_python.ipynb rename to doc/python/TableAPI.ipynb diff --git a/doc/python/treemap_python.ipynb b/doc/python/Treemap.ipynb similarity index 100% rename from doc/python/treemap_python.ipynb rename to doc/python/Treemap.ipynb diff --git a/doc/scala/Scala.ipynb b/doc/scala/Main.ipynb similarity index 100% rename from doc/scala/Scala.ipynb rename to doc/scala/Main.ipynb diff --git a/doc/scala/scalaNativeLib.ipynb b/doc/scala/NativeLib.ipynb similarity index 100% rename from doc/scala/scalaNativeLib.ipynb rename to doc/scala/NativeLib.ipynb diff --git a/doc/sql/SQL.ipynb b/doc/sql/Main.ipynb similarity index 100% rename from doc/sql/SQL.ipynb rename to doc/sql/Main.ipynb From 44e64d3a0cbe04cb944a6b889d26dd7904f98d85 Mon Sep 17 00:00:00 2001 From: Robert Bidas Date: Tue, 5 Dec 2017 20:11:53 +0100 Subject: [PATCH 10/29] #5643 make javadoc accessible (#6450) * #5643 make javadoc accessible * #5643 make javadoc accessible * #5643 make javadoc accessible * #5643 make javadoc accessible, changes after CR --- beakerx/MANIFEST.in | 1 + beakerx/beakerx/handlers.py | 17 +++++++++++++++- beakerx/beakerx/static/html/settings_tab.html | 20 ++++++++++++++----- beakerx/setup.py | 6 ++++-- .../twosigma/beakerx/KernelInfoHandler.java | 3 ++- .../twosigma/beakerx/socket/MessageParts.java | 2 +- kernel/build.gradle | 11 ++++++++++ .../compiler/JavaSourceCompiler.java | 6 +++--- .../compiler/impl/JavaSourceCompilerImpl.java | 4 ++-- .../compiler/impl/SimpleClassLoader.java | 4 ++-- 10 files changed, 57 insertions(+), 17 deletions(-) diff --git a/beakerx/MANIFEST.in b/beakerx/MANIFEST.in index 1b334e748a..04d6bc60d2 100644 --- a/beakerx/MANIFEST.in +++ b/beakerx/MANIFEST.in @@ -1,5 +1,6 @@ recursive-include beakerx/static * recursive-include beakerx/kernel * +recursive-include beakerx/javadoc * include LICENSE include NOTICE diff --git a/beakerx/beakerx/handlers.py b/beakerx/beakerx/handlers.py index 5425fdc121..39a2195e33 100644 --- a/beakerx/beakerx/handlers.py +++ b/beakerx/beakerx/handlers.py @@ -13,13 +13,14 @@ # limitations under the License. from notebook.utils import url_path_join -from notebook.base.handlers import APIHandler +from notebook.base.handlers import APIHandler, IPythonHandler import json from tornado import web from .environment import * import beakerx import tornado +import os class SettingsHandler(APIHandler): @@ -53,11 +54,25 @@ def get(self): self.finish(json.dumps(data)) +class JavaDoc(web.StaticFileHandler, IPythonHandler): + def initialize(self): + beakerx_path = os.path.dirname(beakerx.__file__) + web.StaticFileHandler.initialize(self, path=os.path.join(beakerx_path, 'javadoc')) + + @web.authenticated + def get(self, path): + self.set_header('Content-Type', 'text/html') + return web.StaticFileHandler.get(self, path) + + def load_jupyter_server_extension(nbapp): web_app = nbapp.web_app host_pattern = '.*$' settings_route_pattern = url_path_join(web_app.settings['base_url'], '/beakerx', '/settings') version_route_pattern = url_path_join(web_app.settings['base_url'], '/beakerx', '/version') + javadoc_route_pattern = url_path_join(web_app.settings['base_url'], '/beakerx', '/javadoc/(.*)') web_app.add_handlers(host_pattern, [(settings_route_pattern, SettingsHandler)]) web_app.add_handlers(host_pattern, [(version_route_pattern, VersionHandler)]) + web_app.add_handlers(host_pattern, [(javadoc_route_pattern, JavaDoc)]) + nbapp.log.info("[beakerx] enabled") diff --git a/beakerx/beakerx/static/html/settings_tab.html b/beakerx/beakerx/static/html/settings_tab.html index ff6cb338af..6a7b9aac90 100644 --- a/beakerx/beakerx/static/html/settings_tab.html +++ b/beakerx/beakerx/static/html/settings_tab.html @@ -15,15 +15,25 @@ -->
- +
-

+
+
diff --git a/beakerx/setup.py b/beakerx/setup.py index 99177b0a1b..fc8c90cccb 100644 --- a/beakerx/setup.py +++ b/beakerx/setup.py @@ -30,9 +30,11 @@ cmdclass = create_cmdclass(develop_wrappers=[ 'js', 'java', + 'javadoc', ], distribute_wrappers=[ 'js', - 'java' + 'java', + 'javadoc', ]) cmdclass['js'] = install_node_modules( path='js', @@ -40,7 +42,7 @@ source_dir=os.path.join(here, 'js', 'src') ) cmdclass['java'] = run_gradle(cmd='build') - +cmdclass['javadoc'] = run_gradle(cmd='base:javadoc') setup_args = dict( name = 'beakerx', description = 'BeakerX: Beaker Extensions for Jupyter Notebook', diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/KernelInfoHandler.java b/kernel/base/src/main/java/com/twosigma/beakerx/KernelInfoHandler.java index e63a0fcf2f..154801756c 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/KernelInfoHandler.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/KernelInfoHandler.java @@ -74,8 +74,9 @@ private ArrayList getHelpLinks() { HelpLink beakerXHome = new HelpLink("BeakerX Home", "http://BeakerX.com"); HelpLink fileAnIssue = new HelpLink("File an Issue", "https://github.com/twosigma/beakerx/issues/new"); HelpLink twoSigmaOpenSource = new HelpLink("Two Sigma Open Source", "http://opensource.twosigma.com/"); + HelpLink javadoc = new HelpLink("BeakerX JavaDoc", "/beakerx/javadoc/index.html"); - return Lists.newArrayList(beakerXHome, fileAnIssue, twoSigmaOpenSource); + return Lists.newArrayList(beakerXHome, fileAnIssue, twoSigmaOpenSource, javadoc); } protected abstract HashMap doLanguageInfo(HashMap languageInfo); diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/socket/MessageParts.java b/kernel/base/src/main/java/com/twosigma/beakerx/socket/MessageParts.java index 443c595591..714b26fe52 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/socket/MessageParts.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/socket/MessageParts.java @@ -19,7 +19,7 @@ * http://jupyter-client.readthedocs.org/en/latest/messaging.html#the-wire-protocol *

* b'u-u-i-d', # zmq identity(ies) - * b'', # delimiter + * b'{@code }',# delimiter * b'baddad42', # HMAC signature * b'{header}', # serialized header dict * b'{parent_header}', # serialized parent header dict diff --git a/kernel/build.gradle b/kernel/build.gradle index 5339a14859..22f9b9f946 100644 --- a/kernel/build.gradle +++ b/kernel/build.gradle @@ -80,5 +80,16 @@ subprojects { delete pathToStaticContent + kernelIdName } } + + task myJavadocs(type: Javadoc) { + source = sourceSets.main.allJava + classpath = configurations.compile + javadoc.destinationDir = file("$rootDir/../beakerx/beakerx/javadoc") + } + + afterEvaluate { + javadoc.classpath += files(project(':base').sourceSets.main.output) + } + clean.dependsOn cleanStaticContent } diff --git a/kernel/java/src/main/java/org/abstractmeta/toolbox/compilation/compiler/JavaSourceCompiler.java b/kernel/java/src/main/java/org/abstractmeta/toolbox/compilation/compiler/JavaSourceCompiler.java index 2161e3a35d..10e0c2ffb4 100644 --- a/kernel/java/src/main/java/org/abstractmeta/toolbox/compilation/compiler/JavaSourceCompiler.java +++ b/kernel/java/src/main/java/org/abstractmeta/toolbox/compilation/compiler/JavaSourceCompiler.java @@ -25,7 +25,7 @@ /** * Java source code compiler. It compiles given java class sources in memory and loads them into memory. * It utilises Java Compiler API. - *

Usage: + * {@code

Usage: *

    *
  • Simple source compilation
  • *
    @@ -84,7 +84,7 @@
      *
      *
      *  
- *

+ *

} * @author Adrian Witas */ @@ -137,7 +137,7 @@ interface CompilationUnit { /** * Adds class path entry to java compiler *

Note that if at least one entry is added, the current jvm class path entries are not included. - * You can retrieve current jvm class path entries from {@link org.abstractmeta.toolbox.compilation.compiler.util.ClassPathUtil.getClassPathEntries} + * You can retrieve current jvm class path entries from {@link org.abstractmeta.toolbox.compilation.compiler.util.ClassPathUtil#getClassPathEntries()} * *

* @param classPathEntry class path entires diff --git a/kernel/java/src/main/java/org/abstractmeta/toolbox/compilation/compiler/impl/JavaSourceCompilerImpl.java b/kernel/java/src/main/java/org/abstractmeta/toolbox/compilation/compiler/impl/JavaSourceCompilerImpl.java index 89d4551931..fc989c669c 100644 --- a/kernel/java/src/main/java/org/abstractmeta/toolbox/compilation/compiler/impl/JavaSourceCompilerImpl.java +++ b/kernel/java/src/main/java/org/abstractmeta/toolbox/compilation/compiler/impl/JavaSourceCompilerImpl.java @@ -34,7 +34,7 @@ /** * Provides implementation of JavaSourceCompiler interface. * This implementation uses {@link javax.tools.JavaCompiler}. - *

Usage: + * {@code

Usage: *

  * JavaSourceCompiler javaSourceCompiler = new JavaSourceCompilerImpl();
  * JavaSourceCompiler.CompilationUnit compilationUnit = javaSourceCompiler.createCompilationUnit();
@@ -55,7 +55,7 @@
  * 

*

*

Note that to be able to use java compiler you will have to add tools.jar to your class path. - *

+ *

} * * @author Adrian Witas */ diff --git a/kernel/java/src/main/java/org/abstractmeta/toolbox/compilation/compiler/impl/SimpleClassLoader.java b/kernel/java/src/main/java/org/abstractmeta/toolbox/compilation/compiler/impl/SimpleClassLoader.java index 5e2ed3a6c8..0d67d8fd7f 100644 --- a/kernel/java/src/main/java/org/abstractmeta/toolbox/compilation/compiler/impl/SimpleClassLoader.java +++ b/kernel/java/src/main/java/org/abstractmeta/toolbox/compilation/compiler/impl/SimpleClassLoader.java @@ -33,7 +33,7 @@ import java.util.jar.JarFile; /** - *

This implementation uses the following mechanism to lookup requested class. + * {@code

This implementation uses the following mechanism to lookup requested class. *

    *
  • java object registry: {@link org.abstractmeta.toolbox.compilation.compiler.registry.JavaFileObjectRegistry}
  • *
  • jar files class path entries
  • @@ -42,7 +42,7 @@ * Note that to be able find use {@link SimpleClassLoader#findResource(String)} or {@link SimpleClassLoader#findResources(String)} for registry resources (classes compiled in memory), * please use {@link JavaSourceCompilerImpl#persistCompiledClasses(org.abstractmeta.toolbox.compilation.compiler.JavaSourceCompiler.CompilationUnit)} * to persist compiled classes. - *

    + *

    } * * @author Adrian Witas */ From 130fb109af409877ade2b63e2b98d4a63aebeeb2 Mon Sep 17 00:00:00 2001 From: Robert Bidas Date: Tue, 5 Dec 2017 20:53:39 +0100 Subject: [PATCH 11/29] #5813 move js dir to top, second PR (#6446) * #5813 move js dir to top * #5813 move js dir to top, second PR, changes after CR --- .gitignore | 1 + README.md | 4 ++-- RELEASE.md | 6 +++--- beakerx/setup.py | 6 +++--- {beakerx/jslab => js/lab}/.gitignore | 0 {beakerx/jslab => js/lab}/.npmignore | 0 {beakerx/jslab => js/lab}/README.md | 0 {beakerx/jslab => js/lab}/index.js | 0 {beakerx/jslab => js/lab}/package.json | 0 {beakerx/js => js/notebook}/.gitignore | 0 {beakerx/js => js/notebook}/.npmignore | 0 {beakerx/js => js/notebook}/README.md | 0 {beakerx/js => js/notebook}/package.json | 0 .../js => js/notebook}/src/CyclingDisplayBox.js | 0 {beakerx/js => js/notebook}/src/EasyForm.js | 0 {beakerx/js => js/notebook}/src/GistPublish.js | 0 {beakerx/js => js/notebook}/src/GridView.js | 0 {beakerx/js => js/notebook}/src/HTMLPre.ts | 0 {beakerx/js => js/notebook}/src/Plot.js | 0 {beakerx/js => js/notebook}/src/TabView.js | 0 {beakerx/js => js/notebook}/src/TableDisplay.js | 0 .../notebook}/src/comboBox/jQueryComboBox.js | 0 .../notebook}/src/contextMenu/BkoContextMenu.ts | 0 .../notebook}/src/easyForm/TextareaWidget.ts | 0 .../notebook}/src/easyForm/checkboxWidget.ts | 0 .../notebook}/src/easyForm/comboBoxWidget.ts | 0 .../src/easyForm/css/jupyter-easyform.scss | 0 .../notebook}/src/easyForm/datePickerWidget.js | 0 .../src/easyForm/selectMultipleSingleWidget.js | 0 .../notebook}/src/easyForm/selectMultipleWidget.js | 0 .../js => js/notebook}/src/easyForm/textWidget.ts | 0 {beakerx/js => js/notebook}/src/embed.js | 0 {beakerx/js => js/notebook}/src/extension.js | 0 {beakerx/js => js/notebook}/src/global.env.ts | 0 .../js => js/notebook}/src/gridView/grid-view.scss | 0 .../js => js/notebook}/src/htmlOutput/htmlOutput.js | 0 {beakerx/js => js/notebook}/src/index.js | 0 .../js => js/notebook}/src/plot/auxes/plotAuxBox.js | 0 .../notebook}/src/plot/auxes/plotAuxRiver.js | 0 .../notebook}/src/plot/auxes/plotAuxStem.js | 0 .../notebook}/src/plot/bko-combinedplot.css | 0 {beakerx/js => js/notebook}/src/plot/bko-plot.css | 0 .../js => js/notebook}/src/plot/categoryPlotApi.js | 0 .../js => js/notebook}/src/plot/chartExtender.js | 0 .../notebook}/src/plot/combinedPlotFormatter.js | 0 .../notebook}/src/plot/combinedPlotScope.js | 0 .../notebook}/src/plot/combinedPlotScopeUtils.ts | 0 {beakerx/js => js/notebook}/src/plot/commonUtils.js | 0 .../src/plot/contextMenu/createSaveAsMenuItems.ts | 0 .../src/plot/contextMenu/plotContextMenu.ts | 0 .../js => js/notebook}/src/plot/gradientlegend.js | 0 .../js => js/notebook}/src/plot/heatmapconverter.js | 0 .../js => js/notebook}/src/plot/lod/plotLodBox.js | 0 .../js => js/notebook}/src/plot/lod/plotLodLine.js | 0 .../js => js/notebook}/src/plot/lod/plotLodPoint.js | 0 .../js => js/notebook}/src/plot/lod/plotLodRiver.js | 0 .../js => js/notebook}/src/plot/lod/plotLodStem.js | 0 .../src/plot/lodloader/plotAreaLodLoader.js | 0 .../src/plot/lodloader/plotBarLodLoader.js | 0 .../src/plot/lodloader/plotLineLodLoader.js | 0 .../src/plot/lodloader/plotPointLodLoader.js | 0 .../src/plot/lodloader/plotStemLodLoader.js | 0 {beakerx/js => js/notebook}/src/plot/plotApi.js | 0 .../js => js/notebook}/src/plot/plotConverter.js | 0 {beakerx/js => js/notebook}/src/plot/plotFactory.js | 0 .../js => js/notebook}/src/plot/plotFormatter.js | 0 .../src/plot/plotModal/pointsLimitModal.html | 0 .../src/plot/plotModal/pointsLimitModal.ts | 0 {beakerx/js => js/notebook}/src/plot/plotSampler.js | 0 .../js => js/notebook}/src/plot/plotSanitize.ts | 0 {beakerx/js => js/notebook}/src/plot/plotScope.js | 0 {beakerx/js => js/notebook}/src/plot/plotTip.js | 0 {beakerx/js => js/notebook}/src/plot/plotUtils.js | 0 {beakerx/js => js/notebook}/src/plot/std/heatmap.js | 0 .../js => js/notebook}/src/plot/std/plotarea.js | 0 .../js => js/notebook}/src/plot/std/plotaxis.js | 0 {beakerx/js => js/notebook}/src/plot/std/plotbar.js | 0 .../notebook}/src/plot/std/plotconstband.js | 0 .../notebook}/src/plot/std/plotconstline.js | 0 .../js => js/notebook}/src/plot/std/plotline.js | 0 .../js => js/notebook}/src/plot/std/plotpoint.js | 0 .../js => js/notebook}/src/plot/std/plotraster.js | 0 .../js => js/notebook}/src/plot/std/plotstem.js | 0 .../js => js/notebook}/src/plot/std/plottext.js | 0 .../notebook}/src/plot/std/plottreemapnode.js | 0 .../js => js/notebook}/src/shared/bkCoreManager.js | 0 {beakerx/js => js/notebook}/src/shared/bkGlobals.js | 0 {beakerx/js => js/notebook}/src/shared/bkHelper.js | 0 {beakerx/js => js/notebook}/src/shared/bkUtils.js | 0 .../notebook}/src/shared/fonts/FontAwesome.otf | Bin .../src/shared/fonts/fontawesome-webfont.ttf | Bin .../src/shared/fonts/fontawesome-webfont.woff | Bin .../shared/fonts/glyphicons-halflings-regular.ttf | Bin .../shared/fonts/glyphicons-halflings-regular.woff | Bin .../notebook}/src/shared/fonts/lato/Lato-Black.ttf | Bin .../notebook}/src/shared/fonts/lato/Lato-Black.woff | Bin .../src/shared/fonts/lato/Lato-Regular.ttf | Bin .../src/shared/fonts/lato/Lato-Regular.woff | Bin .../notebook}/src/shared/images/down@2x.png | Bin .../notebook}/src/shared/images/menu@2x.png | Bin .../notebook}/src/shared/images/menu_white@2x.png | Bin .../notebook}/src/shared/images/sort_asc.png | Bin .../src/shared/images/sort_asc_disabled.png | Bin .../notebook}/src/shared/images/sort_asc_white.png | Bin .../notebook}/src/shared/images/sort_both.png | Bin .../notebook}/src/shared/images/sort_both_gray.png | Bin .../notebook}/src/shared/images/sort_desc.png | Bin .../src/shared/images/sort_desc_disabled.png | Bin .../notebook}/src/shared/images/sort_desc_white.png | Bin .../shared/interfaces/contextMenuItemInterface.ts | 0 .../src/shared/interfaces/menuInterface.ts | 0 .../src/shared/interfaces/menuItemInterface.ts | 0 .../src/shared/libs/datatables-colresize/LICENSE | 0 .../datatables-colresize/dataTables.colResize.js | 0 .../notebook}/src/shared/style/beakerx.scss | 0 .../notebook}/src/shared/style/fontface.scss | 0 .../notebook}/src/tableDisplay/cellHighlighters.js | 0 .../notebook}/src/tableDisplay/columnReset.ts | 0 .../js => js/notebook}/src/tableDisplay/consts.js | 0 .../contextMenu/createTableCellMenuItems.ts | 0 .../contextMenu/createTableMenuItems.ts | 0 .../tableDisplay/contextMenu/tableContextMenu.ts | 0 .../notebook}/src/tableDisplay/css/datatables.scss | 0 .../js => js/notebook}/src/tableDisplay/table.html | 0 .../src/tableDisplay/tableHeaderMenu/BkoMenu.ts | 0 .../src/tableDisplay/tableHeaderMenu/ColumnMenu.ts | 0 .../src/tableDisplay/tableHeaderMenu/HeaderMenu.ts | 0 .../src/tableDisplay/tableHeaderMenu/IndexMenu.ts | 0 .../src/tableDisplay/tableHeaderMenu/MenuHelper.ts | 0 .../tableHeaderMenu/createColumnMenuItems.ts | 0 .../tableHeaderMenu/createColumnMenus.ts | 0 .../tableHeaderMenu/createFormatMenuItems.ts | 0 .../tableHeaderMenu/createIndexMenuItems.ts | 0 .../tableDisplay/tableModal/columnLimitModal.html | 0 .../notebook}/src/tableDisplay/tableModal/index.js | 0 .../notebook}/src/tableDisplay/tableScope.js | 0 .../notebook}/src/tableDisplay/tableSelect.js | 0 .../notebook}/src/tableDisplay/tableUtils.js | 0 {beakerx/js => js/notebook}/src/widgets.js | 0 {beakerx/js => js/notebook}/tsconfig.json | 0 {beakerx/js => js/notebook}/webpack.config.js | 6 +++--- {beakerx/js => js/notebook}/webpack.dev.js | 0 {beakerx/js => js/notebook}/webpack.prod.js | 0 {beakerx/js => js/notebook}/yarn.lock | 0 144 files changed, 12 insertions(+), 11 deletions(-) rename {beakerx/jslab => js/lab}/.gitignore (100%) rename {beakerx/jslab => js/lab}/.npmignore (100%) rename {beakerx/jslab => js/lab}/README.md (100%) rename {beakerx/jslab => js/lab}/index.js (100%) rename {beakerx/jslab => js/lab}/package.json (100%) rename {beakerx/js => js/notebook}/.gitignore (100%) rename {beakerx/js => js/notebook}/.npmignore (100%) rename {beakerx/js => js/notebook}/README.md (100%) rename {beakerx/js => js/notebook}/package.json (100%) rename {beakerx/js => js/notebook}/src/CyclingDisplayBox.js (100%) rename {beakerx/js => js/notebook}/src/EasyForm.js (100%) rename {beakerx/js => js/notebook}/src/GistPublish.js (100%) rename {beakerx/js => js/notebook}/src/GridView.js (100%) rename {beakerx/js => js/notebook}/src/HTMLPre.ts (100%) rename {beakerx/js => js/notebook}/src/Plot.js (100%) rename {beakerx/js => js/notebook}/src/TabView.js (100%) rename {beakerx/js => js/notebook}/src/TableDisplay.js (100%) rename {beakerx/js => js/notebook}/src/comboBox/jQueryComboBox.js (100%) rename {beakerx/js => js/notebook}/src/contextMenu/BkoContextMenu.ts (100%) rename {beakerx/js => js/notebook}/src/easyForm/TextareaWidget.ts (100%) rename {beakerx/js => js/notebook}/src/easyForm/checkboxWidget.ts (100%) rename {beakerx/js => js/notebook}/src/easyForm/comboBoxWidget.ts (100%) rename {beakerx/js => js/notebook}/src/easyForm/css/jupyter-easyform.scss (100%) rename {beakerx/js => js/notebook}/src/easyForm/datePickerWidget.js (100%) rename {beakerx/js => js/notebook}/src/easyForm/selectMultipleSingleWidget.js (100%) rename {beakerx/js => js/notebook}/src/easyForm/selectMultipleWidget.js (100%) rename {beakerx/js => js/notebook}/src/easyForm/textWidget.ts (100%) rename {beakerx/js => js/notebook}/src/embed.js (100%) rename {beakerx/js => js/notebook}/src/extension.js (100%) rename {beakerx/js => js/notebook}/src/global.env.ts (100%) rename {beakerx/js => js/notebook}/src/gridView/grid-view.scss (100%) rename {beakerx/js => js/notebook}/src/htmlOutput/htmlOutput.js (100%) rename {beakerx/js => js/notebook}/src/index.js (100%) rename {beakerx/js => js/notebook}/src/plot/auxes/plotAuxBox.js (100%) rename {beakerx/js => js/notebook}/src/plot/auxes/plotAuxRiver.js (100%) rename {beakerx/js => js/notebook}/src/plot/auxes/plotAuxStem.js (100%) rename {beakerx/js => js/notebook}/src/plot/bko-combinedplot.css (100%) rename {beakerx/js => js/notebook}/src/plot/bko-plot.css (100%) rename {beakerx/js => js/notebook}/src/plot/categoryPlotApi.js (100%) rename {beakerx/js => js/notebook}/src/plot/chartExtender.js (100%) rename {beakerx/js => js/notebook}/src/plot/combinedPlotFormatter.js (100%) rename {beakerx/js => js/notebook}/src/plot/combinedPlotScope.js (100%) rename {beakerx/js => js/notebook}/src/plot/combinedPlotScopeUtils.ts (100%) rename {beakerx/js => js/notebook}/src/plot/commonUtils.js (100%) rename {beakerx/js => js/notebook}/src/plot/contextMenu/createSaveAsMenuItems.ts (100%) rename {beakerx/js => js/notebook}/src/plot/contextMenu/plotContextMenu.ts (100%) rename {beakerx/js => js/notebook}/src/plot/gradientlegend.js (100%) rename {beakerx/js => js/notebook}/src/plot/heatmapconverter.js (100%) rename {beakerx/js => js/notebook}/src/plot/lod/plotLodBox.js (100%) rename {beakerx/js => js/notebook}/src/plot/lod/plotLodLine.js (100%) rename {beakerx/js => js/notebook}/src/plot/lod/plotLodPoint.js (100%) rename {beakerx/js => js/notebook}/src/plot/lod/plotLodRiver.js (100%) rename {beakerx/js => js/notebook}/src/plot/lod/plotLodStem.js (100%) rename {beakerx/js => js/notebook}/src/plot/lodloader/plotAreaLodLoader.js (100%) rename {beakerx/js => js/notebook}/src/plot/lodloader/plotBarLodLoader.js (100%) rename {beakerx/js => js/notebook}/src/plot/lodloader/plotLineLodLoader.js (100%) rename {beakerx/js => js/notebook}/src/plot/lodloader/plotPointLodLoader.js (100%) rename {beakerx/js => js/notebook}/src/plot/lodloader/plotStemLodLoader.js (100%) rename {beakerx/js => js/notebook}/src/plot/plotApi.js (100%) rename {beakerx/js => js/notebook}/src/plot/plotConverter.js (100%) rename {beakerx/js => js/notebook}/src/plot/plotFactory.js (100%) rename {beakerx/js => js/notebook}/src/plot/plotFormatter.js (100%) rename {beakerx/js => js/notebook}/src/plot/plotModal/pointsLimitModal.html (100%) rename {beakerx/js => js/notebook}/src/plot/plotModal/pointsLimitModal.ts (100%) rename {beakerx/js => js/notebook}/src/plot/plotSampler.js (100%) rename {beakerx/js => js/notebook}/src/plot/plotSanitize.ts (100%) rename {beakerx/js => js/notebook}/src/plot/plotScope.js (100%) rename {beakerx/js => js/notebook}/src/plot/plotTip.js (100%) rename {beakerx/js => js/notebook}/src/plot/plotUtils.js (100%) rename {beakerx/js => js/notebook}/src/plot/std/heatmap.js (100%) rename {beakerx/js => js/notebook}/src/plot/std/plotarea.js (100%) rename {beakerx/js => js/notebook}/src/plot/std/plotaxis.js (100%) rename {beakerx/js => js/notebook}/src/plot/std/plotbar.js (100%) rename {beakerx/js => js/notebook}/src/plot/std/plotconstband.js (100%) rename {beakerx/js => js/notebook}/src/plot/std/plotconstline.js (100%) rename {beakerx/js => js/notebook}/src/plot/std/plotline.js (100%) rename {beakerx/js => js/notebook}/src/plot/std/plotpoint.js (100%) rename {beakerx/js => js/notebook}/src/plot/std/plotraster.js (100%) rename {beakerx/js => js/notebook}/src/plot/std/plotstem.js (100%) rename {beakerx/js => js/notebook}/src/plot/std/plottext.js (100%) rename {beakerx/js => js/notebook}/src/plot/std/plottreemapnode.js (100%) rename {beakerx/js => js/notebook}/src/shared/bkCoreManager.js (100%) rename {beakerx/js => js/notebook}/src/shared/bkGlobals.js (100%) rename {beakerx/js => js/notebook}/src/shared/bkHelper.js (100%) rename {beakerx/js => js/notebook}/src/shared/bkUtils.js (100%) rename {beakerx/js => js/notebook}/src/shared/fonts/FontAwesome.otf (100%) rename {beakerx/js => js/notebook}/src/shared/fonts/fontawesome-webfont.ttf (100%) rename {beakerx/js => js/notebook}/src/shared/fonts/fontawesome-webfont.woff (100%) rename {beakerx/js => js/notebook}/src/shared/fonts/glyphicons-halflings-regular.ttf (100%) rename {beakerx/js => js/notebook}/src/shared/fonts/glyphicons-halflings-regular.woff (100%) rename {beakerx/js => js/notebook}/src/shared/fonts/lato/Lato-Black.ttf (100%) rename {beakerx/js => js/notebook}/src/shared/fonts/lato/Lato-Black.woff (100%) rename {beakerx/js => js/notebook}/src/shared/fonts/lato/Lato-Regular.ttf (100%) rename {beakerx/js => js/notebook}/src/shared/fonts/lato/Lato-Regular.woff (100%) rename {beakerx/js => js/notebook}/src/shared/images/down@2x.png (100%) rename {beakerx/js => js/notebook}/src/shared/images/menu@2x.png (100%) rename {beakerx/js => js/notebook}/src/shared/images/menu_white@2x.png (100%) rename {beakerx/js => js/notebook}/src/shared/images/sort_asc.png (100%) rename {beakerx/js => js/notebook}/src/shared/images/sort_asc_disabled.png (100%) rename {beakerx/js => js/notebook}/src/shared/images/sort_asc_white.png (100%) rename {beakerx/js => js/notebook}/src/shared/images/sort_both.png (100%) rename {beakerx/js => js/notebook}/src/shared/images/sort_both_gray.png (100%) rename {beakerx/js => js/notebook}/src/shared/images/sort_desc.png (100%) rename {beakerx/js => js/notebook}/src/shared/images/sort_desc_disabled.png (100%) rename {beakerx/js => js/notebook}/src/shared/images/sort_desc_white.png (100%) rename {beakerx/js => js/notebook}/src/shared/interfaces/contextMenuItemInterface.ts (100%) rename {beakerx/js => js/notebook}/src/shared/interfaces/menuInterface.ts (100%) rename {beakerx/js => js/notebook}/src/shared/interfaces/menuItemInterface.ts (100%) rename {beakerx/js => js/notebook}/src/shared/libs/datatables-colresize/LICENSE (100%) rename {beakerx/js => js/notebook}/src/shared/libs/datatables-colresize/dataTables.colResize.js (100%) rename {beakerx/js => js/notebook}/src/shared/style/beakerx.scss (100%) rename {beakerx/js => js/notebook}/src/shared/style/fontface.scss (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/cellHighlighters.js (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/columnReset.ts (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/consts.js (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/contextMenu/createTableCellMenuItems.ts (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/contextMenu/createTableMenuItems.ts (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/contextMenu/tableContextMenu.ts (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/css/datatables.scss (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/table.html (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/tableHeaderMenu/BkoMenu.ts (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/tableHeaderMenu/ColumnMenu.ts (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/tableHeaderMenu/HeaderMenu.ts (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/tableHeaderMenu/IndexMenu.ts (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/tableHeaderMenu/MenuHelper.ts (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/tableHeaderMenu/createColumnMenuItems.ts (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/tableHeaderMenu/createColumnMenus.ts (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/tableHeaderMenu/createFormatMenuItems.ts (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/tableHeaderMenu/createIndexMenuItems.ts (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/tableModal/columnLimitModal.html (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/tableModal/index.js (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/tableScope.js (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/tableSelect.js (100%) rename {beakerx/js => js/notebook}/src/tableDisplay/tableUtils.js (100%) rename {beakerx/js => js/notebook}/src/widgets.js (100%) rename {beakerx/js => js/notebook}/tsconfig.json (100%) rename {beakerx/js => js/notebook}/webpack.config.js (96%) rename {beakerx/js => js/notebook}/webpack.dev.js (100%) rename {beakerx/js => js/notebook}/webpack.prod.js (100%) rename {beakerx/js => js/notebook}/yarn.lock (100%) diff --git a/.gitignore b/.gitignore index 0799935b47..89f3104216 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ beakerx/static/ beakerx.egg-info/ beakerx/beakerx/static/ beakerx/beakerx/kernel/ +beakerx/beakerx/javadoc/ beakerx/dist kernel/build/ diff --git a/README.md b/README.md index 9941c16e00..b8b4c38363 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ conda install -y -c conda-forge jupyterlab (cd beakerx; pip install -e . --verbose) beakerx-install jupyter labextension install @jupyter-widgets/jupyterlab-manager -(cd beakerx/jslab; jupyter labextension install .) +(cd js/lab; jupyter labextension install .) ``` ### Update after Java change @@ -88,7 +88,7 @@ The notebook extensions are installed to run out of the repo, so just a local build should suffice: ``` -(cd beakerx/js; yarn install) +(cd js/notebook; yarn install) ``` ## Groovy with Interactive Plotting and Tables: diff --git a/RELEASE.md b/RELEASE.md index 27f6a16612..b377f4d7aa 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -13,7 +13,7 @@ Create the release ------------------ Update the version in `beakerx/beakerx/_version.py` and -`beakerx/js/package.json` and `beakerx/jslab/package.json`. Commit +`beakerx/js/package.json` and `js/lab/package.json`. Commit the change and push the git tag. ```bash @@ -65,8 +65,8 @@ Publish on npmjs To update the embedded version of our widget library: - Do a full build. -- Run `(cd beakerx/js; npm publish)` -- Run `(cd beakerx/jslab; npm publish)` +- Run `(cd js/notebook; npm publish)` +- Run `(cd js/lab; npm publish)` Release to Docker Hub --------------------- diff --git a/beakerx/setup.py b/beakerx/setup.py index fc8c90cccb..c02775a1ac 100644 --- a/beakerx/setup.py +++ b/beakerx/setup.py @@ -37,9 +37,9 @@ 'javadoc', ]) cmdclass['js'] = install_node_modules( - path='js', - build_dir=os.path.join(here, 'js', 'dist'), - source_dir=os.path.join(here, 'js', 'src') + path='../js/notebook', + build_dir=os.path.join(here, '../js/notebook', 'dist'), + source_dir=os.path.join(here, '../js/notebook', 'src') ) cmdclass['java'] = run_gradle(cmd='build') cmdclass['javadoc'] = run_gradle(cmd='base:javadoc') diff --git a/beakerx/jslab/.gitignore b/js/lab/.gitignore similarity index 100% rename from beakerx/jslab/.gitignore rename to js/lab/.gitignore diff --git a/beakerx/jslab/.npmignore b/js/lab/.npmignore similarity index 100% rename from beakerx/jslab/.npmignore rename to js/lab/.npmignore diff --git a/beakerx/jslab/README.md b/js/lab/README.md similarity index 100% rename from beakerx/jslab/README.md rename to js/lab/README.md diff --git a/beakerx/jslab/index.js b/js/lab/index.js similarity index 100% rename from beakerx/jslab/index.js rename to js/lab/index.js diff --git a/beakerx/jslab/package.json b/js/lab/package.json similarity index 100% rename from beakerx/jslab/package.json rename to js/lab/package.json diff --git a/beakerx/js/.gitignore b/js/notebook/.gitignore similarity index 100% rename from beakerx/js/.gitignore rename to js/notebook/.gitignore diff --git a/beakerx/js/.npmignore b/js/notebook/.npmignore similarity index 100% rename from beakerx/js/.npmignore rename to js/notebook/.npmignore diff --git a/beakerx/js/README.md b/js/notebook/README.md similarity index 100% rename from beakerx/js/README.md rename to js/notebook/README.md diff --git a/beakerx/js/package.json b/js/notebook/package.json similarity index 100% rename from beakerx/js/package.json rename to js/notebook/package.json diff --git a/beakerx/js/src/CyclingDisplayBox.js b/js/notebook/src/CyclingDisplayBox.js similarity index 100% rename from beakerx/js/src/CyclingDisplayBox.js rename to js/notebook/src/CyclingDisplayBox.js diff --git a/beakerx/js/src/EasyForm.js b/js/notebook/src/EasyForm.js similarity index 100% rename from beakerx/js/src/EasyForm.js rename to js/notebook/src/EasyForm.js diff --git a/beakerx/js/src/GistPublish.js b/js/notebook/src/GistPublish.js similarity index 100% rename from beakerx/js/src/GistPublish.js rename to js/notebook/src/GistPublish.js diff --git a/beakerx/js/src/GridView.js b/js/notebook/src/GridView.js similarity index 100% rename from beakerx/js/src/GridView.js rename to js/notebook/src/GridView.js diff --git a/beakerx/js/src/HTMLPre.ts b/js/notebook/src/HTMLPre.ts similarity index 100% rename from beakerx/js/src/HTMLPre.ts rename to js/notebook/src/HTMLPre.ts diff --git a/beakerx/js/src/Plot.js b/js/notebook/src/Plot.js similarity index 100% rename from beakerx/js/src/Plot.js rename to js/notebook/src/Plot.js diff --git a/beakerx/js/src/TabView.js b/js/notebook/src/TabView.js similarity index 100% rename from beakerx/js/src/TabView.js rename to js/notebook/src/TabView.js diff --git a/beakerx/js/src/TableDisplay.js b/js/notebook/src/TableDisplay.js similarity index 100% rename from beakerx/js/src/TableDisplay.js rename to js/notebook/src/TableDisplay.js diff --git a/beakerx/js/src/comboBox/jQueryComboBox.js b/js/notebook/src/comboBox/jQueryComboBox.js similarity index 100% rename from beakerx/js/src/comboBox/jQueryComboBox.js rename to js/notebook/src/comboBox/jQueryComboBox.js diff --git a/beakerx/js/src/contextMenu/BkoContextMenu.ts b/js/notebook/src/contextMenu/BkoContextMenu.ts similarity index 100% rename from beakerx/js/src/contextMenu/BkoContextMenu.ts rename to js/notebook/src/contextMenu/BkoContextMenu.ts diff --git a/beakerx/js/src/easyForm/TextareaWidget.ts b/js/notebook/src/easyForm/TextareaWidget.ts similarity index 100% rename from beakerx/js/src/easyForm/TextareaWidget.ts rename to js/notebook/src/easyForm/TextareaWidget.ts diff --git a/beakerx/js/src/easyForm/checkboxWidget.ts b/js/notebook/src/easyForm/checkboxWidget.ts similarity index 100% rename from beakerx/js/src/easyForm/checkboxWidget.ts rename to js/notebook/src/easyForm/checkboxWidget.ts diff --git a/beakerx/js/src/easyForm/comboBoxWidget.ts b/js/notebook/src/easyForm/comboBoxWidget.ts similarity index 100% rename from beakerx/js/src/easyForm/comboBoxWidget.ts rename to js/notebook/src/easyForm/comboBoxWidget.ts diff --git a/beakerx/js/src/easyForm/css/jupyter-easyform.scss b/js/notebook/src/easyForm/css/jupyter-easyform.scss similarity index 100% rename from beakerx/js/src/easyForm/css/jupyter-easyform.scss rename to js/notebook/src/easyForm/css/jupyter-easyform.scss diff --git a/beakerx/js/src/easyForm/datePickerWidget.js b/js/notebook/src/easyForm/datePickerWidget.js similarity index 100% rename from beakerx/js/src/easyForm/datePickerWidget.js rename to js/notebook/src/easyForm/datePickerWidget.js diff --git a/beakerx/js/src/easyForm/selectMultipleSingleWidget.js b/js/notebook/src/easyForm/selectMultipleSingleWidget.js similarity index 100% rename from beakerx/js/src/easyForm/selectMultipleSingleWidget.js rename to js/notebook/src/easyForm/selectMultipleSingleWidget.js diff --git a/beakerx/js/src/easyForm/selectMultipleWidget.js b/js/notebook/src/easyForm/selectMultipleWidget.js similarity index 100% rename from beakerx/js/src/easyForm/selectMultipleWidget.js rename to js/notebook/src/easyForm/selectMultipleWidget.js diff --git a/beakerx/js/src/easyForm/textWidget.ts b/js/notebook/src/easyForm/textWidget.ts similarity index 100% rename from beakerx/js/src/easyForm/textWidget.ts rename to js/notebook/src/easyForm/textWidget.ts diff --git a/beakerx/js/src/embed.js b/js/notebook/src/embed.js similarity index 100% rename from beakerx/js/src/embed.js rename to js/notebook/src/embed.js diff --git a/beakerx/js/src/extension.js b/js/notebook/src/extension.js similarity index 100% rename from beakerx/js/src/extension.js rename to js/notebook/src/extension.js diff --git a/beakerx/js/src/global.env.ts b/js/notebook/src/global.env.ts similarity index 100% rename from beakerx/js/src/global.env.ts rename to js/notebook/src/global.env.ts diff --git a/beakerx/js/src/gridView/grid-view.scss b/js/notebook/src/gridView/grid-view.scss similarity index 100% rename from beakerx/js/src/gridView/grid-view.scss rename to js/notebook/src/gridView/grid-view.scss diff --git a/beakerx/js/src/htmlOutput/htmlOutput.js b/js/notebook/src/htmlOutput/htmlOutput.js similarity index 100% rename from beakerx/js/src/htmlOutput/htmlOutput.js rename to js/notebook/src/htmlOutput/htmlOutput.js diff --git a/beakerx/js/src/index.js b/js/notebook/src/index.js similarity index 100% rename from beakerx/js/src/index.js rename to js/notebook/src/index.js diff --git a/beakerx/js/src/plot/auxes/plotAuxBox.js b/js/notebook/src/plot/auxes/plotAuxBox.js similarity index 100% rename from beakerx/js/src/plot/auxes/plotAuxBox.js rename to js/notebook/src/plot/auxes/plotAuxBox.js diff --git a/beakerx/js/src/plot/auxes/plotAuxRiver.js b/js/notebook/src/plot/auxes/plotAuxRiver.js similarity index 100% rename from beakerx/js/src/plot/auxes/plotAuxRiver.js rename to js/notebook/src/plot/auxes/plotAuxRiver.js diff --git a/beakerx/js/src/plot/auxes/plotAuxStem.js b/js/notebook/src/plot/auxes/plotAuxStem.js similarity index 100% rename from beakerx/js/src/plot/auxes/plotAuxStem.js rename to js/notebook/src/plot/auxes/plotAuxStem.js diff --git a/beakerx/js/src/plot/bko-combinedplot.css b/js/notebook/src/plot/bko-combinedplot.css similarity index 100% rename from beakerx/js/src/plot/bko-combinedplot.css rename to js/notebook/src/plot/bko-combinedplot.css diff --git a/beakerx/js/src/plot/bko-plot.css b/js/notebook/src/plot/bko-plot.css similarity index 100% rename from beakerx/js/src/plot/bko-plot.css rename to js/notebook/src/plot/bko-plot.css diff --git a/beakerx/js/src/plot/categoryPlotApi.js b/js/notebook/src/plot/categoryPlotApi.js similarity index 100% rename from beakerx/js/src/plot/categoryPlotApi.js rename to js/notebook/src/plot/categoryPlotApi.js diff --git a/beakerx/js/src/plot/chartExtender.js b/js/notebook/src/plot/chartExtender.js similarity index 100% rename from beakerx/js/src/plot/chartExtender.js rename to js/notebook/src/plot/chartExtender.js diff --git a/beakerx/js/src/plot/combinedPlotFormatter.js b/js/notebook/src/plot/combinedPlotFormatter.js similarity index 100% rename from beakerx/js/src/plot/combinedPlotFormatter.js rename to js/notebook/src/plot/combinedPlotFormatter.js diff --git a/beakerx/js/src/plot/combinedPlotScope.js b/js/notebook/src/plot/combinedPlotScope.js similarity index 100% rename from beakerx/js/src/plot/combinedPlotScope.js rename to js/notebook/src/plot/combinedPlotScope.js diff --git a/beakerx/js/src/plot/combinedPlotScopeUtils.ts b/js/notebook/src/plot/combinedPlotScopeUtils.ts similarity index 100% rename from beakerx/js/src/plot/combinedPlotScopeUtils.ts rename to js/notebook/src/plot/combinedPlotScopeUtils.ts diff --git a/beakerx/js/src/plot/commonUtils.js b/js/notebook/src/plot/commonUtils.js similarity index 100% rename from beakerx/js/src/plot/commonUtils.js rename to js/notebook/src/plot/commonUtils.js diff --git a/beakerx/js/src/plot/contextMenu/createSaveAsMenuItems.ts b/js/notebook/src/plot/contextMenu/createSaveAsMenuItems.ts similarity index 100% rename from beakerx/js/src/plot/contextMenu/createSaveAsMenuItems.ts rename to js/notebook/src/plot/contextMenu/createSaveAsMenuItems.ts diff --git a/beakerx/js/src/plot/contextMenu/plotContextMenu.ts b/js/notebook/src/plot/contextMenu/plotContextMenu.ts similarity index 100% rename from beakerx/js/src/plot/contextMenu/plotContextMenu.ts rename to js/notebook/src/plot/contextMenu/plotContextMenu.ts diff --git a/beakerx/js/src/plot/gradientlegend.js b/js/notebook/src/plot/gradientlegend.js similarity index 100% rename from beakerx/js/src/plot/gradientlegend.js rename to js/notebook/src/plot/gradientlegend.js diff --git a/beakerx/js/src/plot/heatmapconverter.js b/js/notebook/src/plot/heatmapconverter.js similarity index 100% rename from beakerx/js/src/plot/heatmapconverter.js rename to js/notebook/src/plot/heatmapconverter.js diff --git a/beakerx/js/src/plot/lod/plotLodBox.js b/js/notebook/src/plot/lod/plotLodBox.js similarity index 100% rename from beakerx/js/src/plot/lod/plotLodBox.js rename to js/notebook/src/plot/lod/plotLodBox.js diff --git a/beakerx/js/src/plot/lod/plotLodLine.js b/js/notebook/src/plot/lod/plotLodLine.js similarity index 100% rename from beakerx/js/src/plot/lod/plotLodLine.js rename to js/notebook/src/plot/lod/plotLodLine.js diff --git a/beakerx/js/src/plot/lod/plotLodPoint.js b/js/notebook/src/plot/lod/plotLodPoint.js similarity index 100% rename from beakerx/js/src/plot/lod/plotLodPoint.js rename to js/notebook/src/plot/lod/plotLodPoint.js diff --git a/beakerx/js/src/plot/lod/plotLodRiver.js b/js/notebook/src/plot/lod/plotLodRiver.js similarity index 100% rename from beakerx/js/src/plot/lod/plotLodRiver.js rename to js/notebook/src/plot/lod/plotLodRiver.js diff --git a/beakerx/js/src/plot/lod/plotLodStem.js b/js/notebook/src/plot/lod/plotLodStem.js similarity index 100% rename from beakerx/js/src/plot/lod/plotLodStem.js rename to js/notebook/src/plot/lod/plotLodStem.js diff --git a/beakerx/js/src/plot/lodloader/plotAreaLodLoader.js b/js/notebook/src/plot/lodloader/plotAreaLodLoader.js similarity index 100% rename from beakerx/js/src/plot/lodloader/plotAreaLodLoader.js rename to js/notebook/src/plot/lodloader/plotAreaLodLoader.js diff --git a/beakerx/js/src/plot/lodloader/plotBarLodLoader.js b/js/notebook/src/plot/lodloader/plotBarLodLoader.js similarity index 100% rename from beakerx/js/src/plot/lodloader/plotBarLodLoader.js rename to js/notebook/src/plot/lodloader/plotBarLodLoader.js diff --git a/beakerx/js/src/plot/lodloader/plotLineLodLoader.js b/js/notebook/src/plot/lodloader/plotLineLodLoader.js similarity index 100% rename from beakerx/js/src/plot/lodloader/plotLineLodLoader.js rename to js/notebook/src/plot/lodloader/plotLineLodLoader.js diff --git a/beakerx/js/src/plot/lodloader/plotPointLodLoader.js b/js/notebook/src/plot/lodloader/plotPointLodLoader.js similarity index 100% rename from beakerx/js/src/plot/lodloader/plotPointLodLoader.js rename to js/notebook/src/plot/lodloader/plotPointLodLoader.js diff --git a/beakerx/js/src/plot/lodloader/plotStemLodLoader.js b/js/notebook/src/plot/lodloader/plotStemLodLoader.js similarity index 100% rename from beakerx/js/src/plot/lodloader/plotStemLodLoader.js rename to js/notebook/src/plot/lodloader/plotStemLodLoader.js diff --git a/beakerx/js/src/plot/plotApi.js b/js/notebook/src/plot/plotApi.js similarity index 100% rename from beakerx/js/src/plot/plotApi.js rename to js/notebook/src/plot/plotApi.js diff --git a/beakerx/js/src/plot/plotConverter.js b/js/notebook/src/plot/plotConverter.js similarity index 100% rename from beakerx/js/src/plot/plotConverter.js rename to js/notebook/src/plot/plotConverter.js diff --git a/beakerx/js/src/plot/plotFactory.js b/js/notebook/src/plot/plotFactory.js similarity index 100% rename from beakerx/js/src/plot/plotFactory.js rename to js/notebook/src/plot/plotFactory.js diff --git a/beakerx/js/src/plot/plotFormatter.js b/js/notebook/src/plot/plotFormatter.js similarity index 100% rename from beakerx/js/src/plot/plotFormatter.js rename to js/notebook/src/plot/plotFormatter.js diff --git a/beakerx/js/src/plot/plotModal/pointsLimitModal.html b/js/notebook/src/plot/plotModal/pointsLimitModal.html similarity index 100% rename from beakerx/js/src/plot/plotModal/pointsLimitModal.html rename to js/notebook/src/plot/plotModal/pointsLimitModal.html diff --git a/beakerx/js/src/plot/plotModal/pointsLimitModal.ts b/js/notebook/src/plot/plotModal/pointsLimitModal.ts similarity index 100% rename from beakerx/js/src/plot/plotModal/pointsLimitModal.ts rename to js/notebook/src/plot/plotModal/pointsLimitModal.ts diff --git a/beakerx/js/src/plot/plotSampler.js b/js/notebook/src/plot/plotSampler.js similarity index 100% rename from beakerx/js/src/plot/plotSampler.js rename to js/notebook/src/plot/plotSampler.js diff --git a/beakerx/js/src/plot/plotSanitize.ts b/js/notebook/src/plot/plotSanitize.ts similarity index 100% rename from beakerx/js/src/plot/plotSanitize.ts rename to js/notebook/src/plot/plotSanitize.ts diff --git a/beakerx/js/src/plot/plotScope.js b/js/notebook/src/plot/plotScope.js similarity index 100% rename from beakerx/js/src/plot/plotScope.js rename to js/notebook/src/plot/plotScope.js diff --git a/beakerx/js/src/plot/plotTip.js b/js/notebook/src/plot/plotTip.js similarity index 100% rename from beakerx/js/src/plot/plotTip.js rename to js/notebook/src/plot/plotTip.js diff --git a/beakerx/js/src/plot/plotUtils.js b/js/notebook/src/plot/plotUtils.js similarity index 100% rename from beakerx/js/src/plot/plotUtils.js rename to js/notebook/src/plot/plotUtils.js diff --git a/beakerx/js/src/plot/std/heatmap.js b/js/notebook/src/plot/std/heatmap.js similarity index 100% rename from beakerx/js/src/plot/std/heatmap.js rename to js/notebook/src/plot/std/heatmap.js diff --git a/beakerx/js/src/plot/std/plotarea.js b/js/notebook/src/plot/std/plotarea.js similarity index 100% rename from beakerx/js/src/plot/std/plotarea.js rename to js/notebook/src/plot/std/plotarea.js diff --git a/beakerx/js/src/plot/std/plotaxis.js b/js/notebook/src/plot/std/plotaxis.js similarity index 100% rename from beakerx/js/src/plot/std/plotaxis.js rename to js/notebook/src/plot/std/plotaxis.js diff --git a/beakerx/js/src/plot/std/plotbar.js b/js/notebook/src/plot/std/plotbar.js similarity index 100% rename from beakerx/js/src/plot/std/plotbar.js rename to js/notebook/src/plot/std/plotbar.js diff --git a/beakerx/js/src/plot/std/plotconstband.js b/js/notebook/src/plot/std/plotconstband.js similarity index 100% rename from beakerx/js/src/plot/std/plotconstband.js rename to js/notebook/src/plot/std/plotconstband.js diff --git a/beakerx/js/src/plot/std/plotconstline.js b/js/notebook/src/plot/std/plotconstline.js similarity index 100% rename from beakerx/js/src/plot/std/plotconstline.js rename to js/notebook/src/plot/std/plotconstline.js diff --git a/beakerx/js/src/plot/std/plotline.js b/js/notebook/src/plot/std/plotline.js similarity index 100% rename from beakerx/js/src/plot/std/plotline.js rename to js/notebook/src/plot/std/plotline.js diff --git a/beakerx/js/src/plot/std/plotpoint.js b/js/notebook/src/plot/std/plotpoint.js similarity index 100% rename from beakerx/js/src/plot/std/plotpoint.js rename to js/notebook/src/plot/std/plotpoint.js diff --git a/beakerx/js/src/plot/std/plotraster.js b/js/notebook/src/plot/std/plotraster.js similarity index 100% rename from beakerx/js/src/plot/std/plotraster.js rename to js/notebook/src/plot/std/plotraster.js diff --git a/beakerx/js/src/plot/std/plotstem.js b/js/notebook/src/plot/std/plotstem.js similarity index 100% rename from beakerx/js/src/plot/std/plotstem.js rename to js/notebook/src/plot/std/plotstem.js diff --git a/beakerx/js/src/plot/std/plottext.js b/js/notebook/src/plot/std/plottext.js similarity index 100% rename from beakerx/js/src/plot/std/plottext.js rename to js/notebook/src/plot/std/plottext.js diff --git a/beakerx/js/src/plot/std/plottreemapnode.js b/js/notebook/src/plot/std/plottreemapnode.js similarity index 100% rename from beakerx/js/src/plot/std/plottreemapnode.js rename to js/notebook/src/plot/std/plottreemapnode.js diff --git a/beakerx/js/src/shared/bkCoreManager.js b/js/notebook/src/shared/bkCoreManager.js similarity index 100% rename from beakerx/js/src/shared/bkCoreManager.js rename to js/notebook/src/shared/bkCoreManager.js diff --git a/beakerx/js/src/shared/bkGlobals.js b/js/notebook/src/shared/bkGlobals.js similarity index 100% rename from beakerx/js/src/shared/bkGlobals.js rename to js/notebook/src/shared/bkGlobals.js diff --git a/beakerx/js/src/shared/bkHelper.js b/js/notebook/src/shared/bkHelper.js similarity index 100% rename from beakerx/js/src/shared/bkHelper.js rename to js/notebook/src/shared/bkHelper.js diff --git a/beakerx/js/src/shared/bkUtils.js b/js/notebook/src/shared/bkUtils.js similarity index 100% rename from beakerx/js/src/shared/bkUtils.js rename to js/notebook/src/shared/bkUtils.js diff --git a/beakerx/js/src/shared/fonts/FontAwesome.otf b/js/notebook/src/shared/fonts/FontAwesome.otf similarity index 100% rename from beakerx/js/src/shared/fonts/FontAwesome.otf rename to js/notebook/src/shared/fonts/FontAwesome.otf diff --git a/beakerx/js/src/shared/fonts/fontawesome-webfont.ttf b/js/notebook/src/shared/fonts/fontawesome-webfont.ttf similarity index 100% rename from beakerx/js/src/shared/fonts/fontawesome-webfont.ttf rename to js/notebook/src/shared/fonts/fontawesome-webfont.ttf diff --git a/beakerx/js/src/shared/fonts/fontawesome-webfont.woff b/js/notebook/src/shared/fonts/fontawesome-webfont.woff similarity index 100% rename from beakerx/js/src/shared/fonts/fontawesome-webfont.woff rename to js/notebook/src/shared/fonts/fontawesome-webfont.woff diff --git a/beakerx/js/src/shared/fonts/glyphicons-halflings-regular.ttf b/js/notebook/src/shared/fonts/glyphicons-halflings-regular.ttf similarity index 100% rename from beakerx/js/src/shared/fonts/glyphicons-halflings-regular.ttf rename to js/notebook/src/shared/fonts/glyphicons-halflings-regular.ttf diff --git a/beakerx/js/src/shared/fonts/glyphicons-halflings-regular.woff b/js/notebook/src/shared/fonts/glyphicons-halflings-regular.woff similarity index 100% rename from beakerx/js/src/shared/fonts/glyphicons-halflings-regular.woff rename to js/notebook/src/shared/fonts/glyphicons-halflings-regular.woff diff --git a/beakerx/js/src/shared/fonts/lato/Lato-Black.ttf b/js/notebook/src/shared/fonts/lato/Lato-Black.ttf similarity index 100% rename from beakerx/js/src/shared/fonts/lato/Lato-Black.ttf rename to js/notebook/src/shared/fonts/lato/Lato-Black.ttf diff --git a/beakerx/js/src/shared/fonts/lato/Lato-Black.woff b/js/notebook/src/shared/fonts/lato/Lato-Black.woff similarity index 100% rename from beakerx/js/src/shared/fonts/lato/Lato-Black.woff rename to js/notebook/src/shared/fonts/lato/Lato-Black.woff diff --git a/beakerx/js/src/shared/fonts/lato/Lato-Regular.ttf b/js/notebook/src/shared/fonts/lato/Lato-Regular.ttf similarity index 100% rename from beakerx/js/src/shared/fonts/lato/Lato-Regular.ttf rename to js/notebook/src/shared/fonts/lato/Lato-Regular.ttf diff --git a/beakerx/js/src/shared/fonts/lato/Lato-Regular.woff b/js/notebook/src/shared/fonts/lato/Lato-Regular.woff similarity index 100% rename from beakerx/js/src/shared/fonts/lato/Lato-Regular.woff rename to js/notebook/src/shared/fonts/lato/Lato-Regular.woff diff --git a/beakerx/js/src/shared/images/down@2x.png b/js/notebook/src/shared/images/down@2x.png similarity index 100% rename from beakerx/js/src/shared/images/down@2x.png rename to js/notebook/src/shared/images/down@2x.png diff --git a/beakerx/js/src/shared/images/menu@2x.png b/js/notebook/src/shared/images/menu@2x.png similarity index 100% rename from beakerx/js/src/shared/images/menu@2x.png rename to js/notebook/src/shared/images/menu@2x.png diff --git a/beakerx/js/src/shared/images/menu_white@2x.png b/js/notebook/src/shared/images/menu_white@2x.png similarity index 100% rename from beakerx/js/src/shared/images/menu_white@2x.png rename to js/notebook/src/shared/images/menu_white@2x.png diff --git a/beakerx/js/src/shared/images/sort_asc.png b/js/notebook/src/shared/images/sort_asc.png similarity index 100% rename from beakerx/js/src/shared/images/sort_asc.png rename to js/notebook/src/shared/images/sort_asc.png diff --git a/beakerx/js/src/shared/images/sort_asc_disabled.png b/js/notebook/src/shared/images/sort_asc_disabled.png similarity index 100% rename from beakerx/js/src/shared/images/sort_asc_disabled.png rename to js/notebook/src/shared/images/sort_asc_disabled.png diff --git a/beakerx/js/src/shared/images/sort_asc_white.png b/js/notebook/src/shared/images/sort_asc_white.png similarity index 100% rename from beakerx/js/src/shared/images/sort_asc_white.png rename to js/notebook/src/shared/images/sort_asc_white.png diff --git a/beakerx/js/src/shared/images/sort_both.png b/js/notebook/src/shared/images/sort_both.png similarity index 100% rename from beakerx/js/src/shared/images/sort_both.png rename to js/notebook/src/shared/images/sort_both.png diff --git a/beakerx/js/src/shared/images/sort_both_gray.png b/js/notebook/src/shared/images/sort_both_gray.png similarity index 100% rename from beakerx/js/src/shared/images/sort_both_gray.png rename to js/notebook/src/shared/images/sort_both_gray.png diff --git a/beakerx/js/src/shared/images/sort_desc.png b/js/notebook/src/shared/images/sort_desc.png similarity index 100% rename from beakerx/js/src/shared/images/sort_desc.png rename to js/notebook/src/shared/images/sort_desc.png diff --git a/beakerx/js/src/shared/images/sort_desc_disabled.png b/js/notebook/src/shared/images/sort_desc_disabled.png similarity index 100% rename from beakerx/js/src/shared/images/sort_desc_disabled.png rename to js/notebook/src/shared/images/sort_desc_disabled.png diff --git a/beakerx/js/src/shared/images/sort_desc_white.png b/js/notebook/src/shared/images/sort_desc_white.png similarity index 100% rename from beakerx/js/src/shared/images/sort_desc_white.png rename to js/notebook/src/shared/images/sort_desc_white.png diff --git a/beakerx/js/src/shared/interfaces/contextMenuItemInterface.ts b/js/notebook/src/shared/interfaces/contextMenuItemInterface.ts similarity index 100% rename from beakerx/js/src/shared/interfaces/contextMenuItemInterface.ts rename to js/notebook/src/shared/interfaces/contextMenuItemInterface.ts diff --git a/beakerx/js/src/shared/interfaces/menuInterface.ts b/js/notebook/src/shared/interfaces/menuInterface.ts similarity index 100% rename from beakerx/js/src/shared/interfaces/menuInterface.ts rename to js/notebook/src/shared/interfaces/menuInterface.ts diff --git a/beakerx/js/src/shared/interfaces/menuItemInterface.ts b/js/notebook/src/shared/interfaces/menuItemInterface.ts similarity index 100% rename from beakerx/js/src/shared/interfaces/menuItemInterface.ts rename to js/notebook/src/shared/interfaces/menuItemInterface.ts diff --git a/beakerx/js/src/shared/libs/datatables-colresize/LICENSE b/js/notebook/src/shared/libs/datatables-colresize/LICENSE similarity index 100% rename from beakerx/js/src/shared/libs/datatables-colresize/LICENSE rename to js/notebook/src/shared/libs/datatables-colresize/LICENSE diff --git a/beakerx/js/src/shared/libs/datatables-colresize/dataTables.colResize.js b/js/notebook/src/shared/libs/datatables-colresize/dataTables.colResize.js similarity index 100% rename from beakerx/js/src/shared/libs/datatables-colresize/dataTables.colResize.js rename to js/notebook/src/shared/libs/datatables-colresize/dataTables.colResize.js diff --git a/beakerx/js/src/shared/style/beakerx.scss b/js/notebook/src/shared/style/beakerx.scss similarity index 100% rename from beakerx/js/src/shared/style/beakerx.scss rename to js/notebook/src/shared/style/beakerx.scss diff --git a/beakerx/js/src/shared/style/fontface.scss b/js/notebook/src/shared/style/fontface.scss similarity index 100% rename from beakerx/js/src/shared/style/fontface.scss rename to js/notebook/src/shared/style/fontface.scss diff --git a/beakerx/js/src/tableDisplay/cellHighlighters.js b/js/notebook/src/tableDisplay/cellHighlighters.js similarity index 100% rename from beakerx/js/src/tableDisplay/cellHighlighters.js rename to js/notebook/src/tableDisplay/cellHighlighters.js diff --git a/beakerx/js/src/tableDisplay/columnReset.ts b/js/notebook/src/tableDisplay/columnReset.ts similarity index 100% rename from beakerx/js/src/tableDisplay/columnReset.ts rename to js/notebook/src/tableDisplay/columnReset.ts diff --git a/beakerx/js/src/tableDisplay/consts.js b/js/notebook/src/tableDisplay/consts.js similarity index 100% rename from beakerx/js/src/tableDisplay/consts.js rename to js/notebook/src/tableDisplay/consts.js diff --git a/beakerx/js/src/tableDisplay/contextMenu/createTableCellMenuItems.ts b/js/notebook/src/tableDisplay/contextMenu/createTableCellMenuItems.ts similarity index 100% rename from beakerx/js/src/tableDisplay/contextMenu/createTableCellMenuItems.ts rename to js/notebook/src/tableDisplay/contextMenu/createTableCellMenuItems.ts diff --git a/beakerx/js/src/tableDisplay/contextMenu/createTableMenuItems.ts b/js/notebook/src/tableDisplay/contextMenu/createTableMenuItems.ts similarity index 100% rename from beakerx/js/src/tableDisplay/contextMenu/createTableMenuItems.ts rename to js/notebook/src/tableDisplay/contextMenu/createTableMenuItems.ts diff --git a/beakerx/js/src/tableDisplay/contextMenu/tableContextMenu.ts b/js/notebook/src/tableDisplay/contextMenu/tableContextMenu.ts similarity index 100% rename from beakerx/js/src/tableDisplay/contextMenu/tableContextMenu.ts rename to js/notebook/src/tableDisplay/contextMenu/tableContextMenu.ts diff --git a/beakerx/js/src/tableDisplay/css/datatables.scss b/js/notebook/src/tableDisplay/css/datatables.scss similarity index 100% rename from beakerx/js/src/tableDisplay/css/datatables.scss rename to js/notebook/src/tableDisplay/css/datatables.scss diff --git a/beakerx/js/src/tableDisplay/table.html b/js/notebook/src/tableDisplay/table.html similarity index 100% rename from beakerx/js/src/tableDisplay/table.html rename to js/notebook/src/tableDisplay/table.html diff --git a/beakerx/js/src/tableDisplay/tableHeaderMenu/BkoMenu.ts b/js/notebook/src/tableDisplay/tableHeaderMenu/BkoMenu.ts similarity index 100% rename from beakerx/js/src/tableDisplay/tableHeaderMenu/BkoMenu.ts rename to js/notebook/src/tableDisplay/tableHeaderMenu/BkoMenu.ts diff --git a/beakerx/js/src/tableDisplay/tableHeaderMenu/ColumnMenu.ts b/js/notebook/src/tableDisplay/tableHeaderMenu/ColumnMenu.ts similarity index 100% rename from beakerx/js/src/tableDisplay/tableHeaderMenu/ColumnMenu.ts rename to js/notebook/src/tableDisplay/tableHeaderMenu/ColumnMenu.ts diff --git a/beakerx/js/src/tableDisplay/tableHeaderMenu/HeaderMenu.ts b/js/notebook/src/tableDisplay/tableHeaderMenu/HeaderMenu.ts similarity index 100% rename from beakerx/js/src/tableDisplay/tableHeaderMenu/HeaderMenu.ts rename to js/notebook/src/tableDisplay/tableHeaderMenu/HeaderMenu.ts diff --git a/beakerx/js/src/tableDisplay/tableHeaderMenu/IndexMenu.ts b/js/notebook/src/tableDisplay/tableHeaderMenu/IndexMenu.ts similarity index 100% rename from beakerx/js/src/tableDisplay/tableHeaderMenu/IndexMenu.ts rename to js/notebook/src/tableDisplay/tableHeaderMenu/IndexMenu.ts diff --git a/beakerx/js/src/tableDisplay/tableHeaderMenu/MenuHelper.ts b/js/notebook/src/tableDisplay/tableHeaderMenu/MenuHelper.ts similarity index 100% rename from beakerx/js/src/tableDisplay/tableHeaderMenu/MenuHelper.ts rename to js/notebook/src/tableDisplay/tableHeaderMenu/MenuHelper.ts diff --git a/beakerx/js/src/tableDisplay/tableHeaderMenu/createColumnMenuItems.ts b/js/notebook/src/tableDisplay/tableHeaderMenu/createColumnMenuItems.ts similarity index 100% rename from beakerx/js/src/tableDisplay/tableHeaderMenu/createColumnMenuItems.ts rename to js/notebook/src/tableDisplay/tableHeaderMenu/createColumnMenuItems.ts diff --git a/beakerx/js/src/tableDisplay/tableHeaderMenu/createColumnMenus.ts b/js/notebook/src/tableDisplay/tableHeaderMenu/createColumnMenus.ts similarity index 100% rename from beakerx/js/src/tableDisplay/tableHeaderMenu/createColumnMenus.ts rename to js/notebook/src/tableDisplay/tableHeaderMenu/createColumnMenus.ts diff --git a/beakerx/js/src/tableDisplay/tableHeaderMenu/createFormatMenuItems.ts b/js/notebook/src/tableDisplay/tableHeaderMenu/createFormatMenuItems.ts similarity index 100% rename from beakerx/js/src/tableDisplay/tableHeaderMenu/createFormatMenuItems.ts rename to js/notebook/src/tableDisplay/tableHeaderMenu/createFormatMenuItems.ts diff --git a/beakerx/js/src/tableDisplay/tableHeaderMenu/createIndexMenuItems.ts b/js/notebook/src/tableDisplay/tableHeaderMenu/createIndexMenuItems.ts similarity index 100% rename from beakerx/js/src/tableDisplay/tableHeaderMenu/createIndexMenuItems.ts rename to js/notebook/src/tableDisplay/tableHeaderMenu/createIndexMenuItems.ts diff --git a/beakerx/js/src/tableDisplay/tableModal/columnLimitModal.html b/js/notebook/src/tableDisplay/tableModal/columnLimitModal.html similarity index 100% rename from beakerx/js/src/tableDisplay/tableModal/columnLimitModal.html rename to js/notebook/src/tableDisplay/tableModal/columnLimitModal.html diff --git a/beakerx/js/src/tableDisplay/tableModal/index.js b/js/notebook/src/tableDisplay/tableModal/index.js similarity index 100% rename from beakerx/js/src/tableDisplay/tableModal/index.js rename to js/notebook/src/tableDisplay/tableModal/index.js diff --git a/beakerx/js/src/tableDisplay/tableScope.js b/js/notebook/src/tableDisplay/tableScope.js similarity index 100% rename from beakerx/js/src/tableDisplay/tableScope.js rename to js/notebook/src/tableDisplay/tableScope.js diff --git a/beakerx/js/src/tableDisplay/tableSelect.js b/js/notebook/src/tableDisplay/tableSelect.js similarity index 100% rename from beakerx/js/src/tableDisplay/tableSelect.js rename to js/notebook/src/tableDisplay/tableSelect.js diff --git a/beakerx/js/src/tableDisplay/tableUtils.js b/js/notebook/src/tableDisplay/tableUtils.js similarity index 100% rename from beakerx/js/src/tableDisplay/tableUtils.js rename to js/notebook/src/tableDisplay/tableUtils.js diff --git a/beakerx/js/src/widgets.js b/js/notebook/src/widgets.js similarity index 100% rename from beakerx/js/src/widgets.js rename to js/notebook/src/widgets.js diff --git a/beakerx/js/tsconfig.json b/js/notebook/tsconfig.json similarity index 100% rename from beakerx/js/tsconfig.json rename to js/notebook/tsconfig.json diff --git a/beakerx/js/webpack.config.js b/js/notebook/webpack.config.js similarity index 96% rename from beakerx/js/webpack.config.js rename to js/notebook/webpack.config.js index 2ac2997c99..b873bd6845 100644 --- a/beakerx/js/webpack.config.js +++ b/js/notebook/webpack.config.js @@ -82,7 +82,7 @@ module.exports = [ entry: './src/extension.js', output: { filename: 'extension.js', - path: path.resolve(__dirname, '../beakerx/static'), + path: path.resolve(__dirname, '../../beakerx/beakerx/static'), libraryTarget: 'amd' }, module: { @@ -114,7 +114,7 @@ module.exports = [ entry: './src/index.js', output: { filename: 'index.js', - path: path.resolve(__dirname, '../beakerx/static'), + path: path.resolve(__dirname, '../../beakerx/beakerx/static'), libraryTarget: 'amd' }, module: { @@ -162,7 +162,7 @@ module.exports = [ entry: './src/embed.js', output: { filename: 'index.js', - path: path.resolve(__dirname, '../jslab/lib/'), + path: path.resolve(__dirname, '../lab/lib/'), libraryTarget: 'amd' }, module: { diff --git a/beakerx/js/webpack.dev.js b/js/notebook/webpack.dev.js similarity index 100% rename from beakerx/js/webpack.dev.js rename to js/notebook/webpack.dev.js diff --git a/beakerx/js/webpack.prod.js b/js/notebook/webpack.prod.js similarity index 100% rename from beakerx/js/webpack.prod.js rename to js/notebook/webpack.prod.js diff --git a/beakerx/js/yarn.lock b/js/notebook/yarn.lock similarity index 100% rename from beakerx/js/yarn.lock rename to js/notebook/yarn.lock From 2e1fb74c961047c3c9fc5c9dcc598bb99ea26ffb Mon Sep 17 00:00:00 2001 From: Scott Draves Date: Tue, 5 Dec 2017 14:55:28 -0500 Subject: [PATCH 12/29] update documentation to workaround https://github.com/jupyterlab/jupyterlab/issues/3215 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b8b4c38363..086891495f 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ beakerx-install ``` conda create -y -n labx 'python>=3' nodejs pandas openjdk maven source activate labx -conda install -y -c conda-forge jupyterlab +conda install -y -c conda-forge jupyterlab=0.29.2 (cd beakerx; pip install -e . --verbose) beakerx-install jupyter labextension install @jupyter-widgets/jupyterlab-manager From 81e92bf40b177595da4e651fe057f34db45a1c20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Witkowski?= Date: Tue, 5 Dec 2017 21:47:47 +0100 Subject: [PATCH 13/29] #6358 Fix docker language warnings. (#6448) * #6358 Fix docker language warnings. * #6358 Redo nodejs via conda. * #6358 Added option encoding UTF-8 to gradle. --- docker/base/Dockerfile | 10 ++++------ kernel/base/build.gradle | 1 + kernel/java/build.gradle | 4 ++++ 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/docker/base/Dockerfile b/docker/base/Dockerfile index 7d27074001..5755e18500 100644 --- a/docker/base/Dockerfile +++ b/docker/base/Dockerfile @@ -20,13 +20,11 @@ RUN useradd beakerx --create-home ENV CONDA_DIR /opt/conda ENV PATH /opt/conda/bin:$PATH ENV NB_USER beakerx -ENV LC_ALL en_US.UTF-8 -ENV LANG en_US.UTF-8 -ENV LANGUAGE en_US.UTF-8 +ENV DEBIAN_FRONTEND noninteractive -RUN apt-get update && apt-get dist-upgrade -y && \ - apt-get install -y sudo curl unzip software-properties-common apt-transport-https git bzip2 wget locales && \ - locale-gen en_US.UTF-8 && \ +RUN apt-get update && \ + apt-get install -y --no-install-recommends apt-utils sudo curl unzip software-properties-common apt-transport-https git bzip2 wget && \ + apt-get dist-upgrade -y && \ echo 'export PATH=/opt/conda/bin:$PATH' > /etc/profile.d/conda.sh && \ wget --quiet https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh && \ /bin/bash ~/miniconda.sh -b -p /opt/conda && \ diff --git a/kernel/base/build.gradle b/kernel/base/build.gradle index 2591e8ec58..26db16264a 100644 --- a/kernel/base/build.gradle +++ b/kernel/base/build.gradle @@ -25,6 +25,7 @@ repositories { compileJava { options.compilerArgs << '-Xlint:sunapi' options.compilerArgs << '-XDenableSunApiLintControl' + options.encoding = "UTF-8" } dependencies { diff --git a/kernel/java/build.gradle b/kernel/java/build.gradle index 575eaa0be5..8b06048edf 100644 --- a/kernel/java/build.gradle +++ b/kernel/java/build.gradle @@ -25,6 +25,10 @@ configurations { antlr } +compileJava { + options.encoding = "UTF-8" +} + sourceSets { main { compileClasspath += configurations.provided From 2f4b9424b04f65d33bae742b14ce2020542385f4 Mon Sep 17 00:00:00 2001 From: Scott Draves Date: Tue, 5 Dec 2017 17:17:39 -0500 Subject: [PATCH 14/29] disable broken test --- .../src/test/java/com/twosigma/beakerx/KernelExecutionTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java index 9d93529045..0467684eab 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java @@ -236,7 +236,6 @@ public void shouldNotImportUnknownClassByMagicCommand() throws Exception { assertThat(status).isEqualTo(MagicCommandOutcomeItem.Status.ERROR); } - @Test public void shouldUnimportDemoClassByMagicCommand() throws Exception { //given addDemoJar(); From f090bfb699122f369a25826e42e6da61c8d8187c Mon Sep 17 00:00:00 2001 From: Scott Draves Date: Tue, 5 Dec 2017 17:26:56 -0500 Subject: [PATCH 15/29] disable broken test --- .../src/test/java/com/twosigma/beakerx/KernelExecutionTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java index 0467684eab..3f7c5e5981 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java @@ -200,7 +200,6 @@ protected String getObjectTestMethodFromAddedDemoJar() { return "new Demo().getObjectTest()"; } - @Test public void shouldImportDemoClassWithWildcardByMagicCommand() throws Exception { //given addDemoJar(); From 302d8965cc2ca1934b4bbe41846f6e99cab58b0a Mon Sep 17 00:00:00 2001 From: jaroslawmalekcodete Date: Wed, 6 Dec 2017 15:44:47 +0100 Subject: [PATCH 16/29] jarek/6452: remove jvm-repr workaround (#6465) * #6452: remove jvm-repr workaround * #6452: refactoring --- kernel/base/build.gradle | 2 +- .../beakerx/BeakerxDefaultDisplayers.java | 46 ++++++++++ .../beakerx/BeakerxToStringDisplayer.java | 84 ------------------- .../com/twosigma/beakerx/kernel/Kernel.java | 20 ++--- 4 files changed, 56 insertions(+), 96 deletions(-) create mode 100644 kernel/base/src/main/java/com/twosigma/beakerx/BeakerxDefaultDisplayers.java delete mode 100644 kernel/base/src/main/java/com/twosigma/beakerx/BeakerxToStringDisplayer.java diff --git a/kernel/base/build.gradle b/kernel/base/build.gradle index 26db16264a..b6487237d0 100644 --- a/kernel/base/build.gradle +++ b/kernel/base/build.gradle @@ -31,7 +31,7 @@ compileJava { dependencies { compile group: 'com.opencsv', name: 'opencsv', version: '3.10' compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.6.5' - compile group: 'com.github.jupyter', name: 'jvm-repr', version: '0.2.1' + compile group: 'com.github.jupyter', name: 'jvm-repr', version: '0.3.1' compile group: 'com.google.guava', name: 'guava', version: '22.0' compile group: 'com.google.inject', name: 'guice', version: '3.0' compile group: "commons-codec", name: "commons-codec", version: "1.9" diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/BeakerxDefaultDisplayers.java b/kernel/base/src/main/java/com/twosigma/beakerx/BeakerxDefaultDisplayers.java new file mode 100644 index 0000000000..1becc5f91e --- /dev/null +++ b/kernel/base/src/main/java/com/twosigma/beakerx/BeakerxDefaultDisplayers.java @@ -0,0 +1,46 @@ +/* + * Copyright 2017 TWO SIGMA OPEN SOURCE, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.twosigma.beakerx; + +import com.twosigma.beakerx.mimetype.MIMEContainer; +import jupyter.Displayer; +import jupyter.Displayers; + +import java.util.HashMap; +import java.util.Map; + +public class BeakerxDefaultDisplayers { + + + public static void registerDefaults() { + registerCodeCellDisplayer(); + } + + private static void registerCodeCellDisplayer() { + Displayers.register(CodeCell.class, new Displayer() { + @Override + public Map display(CodeCell value) { + return new HashMap() {{ + StringBuilder sb = new StringBuilder("Cell Type:" + (value).getCellType()).append(System.getProperty("line.separator")); + sb.append("Execution Count:").append((value).getExecutionCount()).append(System.getProperty("line.separator")); + sb.append("Metadata:").append((value).getMetadata()).append(System.getProperty("line.separator")); + sb.append("Source:").append((value).getSource()); + put(MIMEContainer.MIME.TEXT_PLAIN, sb.toString()); + }}; + } + }); + } +} diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/BeakerxToStringDisplayer.java b/kernel/base/src/main/java/com/twosigma/beakerx/BeakerxToStringDisplayer.java deleted file mode 100644 index a6b3ef12d4..0000000000 --- a/kernel/base/src/main/java/com/twosigma/beakerx/BeakerxToStringDisplayer.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2017 TWO SIGMA OPEN SOURCE, LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.twosigma.beakerx; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import jupyter.Displayer; -import jupyter.Displayers; - -public class BeakerxToStringDisplayer extends Displayer { - - private static final BeakerxToStringDisplayer INSTANCE = new BeakerxToStringDisplayer(); - - BeakerxToStringDisplayer() { - } - - public static Displayer get() { - return INSTANCE; - } - public Map display(Object obj) { - Map result = new HashMap(); - if (obj.getClass().isArray()) { - result.put("text/plain", this.displayArray(obj)); - } else if (obj instanceof CodeCell) { - StringBuilder sb = new StringBuilder("Cell Type:" + ((CodeCell) obj).getCellType()).append(System.getProperty("line.separator")); - sb.append("Execution Count:").append(((CodeCell) obj).getExecutionCount()).append(System.getProperty("line.separator")); - sb.append("Metadata:").append(((CodeCell) obj).getMetadata()).append(System.getProperty("line.separator")); - sb.append("Source:").append(((CodeCell) obj).getSource()); - result.put("text/plain", sb.toString()); - } else { - result.put("text/plain", obj.toString()); - } - - return result; - } - - private String displayArray(Object obj) { - Class type = obj.getClass().getComponentType(); - if(type == Boolean.TYPE) { - return Arrays.toString((boolean[])obj); - } else if(type == Byte.TYPE) { - return Arrays.toString((byte[])obj); - } else if(type == Short.TYPE) { - return Arrays.toString((short[])obj); - } else if(type == Integer.TYPE) { - return Arrays.toString((int[])obj); - } else if(type == Long.TYPE) { - return Arrays.toString((long[])obj); - } else if(type == Float.TYPE) { - return Arrays.toString((float[])obj); - } else if(type == Double.TYPE) { - return Arrays.toString((double[])obj); - } else if(type == Character.TYPE) { - return Arrays.toString((char[])obj); - } else { - Object[] arr = (Object[])obj; - StringBuilder sb = new StringBuilder(); - sb.append("[").append(Displayers.display(arr[0]).get("text/plain")); - - for(int i = 1; i < arr.length; ++i) { - String asText = Displayers.display(arr[i]).get("text/plain"); - sb.append(", ").append(asText); - } - - sb.append("]"); - return sb.toString(); - } - } - -} diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/Kernel.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/Kernel.java index 5e07ebf248..317f6b647f 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/Kernel.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/Kernel.java @@ -17,7 +17,7 @@ import static com.twosigma.beakerx.kernel.KernelSignalHandler.addSigIntHandler; -import com.twosigma.beakerx.BeakerxToStringDisplayer; +import com.twosigma.beakerx.BeakerxDefaultDisplayers; import com.twosigma.beakerx.DisplayerDataMapper; import com.twosigma.beakerx.autocomplete.AutocompleteResult; import com.twosigma.beakerx.evaluator.Evaluator; @@ -41,7 +41,6 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import jupyter.Displayers; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -79,7 +78,7 @@ protected Kernel(final String sessionId, final Evaluator evaluator, final Kernel configureMagicCommands(); DisplayerDataMapper.init(); configureSignalHandler(); - intJvmRepr(); + initJvmRepr(); } public abstract CommOpenHandler getCommOpenHandler(Kernel kernel); @@ -248,14 +247,6 @@ public Path getTempFolder() { return evaluatorManager.getTempFolder(); } - private void intJvmRepr() { - Displayers.registration().setDefault(BeakerxToStringDisplayer.get()); - configureJvmRepr(); - } - - protected void configureJvmRepr() { - } - @Override public Class loadClass(String clazzName) throws ClassNotFoundException { return evaluatorManager.loadClass(clazzName); @@ -274,4 +265,11 @@ private void configureMagicCommands() { public void registerMagicCommandType(MagicCommandType magicCommandType) { this.magicCommandTypes.add(magicCommandType); } + + private void initJvmRepr() { + BeakerxDefaultDisplayers.registerDefaults(); + configureJvmRepr(); + } + protected void configureJvmRepr() { + } } From dd34287a3e9fec3685300a66e65cf77c0866f948 Mon Sep 17 00:00:00 2001 From: jaroslawmalekcodete Date: Wed, 6 Dec 2017 16:25:25 +0100 Subject: [PATCH 17/29] #6443: fix displaying widgets by fixing parent messages (#6464) --- .../twosigma/beakerx/kernel/comm/Comm.java | 27 +++-- .../com/twosigma/beakerx/widgets/Widget.java | 5 +- .../beakerx/jupyter/comm/CommTest.java | 102 ++++++++++++------ 3 files changed, 86 insertions(+), 48 deletions(-) diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/comm/Comm.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/comm/Comm.java index 3df7c0f339..7d9b1acd11 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/comm/Comm.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/comm/Comm.java @@ -23,8 +23,6 @@ import com.twosigma.beakerx.kernel.msg.JupyterMessages; import com.twosigma.beakerx.message.Header; import com.twosigma.beakerx.message.Message; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.io.Serializable; import java.util.ArrayList; @@ -36,11 +34,8 @@ import static com.twosigma.beakerx.kernel.msg.JupyterMessages.COMM_MSG; import static com.twosigma.beakerx.kernel.msg.JupyterMessages.COMM_OPEN; - public class Comm { - private static final Logger logger = LoggerFactory.getLogger(Comm.class); - public static final String METHOD = "method"; public static final String UPDATE = "update"; public static final String STATE = "state"; @@ -62,7 +57,6 @@ public class Comm { private KernelFunctionality kernel; private List> msgCallbackList = new ArrayList<>(); private List> closeCallbackList = new ArrayList<>(); - private Message parentMessage; public Comm(String commId, String targetName) { super(); @@ -134,13 +128,12 @@ public void clearCloseCallbackList() { } public void open() { - this.parentMessage = InternalVariable.getParentHeader(); - doOpen(parentMessage); + doOpen(getParentMessage()); } public void open(Message parentMessage) { - this.parentMessage = parentMessage; - doOpen(parentMessage); + getParentMessageStrategy = () -> parentMessage; + open(); } private void doOpen(Message parentMessage) { @@ -167,7 +160,7 @@ private void doOpen(Message parentMessage) { } public void close() { - Message parentMessage = getParentMessage();// can be null + Message parentMessage = getParentMessage(); if (this.getCloseCallbackList() != null && !this.getCloseCallbackList().isEmpty()) { for (Handler handler : getCloseCallbackList()) { @@ -225,9 +218,6 @@ public void sendUpdate(final String propertyName, final Object value) { this.send(); } - private Message getParentMessage() { - return this.parentMessage; - } public void handleMsg(Message parentMessage) { for (Handler handler : this.msgCallbackList) { @@ -247,4 +237,13 @@ public String toString() { return commId + "/" + targetName + "/" + (targetModule != null && !targetModule.isEmpty() ? targetModule : ""); } + public Message getParentMessage() { + return getParentMessageStrategy.getParentMessage(); + } + + private GetParentMessageStrategy getParentMessageStrategy = InternalVariable::getParentHeader; + + interface GetParentMessageStrategy { + Message getParentMessage(); + } } \ No newline at end of file diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/widgets/Widget.java b/kernel/base/src/main/java/com/twosigma/beakerx/widgets/Widget.java index 1d5a0e08da..70de97eaac 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/widgets/Widget.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/widgets/Widget.java @@ -21,7 +21,6 @@ import static com.twosigma.beakerx.kernel.msg.JupyterMessages.DISPLAY_DATA; import static com.twosigma.beakerx.widgets.CompiledCodeRunner.runCommEvent; -import com.twosigma.beakerx.evaluator.InternalVariable; import com.twosigma.beakerx.kernel.KernelManager; import com.twosigma.beakerx.kernel.comm.Comm; import com.twosigma.beakerx.kernel.comm.TargetNamesEnum; @@ -62,7 +61,9 @@ public Widget() { } protected void openComm() { - openComm(InternalVariable.getParentHeader()); + comm.setData(createContent()); + addValueChangeMsgCallback(); + comm.open(); } protected void openComm(Message parentMessage) { diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/jupyter/comm/CommTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/jupyter/comm/CommTest.java index 509e0e0a5b..cd5c89fdb3 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/jupyter/comm/CommTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/jupyter/comm/CommTest.java @@ -17,10 +17,11 @@ package com.twosigma.beakerx.jupyter.comm; import com.twosigma.beakerx.KernelTest; +import com.twosigma.beakerx.evaluator.InternalVariable; +import com.twosigma.beakerx.jvm.object.SimpleEvaluationObject; import com.twosigma.beakerx.kernel.KernelManager; import com.twosigma.beakerx.kernel.msg.JupyterMessages; import com.twosigma.beakerx.kernel.comm.Comm; -import org.assertj.core.api.Assertions; import org.junit.After; import org.junit.Before; import com.twosigma.beakerx.message.Message; @@ -31,6 +32,8 @@ import java.util.HashMap; import java.util.Map; +import static org.assertj.core.api.Assertions.assertThat; + public class CommTest { private KernelTest kernel; @@ -48,13 +51,48 @@ public void tearDown() throws Exception { KernelManager.register(null); } + @Test + public void commCreatedWithParentMessageShouldAlwaysSendHeaderFromThisParentMessage() throws NoSuchAlgorithmException { + //given + submitCodeToExecution(); + //when + Message parentMessage = new Message(); + comm.open(parentMessage); + assertThat(kernel.getPublishedMessages().get(0).getParentHeader()).isEqualTo(parentMessage.getHeader()); + kernel.clearPublishedMessages(); + //then + comm.send(); + assertThat(kernel.getPublishedMessages().get(0).getParentHeader()).isEqualTo(parentMessage.getHeader()); + } + + @Test + public void commCreatedWithoutParentMessageShouldAlwaysSendHeaderFromMessageGivenFromInternalVariable() throws NoSuchAlgorithmException { + // code from first execution + Message message1 = submitCodeToExecution(); + comm.open(); + assertThat(kernel.getPublishedMessages().get(0).getParentHeader()).isEqualTo(message1.getHeader()); + kernel.clearPublishedMessages(); + // code from second execution + Message message2 = submitCodeToExecution(); + comm.send(); + assertThat(kernel.getPublishedMessages().get(0).getParentHeader()).isEqualTo(message2.getHeader()); + } + + private Message submitCodeToExecution() { + SimpleEvaluationObject value = new SimpleEvaluationObject("ok"); + Message jupyterMessage = new Message(); + value.setJupyterMessage(jupyterMessage); + InternalVariable.setValue(value); + return jupyterMessage; + } + @Test public void commOpen_shouldSendIOPubSocketMessage() throws NoSuchAlgorithmException { //when comm.open(); //then - Assertions.assertThat(kernel.getPublishedMessages()).isNotEmpty(); - Assertions.assertThat(kernel.getPublishedMessages().get(0)).isNotNull(); + assertThat(kernel.getPublishedMessages()).isNotEmpty(); + assertThat(kernel.getPublishedMessages().get(0)).isNotNull(); } @Test @@ -62,7 +100,7 @@ public void commOpen_shouldAddCommToStorageMap() throws NoSuchAlgorithmException //when comm.open(); //then - Assertions.assertThat(kernel.isCommPresent(comm.getCommId())).isTrue(); + assertThat(kernel.isCommPresent(comm.getCommId())).isTrue(); } @Test @@ -70,10 +108,10 @@ public void commOpen_sentMessageHasTypeIsCommOpen() throws NoSuchAlgorithmExcept //when comm.open(); //then - Assertions.assertThat(kernel.getPublishedMessages()).isNotEmpty(); + assertThat(kernel.getPublishedMessages()).isNotEmpty(); Message sendMessage = kernel.getPublishedMessages().get(0); - Assertions.assertThat(sendMessage.getHeader().getType()) - .isEqualTo(JupyterMessages.COMM_OPEN.getName()); + assertThat(sendMessage.getHeader().getType()) + .isEqualTo(JupyterMessages.COMM_OPEN.getName()); } @Test @@ -81,9 +119,9 @@ public void commOpen_sentMessageHasCommId() throws NoSuchAlgorithmException { //when comm.open(); //then - Assertions.assertThat(kernel.getPublishedMessages()).isNotEmpty(); + assertThat(kernel.getPublishedMessages()).isNotEmpty(); Message sendMessage = kernel.getPublishedMessages().get(0); - Assertions.assertThat((String) sendMessage.getContent().get(Comm.COMM_ID)).isNotEmpty(); + assertThat((String) sendMessage.getContent().get(Comm.COMM_ID)).isNotEmpty(); } @Test @@ -91,9 +129,9 @@ public void commOpen_sentMessageHasTargetName() throws NoSuchAlgorithmException //when comm.open(); //then - Assertions.assertThat(kernel.getPublishedMessages()).isNotEmpty(); + assertThat(kernel.getPublishedMessages()).isNotEmpty(); Message sendMessage = kernel.getPublishedMessages().get(0); - Assertions.assertThat((String) sendMessage.getContent().get(Comm.TARGET_NAME)).isNotEmpty(); + assertThat((String) sendMessage.getContent().get(Comm.TARGET_NAME)).isNotEmpty(); } @Test @@ -102,9 +140,9 @@ public void commOpen_sentMessageHasData() throws NoSuchAlgorithmException { //when comm.open(); //then - Assertions.assertThat(kernel.getPublishedMessages()).isNotEmpty(); + assertThat(kernel.getPublishedMessages()).isNotEmpty(); Message sendMessage = kernel.getPublishedMessages().get(0); - Assertions.assertThat((Map) sendMessage.getContent().get(Comm.DATA)).isNotEmpty(); + assertThat((Map) sendMessage.getContent().get(Comm.DATA)).isNotEmpty(); } @Test @@ -114,9 +152,9 @@ public void commOpen_sentMessageHasTargetModule() throws NoSuchAlgorithmExceptio //when comm.open(); //then - Assertions.assertThat(kernel.getPublishedMessages()).isNotEmpty(); + assertThat(kernel.getPublishedMessages()).isNotEmpty(); Message sendMessage = kernel.getPublishedMessages().get(0); - Assertions.assertThat((String) sendMessage.getContent().get(Comm.TARGET_MODULE)).isNotEmpty(); + assertThat((String) sendMessage.getContent().get(Comm.TARGET_MODULE)).isNotEmpty(); } @Test @@ -124,8 +162,8 @@ public void commClose_shouldSendIOPubSocketMessage() throws NoSuchAlgorithmExcep //when comm.close(); //then - Assertions.assertThat(kernel.getPublishedMessages()).isNotEmpty(); - Assertions.assertThat(kernel.getPublishedMessages().get(0)).isNotNull(); + assertThat(kernel.getPublishedMessages()).isNotEmpty(); + assertThat(kernel.getPublishedMessages().get(0)).isNotNull(); } @Test @@ -133,7 +171,7 @@ public void commClose_shouldRemoveCommFromStorageMap() throws NoSuchAlgorithmExc //when comm.close(); //then - Assertions.assertThat(kernel.isCommPresent(comm.getCommId())).isFalse(); + assertThat(kernel.isCommPresent(comm.getCommId())).isFalse(); } @Test @@ -141,10 +179,10 @@ public void commClose_sentMessageHasTypeIsCommClose() throws NoSuchAlgorithmExce //when comm.close(); //then - Assertions.assertThat(kernel.getPublishedMessages()).isNotEmpty(); + assertThat(kernel.getPublishedMessages()).isNotEmpty(); Message sendMessage = kernel.getPublishedMessages().get(0); - Assertions.assertThat(sendMessage.getHeader().getType()) - .isEqualTo(JupyterMessages.COMM_CLOSE.getName()); + assertThat(sendMessage.getHeader().getType()) + .isEqualTo(JupyterMessages.COMM_CLOSE.getName()); } @Test @@ -153,9 +191,9 @@ public void commClose_sentMessageHasEmptyData() throws NoSuchAlgorithmException //when comm.close(); //then - Assertions.assertThat(kernel.getPublishedMessages()).isNotEmpty(); + assertThat(kernel.getPublishedMessages()).isNotEmpty(); Message sendMessage = kernel.getPublishedMessages().get(0); - Assertions.assertThat((Map) sendMessage.getContent().get(Comm.DATA)).isEmpty(); + assertThat((Map) sendMessage.getContent().get(Comm.DATA)).isEmpty(); } @Test @@ -163,8 +201,8 @@ public void commSend_shouldSendIOPubSocketMessage() throws NoSuchAlgorithmExcept //when comm.send(); //then - Assertions.assertThat(kernel.getPublishedMessages()).isNotEmpty(); - Assertions.assertThat(kernel.getPublishedMessages().get(0)).isNotNull(); + assertThat(kernel.getPublishedMessages()).isNotEmpty(); + assertThat(kernel.getPublishedMessages().get(0)).isNotNull(); } @Test @@ -172,10 +210,10 @@ public void commSend_sentMessageHasTypeIsCommClose() throws NoSuchAlgorithmExcep //when comm.send(); //then - Assertions.assertThat(kernel.getPublishedMessages()).isNotEmpty(); + assertThat(kernel.getPublishedMessages()).isNotEmpty(); Message sendMessage = kernel.getPublishedMessages().get(0); - Assertions.assertThat(sendMessage.getHeader().getType()) - .isEqualTo(JupyterMessages.COMM_MSG.getName()); + assertThat(sendMessage.getHeader().getType()) + .isEqualTo(JupyterMessages.COMM_MSG.getName()); } @Test @@ -183,9 +221,9 @@ public void commSend_sentMessageHasCommId() throws NoSuchAlgorithmException { //when comm.send(); //then - Assertions.assertThat(kernel.getPublishedMessages()).isNotEmpty(); + assertThat(kernel.getPublishedMessages()).isNotEmpty(); Message sendMessage = kernel.getPublishedMessages().get(0); - Assertions.assertThat((String) sendMessage.getContent().get(Comm.COMM_ID)).isNotEmpty(); + assertThat((String) sendMessage.getContent().get(Comm.COMM_ID)).isNotEmpty(); } @Test @@ -194,9 +232,9 @@ public void commClose_sentMessageHasData() throws NoSuchAlgorithmException { //when comm.send(); //then - Assertions.assertThat(kernel.getPublishedMessages()).isNotEmpty(); + assertThat(kernel.getPublishedMessages()).isNotEmpty(); Message sendMessage = kernel.getPublishedMessages().get(0); - Assertions.assertThat((Map) sendMessage.getContent().get(Comm.DATA)).isNotEmpty(); + assertThat((Map) sendMessage.getContent().get(Comm.DATA)).isNotEmpty(); } private void initCommData(Comm comm) { From ce1f70094c88977a7140d82b200f856b939fefe7 Mon Sep 17 00:00:00 2001 From: jaroslawmalekcodete Date: Wed, 6 Dec 2017 16:29:46 +0100 Subject: [PATCH 18/29] fix KernelExecutionTest (#6469) * fix KernelExecutionTest * fix KernelExecutionTest change protected to private --- .../twosigma/beakerx/KernelExecutionTest.java | 4 ++- .../beakerx/KernelSetUpFixtureTest.java | 35 +++++++++++++++--- .../clojure/kernel/ClojureKernelTest.java | 35 ++---------------- .../groovy/kernel/GroovyKernelTest.java | 36 ++----------------- .../beakerx/javash/kernel/JavaKernelTest.java | 36 ++----------------- .../kotlin/kernel/KotlinKernelTest.java | 36 ++----------------- .../beakerx/scala/kernel/ScalaKernelTest.java | 36 ++----------------- .../twosigma/beakerx/sql/SQLKernelTest.java | 35 ++---------------- 8 files changed, 45 insertions(+), 208 deletions(-) diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java index 3f7c5e5981..2e6e5d4411 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java @@ -180,7 +180,7 @@ private MagicCommandOutcomeItem runMagicCommand(String allCode) { return result.getItems().get(0); } - protected void verifyImportedDemoClassByMagicCommand() throws InterruptedException { + private void verifyImportedDemoClassByMagicCommand() throws InterruptedException { String allCode = getObjectTestMethodFromAddedDemoJar(); Message message = getExecuteRequestMessage(allCode); getKernelSocketsService().handleMsg(message); @@ -200,6 +200,7 @@ protected String getObjectTestMethodFromAddedDemoJar() { return "new Demo().getObjectTest()"; } + @Test public void shouldImportDemoClassWithWildcardByMagicCommand() throws Exception { //given addDemoJar(); @@ -235,6 +236,7 @@ public void shouldNotImportUnknownClassByMagicCommand() throws Exception { assertThat(status).isEqualTo(MagicCommandOutcomeItem.Status.ERROR); } + @Test public void shouldUnimportDemoClassByMagicCommand() throws Exception { //given addDemoJar(); diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/KernelSetUpFixtureTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/KernelSetUpFixtureTest.java index bf6907c39e..64b1b7a1ab 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/KernelSetUpFixtureTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/KernelSetUpFixtureTest.java @@ -15,17 +15,42 @@ */ package com.twosigma.beakerx; +import com.twosigma.beakerx.kernel.CloseKernelAction; import com.twosigma.beakerx.kernel.Kernel; +import com.twosigma.beakerx.kernel.KernelRunner; +import com.twosigma.beakerx.kernel.KernelSocketsFactory; +import org.junit.After; import org.junit.Before; public abstract class KernelSetUpFixtureTest { - public abstract KernelSocketsServiceTest getKernelSocketsService(); - - public abstract Kernel getKernel(); + protected KernelSocketsServiceTest kernelSocketsService; + protected Kernel kernel; + private Thread kernelThread; @Before - public void setUpBeforeTest() throws Exception { - getKernelSocketsService().clear(); + public void setUp() throws Exception { + String sessionId = "sessionId2"; + kernelSocketsService = new KernelSocketsServiceTest(); + kernel = createKernel(sessionId, kernelSocketsService, KernelCloseKernelAction.NO_ACTION); + kernelThread = new Thread(() -> KernelRunner.run(() -> kernel)); + kernelThread.start(); + kernelSocketsService.waitForSockets(); + } + + @After + public void tearDown() throws Exception { + kernelSocketsService.shutdown(); + kernelThread.join(); + } + + public KernelSocketsServiceTest getKernelSocketsService() { + return kernelSocketsService; + } + + public Kernel getKernel() { + return kernel; } + + protected abstract Kernel createKernel(String sessionId, KernelSocketsFactory kernelSocketsFactory, CloseKernelAction closeKernelAction); } diff --git a/kernel/clojure/src/test/java/com/twosigma/beakerx/clojure/kernel/ClojureKernelTest.java b/kernel/clojure/src/test/java/com/twosigma/beakerx/clojure/kernel/ClojureKernelTest.java index 70d729a646..5b245ec3bd 100644 --- a/kernel/clojure/src/test/java/com/twosigma/beakerx/clojure/kernel/ClojureKernelTest.java +++ b/kernel/clojure/src/test/java/com/twosigma/beakerx/clojure/kernel/ClojureKernelTest.java @@ -15,21 +15,17 @@ */ package com.twosigma.beakerx.clojure.kernel; -import com.twosigma.beakerx.KernelCloseKernelAction; import com.twosigma.beakerx.KernelExecutionTest; import com.twosigma.beakerx.KernelSocketsServiceTest; import com.twosigma.beakerx.clojure.evaluator.ClojureEvaluator; import com.twosigma.beakerx.kernel.CloseKernelAction; import com.twosigma.beakerx.kernel.Kernel; -import com.twosigma.beakerx.kernel.KernelRunner; import com.twosigma.beakerx.kernel.KernelSocketsFactory; import com.twosigma.beakerx.kernel.comm.Comm; import com.twosigma.beakerx.message.Message; import com.twosigma.beakerx.widgets.TestWidgetUtils; import com.twosigma.beakerx.widgets.chart.BeakerxPlot; import org.assertj.core.api.Assertions; -import org.junit.AfterClass; -import org.junit.BeforeClass; import org.junit.Test; import java.util.List; @@ -49,35 +45,8 @@ public class ClojureKernelTest extends KernelExecutionTest { - protected static KernelSocketsServiceTest kernelSocketsService; - protected static Kernel kernel; - private static Thread kernelThread; - - @BeforeClass - public static void setUp() throws Exception { - String sessionId = "sessionId2"; - kernelSocketsService = new KernelSocketsServiceTest(); - kernel = createKernel(sessionId, kernelSocketsService, KernelCloseKernelAction.NO_ACTION); - kernelThread = new Thread(() -> KernelRunner.run(() -> kernel)); - kernelThread.start(); - kernelSocketsService.waitForSockets(); - } - - @AfterClass - public static void tearDown() throws Exception { - kernelSocketsService.shutdown(); - kernelThread.join(); - } - - public KernelSocketsServiceTest getKernelSocketsService() { - return kernelSocketsService; - } - - public Kernel getKernel() { - return kernel; - } - - static Kernel createKernel(String sessionId, KernelSocketsFactory kernelSocketsFactory, CloseKernelAction closeKernelAction) { + @Override + protected Kernel createKernel(String sessionId, KernelSocketsFactory kernelSocketsFactory, CloseKernelAction closeKernelAction) { ClojureEvaluator evaluator = new ClojureEvaluator(sessionId, sessionId, cellExecutor(), getTestTempFolderFactory(), KERNEL_PARAMETERS); return new Clojure(sessionId, evaluator, kernelSocketsFactory, closeKernelAction); } diff --git a/kernel/groovy/src/test/java/com/twosigma/beakerx/groovy/kernel/GroovyKernelTest.java b/kernel/groovy/src/test/java/com/twosigma/beakerx/groovy/kernel/GroovyKernelTest.java index b3604247d9..a7dfc8cfae 100644 --- a/kernel/groovy/src/test/java/com/twosigma/beakerx/groovy/kernel/GroovyKernelTest.java +++ b/kernel/groovy/src/test/java/com/twosigma/beakerx/groovy/kernel/GroovyKernelTest.java @@ -15,17 +15,12 @@ */ package com.twosigma.beakerx.groovy.kernel; -import com.twosigma.beakerx.KernelCloseKernelAction; import com.twosigma.beakerx.KernelExecutionTest; -import com.twosigma.beakerx.KernelSocketsServiceTest; import com.twosigma.beakerx.kernel.CloseKernelAction; import com.twosigma.beakerx.kernel.Kernel; -import com.twosigma.beakerx.kernel.KernelRunner; import com.twosigma.beakerx.kernel.KernelSocketsFactory; import com.twosigma.beakerx.kernel.comm.Comm; import com.twosigma.beakerx.message.Message; -import org.junit.AfterClass; -import org.junit.BeforeClass; import org.junit.Test; import java.util.Map; @@ -39,35 +34,8 @@ public class GroovyKernelTest extends KernelExecutionTest { - protected static KernelSocketsServiceTest kernelSocketsService; - protected static Kernel kernel; - private static Thread kernelThread; - - @BeforeClass - public static void setUp() throws Exception { - String sessionId = "sessionId2"; - kernelSocketsService = new KernelSocketsServiceTest(); - kernel = createKernel(sessionId, kernelSocketsService, KernelCloseKernelAction.NO_ACTION); - kernelThread = new Thread(() -> KernelRunner.run(() -> kernel)); - kernelThread.start(); - kernelSocketsService.waitForSockets(); - } - - @AfterClass - public static void tearDown() throws Exception { - kernelSocketsService.shutdown(); - kernelThread.join(); - } - - public KernelSocketsServiceTest getKernelSocketsService() { - return kernelSocketsService; - } - - public Kernel getKernel() { - return kernel; - } - - static protected Kernel createKernel(String sessionId, KernelSocketsFactory kernelSocketsFactory, CloseKernelAction closeKernelAction) { + @Override + protected Kernel createKernel(String sessionId, KernelSocketsFactory kernelSocketsFactory, CloseKernelAction closeKernelAction) { return new Groovy(sessionId, groovyEvaluator(), kernelSocketsFactory, closeKernelAction); } diff --git a/kernel/java/src/test/java/com/twosigma/beakerx/javash/kernel/JavaKernelTest.java b/kernel/java/src/test/java/com/twosigma/beakerx/javash/kernel/JavaKernelTest.java index 43ce08e11a..c7b80b1e4a 100644 --- a/kernel/java/src/test/java/com/twosigma/beakerx/javash/kernel/JavaKernelTest.java +++ b/kernel/java/src/test/java/com/twosigma/beakerx/javash/kernel/JavaKernelTest.java @@ -15,16 +15,11 @@ */ package com.twosigma.beakerx.javash.kernel; -import com.twosigma.beakerx.KernelCloseKernelAction; import com.twosigma.beakerx.KernelExecutionTest; -import com.twosigma.beakerx.KernelSocketsServiceTest; import com.twosigma.beakerx.javash.evaluator.JavaEvaluator; import com.twosigma.beakerx.kernel.CloseKernelAction; import com.twosigma.beakerx.kernel.Kernel; -import com.twosigma.beakerx.kernel.KernelRunner; import com.twosigma.beakerx.kernel.KernelSocketsFactory; -import org.junit.AfterClass; -import org.junit.BeforeClass; import static com.twosigma.beakerx.evaluator.EvaluatorTest.KERNEL_PARAMETERS; import static com.twosigma.beakerx.evaluator.EvaluatorTest.getTestTempFolderFactory; @@ -32,35 +27,8 @@ public class JavaKernelTest extends KernelExecutionTest { - protected static KernelSocketsServiceTest kernelSocketsService; - protected static Kernel kernel; - private static Thread kernelThread; - - @BeforeClass - public static void setUp() throws Exception { - String sessionId = "sessionId2"; - kernelSocketsService = new KernelSocketsServiceTest(); - kernel = createKernel(sessionId, kernelSocketsService, KernelCloseKernelAction.NO_ACTION); - kernelThread = new Thread(() -> KernelRunner.run(() -> kernel)); - kernelThread.start(); - kernelSocketsService.waitForSockets(); - } - - @AfterClass - public static void tearDown() throws Exception { - kernelSocketsService.shutdown(); - kernelThread.join(); - } - - public KernelSocketsServiceTest getKernelSocketsService() { - return kernelSocketsService; - } - - public Kernel getKernel() { - return kernel; - } - - static Kernel createKernel(String sessionId, KernelSocketsFactory kernelSocketsFactory, CloseKernelAction closeKernelAction) { + @Override + protected Kernel createKernel(String sessionId, KernelSocketsFactory kernelSocketsFactory, CloseKernelAction closeKernelAction) { JavaEvaluator evaluator = new JavaEvaluator(sessionId, sessionId, cellExecutor(), getTestTempFolderFactory(), KERNEL_PARAMETERS); return new Java(sessionId, evaluator, kernelSocketsFactory, closeKernelAction); } diff --git a/kernel/kotlin/src/test/java/com/twosigma/beakerx/kotlin/kernel/KotlinKernelTest.java b/kernel/kotlin/src/test/java/com/twosigma/beakerx/kotlin/kernel/KotlinKernelTest.java index e7afdec5c7..57e9f4f7c1 100644 --- a/kernel/kotlin/src/test/java/com/twosigma/beakerx/kotlin/kernel/KotlinKernelTest.java +++ b/kernel/kotlin/src/test/java/com/twosigma/beakerx/kotlin/kernel/KotlinKernelTest.java @@ -15,16 +15,11 @@ */ package com.twosigma.beakerx.kotlin.kernel; -import com.twosigma.beakerx.KernelCloseKernelAction; import com.twosigma.beakerx.KernelExecutionTest; -import com.twosigma.beakerx.KernelSocketsServiceTest; import com.twosigma.beakerx.kernel.CloseKernelAction; import com.twosigma.beakerx.kernel.Kernel; -import com.twosigma.beakerx.kernel.KernelRunner; import com.twosigma.beakerx.kernel.KernelSocketsFactory; import com.twosigma.beakerx.kotlin.evaluator.KotlinEvaluator; -import org.junit.AfterClass; -import org.junit.BeforeClass; import static com.twosigma.beakerx.evaluator.EvaluatorTest.KERNEL_PARAMETERS; import static com.twosigma.beakerx.evaluator.EvaluatorTest.getTestTempFolderFactory; @@ -32,35 +27,8 @@ public class KotlinKernelTest extends KernelExecutionTest { - protected static KernelSocketsServiceTest kernelSocketsService; - protected static Kernel kernel; - private static Thread kernelThread; - - @BeforeClass - public static void setUp() throws Exception { - String sessionId = "sessionId2"; - kernelSocketsService = new KernelSocketsServiceTest(); - kernel = createKernel(sessionId, kernelSocketsService, KernelCloseKernelAction.NO_ACTION); - kernelThread = new Thread(() -> KernelRunner.run(() -> kernel)); - kernelThread.start(); - kernelSocketsService.waitForSockets(); - } - - @AfterClass - public static void tearDown() throws Exception { - kernelSocketsService.shutdown(); - kernelThread.join(); - } - - public KernelSocketsServiceTest getKernelSocketsService() { - return kernelSocketsService; - } - - public Kernel getKernel() { - return kernel; - } - - static Kernel createKernel(String sessionId, KernelSocketsFactory kernelSocketsFactory, CloseKernelAction closeKernelAction) { + @Override + protected Kernel createKernel(String sessionId, KernelSocketsFactory kernelSocketsFactory, CloseKernelAction closeKernelAction) { KotlinEvaluator evaluator = new KotlinEvaluator(sessionId, sessionId, cellExecutor(), getTestTempFolderFactory(), KERNEL_PARAMETERS); return new Kotlin(sessionId, evaluator, kernelSocketsFactory, closeKernelAction); } diff --git a/kernel/scala/src/test/java/com/twosigma/beakerx/scala/kernel/ScalaKernelTest.java b/kernel/scala/src/test/java/com/twosigma/beakerx/scala/kernel/ScalaKernelTest.java index 6747fa1e78..6827335b73 100644 --- a/kernel/scala/src/test/java/com/twosigma/beakerx/scala/kernel/ScalaKernelTest.java +++ b/kernel/scala/src/test/java/com/twosigma/beakerx/scala/kernel/ScalaKernelTest.java @@ -15,53 +15,21 @@ */ package com.twosigma.beakerx.scala.kernel; -import com.twosigma.beakerx.KernelCloseKernelAction; import com.twosigma.beakerx.KernelExecutionTest; -import com.twosigma.beakerx.KernelSocketsServiceTest; import com.twosigma.beakerx.evaluator.EvaluatorTest; import com.twosigma.beakerx.kernel.CloseKernelAction; import com.twosigma.beakerx.kernel.Kernel; -import com.twosigma.beakerx.kernel.KernelRunner; import com.twosigma.beakerx.kernel.KernelSocketsFactory; import com.twosigma.beakerx.scala.evaluator.NoBeakerxObjectTestFactory; import com.twosigma.beakerx.scala.evaluator.ScalaEvaluator; -import org.junit.AfterClass; -import org.junit.BeforeClass; import static com.twosigma.beakerx.evaluator.EvaluatorTest.getTestTempFolderFactory; import static com.twosigma.beakerx.evaluator.TestBeakerCellExecutor.cellExecutor; public class ScalaKernelTest extends KernelExecutionTest { - protected static KernelSocketsServiceTest kernelSocketsService; - protected static Kernel kernel; - private static Thread kernelThread; - - @BeforeClass - public static void setUp() throws Exception { - String sessionId = "sessionId2"; - kernelSocketsService = new KernelSocketsServiceTest(); - kernel = createKernel(sessionId, kernelSocketsService, KernelCloseKernelAction.NO_ACTION); - kernelThread = new Thread(() -> KernelRunner.run(() -> kernel)); - kernelThread.start(); - kernelSocketsService.waitForSockets(); - } - - @AfterClass - public static void tearDown() throws Exception { - kernelSocketsService.shutdown(); - kernelThread.join(); - } - - public KernelSocketsServiceTest getKernelSocketsService() { - return kernelSocketsService; - } - - public Kernel getKernel() { - return kernel; - } - - static Kernel createKernel(String sessionId, KernelSocketsFactory kernelSocketsFactory, CloseKernelAction closeKernelAction) { + @Override + protected Kernel createKernel(String sessionId, KernelSocketsFactory kernelSocketsFactory, CloseKernelAction closeKernelAction) { ScalaEvaluator evaluator = new ScalaEvaluator(sessionId, sessionId, null, cellExecutor(), new NoBeakerxObjectTestFactory(), getTestTempFolderFactory(), EvaluatorTest.KERNEL_PARAMETERS); return new Scala(sessionId, evaluator, kernelSocketsFactory, closeKernelAction); } diff --git a/kernel/sql/src/test/java/com/twosigma/beakerx/sql/SQLKernelTest.java b/kernel/sql/src/test/java/com/twosigma/beakerx/sql/SQLKernelTest.java index fbf919bace..1d5ac64a7a 100644 --- a/kernel/sql/src/test/java/com/twosigma/beakerx/sql/SQLKernelTest.java +++ b/kernel/sql/src/test/java/com/twosigma/beakerx/sql/SQLKernelTest.java @@ -15,21 +15,17 @@ */ package com.twosigma.beakerx.sql; -import com.twosigma.beakerx.KernelCloseKernelAction; import com.twosigma.beakerx.KernelSetUpFixtureTest; import com.twosigma.beakerx.KernelSocketsServiceTest; import com.twosigma.beakerx.KernelSocketsTest; import com.twosigma.beakerx.kernel.CloseKernelAction; import com.twosigma.beakerx.kernel.Kernel; import com.twosigma.beakerx.kernel.EvaluatorParameters; -import com.twosigma.beakerx.kernel.KernelRunner; import com.twosigma.beakerx.kernel.KernelSocketsFactory; import com.twosigma.beakerx.kernel.msg.JupyterMessages; import com.twosigma.beakerx.message.Message; import com.twosigma.beakerx.sql.evaluator.SQLEvaluator; import com.twosigma.beakerx.sql.kernel.SQL; -import org.junit.AfterClass; -import org.junit.BeforeClass; import org.junit.Test; import java.util.HashMap; @@ -49,35 +45,8 @@ public class SQLKernelTest extends KernelSetUpFixtureTest { - protected static KernelSocketsServiceTest kernelSocketsService; - protected static Kernel kernel; - private static Thread kernelThread; - - @BeforeClass - public static void setUp() throws Exception { - String sessionId = "sessionId2"; - kernelSocketsService = new KernelSocketsServiceTest(); - kernel = createKernel(sessionId, kernelSocketsService, KernelCloseKernelAction.NO_ACTION); - kernelThread = new Thread(() -> KernelRunner.run(() -> kernel)); - kernelThread.start(); - kernelSocketsService.waitForSockets(); - } - - @AfterClass - public static void tearDown() throws Exception { - kernelSocketsService.shutdown(); - kernelThread.join(); - } - - public KernelSocketsServiceTest getKernelSocketsService() { - return kernelSocketsService; - } - - public Kernel getKernel() { - return kernel; - } - - static Kernel createKernel(String sessionId, KernelSocketsFactory kernelSocketsFactory, CloseKernelAction closeKernelAction) { + @Override + protected Kernel createKernel(String sessionId, KernelSocketsFactory kernelSocketsFactory, CloseKernelAction closeKernelAction) { SQLEvaluator sqlEvaluator = new SQLEvaluator(sessionId, sessionId, cellExecutor(), getTestTempFolderFactory(), kernelParameters()); sqlEvaluator.setShellOptions(kernelParameters()); Kernel sqlKernel = new SQL(sessionId, sqlEvaluator, kernelSocketsFactory, closeKernelAction); From af8ab5d8fc4c91eb3d22ffb43b5403a9bb454069 Mon Sep 17 00:00:00 2001 From: Robert Bidas Date: Wed, 6 Dec 2017 16:47:59 +0100 Subject: [PATCH 19/29] #6157 version has 'tags/' (#6468) --- kernel/base/build.gradle | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/kernel/base/build.gradle b/kernel/base/build.gradle index b6487237d0..debdf734bc 100644 --- a/kernel/base/build.gradle +++ b/kernel/base/build.gradle @@ -63,14 +63,6 @@ publishing { } } -def gitDescribe() { - def name = "git describe --all".execute().text.trim() - if (name.startsWith('heads/')) { - name = name.substring(6) - } - return name -} - def gitGetHash() { def name = "git log --pretty=format:%h -n 1".execute().text.trim() return name @@ -91,7 +83,7 @@ def mainDir = file("../../") task prepareBuildVerion() { doLast { - new File(resourceDir, 'version').write(gitDescribe()) + new File(resourceDir, 'version').write(gitGetLatestTagVersion()) new File(resourceDir, 'hash').write(gitGetHash()) new File(resourceDir, 'build_time').write(new Date().format("yyyy-MM-dd HH:mm z")) new File(mainDir, 'VERSION').write(gitGetLatestTagVersion()) From ae41dd3c14fd8a0905368d9dfbac18e09cc99caf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Witkowski?= Date: Wed, 6 Dec 2017 17:08:15 +0100 Subject: [PATCH 20/29] #6439 Optimalisation of scala test execution. (#6454) * #6439 Optimalisation of scala test execution. * #6439 Bulk adding import in scala. --- .../scala/evaluator/ScalaEvaluator.java | 36 ++++++++++--------- .../scala/evaluator/ScalaEvaluatorGlue.scala | 4 +++ 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/kernel/scala/src/main/java/com/twosigma/beakerx/scala/evaluator/ScalaEvaluator.java b/kernel/scala/src/main/java/com/twosigma/beakerx/scala/evaluator/ScalaEvaluator.java index da7b481321..1c8faf39c9 100644 --- a/kernel/scala/src/main/java/com/twosigma/beakerx/scala/evaluator/ScalaEvaluator.java +++ b/kernel/scala/src/main/java/com/twosigma/beakerx/scala/evaluator/ScalaEvaluator.java @@ -17,9 +17,9 @@ package com.twosigma.beakerx.scala.evaluator; import com.google.inject.Provider; +import com.twosigma.beakerx.NamespaceClient; import com.twosigma.beakerx.autocomplete.AutocompleteResult; import com.twosigma.beakerx.evaluator.BaseEvaluator; -import com.twosigma.beakerx.NamespaceClient; import com.twosigma.beakerx.evaluator.JobDescriptor; import com.twosigma.beakerx.evaluator.TempFolderFactory; import com.twosigma.beakerx.evaluator.TempFolderFactoryImpl; @@ -40,12 +40,11 @@ import com.twosigma.beakerx.scala.serializers.ScalaPrimitiveTypeListOfListSerializer; import com.twosigma.beakerx.scala.serializers.ScalaPrimitiveTypeMapSerializer; import com.twosigma.beakerx.scala.serializers.ScalaTableDeSerializer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.io.File; import java.net.MalformedURLException; -import java.net.URL; +import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ScalaEvaluator extends BaseEvaluator { @@ -187,14 +186,11 @@ private void newAutoCompleteEvaluator() throws MalformedURLException { acloader_cp + File.pathSeparatorChar + System.getProperty("java.class.path"), outDir); if (!imports.isEmpty()) { - for (int i = 0; i < imports.getImportPaths().size(); i++) { - String imp = imports.getImportPaths().get(i).asString().trim(); - imp = adjustImport(imp); - if (!imp.isEmpty()) { - if (!acshell.addImport(imp)) - logger.warn("ERROR: cannot add import '{}'", imp); - } - } + String[] strings = imports.getImportPaths().stream().map(importPath -> { + String trim = importPath.asString().trim(); + return adjustImport(trim); + }).toArray(String[]::new); + acshell.addImports(strings); } // ensure object is created @@ -214,9 +210,7 @@ void newEvaluator() { loader_cp + File.pathSeparatorChar + System.getProperty("java.class.path"), getOutDir()); if (!getImports().isEmpty()) { - for (ImportPath importPath : getImports().getImportPaths()) { - addImportToShell(importPath); - } + addImportsToShell(getImports().getImportPaths()); } logger.debug("creating beaker object"); @@ -230,6 +224,16 @@ void newEvaluator() { } } + private void addImportsToShell(List importsPaths) { + if (!importsPaths.isEmpty()) { + String[] imp = importsPaths.stream().map(importPath -> adjustImport(importPath.asString())).toArray(String[]::new); + logger.debug("importing : {}", importsPaths); + if (!shell.addImports(imp)) { + logger.warn("ERROR: cannot add import '{}'", imp); + } + } + } + private void addImportToShell(ImportPath importPath) { String imp = importPath.asString().trim(); imp = adjustImport(imp); diff --git a/kernel/scala/src/main/scala/com/twosigma/beakerx/scala/evaluator/ScalaEvaluatorGlue.scala b/kernel/scala/src/main/scala/com/twosigma/beakerx/scala/evaluator/ScalaEvaluatorGlue.scala index 9c5f9af135..8408adc243 100644 --- a/kernel/scala/src/main/scala/com/twosigma/beakerx/scala/evaluator/ScalaEvaluatorGlue.scala +++ b/kernel/scala/src/main/scala/com/twosigma/beakerx/scala/evaluator/ScalaEvaluatorGlue.scala @@ -91,6 +91,10 @@ class ScalaEvaluatorGlue(val cl: ClassLoader, var cp: String, val replClassdir: } } + def addImports(names: Array[String]) : Boolean = { + addImport(names.mkString(", ")) + } + def evaluate2(code: String): String = { baos.reset() try { From ebbcf9ecd54d0f15364b7b28da3877630f9917db Mon Sep 17 00:00:00 2001 From: Scott Draves Date: Thu, 7 Dec 2017 09:17:31 -0500 Subject: [PATCH 21/29] remove version lock, jupyterlab-manager is fixed --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 086891495f..b8b4c38363 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ beakerx-install ``` conda create -y -n labx 'python>=3' nodejs pandas openjdk maven source activate labx -conda install -y -c conda-forge jupyterlab=0.29.2 +conda install -y -c conda-forge jupyterlab (cd beakerx; pip install -e . --verbose) beakerx-install jupyter labextension install @jupyter-widgets/jupyterlab-manager From e7a8fb97fb2f825d8d3ad10e26f5221aa0164412 Mon Sep 17 00:00:00 2001 From: jaroslawmalekcodete Date: Thu, 7 Dec 2017 15:51:47 +0100 Subject: [PATCH 22/29] #6431: fix for unexpected return value (#6473) --- .../beakerx/javash/evaluator/Codev.java | 104 +++++- .../javash/evaluator/JavaCodeRunner.java | 175 +++------ .../compiler/JavaSourceCompiler.java | 4 +- .../compiler/impl/JavaSourceCompilerImpl.java | 347 +++++++++--------- .../javash/evaluator/JavaEvaluatorTest.java | 59 +++ 5 files changed, 395 insertions(+), 294 deletions(-) diff --git a/kernel/java/src/main/java/com/twosigma/beakerx/javash/evaluator/Codev.java b/kernel/java/src/main/java/com/twosigma/beakerx/javash/evaluator/Codev.java index 6653973b9d..ff0b91c4ab 100644 --- a/kernel/java/src/main/java/com/twosigma/beakerx/javash/evaluator/Codev.java +++ b/kernel/java/src/main/java/com/twosigma/beakerx/javash/evaluator/Codev.java @@ -15,14 +15,31 @@ */ package com.twosigma.beakerx.javash.evaluator; +import com.twosigma.beakerx.kernel.ImportPath; import org.apache.commons.lang3.StringUtils; +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public class Codev { + + private final String pname; + Map lineNumbersMapping = new HashMap<>(); + LineBrakingStringBuilderWrapper javaSourceCode = new LineBrakingStringBuilderWrapper(); + private String[] lines; + private String code; + private JavaEvaluator javaEvaluator; private int index = 0; - public Codev(String code) { + public Codev(String code, JavaEvaluator javaEvaluator) { + this.code = code; this.lines = code.split("\n"); + this.javaEvaluator = javaEvaluator; + this.pname = configurePackage(); + configureImports(); } public CodeLine getNotBlankLine() { @@ -45,13 +62,21 @@ public String getLastLine() { } public void moveToNextLine() { - if ((index != -1) && index < (lines.length -1 )) { + if ((index != -1) && index < (lines.length - 1)) { index++; } else { index = -1; } } + public String getPname() { + return pname; + } + + public String getCode() { + return code; + } + public boolean hasLineToProcess() { return this.index != -1; } @@ -74,4 +99,79 @@ public String getLine() { } } + private void configureImports() { + if (hasLineToProcess()) { + Pattern p = Pattern.compile("\\s*import(\\s+static)?\\s+((?:[a-zA-Z]\\w*)(?:\\.[a-zA-Z]\\w*)*(?:\\.\\*)?);.*"); + Codev.CodeLine codeLine = getNotBlankLine(); + Matcher m = p.matcher(codeLine.getLine()); + while (m.matches()) { + String impstr = m.group(2); + String staticModifier = m.group(1); + javaSourceCode.append("import "); + if (staticModifier != null) { + javaSourceCode.append("static "); + } + javaSourceCode.append(impstr); + javaSourceCode.append(";\n"); + lineNumbersMapping.put(javaSourceCode.getLinesCount(), codeLine.getIndex()); + + moveToNextLine(); + if (!hasLineToProcess()) { + break; + } + codeLine = getNotBlankLine(); + m = p.matcher(codeLine.getLine()); + } + } + } + + private String configurePackage() { + String pname = javaEvaluator.getPackageId(); + Codev.CodeLine codeLine = getNotBlankLine(); + Pattern p = Pattern.compile("\\s*package\\s+((?:[a-zA-Z]\\w*)(?:\\.[a-zA-Z]\\w*)*);.*"); + Matcher m = p.matcher(codeLine.getLine()); + + if (m.matches()) { + pname = m.group(1); + lineNumbersMapping.put(1, codeLine.getIndex()); + moveToNextLine(); + } + javaSourceCode.append("package "); + javaSourceCode.append(pname); + javaSourceCode.append(";\n"); + + for (ImportPath i : javaEvaluator.getImports().getImportPaths()) { + javaSourceCode.append("import "); + javaSourceCode.append(i.asString()); + javaSourceCode.append(";\n"); + } + return pname; + } + + public static class LineBrakingStringBuilderWrapper { + private static final String LINE_BREAK = "\n"; + private StringBuilder delegate; + private int linesCount; + + public LineBrakingStringBuilderWrapper() { + this.delegate = new StringBuilder(); + this.linesCount = 0; + } + + public void append(String string) { + this.delegate.append(string); + this.linesCount += StringUtils.countMatches(string, LINE_BREAK); + } + + public int getLinesCount() { + return linesCount; + } + + @Override + public String toString() { + return delegate.toString(); + } + } + + } diff --git a/kernel/java/src/main/java/com/twosigma/beakerx/javash/evaluator/JavaCodeRunner.java b/kernel/java/src/main/java/com/twosigma/beakerx/javash/evaluator/JavaCodeRunner.java index eb593677ea..8e435f5049 100644 --- a/kernel/java/src/main/java/com/twosigma/beakerx/javash/evaluator/JavaCodeRunner.java +++ b/kernel/java/src/main/java/com/twosigma/beakerx/javash/evaluator/JavaCodeRunner.java @@ -58,8 +58,7 @@ public void run() { InternalVariable.setValue(theOutput); try { InternalVariable.setValue(theOutput); - org.abstractmeta.toolbox.compilation.compiler.JavaSourceCompiler javaSourceCompiler = new com.twosigma.beakerx.javash.evaluator.JavaSourceCompiler(); - runCode(j, javaSourceCompiler); + runCode(j); } catch (Throwable e) { if (e instanceof InvocationTargetException) e = ((InvocationTargetException) e).getTargetException(); @@ -80,116 +79,55 @@ public void run() { } - private void runCode(JobDescriptor j, org.abstractmeta.toolbox.compilation.compiler.JavaSourceCompiler javaSourceCompiler) { + private void runCode(JobDescriptor j) { j.outputObject.started(); - JavaSourceCompiler.CompilationUnit compilationUnit = javaSourceCompiler.createCompilationUnit(new File(javaEvaluator.getOutDir())); - buildClasspath(compilationUnit); - Map lineNumbersMapping = new HashMap<>(); - LineBrakingStringBuilderWrapper javaSourceCode = new LineBrakingStringBuilderWrapper(); + String code = ParserUtil.normalizeCode(j.codeToBeExecuted).replaceAll("\r\n", "\n"); - Codev codev = new Codev(code); - String pname = configurePackage(codev, lineNumbersMapping, javaSourceCode); - configureImports(codev, lineNumbersMapping, javaSourceCode); + Codev codev = new Codev(code, javaEvaluator); try { - compileCode(j, javaSourceCompiler, pname, compilationUnit, codev, lineNumbersMapping, javaSourceCode); + compileCode(j, codev); } catch (Exception e) { throw new RuntimeException(e); } } - private void compileCode(JobDescriptor j, org.abstractmeta.toolbox.compilation.compiler.JavaSourceCompiler javaSourceCompiler, String pname, JavaSourceCompiler.CompilationUnit compilationUnit, Codev codev, Map lineNumbersMapping, LineBrakingStringBuilderWrapper javaSourceCode) throws InvocationTargetException, IllegalAccessException { + private void compileCode(JobDescriptor j, Codev codev) throws InvocationTargetException, IllegalAccessException { if (codev.hasLineToProcess()) { Codev.CodeLine codeLine = codev.getNotBlankLine(); Pattern p = Pattern.compile("(?:^|.*\\s+)(?:(?:class)|(?:interface))\\s+([a-zA-Z]\\w*).*"); Matcher m = p.matcher(codeLine.getLine()); if (m.matches()) { - compileNewDefinitionClass(j, javaSourceCompiler, m, pname, compilationUnit, codev, lineNumbersMapping, javaSourceCode); + compileNewDefinitionClass(j, m, codev); } else { - compileAndRunCode(j, javaSourceCompiler, pname, compilationUnit, codev, lineNumbersMapping, javaSourceCode); - + compileAndRunCode(j, codev); } } else { - compileAndRunCode(j, javaSourceCompiler, pname, compilationUnit, codev, lineNumbersMapping, javaSourceCode); - } - } - - private void configureImports(Codev codev, Map lineNumbersMapping, LineBrakingStringBuilderWrapper javaSourceCode) { - if (codev.hasLineToProcess()) { - Pattern p = Pattern.compile("\\s*import(\\s+static)?\\s+((?:[a-zA-Z]\\w*)(?:\\.[a-zA-Z]\\w*)*(?:\\.\\*)?);.*"); - Codev.CodeLine codeLine = codev.getNotBlankLine(); - Matcher m = p.matcher(codeLine.getLine()); - while (m.matches()) { - String impstr = m.group(2); - String staticModifier = m.group(1); - javaSourceCode.append("import "); - if (staticModifier != null) { - javaSourceCode.append("static "); - } - javaSourceCode.append(impstr); - javaSourceCode.append(";\n"); - lineNumbersMapping.put(javaSourceCode.getLinesCount(), codeLine.getIndex()); - - codev.moveToNextLine(); - if (!codev.hasLineToProcess()) { - break; - } - codeLine = codev.getNotBlankLine(); - m = p.matcher(codeLine.getLine()); - } + compileAndRunCode(j, codev); } } - private String configurePackage(Codev codev, Map lineNumbersMapping, LineBrakingStringBuilderWrapper javaSourceCode) { - String pname = javaEvaluator.getPackageId(); - Codev.CodeLine codeLine = codev.getNotBlankLine(); - Pattern p = Pattern.compile("\\s*package\\s+((?:[a-zA-Z]\\w*)(?:\\.[a-zA-Z]\\w*)*);.*"); - Matcher m = p.matcher(codeLine.getLine()); - - if (m.matches()) { - pname = m.group(1); - lineNumbersMapping.put(1, codeLine.getIndex()); - codev.moveToNextLine(); - } - javaSourceCode.append("package "); - javaSourceCode.append(pname); - javaSourceCode.append(";\n"); - - for (ImportPath i : javaEvaluator.getImports().getImportPaths()) { - javaSourceCode.append("import "); - javaSourceCode.append(i.asString()); - javaSourceCode.append(";\n"); - } - return pname; - } - - private Method compileAndRunCode(JobDescriptor j, org.abstractmeta.toolbox.compilation.compiler.JavaSourceCompiler javaSourceCompiler, String pname, org.abstractmeta.toolbox.compilation.compiler.JavaSourceCompiler.CompilationUnit compilationUnit, Codev codev, Map lineNumbersMapping, LineBrakingStringBuilderWrapper javaSourceCode) { + private Method compileAndRunCode(JobDescriptor j, Codev codev) { String classId = generateClassId(); - String ret = "void"; - if (codev.getLastLine().matches("(^|.*\\s+)return\\s+.*")) - ret = "Object"; - // this is an expression evaluation - javaSourceCode.append("public class " + JavaEvaluator.WRAPPER_CLASS_NAME + classId + " {\n"); - javaSourceCode.append("public static "); - javaSourceCode.append(ret); - javaSourceCode.append(" beakerRun() throws Exception {\n"); - addTheRestOfCode(codev, javaSourceCode, lineNumbersMapping); - javaSourceCode.append("}\n"); - javaSourceCode.append("}\n"); - - compilationUnit.addJavaSource(pname + "." + JavaEvaluator.WRAPPER_CLASS_NAME + classId, javaSourceCode.toString()); + String returnType = "Object"; + Codev copyCodev = new Codev(codev.getCode(), javaEvaluator); + boolean compile = compile(codev, classId, returnType); + if (!compile) { + classId = generateClassId(); + returnType = "void"; + copyCodev = new Codev(codev.getCode(), javaEvaluator); + compile(copyCodev, classId, returnType); + } try { - javaSourceCompiler.compile(compilationUnit); - javaSourceCompiler.persistCompiledClasses(compilationUnit); - Class fooClass = javaEvaluator.getJavaClassLoader().loadClass(pname + "." + JavaEvaluator.WRAPPER_CLASS_NAME + classId); + Class fooClass = javaEvaluator.getJavaClassLoader().loadClass(copyCodev.getPname() + "." + JavaEvaluator.WRAPPER_CLASS_NAME + classId); Method mth = fooClass.getDeclaredMethod("beakerRun", (Class[]) null); Object o = mth.invoke(null, (Object[]) null); - if (ret.equals("Object")) { + if (returnType.equals("Object")) { theOutput.finished(o); } else { theOutput.finished(null); } } catch (CompilationException e) { - j.outputObject.error(buildErrorMessage(e, lineNumbersMapping)); + j.outputObject.error(buildErrorMessage(e, copyCodev.lineNumbersMapping)); } catch (Exception e) { j.outputObject.error("ERROR: " + e.getCause()); } finally { @@ -200,18 +138,43 @@ private Method compileAndRunCode(JobDescriptor j, org.abstractmeta.toolbox.compi return null; } - private void compileNewDefinitionClass(JobDescriptor j, org.abstractmeta.toolbox.compilation.compiler.JavaSourceCompiler javaSourceCompiler, Matcher m, String pname, org.abstractmeta.toolbox.compilation.compiler.JavaSourceCompiler.CompilationUnit compilationUnit, Codev codev, Map lineNumbersMapping, LineBrakingStringBuilderWrapper javaSourceCode) { + private boolean compile(Codev codev, String classId, String ret) { + org.abstractmeta.toolbox.compilation.compiler.JavaSourceCompiler javaSourceCompiler = new com.twosigma.beakerx.javash.evaluator.JavaSourceCompiler(); + JavaSourceCompiler.CompilationUnit compilationUnit = javaSourceCompiler.createCompilationUnit(new File(javaEvaluator.getOutDir())); + buildClasspath(compilationUnit); + + codev.javaSourceCode.append("public class " + JavaEvaluator.WRAPPER_CLASS_NAME + classId + " {\n"); + codev.javaSourceCode.append("public static "); + codev.javaSourceCode.append(ret); + codev.javaSourceCode.append(" beakerRun() throws Exception {\n"); + addTheRestOfCode(codev); + codev.javaSourceCode.append("}\n"); + codev.javaSourceCode.append("}\n"); + + compilationUnit.addJavaSource(codev.getPname() + "." + JavaEvaluator.WRAPPER_CLASS_NAME + classId, codev.javaSourceCode.toString()); + boolean compile = javaSourceCompiler.compile(compilationUnit); + if (compile) { + javaSourceCompiler.persistCompiledClasses(compilationUnit); + return true; + } + return false; + } + + private void compileNewDefinitionClass(JobDescriptor j, Matcher m, Codev codev) { String cname = m.group(1); - addTheRestOfCode(codev, javaSourceCode, lineNumbersMapping); + addTheRestOfCode(codev); + org.abstractmeta.toolbox.compilation.compiler.JavaSourceCompiler javaSourceCompiler = new com.twosigma.beakerx.javash.evaluator.JavaSourceCompiler(); + JavaSourceCompiler.CompilationUnit compilationUnit = javaSourceCompiler.createCompilationUnit(new File(javaEvaluator.getOutDir())); + buildClasspath(compilationUnit); - compilationUnit.addJavaSource(pname + "." + cname, javaSourceCode.toString()); + compilationUnit.addJavaSource(codev.getPname() + "." + cname, codev.javaSourceCode.toString()); try { javaSourceCompiler.compile(compilationUnit); javaSourceCompiler.persistCompiledClasses(compilationUnit); - j.outputObject.finished(pname + "." + cname); + j.outputObject.finished(codev.getPname() + "." + cname); } catch (CompilationException e) { - j.outputObject.error(buildErrorMessage(e, lineNumbersMapping)); + j.outputObject.error(buildErrorMessage(e, codev.lineNumbersMapping)); } catch (Exception e) { j.outputObject.error("ERROR: " + e.toString()); } finally { @@ -257,40 +220,14 @@ private Integer mapLineNumber(Map lineNumbersMapping, int ourN return usersNumber == null ? ourNumber : usersNumber + 1; } - private void addTheRestOfCode(Codev codev, LineBrakingStringBuilderWrapper javaSourceCode, Map lineNumbersMapping) { + private void addTheRestOfCode(Codev codev) { while (codev.hasLineToProcess()) { - javaSourceCode.append(codev.getNotBlankLine().getLine()); - javaSourceCode.append("\n"); - lineNumbersMapping.put(javaSourceCode.getLinesCount(), codev.getNotBlankLine().getIndex()); + codev.javaSourceCode.append(codev.getNotBlankLine().getLine()); + codev.javaSourceCode.append("\n"); + codev.lineNumbersMapping.put(codev.javaSourceCode.getLinesCount(), codev.getNotBlankLine().getIndex()); codev.moveToNextLine(); } } - private static class LineBrakingStringBuilderWrapper { - private static final String LINE_BREAK = "\n"; - private StringBuilder delegate; - private int linesCount; - - public LineBrakingStringBuilderWrapper() { - this.delegate = new StringBuilder(); - this.linesCount = 0; - } - - public void append(String string) { - this.delegate.append(string); - this.linesCount += StringUtils.countMatches(string, LINE_BREAK); - } - - public int getLinesCount() { - return linesCount; - } - - @Override - public String toString() { - return delegate.toString(); - } - } - - } diff --git a/kernel/java/src/main/java/org/abstractmeta/toolbox/compilation/compiler/JavaSourceCompiler.java b/kernel/java/src/main/java/org/abstractmeta/toolbox/compilation/compiler/JavaSourceCompiler.java index 10e0c2ffb4..2fc9ab3701 100644 --- a/kernel/java/src/main/java/org/abstractmeta/toolbox/compilation/compiler/JavaSourceCompiler.java +++ b/kernel/java/src/main/java/org/abstractmeta/toolbox/compilation/compiler/JavaSourceCompiler.java @@ -109,7 +109,7 @@ public interface JavaSourceCompiler { * @param compilerOptions compiler options * @return class loader for the compiled classes */ - ClassLoader compile(CompilationUnit compilationUnit, String... compilerOptions); + boolean compile(CompilationUnit compilationUnit, String... compilerOptions); /** * Compiles given compilation unit with the supplier compiler options and returns class loader for the compiled sources. @@ -118,7 +118,7 @@ public interface JavaSourceCompiler { * @param compilerOptions compiler options * @return class loader for the compiled classes */ - ClassLoader compile(ClassLoader parentClassLoader, CompilationUnit compilationUnit, String... compilerOptions); + boolean compile(ClassLoader parentClassLoader, CompilationUnit compilationUnit, String... compilerOptions); /** * By default source code and compiled classes are stored in memory, this however could be a limitation diff --git a/kernel/java/src/main/java/org/abstractmeta/toolbox/compilation/compiler/impl/JavaSourceCompilerImpl.java b/kernel/java/src/main/java/org/abstractmeta/toolbox/compilation/compiler/impl/JavaSourceCompilerImpl.java index fc989c669c..cc4b560d26 100644 --- a/kernel/java/src/main/java/org/abstractmeta/toolbox/compilation/compiler/impl/JavaSourceCompilerImpl.java +++ b/kernel/java/src/main/java/org/abstractmeta/toolbox/compilation/compiler/impl/JavaSourceCompilerImpl.java @@ -62,208 +62,213 @@ public class JavaSourceCompilerImpl implements JavaSourceCompiler { - private final Logger logger = LoggerFactory.getLogger(JavaSourceCompilerImpl.class.getName()); + private final Logger logger = LoggerFactory.getLogger(JavaSourceCompilerImpl.class.getName()); - private static final List CLASS_PATH_OPTIONS = new ArrayList(Arrays.asList("cp", "classpath")); - private static final String CLASS_PATH_DELIMITER = ClassPathUtil.getClassPathSeparator(); + private static final List CLASS_PATH_OPTIONS = new ArrayList(Arrays.asList("cp", "classpath")); + private static final String CLASS_PATH_DELIMITER = ClassPathUtil.getClassPathSeparator(); - @Override - public ClassLoader compile(CompilationUnit compilationUnit, String... options) { - return compile(this.getClass().getClassLoader(), compilationUnit, options); - } + @Override + public boolean compile(CompilationUnit compilationUnit, String... options) { + return compile(this.getClass().getClassLoader(), compilationUnit, options); + } - @Override - public ClassLoader compile(ClassLoader parentClassLoader, CompilationUnit compilationUnit, String... options) { - JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); - return compile(compiler, parentClassLoader, compilationUnit, options); - } + @Override + public boolean compile(ClassLoader parentClassLoader, CompilationUnit compilationUnit, String... options) { + JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); + return compile(compiler, parentClassLoader, compilationUnit, options); + } - protected ClassLoader compile(JavaCompiler compiler, ClassLoader parentClassLoader, CompilationUnit compilationUnit, String... options) { - if (compiler == null) { - throw new IllegalStateException("Failed to create the system Java compiler. Check that your class path includes tools.jar"); - } - JavaFileObjectRegistry registry = compilationUnit.getRegistry(); - SimpleClassLoader result = new SimpleClassLoader(parentClassLoader, registry, compilationUnit.getOutputClassDirectory()); - DiagnosticCollector diagnostics = new DiagnosticCollector(); - JavaFileManager standardFileManager = compiler.getStandardFileManager(diagnostics, null, null); - JavaFileManager javaFileManager = new SimpleJavaFileManager(standardFileManager, result, registry); - Iterable sources = registry.get(JavaFileObject.Kind.SOURCE); - Collection compilationOptions = buildOptions(compilationUnit, result, options); - JavaCompiler.CompilationTask task = compiler.getTask(null, javaFileManager, diagnostics, compilationOptions, null, sources); - task.call(); - if (getDiagnosticCountByType(diagnostics, Diagnostic.Kind.ERROR) > 0) { - throw createCompilationErrorException(registry, diagnostics); - } - if (getDiagnosticCountByType(diagnostics, Diagnostic.Kind.WARNING) > 0) { - logger.warn(getDiagnosticString(registry, diagnostics)); - } - result.addClassPathEntries(compilationUnit.getClassPathsEntries()); - return result; + protected boolean compile(JavaCompiler compiler, ClassLoader parentClassLoader, CompilationUnit compilationUnit, String... options) { + if (compiler == null) { + throw new IllegalStateException("Failed to create the system Java compiler. Check that your class path includes tools.jar"); } - - protected boolean buildDiagnosticMessage(Diagnostic diagnostic, StringBuilder diagnosticBuilder, JavaFileObjectRegistry registry) { - Object source = diagnostic.getSource(); - String sourceErrorDetails = ""; - if (source != null) { - JavaSourceFileObject sourceFile = JavaSourceFileObject.class.cast(source); - CharSequence sourceCode = sourceFile.getCharContent(true); - int startPosition = Math.max((int) diagnostic.getStartPosition() - 10, 0); - int endPosition = Math.min(sourceCode.length(), (int) diagnostic.getEndPosition() + 10); - sourceErrorDetails = sourceCode.subSequence(startPosition, endPosition) + ""; - } - diagnosticBuilder.append(diagnostic.getMessage(null)); - diagnosticBuilder.append("\n"); - diagnosticBuilder.append(sourceErrorDetails); - return diagnostic.getKind().equals(Diagnostic.Kind.ERROR); + JavaFileObjectRegistry registry = compilationUnit.getRegistry(); + SimpleClassLoader result = new SimpleClassLoader(parentClassLoader, registry, compilationUnit.getOutputClassDirectory()); + DiagnosticCollector diagnostics = new DiagnosticCollector(); + JavaFileManager standardFileManager = compiler.getStandardFileManager(diagnostics, null, null); + JavaFileManager javaFileManager = new SimpleJavaFileManager(standardFileManager, result, registry); + Iterable sources = registry.get(JavaFileObject.Kind.SOURCE); + Collection compilationOptions = buildOptions(compilationUnit, result, options); + JavaCompiler.CompilationTask task = compiler.getTask(null, javaFileManager, diagnostics, compilationOptions, null, sources); + task.call(); + if (getDiagnosticCountByType(diagnostics, Diagnostic.Kind.ERROR) > 0) { + String diagnosticString = getDiagnosticString(registry, diagnostics); + if (diagnosticString.contains("missing return statement")) { + return false; + } + throw new IllegalStateException(diagnosticString); } - - protected Collection buildOptions(CompilationUnit compilationUnit, SimpleClassLoader classLoader, String... options) { - List result = new ArrayList(); - Map optionsMap = new HashMap(); - for (int i = 0; i < options.length; i += 2) { - optionsMap.put(options[i], options[i + 1]); - } - for (String classPathKey : CLASS_PATH_OPTIONS) { - if (optionsMap.containsKey(classPathKey)) { - addClassPath(compilationUnit, optionsMap.get(classPathKey)); - } - } - for (String key : optionsMap.keySet()) { - if (CLASS_PATH_OPTIONS.contains(key)) { - continue; - } - result.addAll(Arrays.asList(key, optionsMap.get(key))); - } - addClassPath(result, compilationUnit); - - return result; + if (getDiagnosticCountByType(diagnostics, Diagnostic.Kind.WARNING) > 0) { + logger.warn(getDiagnosticString(registry, diagnostics)); } - - /** - * Adds given class path entries of compilation unit to the supplied option result list. - * This method simply add -cp 'cass_path_entry1:...:clas_path_entry_x' options - * - * @param result result list - * @param compilationUnit compilation unit - */ - private void addClassPath(List result, CompilationUnit compilationUnit) { - StringBuilder classPathBuilder = new StringBuilder(); - for (String entry : compilationUnit.getClassPathsEntries()) { - if (classPathBuilder.length() > 0) { - classPathBuilder.append(CLASS_PATH_DELIMITER); - } - classPathBuilder.append(entry); - } - if (classPathBuilder.length() > 0) { - result.addAll(Arrays.asList("-cp", classPathBuilder.toString())); - } + result.addClassPathEntries(compilationUnit.getClassPathsEntries()); + return true; + } + + protected boolean buildDiagnosticMessage(Diagnostic diagnostic, StringBuilder diagnosticBuilder, JavaFileObjectRegistry registry) { + Object source = diagnostic.getSource(); + String sourceErrorDetails = ""; + if (source != null) { + JavaSourceFileObject sourceFile = JavaSourceFileObject.class.cast(source); + CharSequence sourceCode = sourceFile.getCharContent(true); + int startPosition = Math.max((int) diagnostic.getStartPosition() - 10, 0); + int endPosition = Math.min(sourceCode.length(), (int) diagnostic.getEndPosition() + 10); + sourceErrorDetails = sourceCode.subSequence(startPosition, endPosition) + ""; + } + diagnosticBuilder.append(diagnostic.getMessage(null)); + diagnosticBuilder.append("\n"); + diagnosticBuilder.append(sourceErrorDetails); + return diagnostic.getKind().equals(Diagnostic.Kind.ERROR); + } + + protected Collection buildOptions(CompilationUnit compilationUnit, SimpleClassLoader classLoader, String... options) { + List result = new ArrayList(); + Map optionsMap = new HashMap(); + for (int i = 0; i < options.length; i += 2) { + optionsMap.put(options[i], options[i + 1]); + } + for (String classPathKey : CLASS_PATH_OPTIONS) { + if (optionsMap.containsKey(classPathKey)) { + addClassPath(compilationUnit, optionsMap.get(classPathKey)); + } + } + for (String key : optionsMap.keySet()) { + if (CLASS_PATH_OPTIONS.contains(key)) { + continue; + } + result.addAll(Arrays.asList(key, optionsMap.get(key))); } + addClassPath(result, compilationUnit); + + return result; + } + + /** + * Adds given class path entries of compilation unit to the supplied option result list. + * This method simply add -cp 'cass_path_entry1:...:clas_path_entry_x' options + * + * @param result result list + * @param compilationUnit compilation unit + */ + private void addClassPath(List result, CompilationUnit compilationUnit) { + StringBuilder classPathBuilder = new StringBuilder(); + for (String entry : compilationUnit.getClassPathsEntries()) { + if (classPathBuilder.length() > 0) { + classPathBuilder.append(CLASS_PATH_DELIMITER); + } + classPathBuilder.append(entry); + } + if (classPathBuilder.length() > 0) { + result.addAll(Arrays.asList("-cp", classPathBuilder.toString())); + } + } - protected void addClassPath(CompilationUnit result, String classPath) { - String[] classPathEntries = classPath.split(CLASS_PATH_DELIMITER); + protected void addClassPath(CompilationUnit result, String classPath) { + String[] classPathEntries = classPath.split(CLASS_PATH_DELIMITER); - for (String classPathEntry : classPathEntries) { - result.addClassPathEntry(classPathEntry); - } + for (String classPathEntry : classPathEntries) { + result.addClassPathEntry(classPathEntry); } + } - @Override - public CompilationUnit createCompilationUnit() { - File outputDirectory = new File(System.getProperty("java.io.tmpdir"), "compiled-code_" + System.currentTimeMillis()); - return createCompilationUnit(outputDirectory); - } + @Override + public CompilationUnit createCompilationUnit() { + File outputDirectory = new File(System.getProperty("java.io.tmpdir"), "compiled-code_" + System.currentTimeMillis()); + return createCompilationUnit(outputDirectory); + } - @Override - public CompilationUnit createCompilationUnit(File outputClassDirectory) { - return new CompilationUnitImpl(outputClassDirectory); - } + @Override + public CompilationUnit createCompilationUnit(File outputClassDirectory) { + return new CompilationUnitImpl(outputClassDirectory); + } - protected IllegalStateException createCompilationErrorException(JavaFileObjectRegistry registry, DiagnosticCollector diagnostics) { - return new IllegalStateException(getDiagnosticString(registry, diagnostics)); - } + protected IllegalStateException createCompilationErrorException(JavaFileObjectRegistry registry, DiagnosticCollector diagnostics) { + return new IllegalStateException(getDiagnosticString(registry, diagnostics)); + } - private String getDiagnosticString(JavaFileObjectRegistry registry, DiagnosticCollector diagnostics) { - StringBuilder diagnosticBuilder = new StringBuilder(); - for (Diagnostic diagnostic : diagnostics.getDiagnostics()) { - buildDiagnosticMessage(diagnostic, diagnosticBuilder, registry); - } - return diagnosticBuilder.toString(); + private String getDiagnosticString(JavaFileObjectRegistry registry, DiagnosticCollector diagnostics) { + StringBuilder diagnosticBuilder = new StringBuilder(); + for (Diagnostic diagnostic : diagnostics.getDiagnostics()) { + buildDiagnosticMessage(diagnostic, diagnosticBuilder, registry); } - - private long getDiagnosticCountByType(DiagnosticCollector diagnostics, Diagnostic.Kind kind) { - long result = 0; - for (Diagnostic e : diagnostics.getDiagnostics()) { - if (e.getKind().equals(kind)) { - result += 1; - } - } - return result; + return diagnosticBuilder.toString(); + } + + private long getDiagnosticCountByType(DiagnosticCollector diagnostics, Diagnostic.Kind kind) { + long result = 0; + for (Diagnostic e : diagnostics.getDiagnostics()) { + if (e.getKind().equals(kind)) { + result += 1; + } } - - public void persistCompiledClasses(CompilationUnit compilationUnit) { - JavaFileObjectRegistry registry = compilationUnit.getRegistry(); - File classOutputDirectory = compilationUnit.getOutputClassDirectory(); - if (!classOutputDirectory.exists()) { - if(!classOutputDirectory.mkdirs()) throw new IllegalStateException("Failed to create directory " +classOutputDirectory.getAbsolutePath()); - } - for (JavaFileObject javaFileObject : registry.get(JavaFileObject.Kind.CLASS)) { - String internalName = javaFileObject.getName().substring(1); - File compiledClassFile = new File(classOutputDirectory, internalName); - if (!compiledClassFile.getParentFile().exists()) { - if (!compiledClassFile.getParentFile().mkdirs()) { - throw new IllegalStateException("Failed to create directories " + compiledClassFile.getParent()); - } - } - try { - Files.write(JavaCodeFileObject.class.cast(javaFileObject).getByteCode(), compiledClassFile); - } catch (IOException e) { - throw new IllegalStateException("Failed to write to file " + compiledClassFile, e); - } + return result; + } + + public void persistCompiledClasses(CompilationUnit compilationUnit) { + JavaFileObjectRegistry registry = compilationUnit.getRegistry(); + File classOutputDirectory = compilationUnit.getOutputClassDirectory(); + if (!classOutputDirectory.exists()) { + if (!classOutputDirectory.mkdirs()) + throw new IllegalStateException("Failed to create directory " + classOutputDirectory.getAbsolutePath()); + } + for (JavaFileObject javaFileObject : registry.get(JavaFileObject.Kind.CLASS)) { + String internalName = javaFileObject.getName().substring(1); + File compiledClassFile = new File(classOutputDirectory, internalName); + if (!compiledClassFile.getParentFile().exists()) { + if (!compiledClassFile.getParentFile().mkdirs()) { + throw new IllegalStateException("Failed to create directories " + compiledClassFile.getParent()); } + } + try { + Files.write(JavaCodeFileObject.class.cast(javaFileObject).getByteCode(), compiledClassFile); + } catch (IOException e) { + throw new IllegalStateException("Failed to write to file " + compiledClassFile, e); + } } + } - public static class CompilationUnitImpl implements CompilationUnit { + public static class CompilationUnitImpl implements CompilationUnit { - private final List classPathEntries = new ArrayList(); - private final JavaFileObjectRegistry registry = new JavaFileObjectRegistryImpl(); - private final File outputClassDirectory; + private final List classPathEntries = new ArrayList(); + private final JavaFileObjectRegistry registry = new JavaFileObjectRegistryImpl(); + private final File outputClassDirectory; - public CompilationUnitImpl(File outputClassDirectory) { - this.outputClassDirectory = outputClassDirectory; - } + public CompilationUnitImpl(File outputClassDirectory) { + this.outputClassDirectory = outputClassDirectory; + } - @Override - public void addClassPathEntry(String classPathEntry) { - classPathEntries.add(classPathEntry); - } + @Override + public void addClassPathEntry(String classPathEntry) { + classPathEntries.add(classPathEntry); + } - @Override - public void addClassPathEntries(Collection classPathEntries) { - this.classPathEntries.addAll(classPathEntries); - } + @Override + public void addClassPathEntries(Collection classPathEntries) { + this.classPathEntries.addAll(classPathEntries); + } - @Override - public void addJavaSource(String className, String source) { - URI sourceUri = URIUtil.buildUri(StandardLocation.SOURCE_OUTPUT, className); - registry.register(new JavaSourceFileObject(sourceUri, source)); - } + @Override + public void addJavaSource(String className, String source) { + URI sourceUri = URIUtil.buildUri(StandardLocation.SOURCE_OUTPUT, className); + registry.register(new JavaSourceFileObject(sourceUri, source)); + } - @Override - public JavaFileObjectRegistry getRegistry() { - return registry; - } + @Override + public JavaFileObjectRegistry getRegistry() { + return registry; + } - @Override - public List getClassPathsEntries() { - return classPathEntries; - } + @Override + public List getClassPathsEntries() { + return classPathEntries; + } - public File getOutputClassDirectory() { - return outputClassDirectory; - } + public File getOutputClassDirectory() { + return outputClassDirectory; } + } } diff --git a/kernel/java/src/test/java/com/twosigma/beakerx/javash/evaluator/JavaEvaluatorTest.java b/kernel/java/src/test/java/com/twosigma/beakerx/javash/evaluator/JavaEvaluatorTest.java index c78dfb384c..546dae4e0f 100644 --- a/kernel/java/src/test/java/com/twosigma/beakerx/javash/evaluator/JavaEvaluatorTest.java +++ b/kernel/java/src/test/java/com/twosigma/beakerx/javash/evaluator/JavaEvaluatorTest.java @@ -115,4 +115,63 @@ public void noCode() throws Exception { Assertions.assertThat(seo.getStatus()).isEqualTo(FINISHED); } + @Test + public void evaluateStreamInMultipleLines() throws Exception { + //given + String code = "import java.util.stream.Stream;\n" + + "return Stream.of(1, 2, 3, 4).map(i -> { \n" + + " return i * 10;\n" + + "});"; + SimpleEvaluationObject seo = new SimpleEvaluationObject(code, new ExecuteCodeCallbackTest()); + //when + javaEvaluator.evaluate(seo, code); + waitForResult(seo); + //then + Assertions.assertThat(seo.getStatus()).isEqualTo(FINISHED); + } + + @Test + public void evaluateStreamInOneLine() throws Exception { + //given + String code = "import java.util.stream.Stream;\n" + + "return Stream.of(1, 2, 3, 4).map(i -> { return i * 10;});"; + SimpleEvaluationObject seo = new SimpleEvaluationObject(code, new ExecuteCodeCallbackTest()); + //when + javaEvaluator.evaluate(seo, code); + waitForResult(seo); + //then + Assertions.assertThat(seo.getStatus()).isEqualTo(FINISHED); + } + + @Test + public void evaluateVoid() throws Exception { + //given + String code = "System.out.println(\"Hello\");"; + SimpleEvaluationObject seo = new SimpleEvaluationObject(code, new ExecuteCodeCallbackTest()); + //when + javaEvaluator.evaluate(seo, code); + waitForResult(seo); + //then + Assertions.assertThat(seo.getStatus()).isEqualTo(FINISHED); + } + + @Test + public void evaluateIfStatement() throws Exception { + //given + String code = "" + + "if (true){\n" + + " return \"AAA\";\n" + + "}else {\n" + + " return \"BBB\";\n" + + "}"; + SimpleEvaluationObject seo = new SimpleEvaluationObject(code, new ExecuteCodeCallbackTest()); + //when + javaEvaluator.evaluate(seo, code); + waitForResult(seo); + //then + Assertions.assertThat(seo.getStatus()).isEqualTo(FINISHED); + Assertions.assertThat((String) seo.getPayload()).isEqualTo("AAA"); + } + + } From 87944547f31b545a636277d2835bcfb2a0b58980 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Pior?= Date: Thu, 7 Dec 2017 16:44:15 +0100 Subject: [PATCH 23/29] #6412 fix LoD menu breaks in lab (#6467) * #6412 add bootstrap, less, less-loader packages * #6412 add less-loaser to webpack configuration * #6412 fix - jupyter lab in contrast to jupyter notebooks does not include bootstrap styles * #6412 fix after merge * #6412 swich bootstrap from less to sass --- js/notebook/package.json | 1 + js/notebook/src/embed.js | 7 ++++--- js/notebook/src/extension.js | 6 +++--- js/notebook/src/shared/style/bootstrap.scss | 19 +++++++++++++++++++ js/notebook/yarn.lock | 4 ++++ 5 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 js/notebook/src/shared/style/bootstrap.scss diff --git a/js/notebook/package.json b/js/notebook/package.json index 9b2c24df44..32bef5924a 100644 --- a/js/notebook/package.json +++ b/js/notebook/package.json @@ -44,6 +44,7 @@ "dependencies": { "@phosphor/widgets": "^1.5.0", "big.js": "^3.1.3", + "bootstrap-sass": "^3.3.7", "d3": "^4.9.1", "datatables.net": "^1.10.15", "datatables.net-buttons": "^1.3.1", diff --git a/js/notebook/src/embed.js b/js/notebook/src/embed.js index 830cae92de..063e6fd893 100644 --- a/js/notebook/src/embed.js +++ b/js/notebook/src/embed.js @@ -7,9 +7,10 @@ // Export widget models and views, and the npm package version number. module.exports = {}; -require('./../src/shared/style/beakerx.scss'); -require('./../src/plot/bko-combinedplot.css'); -require('./../src/plot/bko-plot.css'); +require('./shared/style/bootstrap.scss'); +require('./shared/style/beakerx.scss'); +require('./plot/bko-combinedplot.css'); +require('./plot/bko-plot.css'); var loadedModules = [ require("./Plot"), diff --git a/js/notebook/src/extension.js b/js/notebook/src/extension.js index 4078778eab..652ddbdfff 100644 --- a/js/notebook/src/extension.js +++ b/js/notebook/src/extension.js @@ -33,9 +33,9 @@ if (window.require) { } __webpack_public_path__ = document.querySelector('body').getAttribute('data-base-url') + 'nbextensions/beakerx/'; -require('./../src/shared/style/beakerx.scss'); -require('./../src/plot/bko-combinedplot.css'); -require('./../src/plot/bko-plot.css'); +require('./shared/style/beakerx.scss'); +require('./plot/bko-combinedplot.css'); +require('./plot/bko-plot.css'); define([ 'services/config', diff --git a/js/notebook/src/shared/style/bootstrap.scss b/js/notebook/src/shared/style/bootstrap.scss new file mode 100644 index 0000000000..159dfc8970 --- /dev/null +++ b/js/notebook/src/shared/style/bootstrap.scss @@ -0,0 +1,19 @@ +/* + * Copyright 2017 TWO SIGMA OPEN SOURCE, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@import '~bootstrap-sass/assets/stylesheets/bootstrap/_variables.scss'; +@import '~bootstrap-sass/assets/stylesheets/bootstrap/_mixins.scss'; +@import '~bootstrap-sass/assets/stylesheets/bootstrap/_dropdowns.scss'; diff --git a/js/notebook/yarn.lock b/js/notebook/yarn.lock index 327b86522b..084c80c838 100644 --- a/js/notebook/yarn.lock +++ b/js/notebook/yarn.lock @@ -342,6 +342,10 @@ boom@2.x.x: dependencies: hoek "2.x.x" +bootstrap-sass@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/bootstrap-sass/-/bootstrap-sass-3.3.7.tgz#6596c7ab40f6637393323ab0bc80d064fc630498" + brace-expansion@^1.1.7: version "1.1.8" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" From c0d7b330d0e20911a82d9da30244f360830e91d7 Mon Sep 17 00:00:00 2001 From: Jms Dnns Date: Thu, 7 Dec 2017 11:02:52 -0500 Subject: [PATCH 24/29] #6474 removed python 2 and added python 3.6 to setup.py (#6476) --- beakerx/setup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/beakerx/setup.py b/beakerx/setup.py index c02775a1ac..f66631f560 100644 --- a/beakerx/setup.py +++ b/beakerx/setup.py @@ -68,12 +68,11 @@ 'Intended Audience :: Developers', 'Intended Audience :: Science/Research', 'Topic :: Multimedia :: Graphics', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.3', 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', ], entry_points={ 'console_scripts': [ From 0eff293d2af2814e74f061c9dbee11bd3f12a790 Mon Sep 17 00:00:00 2001 From: Robert Bidas Date: Thu, 7 Dec 2017 17:03:39 +0100 Subject: [PATCH 25/29] #6459 remove internal classes from javadoc (#6463) * #6459 remove internal classes from javadoc * #6459 remove internal classes from javadoc --- kernel/build.gradle | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/kernel/build.gradle b/kernel/build.gradle index 22f9b9f946..f34b2ac9a1 100644 --- a/kernel/build.gradle +++ b/kernel/build.gradle @@ -85,6 +85,12 @@ subprojects { source = sourceSets.main.allJava classpath = configurations.compile javadoc.destinationDir = file("$rootDir/../beakerx/beakerx/javadoc") + javadoc.include 'com/twosigma/beakerx/chart/**' + javadoc.include 'com/twosigma/beakerx/easyform/**' + javadoc.include 'com/twosigma/beakerx/table/**' + javadoc.include 'com/twosigma/beakerx/mimetype/**' + javadoc.include 'com/twosigma/beakerx/jvm/object/**' + javadoc.exclude '**/serializer/**' } afterEvaluate { From 9ef1740a2473e0aed81b1fd537806194dd458cdc Mon Sep 17 00:00:00 2001 From: Jms Dnns Date: Thu, 7 Dec 2017 11:29:25 -0500 Subject: [PATCH 26/29] #6470 Removed line that breaks use of virtualenvs (#6471) --- beakerx/setupbase.py | 1 - 1 file changed, 1 deletion(-) diff --git a/beakerx/setupbase.py b/beakerx/setupbase.py index 0a0126f1f8..20b0756ac2 100644 --- a/beakerx/setupbase.py +++ b/beakerx/setupbase.py @@ -53,7 +53,6 @@ def list2cmdline(cmd_list): here = os.path.abspath(os.path.dirname(sys.argv[0])) root = os.path.abspath(os.path.join(here, os.pardir)) kernel_path = os.path.join(root, 'kernel') -site_packages = site.getsitepackages()[0] is_repo = os.path.exists(os.path.join(root, '.git')) node_modules = os.path.join(here, 'js', 'node_modules') node_modules_path = ':'.join([ From 1ae73c4541fda5e819e3b5757cab511b91cc8bc9 Mon Sep 17 00:00:00 2001 From: Scott Draves Date: Thu, 7 Dec 2017 11:30:27 -0500 Subject: [PATCH 27/29] wheel is not usd to skip this release step --- RELEASE.md | 1 - 1 file changed, 1 deletion(-) diff --git a/RELEASE.md b/RELEASE.md index b377f4d7aa..908cee6edc 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -20,7 +20,6 @@ the change and push the git tag. git clean -xfd cd beakerx python setup.py sdist -python setup.py bdist_wheel --universal ``` Make a test installation with pip into a fresh environment, if it works then continue with: From 2d5b53f75820d0c594740c68f520fc89e04cdee4 Mon Sep 17 00:00:00 2001 From: Scott Draves Date: Sun, 10 Dec 2017 23:19:33 -0500 Subject: [PATCH 28/29] add new contributing doc, cleanup readme #6483 (#6484) --- CONTRIBUTING.md | 42 ++++++++++++++++++++++++++++++++++++++++++ README.md | 17 +++++++---------- RELEASE.md | 16 ++++++++++++++++ 3 files changed, 65 insertions(+), 10 deletions(-) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..3d562409c4 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,42 @@ + + +# Contributing + +We welcome developers to extend and improve BeakerX in ways that can +benefit everyone. In order for us to accept your code or pull request, +we need for you to fill out and email back to us a scan of a signed copy of the +[Contributor License Agreement](http://beakernotebook.com/cla.zip). + +BeakerX uses [Google Java +style](https://google.github.io/styleguide/javaguide.html), and all +Java code needs unit tests. For JavaScript we use [Google JS +style](https://google.github.io/styleguide/jsguide.html) with +[require](http://requirejs.org/) instead of goog. All files should +end with newline and have a copyright and license banner. + +# Core Team Process + +For those with write access to the github repository, please use the +following system for naming your branches and submitting your work. + +* Make one PR for each issue. Each PR should be a branch from master + that can be merged independently of any other issue. +* Name your branch "YourName/IssueNumber", eg "spot/6483". +* Each commit should have the issue number in its message like "#6483" + so that github links it. +* An admin will review, test, write feedback, and eventually merge the PR and close the issue. +* Do not rebase your PRs. diff --git a/README.md b/README.md index b8b4c38363..e1a4b6101c 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,10 @@ a local build should suffice: (cd js/notebook; yarn install) ``` +### Run Tests + +The Java unit tests are run with every build. See [test/README.md] for how to run the e2e tests. + ## Groovy with Interactive Plotting and Tables: screen shot @@ -106,18 +110,11 @@ docker run -p 8888:8888 beakerx/beakerx ## Contributing -We welcome developers to extend and improve BeakerX in ways that can -benefit everyone. In order for us to accept your code or pull request, -we need for you to fill out and email back to us a scan of a signed copy of the -[Contributor License Agreement](http://beakernotebook.com/cla.zip). +See [CONTRIBUTING](CONTRIBUTING.md). -BeakerX uses [Google Java -style](https://google.github.io/styleguide/javaguide.html), and all -Java code needs unit tests. For JavaScript we use [Google JS -style](https://google.github.io/styleguide/jsguide.html) with -[require](http://requirejs.org/) instead of goog. All files should -end with newline and have a copyright and license banner. +## Releasing +See [RELEASE.md](RELEASE.md). ## Attribution diff --git a/RELEASE.md b/RELEASE.md index 908cee6edc..120a80ba39 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,3 +1,19 @@ + + Making a BeakerX release =========================== From ba92ddcd55cd01cecb271c3c44e44e3dfb4e7077 Mon Sep 17 00:00:00 2001 From: Scott Draves Date: Sun, 10 Dec 2017 23:24:37 -0500 Subject: [PATCH 29/29] fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e1a4b6101c..21cd85cf4b 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,7 @@ docker run -p 8888:8888 beakerx/beakerx ## Contributing -See [CONTRIBUTING](CONTRIBUTING.md). +See [CONTRIBUTING.md](CONTRIBUTING.md). ## Releasing