Skip to content

Commit

Permalink
fix json render
Browse files Browse the repository at this point in the history
  • Loading branch information
potoo0 committed Oct 30, 2022
1 parent 1e5ce5e commit 6378723
Show file tree
Hide file tree
Showing 6 changed files with 59 additions and 7 deletions.
16 changes: 15 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,10 @@ repositories {
}

dependencies {
implementation group: 'io.github.spencerpark', name: 'jupyter-jvm-basekernel', version: '2.3.0'
implementation('io.github.spencerpark:jupyter-jvm-basekernel:2.3.0') {
exclude group: 'com.google.code.gson', module: 'gson'
}
implementation 'com.google.code.gson:gson:2.10'

// ------ for maven resolve and download ------
// implementation 'org.apache.maven:maven-resolver-provider:4.0.0-alpha-2'
Expand Down Expand Up @@ -64,6 +67,17 @@ processResources {
filter tokens: tokens, ReplaceTokens
}

//java {
// withJavadocJar()
// withSourcesJar()
//}

compileJava {
options.compilerArgs << '-parameters'
// ignore deprecation for jupyter-jvm-basekernel gson JsonParser api
// options.compilerArgs << '-Xlint:all' << '-Xlint:-deprecation' << '-Xlint:-rawtypes' << '-Xlint:-serial'
}

jar {
manifest {
attributes 'Main-class': 'io.github.spencerpark.ijava.IJava'
Expand Down
2 changes: 2 additions & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
org.gradle.warning.mode=all
org.gradle.logging.stacktrace=all
2 changes: 1 addition & 1 deletion src/main/java/io/github/spencerpark/ijava/IJava.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public static InputStream resource(String path) {
InputStream metaStream = resource("ijava-kernel-metadata.json");
Reader metaReader = new InputStreamReader(metaStream);
try {
JsonElement meta = new JsonParser().parse(metaReader);
JsonElement meta = JsonParser.parseReader(metaReader);
VERSION = meta.getAsJsonObject().get("version").getAsString();
} finally {
try {
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/io/github/spencerpark/ijava/JavaKernel.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,14 @@
*/
package io.github.spencerpark.ijava;

import com.google.gson.JsonElement;
import io.github.spencerpark.ijava.execution.*;
import io.github.spencerpark.ijava.magics.*;
import io.github.spencerpark.jupyter.kernel.BaseKernel;
import io.github.spencerpark.jupyter.kernel.LanguageInfo;
import io.github.spencerpark.jupyter.kernel.ReplacementOptions;
import io.github.spencerpark.jupyter.kernel.display.DisplayData;
import io.github.spencerpark.jupyter.kernel.display.mime.MIMEType;
import io.github.spencerpark.jupyter.kernel.magic.common.Load;
import io.github.spencerpark.jupyter.kernel.magic.registry.Magics;
import io.github.spencerpark.jupyter.kernel.util.CharPredicate;
Expand Down Expand Up @@ -132,6 +134,10 @@ public JavaKernel() {
new LanguageInfo.Help("Java tutorial", "https://docs.oracle.com/javase/tutorial/java/nutsandbolts/index.html"),
new LanguageInfo.Help("IJava homepage", "https://github.com/SpencerPark/IJava")
);
// todo io.github.spencerpark.jupyter.kernel.display.DisplayData putJSON, JsonParser.parseString
this.renderer.createRegistration(JsonElement.class)
.preferring(MIMEType.APPLICATION_JSON)
.register((data, context) -> context.renderIfRequested(MIMEType.APPLICATION_JSON, () -> data));

this.errorStyler = new StringStyler.Builder()
.addPrimaryStyle(TextColor.BOLD_BLACK_FG)
Expand Down
36 changes: 33 additions & 3 deletions src/main/java/io/github/spencerpark/ijava/runtime/Display.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,21 @@
*/
package io.github.spencerpark.ijava.runtime;

import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import io.github.spencerpark.ijava.JavaKernel;
import io.github.spencerpark.jupyter.kernel.display.DisplayData;
import io.github.spencerpark.jupyter.kernel.display.mime.MIMEType;

import java.io.Reader;
import java.util.Arrays;
import java.util.Objects;
import java.util.UUID;

public class Display {
private static final Gson GSON = new Gson();

public static DisplayData render(Object o) {
JavaKernel kernel = Kernel.getKernelInstance();

Expand All @@ -43,7 +52,17 @@ public static DisplayData render(Object o, String... as) {
JavaKernel kernel = Kernel.getKernelInstance();

if (kernel != null) {
return kernel.getRenderer().renderAs(o, as);
return kernel.getRenderer().renderAs(parseAsJson(o, as), as);
} else {
throw new RuntimeException("No IJava kernel running");
}
}

public static DisplayData renderAsJson(Object o) {
JavaKernel kernel = Kernel.getKernelInstance();

if (kernel != null) {
return kernel.getRenderer().renderAs(parseAsJson(o), MIMEType.APPLICATION_JSON.toString());
} else {
throw new RuntimeException("No IJava kernel running");
}
Expand Down Expand Up @@ -73,7 +92,7 @@ public static String display(Object o, String... as) {
JavaKernel kernel = Kernel.getKernelInstance();

if (kernel != null) {
DisplayData data = kernel.getRenderer().renderAs(o, as);
DisplayData data = kernel.getRenderer().renderAs(parseAsJson(o, as), as);

String id = data.getDisplayId();
if (id == null) {
Expand Down Expand Up @@ -104,10 +123,21 @@ public static void updateDisplay(String id, Object o, String... as) {
JavaKernel kernel = Kernel.getKernelInstance();

if (kernel != null) {
DisplayData data = kernel.getRenderer().renderAs(o, as);
DisplayData data = kernel.getRenderer().renderAs(parseAsJson(o, as), as);
kernel.getIO().display.updateDisplay(id, data);
} else {
throw new RuntimeException("No IJava kernel running");
}
}

private static Object parseAsJson(Object data, String... as) {
if (data instanceof JsonElement jsonElement) return jsonElement;
String jsonMime = MIMEType.APPLICATION_JSON.toString();
if (Objects.isNull(as) || as.length == 0 || Arrays.stream(as).anyMatch(mime -> mime.contains(jsonMime))) {
if (data instanceof String jsonStr) return JsonParser.parseString(jsonStr);
else if (data instanceof Reader reader) return JsonParser.parseReader(reader);
else return GSON.toJsonTree(data);
}
return data;
}
}
4 changes: 2 additions & 2 deletions src/main/java/io/github/spencerpark/ijava/runtime/Magics.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public static <T> T lineMagic(String name, List<String> args) {

if (kernel != null) {
try {
return kernel.getMagics().applyLineMagic(name, args);
return JavaKernel.getMagics().applyLineMagic(name, args);
} catch (UndefinedMagicException e) {
throw e;
} catch (Exception e) {
Expand All @@ -51,7 +51,7 @@ public static <T> T cellMagic(String name, List<String> args, String body) {

if (kernel != null) {
try {
return kernel.getMagics().applyCellMagic(name, args, body);
return JavaKernel.getMagics().applyCellMagic(name, args, body);
} catch (UndefinedMagicException e) {
throw e;
} catch (Exception e) {
Expand Down

0 comments on commit 6378723

Please sign in to comment.