From 4cb0cc38fa4ba11b8517c953f50ed7b2f64dc60e Mon Sep 17 00:00:00 2001 From: Lukasz Mitusinski Date: Tue, 9 Jan 2018 11:17:39 +0100 Subject: [PATCH 1/9] #6565 additional logging for other clojure kernel tests --- .../java/com/twosigma/beakerx/KernelExecutionTest.java | 7 +++++-- .../twosigma/beakerx/clojure/kernel/ClojureKernelTest.java | 1 + 2 files changed, 6 insertions(+), 2 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 4b9357bc3c..da059233a4 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java @@ -58,7 +58,7 @@ public void evaluate16Divide2() throws Exception { Optional idleMessage = waitForIdleMessage(getKernelSocketsService().getKernelSockets()); assertThat(idleMessage).isPresent(); Optional result = waitForResult(getKernelSocketsService().getKernelSockets()); - checkResultForErrors(result); + checkResultForErrors(result, code); assertThat(result).isPresent(); verifyResult(result.get()); verifyPublishedMsgs(getKernelSocketsService()); @@ -66,12 +66,13 @@ public void evaluate16Divide2() throws Exception { verifySentMsgs(getKernelSocketsService()); } - private void checkResultForErrors(Optional result) throws InterruptedException { + protected void checkResultForErrors(Optional result, String code) throws InterruptedException { if (!result.isPresent()){ Optional error = waitForErrorMessage(getKernelSocketsService().getKernelSockets()); String errorMsg; if (error.isPresent()){ errorMsg = "Error message received instead of result:\n" + + "Code: " + code + "\n" + error.get().getContent().toString() + "\n"; } else { errorMsg = "Result nor error messages found:\n" + @@ -161,6 +162,7 @@ private void verifyAddedDemoJar() throws InterruptedException { Optional idleMessage = waitForIdleMessage(getKernelSocketsService().getKernelSockets()); assertThat(idleMessage).isPresent(); Optional result = waitForResult(getKernelSocketsService().getKernelSockets()); + checkResultForErrors(result, code); verifyResultOfAddedJar(result.get()); } @@ -208,6 +210,7 @@ private void verifyImportedDemoClassByMagicCommand() throws InterruptedException Optional idleMessage = waitForIdleMessage(getKernelSocketsService().getKernelSockets()); assertThat(idleMessage).isPresent(); Optional result = waitForResult(getKernelSocketsService().getKernelSockets()); + checkResultForErrors(result, allCode); assertThat(result).isPresent(); Map actual = ((Map) result.get().getContent().get(Comm.DATA)); String value = (String) actual.get("text/plain"); 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 334feec480..bf9e696c3e 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 @@ -91,6 +91,7 @@ public void evaluateFibSeq() throws Exception { Optional idleMessage = waitForIdleMessage(kernelSocketsService.getKernelSockets()); assertThat(idleMessage).isPresent(); Optional result = waitForResult(kernelSocketsService.getKernelSockets()); + checkResultForErrors(result, code); verifyResult(result.get()); verifyPublishedMsgs(kernelSocketsService); waitForSentMessage(kernelSocketsService.getKernelSockets()); From 4f92d3da0982adad86952990e4e1861b70e0f55e Mon Sep 17 00:00:00 2001 From: Lukasz Mitusinski Date: Wed, 10 Jan 2018 10:04:07 +0100 Subject: [PATCH 2/9] #6569 mvn cell magic part 1 --- .../command/MagicCommandTypesFactory.java | 28 +-- .../magic/command/MavenJarResolver.java | 53 +++-- .../kernel/magic/command/PomFactory.java | 30 +-- .../ClassPathAddMvnCellMagicCommand.java | 105 ++++++++++ .../ClasspathAddMvnMagicCommand.java | 6 +- .../java/com/twosigma/beakerx/KernelTest.java | 22 +- ...asspathAddMvnDepsCellMagicCommandTest.java | 195 ++++++++++++++++++ .../ClasspathAddMvnDepsMagicCommandTest.java | 5 +- .../kernel/magic/command/PomFactoryTest.java | 37 +++- 9 files changed, 395 insertions(+), 86 deletions(-) create mode 100644 kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClassPathAddMvnCellMagicCommand.java create mode 100644 kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsCellMagicCommandTest.java diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/MagicCommandTypesFactory.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/MagicCommandTypesFactory.java index a5a62eaffe..3cae212f5a 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/MagicCommandTypesFactory.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/MagicCommandTypesFactory.java @@ -16,25 +16,7 @@ package com.twosigma.beakerx.kernel.magic.command; import com.twosigma.beakerx.kernel.KernelFunctionality; -import com.twosigma.beakerx.kernel.magic.command.functionality.AddImportMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.AddStaticImportMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.BashMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathAddJarMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathAddMvnMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathAddRepoMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathRemoveMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathShowMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.HtmlAliasMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.HtmlMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.JavaScriptMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.JSMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.LoadMagicMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.LsMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.TimeCellModeMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.TimeItCellModeMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.TimeItLineModeMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.TimeLineModeMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.UnImportMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.*; import java.util.ArrayList; import java.util.List; @@ -56,6 +38,7 @@ public static List createDefaults(KernelFunctionality kernel) lsmagic(magicCommandTypes), addJar(kernel), addJarByMvn(kernel), + addJarByMvnCell(kernel), addRepo(kernel), removeJar(kernel), showClasspath(kernel), @@ -117,6 +100,13 @@ private static MagicCommandType addJarByMvn(KernelFunctionality kernel) { kernel.getTempFolder().toString() + MVN_DIR), kernel)); } + private static MagicCommandType addJarByMvnCell(KernelFunctionality kernel) { + return new MagicCommandType(ClassPathAddMvnCellMagicCommand.CLASSPATH_ADD_MVN_CELL, "", + new ClassPathAddMvnCellMagicCommand(new MavenJarResolver.ResolverParams( + kernel.getCacheFolder().toString() + "/maven/cache", + kernel.getTempFolder().toString() + MVN_DIR), kernel)); + } + private static MagicCommandType addJar(KernelFunctionality kernel) { return new MagicCommandType(ClasspathAddJarMagicCommand.CLASSPATH_ADD_JAR, "", new ClasspathAddJarMagicCommand(kernel)); } diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/MavenJarResolver.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/MavenJarResolver.java index 9418e6d628..2bf8e7f89a 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/MavenJarResolver.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/MavenJarResolver.java @@ -15,27 +15,26 @@ */ package com.twosigma.beakerx.kernel.magic.command; -import static com.google.common.base.Preconditions.checkNotNull; - +import com.google.common.base.Preconditions; import com.twosigma.beakerx.kernel.commands.MavenInvocationSilentOutputHandler; import com.twosigma.beakerx.kernel.commands.MavenJarResolverSilentLogger; +import com.twosigma.beakerx.kernel.magic.command.functionality.MvnLoggerWidget; +import org.apache.commons.io.FileUtils; +import org.apache.maven.shared.invoker.DefaultInvocationRequest; +import org.apache.maven.shared.invoker.DefaultInvoker; +import org.apache.maven.shared.invoker.InvocationRequest; +import org.apache.maven.shared.invoker.InvocationResult; +import org.apache.maven.shared.invoker.Invoker; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.UUID; -import com.twosigma.beakerx.kernel.magic.command.functionality.MvnLoggerWidget; -import org.apache.commons.io.FileUtils; -import org.apache.maven.shared.invoker.DefaultInvocationRequest; -import org.apache.maven.shared.invoker.DefaultInvoker; -import org.apache.maven.shared.invoker.InvocationRequest; -import org.apache.maven.shared.invoker.InvocationResult; -import org.apache.maven.shared.invoker.Invoker; - public class MavenJarResolver { public static final String MVN_DIR = File.separator + "mvnJars"; @@ -49,17 +48,21 @@ public class MavenJarResolver { public MavenJarResolver(final ResolverParams commandParams, PomFactory pomFactory) { - this.commandParams = checkNotNull(commandParams); + this.commandParams = Preconditions.checkNotNull(commandParams); this.pathToMavenRepo = getOrCreateFile(commandParams.getPathToNotebookJars()).getAbsolutePath(); this.pomFactory = pomFactory; } public AddMvnCommandResult retrieve(String groupId, String artifactId, String version, MvnLoggerWidget progress) { + List dependencies = Arrays.asList(new Dependency(groupId, artifactId, version)); + return retrieve(dependencies, progress); + } + + public AddMvnCommandResult retrieve(List dependencies, MvnLoggerWidget progress) { File finalPom = null; try { - Dependency dependency = new Dependency(groupId, artifactId, version); - String pomAsString = pomFactory.createPom(pathToMavenRepo, dependency, commandParams.getRepos()); - finalPom = saveToFile(commandParams.getPathToNotebookJars(), dependency, pomAsString); + String pomAsString = pomFactory.createPom(pathToMavenRepo, dependencies, commandParams.getRepos()); + finalPom = saveToFile(commandParams.getPathToNotebookJars(), pomAsString); InvocationRequest request = createInvocationRequest(); request.setOffline(commandParams.getOffline()); request.setPomFile(finalPom); @@ -68,7 +71,7 @@ public AddMvnCommandResult retrieve(String groupId, String artifactId, String ve progress.display(); InvocationResult invocationResult = invoker.execute(request); progress.close(); - return getResult(invocationResult, groupId, artifactId, version); + return getResult(invocationResult, dependencies); } catch (Exception e) { return AddMvnCommandResult.error(e.getMessage()); } finally { @@ -76,10 +79,9 @@ public AddMvnCommandResult retrieve(String groupId, String artifactId, String ve } } - private File saveToFile(String pathToNotebookJars, Dependency dependency, String pomAsString) + private File saveToFile(String pathToNotebookJars, String pomAsString) throws IOException { - File finalPom = new File(pathToNotebookJars + "/poms/pom-" + UUID.randomUUID() + "-" + - dependency.getGroupId() + dependency.getArtifactId() + dependency.getVersion() + "xml"); + File finalPom = new File(pathToNotebookJars + "/poms/pom-" + UUID.randomUUID() + "-" + "xml"); FileUtils.writeStringToFile(finalPom, pomAsString, StandardCharsets.UTF_8); return finalPom; @@ -115,12 +117,19 @@ public String findMvn() { return mavenLocation; } - private AddMvnCommandResult getResult(InvocationResult invocationResult, String groupId, String artifactId, String version) { + private AddMvnCommandResult getResult(InvocationResult invocationResult, List dependencies) { if (invocationResult.getExitCode() != 0) { if (invocationResult.getExecutionException() != null) { return AddMvnCommandResult.error(invocationResult.getExecutionException().getMessage()); } - return AddMvnCommandResult.error("Could not resolve dependencies for: " + groupId + " : " + artifactId + " : " + version); + StringBuilder errorMsgBuilder = new StringBuilder("Could not resolve dependencies for:"); + for (Dependency dependency : dependencies) { + errorMsgBuilder + .append("\n").append(dependency.groupId).append(" : ") + .append(dependency.artifactId).append(" : ") + .append(dependency.version); + } + return AddMvnCommandResult.error(errorMsgBuilder.toString()); } return AddMvnCommandResult.SUCCESS; @@ -207,8 +216,8 @@ public static class ResolverParams { private Map repos = Collections.emptyMap(); public ResolverParams(String pathToCache, String pathToNotebookJars, boolean offline) { - this.pathToCache = checkNotNull(pathToCache); - this.pathToNotebookJars = checkNotNull(pathToNotebookJars); + this.pathToCache = Preconditions.checkNotNull(pathToCache); + this.pathToNotebookJars = Preconditions.checkNotNull(pathToNotebookJars); this.offline = offline; } diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/PomFactory.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/PomFactory.java index 3804d8e78d..d073f2aa7e 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/PomFactory.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/PomFactory.java @@ -15,38 +15,42 @@ */ package com.twosigma.beakerx.kernel.magic.command; -import static com.twosigma.beakerx.kernel.magic.command.MavenJarResolver.POM_XML; - import com.twosigma.beakerx.kernel.magic.command.MavenJarResolver.Dependency; +import org.apache.commons.io.IOUtils; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; +import java.util.List; import java.util.Map; import java.util.Map.Entry; -import org.apache.commons.io.IOUtils; - public class PomFactory { - public String createPom(String pathToMavenRepo, Dependency dependency, Map repos) throws IOException { - InputStream pom = getClass().getClassLoader().getResourceAsStream(POM_XML); + public String createPom(String pathToMavenRepo, List dependencies, Map repos) throws IOException { + InputStream pom = getClass().getClassLoader().getResourceAsStream(MavenJarResolver.POM_XML); String pomAsString = IOUtils.toString(pom, StandardCharsets.UTF_8); pomAsString = configureOutputDir(pathToMavenRepo, pomAsString); - pomAsString = configureDependencies(dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion(), pomAsString); + pomAsString = configureDependencies(dependencies, pomAsString); pomAsString = configureRepos(repos, pomAsString); return pomAsString; } - private String configureDependencies(String groupId, String artifactId, String version, String pomAsString) { + private String configureDependencies(List dependencies, String pomAsString) { + for (Dependency dependency : dependencies) { + pomAsString = configureDependency(dependency, pomAsString); + } + return pomAsString; + } + + private String configureDependency(Dependency dependency, String pomAsString) { return pomAsString.replace( - "", - "\n" + + "", " \n" + - " " + groupId + "\n" + - " " + artifactId + "\n" + - " " + version + "\n" + + " " + dependency.groupId + "\n" + + " " + dependency.artifactId + "\n" + + " " + dependency.version + "\n" + " \n" + ""); } diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClassPathAddMvnCellMagicCommand.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClassPathAddMvnCellMagicCommand.java new file mode 100644 index 0000000000..1a506d86bc --- /dev/null +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClassPathAddMvnCellMagicCommand.java @@ -0,0 +1,105 @@ +package com.twosigma.beakerx.kernel.magic.command.functionality; + +import com.twosigma.beakerx.kernel.KernelFunctionality; +import com.twosigma.beakerx.kernel.magic.command.MagicCommandExecutionParam; +import com.twosigma.beakerx.kernel.magic.command.MavenJarResolver; +import com.twosigma.beakerx.kernel.magic.command.PomFactory; +import com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutcomeItem; +import com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutput; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +public class ClassPathAddMvnCellMagicCommand extends ClasspathMagicCommand{ + + public static final String ADD = "add"; + public static final String MVN = "mvn"; + public static final String CLASSPATH_ADD_MVN_CELL = "%" + CLASSPATH + " " + ADD + " " + MVN; + public static final String MVN_CELL_FORMAT_ERROR_MESSAGE = + "Wrong command format, should be " + CLASSPATH_ADD_MVN_CELL + "\n" + + " group name version or group:name:version" + "\n" + + " group name version or group:name:version"; + private static final String SPLIT_LINE_REGEX = "\\r?\\n"; + + private MavenJarResolver.ResolverParams commandParams; + private PomFactory pomFactory; + + public ClassPathAddMvnCellMagicCommand(MavenJarResolver.ResolverParams commandParams, KernelFunctionality kernel) { + super(kernel); + this.commandParams = commandParams; + this.pomFactory = new PomFactory(); + } + + @Override + public String getMagicCommandName() { + return CLASSPATH_ADD_MVN_CELL; + } + + @Override + public boolean matchCommand(String command) { + String[] commandParts = MagicCommandUtils.splitPath(command); + return commandParts.length >= 3 + && commandParts[0].equals("%" + CLASSPATH) + && commandParts[1].equals(ADD) + && commandParts[2].equals(MVN); + } + + @Override + public MagicCommandOutcomeItem execute(MagicCommandExecutionParam param) { + String command = param.getCommand(); + String commandCodeBlock = param.getCommandCodeBlock(); + if (commandCodeBlock != null){ + command += "\n" + commandCodeBlock; + } + String[] commandLines = command.split(SPLIT_LINE_REGEX); + unifyMvnLineFormat(commandLines); + if (!validateCommandLines(commandLines)){ + return new MagicCommandOutput(MagicCommandOutput.Status.ERROR, MVN_CELL_FORMAT_ERROR_MESSAGE); + } + List dependencies = + getDepsFromCommand(Arrays.copyOfRange(commandLines, 1, commandLines.length)); + MavenJarResolver mavenJarResolver = new MavenJarResolver(commandParams, pomFactory); + MvnLoggerWidget mvnLoggerWidget = new MvnLoggerWidget(param.getCode().getMessage()); + MavenJarResolver.AddMvnCommandResult result = mavenJarResolver.retrieve(dependencies, mvnLoggerWidget); + + if (result.isJarRetrieved()) { + Collection newAddedJars = addJars(mavenJarResolver.getPathToMavenRepo() + "/*"); + if (newAddedJars.isEmpty()) { + return new MagicCommandOutput(MagicCommandOutput.Status.OK); + } + String textMessage = "Added jar" + (newAddedJars.size() > 1 ? "s: " : ": ") + newAddedJars; + return new MagicCommandOutput(MagicCommandOutput.Status.OK, textMessage); + } + return new MagicCommandOutput(MagicCommandOutput.Status.ERROR, result.getErrorMessage()); + } + + private List getDepsFromCommand(String[] lines) { + List dependencies = new ArrayList<>(); + for (String line : lines) { + String[] dependencyData = MagicCommandUtils.splitPath(line); + dependencies.add(new MavenJarResolver.Dependency(dependencyData[0], dependencyData[1], dependencyData[2])); + } + return dependencies; + } + + private boolean validateCommandLines(String[] commandLines) { + boolean isValid = false; + for (int i = 1; i < commandLines.length; i++) { + if (MagicCommandUtils.splitPath(commandLines[i]).length == 3){ + isValid = true; + } else { + isValid = false; + break; + } + } + return isValid; + } + + private void unifyMvnLineFormat(String[] mvnLines){ + for (int i = 0; i < mvnLines.length; i++) { + mvnLines[i] = mvnLines[i].replace(":"," "); + } + } +} diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClasspathAddMvnMagicCommand.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClasspathAddMvnMagicCommand.java index 0b35a2f6c2..826f8c0e02 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClasspathAddMvnMagicCommand.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClasspathAddMvnMagicCommand.java @@ -25,14 +25,12 @@ import java.util.Collection; -import static com.twosigma.beakerx.kernel.magic.command.functionality.MagicCommandUtils.splitPath; - public class ClasspathAddMvnMagicCommand extends ClasspathMagicCommand { public static final String ADD = "add"; public static final String MVN = "mvn"; public static final String CLASSPATH_ADD_MVN = CLASSPATH + " " + ADD + " " + MVN; - public static final String ADD_MVN_FORMAT_ERROR_MESSAGE = "Wrong command format, should be " + CLASSPATH_ADD_MVN + " group name version or " + CLASSPATH_ADD_MVN + " group:name:version"; + public static final String ADD_MVN_FORMAT_ERROR_MESSAGE = "Wrong command format, should be %" + CLASSPATH_ADD_MVN + " group name version or " + CLASSPATH_ADD_MVN + " group:name:version"; private MavenJarResolver.ResolverParams commandParams; private PomFactory pomFactory; @@ -57,7 +55,7 @@ public boolean matchCommand(String command) { @Override public MagicCommandOutcomeItem execute(MagicCommandExecutionParam param) { String command = param.getCommand(); - String[] split = splitPath(command); + String[] split = MagicCommandUtils.splitPath(command); if (split.length != 6 && split.length != 4) { return new MagicCommandOutput(MagicCommandOutput.Status.ERROR, ADD_MVN_FORMAT_ERROR_MESSAGE); } 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 feaeb099ab..7aaa82bfa3 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/KernelTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/KernelTest.java @@ -37,25 +37,7 @@ import com.twosigma.beakerx.kernel.comm.Comm; import com.twosigma.beakerx.kernel.magic.command.MagicCommandType; import com.twosigma.beakerx.kernel.magic.command.MavenJarResolver; -import com.twosigma.beakerx.kernel.magic.command.functionality.AddImportMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.AddStaticImportMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.BashMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathAddJarMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathAddMvnMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathAddRepoMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathRemoveMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathShowMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.HtmlAliasMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.HtmlMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.JavaScriptMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.JSMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.LoadMagicMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.LsMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.TimeCellModeMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.TimeItCellModeMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.TimeItLineModeMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.TimeLineModeMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.functionality.UnImportMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.*; import com.twosigma.beakerx.kernel.msg.JupyterMessages; import com.twosigma.beakerx.kernel.msg.MessageCreator; import com.twosigma.beakerx.kernel.threads.ExecutionResultSender; @@ -130,6 +112,8 @@ private void initMagicCommands() { new MagicCommandType(ClasspathAddJarMagicCommand.CLASSPATH_ADD_JAR, "", new ClasspathAddJarMagicCommand(this)), new MagicCommandType(ClasspathAddMvnMagicCommand.CLASSPATH_ADD_MVN, "", new ClasspathAddMvnMagicCommand(mavenResolverParam, this)), + new MagicCommandType(ClassPathAddMvnCellMagicCommand.CLASSPATH_ADD_MVN_CELL, "", + new ClassPathAddMvnCellMagicCommand(mavenResolverParam, this)), new MagicCommandType(ClasspathRemoveMagicCommand.CLASSPATH_REMOVE, "", new ClasspathRemoveMagicCommand(this)), new MagicCommandType(ClasspathShowMagicCommand.CLASSPATH_SHOW, "", new ClasspathShowMagicCommand(this)), new MagicCommandType(AddStaticImportMagicCommand.ADD_STATIC_IMPORT, "", new AddStaticImportMagicCommand(this)), diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsCellMagicCommandTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsCellMagicCommandTest.java new file mode 100644 index 0000000000..db3d4c4d20 --- /dev/null +++ b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsCellMagicCommandTest.java @@ -0,0 +1,195 @@ +package com.twosigma.beakerx.kernel.magic.command; + +import com.twosigma.beakerx.KernelTest; +import com.twosigma.beakerx.evaluator.EvaluatorTest; +import com.twosigma.beakerx.kernel.Code; +import com.twosigma.beakerx.kernel.handler.MagicCommandExecutor; +import com.twosigma.beakerx.kernel.magic.command.functionality.ClassPathAddMvnCellMagicCommand; +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 org.apache.commons.io.FileUtils; +import org.assertj.core.api.Assertions; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Enumeration; +import java.util.List; +import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; + +public class ClasspathAddMvnDepsCellMagicCommandTest { + + + private static final String SRC_TEST_RESOURCES_TEST_MVN_CACHE = "src/test/resources/testMvnCache"; + public static final String BUILD_PATH = "build"; + public static final ArrayList NO_ERRORS = new ArrayList<>(); + + private static KernelTest kernel; + private static EvaluatorTest evaluator; + + @Before + public void setUp() throws Exception { + evaluator = new EvaluatorTest(); + kernel = new KernelTest("id2", evaluator); + prepareLocalMavenRepository(); + } + + @After + public void tearDown() throws Exception { + evaluator.exit(); + } + + @Test + public void handleAddDeps() throws Exception { + //given + String allCode = "%%classpath add mvn\n" + + "org.slf4j slf4j-api 1.7.5\n" + + "com.google.code.gson gson 2.6.2"; + List expected = Arrays.asList("slf4j-api-1.7.5.jar", "gson-2.6.2.jar"); + handleCellClasspathAddMvnDep(allCode, expected); + } + + @Test + public void handleAddDepsMixedSyntax() throws Exception { + String allCode = "%%classpath add mvn\n" + + "org.slf4j slf4j-api 1.7.5\n" + + "com.google.code.gson:gson:2.6.2"; + List expected = Arrays.asList("slf4j-api-1.7.5.jar", "gson-2.6.2.jar"); + handleCellClasspathAddMvnDep(allCode, expected); + } + + @Test + public void handleUnresolvedDep() throws Exception { + String allCode = "%%classpath add mvn\n" + + "com.google.code.XXXX:gson:2.6.2"; + //given + MagicCommand command = new MagicCommand(new ClassPathAddMvnCellMagicCommand(kernel.mavenResolverParam, kernel), allCode); + Code code = Code.createCodeWithoutCodeBlock(allCode, Collections.singletonList(command), NO_ERRORS, new Message()); + //when + MagicCommandOutcome process = MagicCommandExecutor.executeMagicCommands(code, 1, kernel); + //then + String text = getText(process); + Assertions.assertThat(text).contains("Could not resolve dependencies for:"); + Assertions.assertThat(text).contains("com.google.code.XXXX : gson : 2.6.2"); + } + + @Test + public void handleIncorrectSyntax() throws Exception { + String singleLine = "%%classpath add mvn\n" + + "org.slf4j slf4j-api 1.7.5 " + + "com.google.code.gson:gson:2.6.2"; + String additionalCode = "%%classpath add mvn\n" + + "org.slf4j slf4j-api 1.7.5\n" + + "println(\"test\")"; + Assertions.assertThat(getText(processMagicCommand(singleLine)) + .equals(ClassPathAddMvnCellMagicCommand.MVN_CELL_FORMAT_ERROR_MESSAGE)); + Assertions.assertThat(getText(processMagicCommand(additionalCode)) + .equals(ClassPathAddMvnCellMagicCommand.MVN_CELL_FORMAT_ERROR_MESSAGE)); + } + + private MagicCommandOutcome processMagicCommand(String allCode){ + MagicCommand command = new MagicCommand(new ClassPathAddMvnCellMagicCommand(kernel.mavenResolverParam, kernel), allCode); + Code code = Code.createCodeWithoutCodeBlock(allCode, Collections.singletonList(command), NO_ERRORS, new Message()); + return MagicCommandExecutor.executeMagicCommands(code, 1, kernel); + } + + + private void handleCellClasspathAddMvnDep(String allCode, List expected) throws IOException { + MagicCommandOutcome process = processMagicCommand(allCode); + String mvnDir = kernel.getTempFolder().toString() + MavenJarResolver.MVN_DIR; + List depNames = Files.walk(Paths.get(mvnDir)).map(p -> p.getFileName().toString()).collect(Collectors.toList()); + Assertions.assertThat(getText(process)).contains("Added jars"); + Assertions.assertThat(kernel.getClasspath().get(0)).contains(mvnDir); + Assertions.assertThat(expected.stream() + .allMatch(depNames::contains)); + Assertions.assertThat(expected.stream() + .allMatch(getText(process)::contains)); + + Files.walk(Paths.get(mvnDir)).forEach(path -> { + try{ + FileUtils.forceDelete(path.toFile()); + } catch (IOException e) { + e.printStackTrace(); + } + }); + } + + private void handleCellClasspathAddMvnDepWithUnresolved(String allCode, String expected, String unresolved) throws IOException { + MagicCommandOutcome process = processMagicCommand(allCode); + String mvnDir = kernel.getTempFolder().toString() + MavenJarResolver.MVN_DIR; + List depNames = Files.walk(Paths.get(mvnDir)).map(p -> p.getFileName().toString()).collect(Collectors.toList()); + + Assertions.assertThat(getText(process)).contains("Added jars"); + Assertions.assertThat(kernel.getClasspath().get(0)).contains(mvnDir); + Assertions.assertThat(depNames.contains(expected)); + Assertions.assertThat(getText(process).contains(expected)); + + Assertions.assertThat(getText(process)) + .contains("Could not resolve dependencies for: com.google.code.XXXX : gson : 2.6.2"); + + Files.walk(Paths.get(mvnDir)).forEach(path -> { + try{ + FileUtils.forceDelete(path.toFile()); + } catch (IOException e) { + e.printStackTrace(); + } + }); + } + + private String getText(MagicCommandOutcome process) { + MagicCommandOutcomeItem magicCommandItem = process.getItems().get(0); + return (String) magicCommandItem.getMIMEContainer().get().getData(); + } + + private static void prepareLocalMavenRepository() throws IOException { + FileUtils.copyDirectory(new File(SRC_TEST_RESOURCES_TEST_MVN_CACHE), new File(BUILD_PATH)); + unzipRepo(); + } + + private static void unzipRepo() { + try { + ZipFile zipFile = new ZipFile(BUILD_PATH + "/testMvnCache.zip"); + Enumeration enu = zipFile.entries(); + while (enu.hasMoreElements()) { + ZipEntry zipEntry = (ZipEntry) enu.nextElement(); + String name = BUILD_PATH + "/" + zipEntry.getName(); + File file = new File(name); + if (name.endsWith("/")) { + file.mkdirs(); + continue; + } + + File parent = file.getParentFile(); + if (parent != null) { + parent.mkdirs(); + } + + InputStream is = zipFile.getInputStream(zipEntry); + FileOutputStream fos = new FileOutputStream(file); + byte[] bytes = new byte[1024]; + int length; + while ((length = is.read(bytes)) >= 0) { + fos.write(bytes, 0, length); + } + is.close(); + fos.close(); + + } + zipFile.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsMagicCommandTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsMagicCommandTest.java index a8141f1f4d..c5fe70087f 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsMagicCommandTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsMagicCommandTest.java @@ -20,8 +20,8 @@ import com.twosigma.beakerx.kernel.Code; import com.twosigma.beakerx.kernel.handler.MagicCommandExecutor; import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathAddMvnMagicCommand; -import com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutcomeItem; 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 org.apache.commons.io.FileUtils; import org.assertj.core.api.Assertions; @@ -93,7 +93,8 @@ public void unresolvedDependency() throws Exception { MagicCommandOutcome process = MagicCommandExecutor.executeMagicCommands(code, 1, kernel); //then String text = getText(process); - assertThat(text).contains("Could not resolve dependencies for: com.google.code.XXXX : gson : 2.6.2"); + assertThat(text).contains("Could not resolve dependencies for:"); + assertThat(text).contains("com.google.code.XXXX : gson : 2.6.2"); } @Test diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/PomFactoryTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/PomFactoryTest.java index 70454c2f3b..adba9bb648 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/PomFactoryTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/PomFactoryTest.java @@ -15,17 +15,17 @@ */ package com.twosigma.beakerx.kernel.magic.command; -import static org.apache.commons.lang3.StringUtils.deleteWhitespace; -import static org.apache.commons.lang3.StringUtils.normalizeSpace; -import static org.assertj.core.api.Assertions.assertThat; - import com.google.common.collect.Maps; import com.twosigma.beakerx.kernel.magic.command.MavenJarResolver.Dependency; +import org.junit.Before; +import org.junit.Test; +import java.util.Arrays; import java.util.Map; -import org.junit.Before; -import org.junit.Test; +import static org.apache.commons.lang3.StringUtils.deleteWhitespace; +import static org.apache.commons.lang3.StringUtils.normalizeSpace; +import static org.assertj.core.api.Assertions.assertThat; public class PomFactoryTest { @@ -45,6 +45,20 @@ public class PomFactoryTest { " " + ""; + private static final String EXPECTED_MULTIPLE_DEP_POM = "" + + "" + + " " + + " group" + + " artifact" + + " 1.1.1" + + " " + + " " + + " other-group" + + " other-artifact" + + " 1.1.1" + + " " + + ""; + private PomFactory pomFactory; @Before @@ -60,11 +74,20 @@ public void createPomWithRepos() throws Exception { repos.put("repository.spring.snapshot", "http://repo.spring.io/snapshot"); Dependency dependency = new Dependency("", "", ""); //when - String pomAsString = pomFactory.createPom("/", dependency, repos); + String pomAsString = pomFactory.createPom("/", Arrays.asList(dependency), repos); //then assertThat(removeWhitespaces(pomAsString)).contains(removeWhitespaces(EXPECTED_RESULT_BLOCK)); } + @Test + public void createPomWithMultipleDependencies() throws Exception{ + Map repos = Maps.newHashMap(); + Dependency dependency1 = new Dependency("group", "artifact", "1.1.1"); + Dependency dependency2 = new Dependency("other-group", "other-artifact", "1.1.1"); + String pomAsString = pomFactory.createPom("/", Arrays.asList(dependency1, dependency2), repos); + assertThat(removeWhitespaces(pomAsString).contains(removeWhitespaces(EXPECTED_MULTIPLE_DEP_POM))); + } + private String removeWhitespaces(String pomAsString) { return normalizeSpace(deleteWhitespace(pomAsString)); } From 23019c935b157304f8e7ab4c1773bd2a0eca9266 Mon Sep 17 00:00:00 2001 From: Lukasz Mitusinski Date: Fri, 12 Jan 2018 12:46:01 +0100 Subject: [PATCH 3/9] #6569 mvn cell magic part 2 --- .../command/MagicCommandTypesFactory.java | 21 +++++++- .../ClassPathAddMvnCellMagicCommand.java | 8 +-- .../ClasspathAddJarMagicCommand.java | 9 +--- .../ClasspathAddMvnMagicCommand.java | 11 +--- .../functionality/ClasspathMagicCommand.java | 51 ++++++++++++++++++ .../java/com/twosigma/beakerx/KernelTest.java | 30 ++++++++--- ...asspathAddMvnDepsCellMagicCommandTest.java | 47 ++++++++-------- .../ClasspathAddMvnDepsMagicCommandTest.java | 38 ++++++++++--- .../resources/testMvnCache/testMvnCache.zip | Bin 11078579 -> 11256812 bytes 9 files changed, 155 insertions(+), 60 deletions(-) diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/MagicCommandTypesFactory.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/MagicCommandTypesFactory.java index 3cae212f5a..6b6edb1b85 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/MagicCommandTypesFactory.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/MagicCommandTypesFactory.java @@ -16,7 +16,26 @@ package com.twosigma.beakerx.kernel.magic.command; import com.twosigma.beakerx.kernel.KernelFunctionality; -import com.twosigma.beakerx.kernel.magic.command.functionality.*; +import com.twosigma.beakerx.kernel.magic.command.functionality.AddImportMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.AddStaticImportMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.BashMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.ClassPathAddMvnCellMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathAddJarMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathAddMvnMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathAddRepoMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathRemoveMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathShowMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.HtmlAliasMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.HtmlMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.JSMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.JavaScriptMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.LoadMagicMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.LsMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.TimeCellModeMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.TimeItCellModeMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.TimeItLineModeMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.TimeLineModeMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.UnImportMagicCommand; import java.util.ArrayList; import java.util.List; diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClassPathAddMvnCellMagicCommand.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClassPathAddMvnCellMagicCommand.java index 1a506d86bc..5d7390f66e 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClassPathAddMvnCellMagicCommand.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClassPathAddMvnCellMagicCommand.java @@ -9,7 +9,6 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.List; public class ClassPathAddMvnCellMagicCommand extends ClasspathMagicCommand{ @@ -65,12 +64,7 @@ public MagicCommandOutcomeItem execute(MagicCommandExecutionParam param) { MavenJarResolver.AddMvnCommandResult result = mavenJarResolver.retrieve(dependencies, mvnLoggerWidget); if (result.isJarRetrieved()) { - Collection newAddedJars = addJars(mavenJarResolver.getPathToMavenRepo() + "/*"); - if (newAddedJars.isEmpty()) { - return new MagicCommandOutput(MagicCommandOutput.Status.OK); - } - String textMessage = "Added jar" + (newAddedJars.size() > 1 ? "s: " : ": ") + newAddedJars; - return new MagicCommandOutput(MagicCommandOutput.Status.OK, textMessage); + return handleAddedJars(mavenJarResolver.getPathToMavenRepo() + "/*"); } return new MagicCommandOutput(MagicCommandOutput.Status.ERROR, result.getErrorMessage()); } diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClasspathAddJarMagicCommand.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClasspathAddJarMagicCommand.java index 460310a9fb..2061fb7e74 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClasspathAddJarMagicCommand.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClasspathAddJarMagicCommand.java @@ -20,8 +20,6 @@ import com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutcomeItem; import com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutput; -import java.util.Collection; - import static com.twosigma.beakerx.kernel.magic.command.functionality.MagicCommandUtils.splitPath; public class ClasspathAddJarMagicCommand extends ClasspathMagicCommand { @@ -59,12 +57,7 @@ public MagicCommandOutcomeItem execute(MagicCommandExecutionParam param) { if (errorData.hasError()) { return new MagicCommandOutput(MagicCommandOutput.Status.ERROR, errorData.getMessage()); } else { - Collection newAddedJars = addJars(path); - if (newAddedJars.isEmpty()) { - return new MagicCommandOutput(MagicCommandOutput.Status.OK); - } - String textMessage = "Added " + JAR + (newAddedJars.size() > 1 ? "s: " : ": ") + newAddedJars; - return new MagicCommandOutput(MagicCommandOutput.Status.OK, textMessage); + return handleAddedJars(path); } } diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClasspathAddMvnMagicCommand.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClasspathAddMvnMagicCommand.java index 826f8c0e02..d3f0221d85 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClasspathAddMvnMagicCommand.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClasspathAddMvnMagicCommand.java @@ -23,14 +23,12 @@ import com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutcomeItem; import com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutput; -import java.util.Collection; - public class ClasspathAddMvnMagicCommand extends ClasspathMagicCommand { public static final String ADD = "add"; public static final String MVN = "mvn"; public static final String CLASSPATH_ADD_MVN = CLASSPATH + " " + ADD + " " + MVN; - public static final String ADD_MVN_FORMAT_ERROR_MESSAGE = "Wrong command format, should be %" + CLASSPATH_ADD_MVN + " group name version or " + CLASSPATH_ADD_MVN + " group:name:version"; + public static final String ADD_MVN_FORMAT_ERROR_MESSAGE = "Wrong command format, should be" + CLASSPATH_ADD_MVN + " group name version or " + CLASSPATH_ADD_MVN + " group:name:version"; private MavenJarResolver.ResolverParams commandParams; private PomFactory pomFactory; @@ -75,12 +73,7 @@ public MagicCommandOutcomeItem execute(MagicCommandExecutionParam param) { } if (result.isJarRetrieved()) { - Collection newAddedJars = addJars(classpathAddMvnCommand.getPathToMavenRepo() + "/*"); - if (newAddedJars.isEmpty()) { - return new MagicCommandOutput(MagicCommandOutput.Status.OK); - } - String textMessage = "Added jar" + (newAddedJars.size() > 1 ? "s: " : ": ") + newAddedJars; - return new MagicCommandOutput(MagicCommandOutput.Status.OK, textMessage); + return handleAddedJars(classpathAddMvnCommand.getPathToMavenRepo() + "/*"); } return new MagicCommandOutput(MagicCommandOutput.Status.ERROR, result.getErrorMessage()); } diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClasspathMagicCommand.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClasspathMagicCommand.java index c7c363a2b1..b1479a2ee1 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClasspathMagicCommand.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClasspathMagicCommand.java @@ -19,6 +19,8 @@ import com.twosigma.beakerx.kernel.KernelFunctionality; import com.twosigma.beakerx.kernel.PathToJar; 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 java.io.IOException; import java.nio.file.Files; @@ -27,6 +29,9 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkNotNull; @@ -50,6 +55,52 @@ public Collection addJars(String path) { } } + public MagicCommandOutput handleAddedJars(String path){ + Collection newAddedJars = addJars(path); + Collection conflicts = searchForConflicts(newAddedJars); + if (newAddedJars.isEmpty()) { + return new MagicCommandOutput(MagicCommandOutput.Status.OK); + } + String textMessage = "Added jar" + (newAddedJars.size() > 1 ? "s: " : ": ") + newAddedJars; + MagicCommandOutput.Status status = MagicCommandOutcomeItem.Status.OK; + if (!conflicts.isEmpty()){ + textMessage += "\n\n" + "Dependency conflict" + (conflicts.size() > 1 ? "s: " : ": ") + conflicts; + status = MagicCommandOutcomeItem.Status.ERROR; + } + return new MagicCommandOutput(status, textMessage); + } + + public List searchForConflicts(Collection newAddedJars){ + return kernel.getClasspath().getPathsAsStrings().stream() + .map(this::getFilenameFromPath) + .map(d -> checkIfDepExist(d, newAddedJars)) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toList()); + } + + public String getFilenameFromPath(String path){ + String[] parts = path.split("/"); + return parts[parts.length-1]; + } + + public Optional checkIfDepExist(String dependency, Collection addedJars){ + Pattern pattern = Pattern.compile("(.*)\\-(\\d[\\.\\d]*[\\.\\-[\\S]*]+)"); + Matcher depMatcher = pattern.matcher(dependency); + if (!depMatcher.find()){ + return Optional.empty(); + } + String depName = depMatcher.group(1); + String depVersion = depMatcher.group(2); + return addedJars.stream() + .map(pattern::matcher) + .filter(m -> m.find() + && m.group(1).equals(depName) + && !m.group(2).equals(depVersion)) + .map(m -> m.group(0)) + .findFirst(); + } + private Collection handlePath(String path) { List addedJarsName = Lists.newLinkedList(); Path currentPath = Paths.get(path); 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 7aaa82bfa3..08748811a8 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/KernelTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/KernelTest.java @@ -15,9 +15,6 @@ */ package com.twosigma.beakerx; -import static com.twosigma.beakerx.kernel.magic.command.ClasspathAddMvnDepsMagicCommandTest.TEST_MVN_CACHE; -import static java.util.Collections.unmodifiableList; - import com.twosigma.beakerx.autocomplete.AutocompleteResult; import com.twosigma.beakerx.evaluator.Evaluator; import com.twosigma.beakerx.evaluator.EvaluatorManager; @@ -37,11 +34,32 @@ import com.twosigma.beakerx.kernel.comm.Comm; import com.twosigma.beakerx.kernel.magic.command.MagicCommandType; import com.twosigma.beakerx.kernel.magic.command.MavenJarResolver; -import com.twosigma.beakerx.kernel.magic.command.functionality.*; +import com.twosigma.beakerx.kernel.magic.command.functionality.AddImportMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.AddStaticImportMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.BashMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.ClassPathAddMvnCellMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathAddJarMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathAddMvnMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathAddRepoMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathRemoveMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathShowMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.HtmlAliasMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.HtmlMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.JSMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.JavaScriptMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.LoadMagicMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.LsMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.TimeCellModeMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.TimeItCellModeMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.TimeItLineModeMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.TimeLineModeMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.UnImportMagicCommand; import com.twosigma.beakerx.kernel.msg.JupyterMessages; import com.twosigma.beakerx.kernel.msg.MessageCreator; import com.twosigma.beakerx.kernel.threads.ExecutionResultSender; import com.twosigma.beakerx.message.Message; +import org.apache.commons.io.FileUtils; +import org.assertj.core.util.Lists; import java.io.File; import java.io.IOException; @@ -53,8 +71,8 @@ import java.util.Observer; import java.util.Set; -import org.apache.commons.io.FileUtils; -import org.assertj.core.util.Lists; +import static com.twosigma.beakerx.kernel.magic.command.ClasspathAddMvnDepsMagicCommandTest.TEST_MVN_CACHE; +import static java.util.Collections.unmodifiableList; public class KernelTest implements KernelFunctionality { diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsCellMagicCommandTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsCellMagicCommandTest.java index db3d4c4d20..076c74d00a 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsCellMagicCommandTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsCellMagicCommandTest.java @@ -5,6 +5,7 @@ import com.twosigma.beakerx.kernel.Code; import com.twosigma.beakerx.kernel.handler.MagicCommandExecutor; import com.twosigma.beakerx.kernel.magic.command.functionality.ClassPathAddMvnCellMagicCommand; +import com.twosigma.beakerx.kernel.magic.command.functionality.ClasspathAddMvnMagicCommand; import com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutcome; import com.twosigma.beakerx.kernel.magic.command.outcome.MagicCommandOutcomeItem; import com.twosigma.beakerx.message.Message; @@ -99,6 +100,30 @@ public void handleIncorrectSyntax() throws Exception { .equals(ClassPathAddMvnCellMagicCommand.MVN_CELL_FORMAT_ERROR_MESSAGE)); } + @Test + public void handleDepVersionConflict() throws Exception { + String codeString1 = "%classpath add mvn com.google.code.gson gson 2.6.2"; + MagicCommand command1 = new MagicCommand(new ClasspathAddMvnMagicCommand(kernel.mavenResolverParam, kernel), codeString1); + Code code1 = Code.createCodeWithoutCodeBlock(codeString1, Collections.singletonList(command1), NO_ERRORS, new Message()); + MagicCommandOutcome process1 = MagicCommandExecutor.executeMagicCommands(code1, 1, kernel); + Assertions.assertThat(getText(process1)).contains("Added jar"); + + String codeString2 = "%%classpath add mvn\ncom.google.code.gson gson 2.2.3"; + MagicCommand command2 = new MagicCommand(new ClassPathAddMvnCellMagicCommand(kernel.mavenResolverParam, kernel), codeString2); + Code code2 = Code.createCodeWithoutCodeBlock(codeString1, Collections.singletonList(command2), NO_ERRORS, new Message()); + MagicCommandOutcome process2 = MagicCommandExecutor.executeMagicCommands(code2, 2, kernel); + Assertions.assertThat(getText(process2)).contains("Dependency conflict"); + + String mvnDir = kernel.getTempFolder().toString() + MavenJarResolver.MVN_DIR; + Files.walk(Paths.get(mvnDir)).forEach(path -> { + try{ + FileUtils.forceDelete(path.toFile()); + } catch (IOException e) { + e.printStackTrace(); + } + }); + } + private MagicCommandOutcome processMagicCommand(String allCode){ MagicCommand command = new MagicCommand(new ClassPathAddMvnCellMagicCommand(kernel.mavenResolverParam, kernel), allCode); Code code = Code.createCodeWithoutCodeBlock(allCode, Collections.singletonList(command), NO_ERRORS, new Message()); @@ -126,28 +151,6 @@ private void handleCellClasspathAddMvnDep(String allCode, List expected) }); } - private void handleCellClasspathAddMvnDepWithUnresolved(String allCode, String expected, String unresolved) throws IOException { - MagicCommandOutcome process = processMagicCommand(allCode); - String mvnDir = kernel.getTempFolder().toString() + MavenJarResolver.MVN_DIR; - List depNames = Files.walk(Paths.get(mvnDir)).map(p -> p.getFileName().toString()).collect(Collectors.toList()); - - Assertions.assertThat(getText(process)).contains("Added jars"); - Assertions.assertThat(kernel.getClasspath().get(0)).contains(mvnDir); - Assertions.assertThat(depNames.contains(expected)); - Assertions.assertThat(getText(process).contains(expected)); - - Assertions.assertThat(getText(process)) - .contains("Could not resolve dependencies for: com.google.code.XXXX : gson : 2.6.2"); - - Files.walk(Paths.get(mvnDir)).forEach(path -> { - try{ - FileUtils.forceDelete(path.toFile()); - } catch (IOException e) { - e.printStackTrace(); - } - }); - } - private String getText(MagicCommandOutcome process) { MagicCommandOutcomeItem magicCommandItem = process.getItems().get(0); return (String) magicCommandItem.getMIMEContainer().get().getData(); diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsMagicCommandTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsMagicCommandTest.java index c5fe70087f..9d05f53371 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsMagicCommandTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsMagicCommandTest.java @@ -4,7 +4,7 @@ * 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 - * + *import static org.assertj.core.api.Assertions.assertThat; * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software @@ -25,8 +25,8 @@ import com.twosigma.beakerx.message.Message; import org.apache.commons.io.FileUtils; import org.assertj.core.api.Assertions; -import org.junit.AfterClass; -import org.junit.BeforeClass; +import org.junit.After; +import org.junit.Before; import org.junit.Test; import java.io.File; @@ -57,15 +57,15 @@ public class ClasspathAddMvnDepsMagicCommandTest { private static KernelTest kernel; private static EvaluatorTest evaluator; - @BeforeClass - public static void setUp() throws Exception { + @Before + public void setUp() throws Exception { evaluator = new EvaluatorTest(); kernel = new KernelTest("id2", evaluator); prepareLocalMavenRepository(); } - @AfterClass - public static void tearDown() throws Exception { + @After + public void tearDown() throws Exception { evaluator.exit(); } @@ -110,6 +110,30 @@ public void wrongCommandFormat() throws Exception { assertThat(text).isEqualTo(ADD_MVN_FORMAT_ERROR_MESSAGE + "\n"); } + @Test + public void handleDepVersionConflict() throws IOException { + String codeString1 = "%classpath add mvn com.google.code.gson gson 2.6.2"; + MagicCommand command1 = new MagicCommand(new ClasspathAddMvnMagicCommand(kernel.mavenResolverParam, kernel), codeString1); + Code code1 = Code.createCodeWithoutCodeBlock(codeString1, singletonList(command1), NO_ERRORS, new Message()); + MagicCommandOutcome process1 = MagicCommandExecutor.executeMagicCommands(code1, 1, kernel); + assertThat(getText(process1)).contains("Added jar"); + + String codeString2 = "%classpath add mvn com.google.code.gson gson 2.2.3"; + MagicCommand command2 = new MagicCommand(new ClasspathAddMvnMagicCommand(kernel.mavenResolverParam, kernel), codeString2); + Code code2 = Code.createCodeWithoutCodeBlock(codeString1, singletonList(command2), NO_ERRORS, new Message()); + MagicCommandOutcome process2 = MagicCommandExecutor.executeMagicCommands(code2, 2, kernel); + assertThat(getText(process2)).contains("Dependency conflict"); + + String mvnDir = kernel.getTempFolder().toString() + MavenJarResolver.MVN_DIR; + Files.walk(Paths.get(mvnDir)).forEach(path -> { + try{ + FileUtils.forceDelete(path.toFile()); + } catch (IOException e) { + e.printStackTrace(); + } + }); + } + private void handleClasspathAddMvnDep(String allCode, String expected) throws IOException { MagicCommand command = new MagicCommand(new ClasspathAddMvnMagicCommand(kernel.mavenResolverParam, kernel), allCode); Code code = Code.createCodeWithoutCodeBlock(allCode, singletonList(command), NO_ERRORS, new Message()); diff --git a/kernel/base/src/test/resources/testMvnCache/testMvnCache.zip b/kernel/base/src/test/resources/testMvnCache/testMvnCache.zip index 5199d797ae55dfa7ce41b649e216debb039e4d1a..41977dec688730aefcf4f51d66175c837ed151c3 100644 GIT binary patch delta 225039 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�a&oUVC6eROQ4z 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 E0T9e-*Z=?k delta 46970 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 Kmd#j?r~d=>`$9MX From 6b9d3fed56d5b9c8fe87b8e33d0248f42983b732 Mon Sep 17 00:00:00 2001 From: Lukasz Mitusinski Date: Mon, 15 Jan 2018 15:16:23 +0100 Subject: [PATCH 4/9] Revert "#6565 additional logging for other clojure kernel tests" This reverts commit 4cb0cc3 --- .../java/com/twosigma/beakerx/KernelExecutionTest.java | 7 ++----- .../twosigma/beakerx/clojure/kernel/ClojureKernelTest.java | 1 - 2 files changed, 2 insertions(+), 6 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 da059233a4..4b9357bc3c 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/KernelExecutionTest.java @@ -58,7 +58,7 @@ public void evaluate16Divide2() throws Exception { Optional idleMessage = waitForIdleMessage(getKernelSocketsService().getKernelSockets()); assertThat(idleMessage).isPresent(); Optional result = waitForResult(getKernelSocketsService().getKernelSockets()); - checkResultForErrors(result, code); + checkResultForErrors(result); assertThat(result).isPresent(); verifyResult(result.get()); verifyPublishedMsgs(getKernelSocketsService()); @@ -66,13 +66,12 @@ public void evaluate16Divide2() throws Exception { verifySentMsgs(getKernelSocketsService()); } - protected void checkResultForErrors(Optional result, String code) throws InterruptedException { + private void checkResultForErrors(Optional result) throws InterruptedException { if (!result.isPresent()){ Optional error = waitForErrorMessage(getKernelSocketsService().getKernelSockets()); String errorMsg; if (error.isPresent()){ errorMsg = "Error message received instead of result:\n" - + "Code: " + code + "\n" + error.get().getContent().toString() + "\n"; } else { errorMsg = "Result nor error messages found:\n" + @@ -162,7 +161,6 @@ private void verifyAddedDemoJar() throws InterruptedException { Optional idleMessage = waitForIdleMessage(getKernelSocketsService().getKernelSockets()); assertThat(idleMessage).isPresent(); Optional result = waitForResult(getKernelSocketsService().getKernelSockets()); - checkResultForErrors(result, code); verifyResultOfAddedJar(result.get()); } @@ -210,7 +208,6 @@ private void verifyImportedDemoClassByMagicCommand() throws InterruptedException Optional idleMessage = waitForIdleMessage(getKernelSocketsService().getKernelSockets()); assertThat(idleMessage).isPresent(); Optional result = waitForResult(getKernelSocketsService().getKernelSockets()); - checkResultForErrors(result, allCode); assertThat(result).isPresent(); Map actual = ((Map) result.get().getContent().get(Comm.DATA)); String value = (String) actual.get("text/plain"); 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 bf9e696c3e..334feec480 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 @@ -91,7 +91,6 @@ public void evaluateFibSeq() throws Exception { Optional idleMessage = waitForIdleMessage(kernelSocketsService.getKernelSockets()); assertThat(idleMessage).isPresent(); Optional result = waitForResult(kernelSocketsService.getKernelSockets()); - checkResultForErrors(result, code); verifyResult(result.get()); verifyPublishedMsgs(kernelSocketsService); waitForSentMessage(kernelSocketsService.getKernelSockets()); From 124ad9d201faa00a37ec93e457194006d05690a8 Mon Sep 17 00:00:00 2001 From: Lukasz Mitusinski Date: Tue, 16 Jan 2018 10:15:47 +0100 Subject: [PATCH 5/9] #6569 cr changes - banners for new files, fixed typo --- .../ClassPathAddMvnCellMagicCommand.java | 15 +++++++++++++++ .../ClasspathAddMvnDepsCellMagicCommandTest.java | 15 +++++++++++++++ .../ClasspathAddMvnDepsMagicCommandTest.java | 2 +- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClassPathAddMvnCellMagicCommand.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClassPathAddMvnCellMagicCommand.java index 5d7390f66e..0ab822e53f 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClassPathAddMvnCellMagicCommand.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClassPathAddMvnCellMagicCommand.java @@ -1,3 +1,18 @@ +/* + * 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 + *import static org.assertj.core.api.Assertions.assertThat; + * 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.magic.command.functionality; import com.twosigma.beakerx.kernel.KernelFunctionality; diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsCellMagicCommandTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsCellMagicCommandTest.java index 076c74d00a..78d95de876 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsCellMagicCommandTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsCellMagicCommandTest.java @@ -1,3 +1,18 @@ +/* + * 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 + *import static org.assertj.core.api.Assertions.assertThat; + * 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.magic.command; import com.twosigma.beakerx.KernelTest; diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsMagicCommandTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsMagicCommandTest.java index 9d05f53371..6ac278cc7c 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsMagicCommandTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsMagicCommandTest.java @@ -4,7 +4,7 @@ * 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 - *import static org.assertj.core.api.Assertions.assertThat; + * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software From 50dc63861faab310c06dbe5940330052ec9d0ba5 Mon Sep 17 00:00:00 2001 From: Lukasz Mitusinski Date: Tue, 23 Jan 2018 12:31:27 +0100 Subject: [PATCH 6/9] #6569 added examples and description for mvn cell magic --- doc/groovy/ClasspathMagicCommands.ipynb | 22 +++++++++++++++++++++- doc/groovy/DataVec.ipynb | 19 ++++++++----------- doc/scala/Flint.ipynb | 17 +++++++++++++---- 3 files changed, 42 insertions(+), 16 deletions(-) diff --git a/doc/groovy/ClasspathMagicCommands.ipynb b/doc/groovy/ClasspathMagicCommands.ipynb index 1dc8d0a57c..9525b6d6eb 100644 --- a/doc/groovy/ClasspathMagicCommands.ipynb +++ b/doc/groovy/ClasspathMagicCommands.ipynb @@ -106,7 +106,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Loading Dependencies with Grapes and Maven\n", + "## Loading single Dependency with Grapes and Maven\n", "\n", "Groovy has a dependency manager called [Grape](http://docs.groovy-lang.org/latest/html/documentation/grape.html) built-in and you can access it as follows:" ] @@ -185,6 +185,26 @@ "%classpath add mvn org.springframework spring-context 5.0.3.BUILD-SNAPSHOT" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Loading multiple Dependencies with Maven\n", + "\n", + "You can use `%%classpath` cell magic to load multiple dependencies at once. Cell magic will create POM file that will contain all dependencies listed in cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%classpath add mvn\n", + "org.slf4j slf4j-api 1.7.25\n", + "org.slf4j slf4j-nop 1.7.25" + ] + }, { "cell_type": "markdown", "metadata": {}, diff --git a/doc/groovy/DataVec.ipynb b/doc/groovy/DataVec.ipynb index 29446a96d6..a054c1bd7f 100644 --- a/doc/groovy/DataVec.ipynb +++ b/doc/groovy/DataVec.ipynb @@ -15,19 +15,18 @@ "metadata": {}, "outputs": [], "source": [ - "%classpath add mvn org.datavec datavec-api 0.9.1\n", - "%classpath add mvn org.datavec datavec-local 0.9.1\n", - "%classpath add mvn org.datavec datavec-dataframe 0.9.1\n", - "%classpath add mvn org.deeplearning4j deeplearning4j-core 0.9.1\n", - "%classpath add mvn org.nd4j nd4j-native-platform 0.9.1" + "%%classpath add mvn\n", + "org.datavec datavec-api 0.9.1\n", + "org.datavec datavec-local 0.9.1\n", + "org.datavec datavec-dataframe 0.9.1\n", + "org.deeplearning4j deeplearning4j-core 0.9.1\n", + "org.nd4j nd4j-native-platform 0.9.1" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "%import org.nd4j.linalg.api.ndarray.INDArray\n", @@ -345,9 +344,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [] } diff --git a/doc/scala/Flint.ipynb b/doc/scala/Flint.ipynb index c9f6eb4260..696623d75b 100644 --- a/doc/scala/Flint.ipynb +++ b/doc/scala/Flint.ipynb @@ -21,10 +21,19 @@ "outputs": [], "source": [ "%classpath config resolver jitpack.io https://jitpack.io\n", - "%classpath add mvn com.github.twosigma flint master-SNAPSHOT\n", - "%classpath add mvn org.apache.spark spark-sql_2.11 2.2.1\n", - "%classpath add mvn org.apache.spark spark-mllib_2.11 2.2.1\n", - "%classpath add mvn org.scalanlp breeze_2.10 0.13.2" + "%classpath add mvn com.github.twosigma flint master-SNAPSHOT" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%classpath add mvn\n", + "org.apache.spark spark-sql_2.11 2.2.1\n", + "org.apache.spark spark-mllib_2.11 2.2.1\n", + "org.scalanlp breeze_2.10 0.13.2" ] }, { From 1d7c3538f6a74387ef2cf7f31ee17e47dac3f392 Mon Sep 17 00:00:00 2001 From: Lukasz Mitusinski Date: Tue, 23 Jan 2018 12:57:18 +0100 Subject: [PATCH 7/9] #6569 fixed mvn cell magic additional repos bug --- doc/scala/Flint.ipynb | 4 ++-- .../functionality/ClassPathAddMvnCellMagicCommand.java | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/scala/Flint.ipynb b/doc/scala/Flint.ipynb index 696623d75b..ec9634e6c2 100644 --- a/doc/scala/Flint.ipynb +++ b/doc/scala/Flint.ipynb @@ -20,8 +20,7 @@ "metadata": {}, "outputs": [], "source": [ - "%classpath config resolver jitpack.io https://jitpack.io\n", - "%classpath add mvn com.github.twosigma flint master-SNAPSHOT" + "%classpath config resolver jitpack.io https://jitpack.io" ] }, { @@ -31,6 +30,7 @@ "outputs": [], "source": [ "%%classpath add mvn\n", + "com.github.twosigma flint master-SNAPSHOT\n", "org.apache.spark spark-sql_2.11 2.2.1\n", "org.apache.spark spark-mllib_2.11 2.2.1\n", "org.scalanlp breeze_2.10 0.13.2" diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClassPathAddMvnCellMagicCommand.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClassPathAddMvnCellMagicCommand.java index 0ab822e53f..75510b001d 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClassPathAddMvnCellMagicCommand.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClassPathAddMvnCellMagicCommand.java @@ -72,6 +72,7 @@ public MagicCommandOutcomeItem execute(MagicCommandExecutionParam param) { if (!validateCommandLines(commandLines)){ return new MagicCommandOutput(MagicCommandOutput.Status.ERROR, MVN_CELL_FORMAT_ERROR_MESSAGE); } + commandParams.setRepos(kernel.getRepos().get()); List dependencies = getDepsFromCommand(Arrays.copyOfRange(commandLines, 1, commandLines.length)); MavenJarResolver mavenJarResolver = new MavenJarResolver(commandParams, pomFactory); From 97162d852d3230683f479bacc3619a16268e55bb Mon Sep 17 00:00:00 2001 From: Lukasz Mitusinski Date: Wed, 24 Jan 2018 08:53:21 +0100 Subject: [PATCH 8/9] #6569 removed dependecy conflict message --- .../functionality/ClasspathMagicCommand.java | 36 ------------------- ...asspathAddMvnDepsCellMagicCommandTest.java | 24 ------------- .../ClasspathAddMvnDepsMagicCommandTest.java | 24 ------------- 3 files changed, 84 deletions(-) diff --git a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClasspathMagicCommand.java b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClasspathMagicCommand.java index d1c8094398..ba5cc18f32 100644 --- a/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClasspathMagicCommand.java +++ b/kernel/base/src/main/java/com/twosigma/beakerx/kernel/magic/command/functionality/ClasspathMagicCommand.java @@ -61,50 +61,14 @@ public Collection addJars(String path) { public MagicCommandOutput handleAddedJars(String path){ Collection newAddedJars = addJars(path); - Collection conflicts = searchForConflicts(newAddedJars); if (newAddedJars.isEmpty()) { return new MagicCommandOutput(MagicCommandOutput.Status.OK); } String textMessage = "Added jar" + (newAddedJars.size() > 1 ? "s: " : ": ") + newAddedJars; MagicCommandOutput.Status status = MagicCommandOutcomeItem.Status.OK; - if (!conflicts.isEmpty()){ - textMessage += "\n\n" + "Dependency conflict" + (conflicts.size() > 1 ? "s: " : ": ") + conflicts; - status = MagicCommandOutcomeItem.Status.ERROR; - } return new MagicCommandOutput(status, textMessage); } - public List searchForConflicts(Collection newAddedJars){ - return kernel.getClasspath().getPathsAsStrings().stream() - .map(this::getFilenameFromPath) - .map(d -> checkIfDepExist(d, newAddedJars)) - .filter(Optional::isPresent) - .map(Optional::get) - .collect(Collectors.toList()); - } - - public String getFilenameFromPath(String path){ - String[] parts = path.split("/"); - return parts[parts.length-1]; - } - - public Optional checkIfDepExist(String dependency, Collection addedJars){ - Pattern pattern = Pattern.compile("(.*)\\-(\\d[\\.\\d]*[\\.\\-[\\S]*]+)"); - Matcher depMatcher = pattern.matcher(dependency); - if (!depMatcher.find()){ - return Optional.empty(); - } - String depName = depMatcher.group(1); - String depVersion = depMatcher.group(2); - return addedJars.stream() - .map(pattern::matcher) - .filter(m -> m.find() - && m.group(1).equals(depName) - && !m.group(2).equals(depVersion)) - .map(m -> m.group(0)) - .findFirst(); - } - private Collection handlePath(String path) { List addedJarsName = Lists.newLinkedList(); Path currentPath = Paths.get(path); diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsCellMagicCommandTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsCellMagicCommandTest.java index 78d95de876..f3e74a6a2b 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsCellMagicCommandTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsCellMagicCommandTest.java @@ -115,30 +115,6 @@ public void handleIncorrectSyntax() throws Exception { .equals(ClassPathAddMvnCellMagicCommand.MVN_CELL_FORMAT_ERROR_MESSAGE)); } - @Test - public void handleDepVersionConflict() throws Exception { - String codeString1 = "%classpath add mvn com.google.code.gson gson 2.6.2"; - MagicCommand command1 = new MagicCommand(new ClasspathAddMvnMagicCommand(kernel.mavenResolverParam, kernel), codeString1); - Code code1 = Code.createCodeWithoutCodeBlock(codeString1, Collections.singletonList(command1), NO_ERRORS, new Message()); - MagicCommandOutcome process1 = MagicCommandExecutor.executeMagicCommands(code1, 1, kernel); - Assertions.assertThat(getText(process1)).contains("Added jar"); - - String codeString2 = "%%classpath add mvn\ncom.google.code.gson gson 2.2.3"; - MagicCommand command2 = new MagicCommand(new ClassPathAddMvnCellMagicCommand(kernel.mavenResolverParam, kernel), codeString2); - Code code2 = Code.createCodeWithoutCodeBlock(codeString1, Collections.singletonList(command2), NO_ERRORS, new Message()); - MagicCommandOutcome process2 = MagicCommandExecutor.executeMagicCommands(code2, 2, kernel); - Assertions.assertThat(getText(process2)).contains("Dependency conflict"); - - String mvnDir = kernel.getTempFolder().toString() + MavenJarResolver.MVN_DIR; - Files.walk(Paths.get(mvnDir)).forEach(path -> { - try{ - FileUtils.forceDelete(path.toFile()); - } catch (IOException e) { - e.printStackTrace(); - } - }); - } - private MagicCommandOutcome processMagicCommand(String allCode){ MagicCommand command = new MagicCommand(new ClassPathAddMvnCellMagicCommand(kernel.mavenResolverParam, kernel), allCode); Code code = Code.createCodeWithoutCodeBlock(allCode, Collections.singletonList(command), NO_ERRORS, new Message()); diff --git a/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsMagicCommandTest.java b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsMagicCommandTest.java index 6ac278cc7c..b3f6ffc022 100644 --- a/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsMagicCommandTest.java +++ b/kernel/base/src/test/java/com/twosigma/beakerx/kernel/magic/command/ClasspathAddMvnDepsMagicCommandTest.java @@ -110,30 +110,6 @@ public void wrongCommandFormat() throws Exception { assertThat(text).isEqualTo(ADD_MVN_FORMAT_ERROR_MESSAGE + "\n"); } - @Test - public void handleDepVersionConflict() throws IOException { - String codeString1 = "%classpath add mvn com.google.code.gson gson 2.6.2"; - MagicCommand command1 = new MagicCommand(new ClasspathAddMvnMagicCommand(kernel.mavenResolverParam, kernel), codeString1); - Code code1 = Code.createCodeWithoutCodeBlock(codeString1, singletonList(command1), NO_ERRORS, new Message()); - MagicCommandOutcome process1 = MagicCommandExecutor.executeMagicCommands(code1, 1, kernel); - assertThat(getText(process1)).contains("Added jar"); - - String codeString2 = "%classpath add mvn com.google.code.gson gson 2.2.3"; - MagicCommand command2 = new MagicCommand(new ClasspathAddMvnMagicCommand(kernel.mavenResolverParam, kernel), codeString2); - Code code2 = Code.createCodeWithoutCodeBlock(codeString1, singletonList(command2), NO_ERRORS, new Message()); - MagicCommandOutcome process2 = MagicCommandExecutor.executeMagicCommands(code2, 2, kernel); - assertThat(getText(process2)).contains("Dependency conflict"); - - String mvnDir = kernel.getTempFolder().toString() + MavenJarResolver.MVN_DIR; - Files.walk(Paths.get(mvnDir)).forEach(path -> { - try{ - FileUtils.forceDelete(path.toFile()); - } catch (IOException e) { - e.printStackTrace(); - } - }); - } - private void handleClasspathAddMvnDep(String allCode, String expected) throws IOException { MagicCommand command = new MagicCommand(new ClasspathAddMvnMagicCommand(kernel.mavenResolverParam, kernel), allCode); Code code = Code.createCodeWithoutCodeBlock(allCode, singletonList(command), NO_ERRORS, new Message()); From 372370787ca59dedc2a513690e341d826174977a Mon Sep 17 00:00:00 2001 From: Lukasz Mitusinski Date: Wed, 24 Jan 2018 09:48:12 +0100 Subject: [PATCH 9/9] #6569 tablesaw and spark demos classpath example update --- doc/groovy/Tablesaw.ipynb | 19 +++++++++++++------ doc/scala/Spark.ipynb | 3 ++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/doc/groovy/Tablesaw.ipynb b/doc/groovy/Tablesaw.ipynb index b82ef9ba50..e5c5f649ae 100644 --- a/doc/groovy/Tablesaw.ipynb +++ b/doc/groovy/Tablesaw.ipynb @@ -18,9 +18,18 @@ "metadata": {}, "outputs": [], "source": [ - "%classpath add mvn tech.tablesaw tablesaw-plot 0.11.4\n", - "%classpath add mvn tech.tablesaw tablesaw-smile 0.11.4\n", - "%classpath add mvn tech.tablesaw tablesaw-beakerx 0.11.4\n", + "%%classpath add mvn\n", + "tech.tablesaw tablesaw-plot 0.11.4\n", + "tech.tablesaw tablesaw-smile 0.11.4\n", + "tech.tablesaw tablesaw-beakerx 0.11.4" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ "%import tech.tablesaw.aggregate.*\n", "%import tech.tablesaw.api.*\n", "%import tech.tablesaw.api.ml.clustering.*\n", @@ -369,9 +378,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [] } diff --git a/doc/scala/Spark.ipynb b/doc/scala/Spark.ipynb index 0fa4c9ea82..8afae91eb8 100644 --- a/doc/scala/Spark.ipynb +++ b/doc/scala/Spark.ipynb @@ -17,7 +17,8 @@ }, "outputs": [], "source": [ - "%classpath add mvn org.apache.spark spark-sql_2.11 2.2.1" + "%%classpath add mvn\n", + "org.apache.spark spark-sql_2.11 2.2.1" ] }, {