Skip to content

Commit 8837bb4

Browse files
committed
Process libraries from resolved classpath
1 parent e730ea4 commit 8837bb4

27 files changed

+324
-158
lines changed

jupyter-lib/api/src/main/kotlin/org/jetbrains/kotlinx/jupyter/api/api.kt

+7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
package org.jetbrains.kotlinx.jupyter.api
22

3+
import org.jetbrains.kotlinx.jupyter.api.libraries.CodeExecution
4+
import org.jetbrains.kotlinx.jupyter.api.libraries.Execution
5+
import org.jetbrains.kotlinx.jupyter.api.libraries.LibraryDefinition
6+
7+
typealias TypeName = String
8+
typealias Code = String
9+
310
/**
411
* Single evaluated notebook cell representation
512
*/
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.jetbrains.kotlinx.jupyter.api.libraries
2+
3+
import kotlinx.serialization.Serializable
4+
import org.jetbrains.kotlinx.jupyter.api.Code
5+
import org.jetbrains.kotlinx.jupyter.api.KotlinKernelHost
6+
import org.jetbrains.kotlinx.jupyter.util.CodeExecutionSerializer
7+
import org.jetbrains.kotlinx.jupyter.util.replaceVariables
8+
9+
@Serializable(with = CodeExecutionSerializer::class)
10+
class CodeExecution(val code: Code) : Execution {
11+
override fun execute(host: KotlinKernelHost): Any? {
12+
return host.execute(code)
13+
}
14+
15+
override fun replaceVariables(mapping: Map<String, String>): CodeExecution {
16+
return CodeExecution(replaceVariables(code, mapping))
17+
}
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.jetbrains.kotlinx.jupyter.api.libraries
2+
3+
import org.jetbrains.kotlinx.jupyter.api.KotlinKernelHost
4+
5+
fun interface Execution : VariablesSubstitutionAware<Execution> {
6+
fun execute(host: KotlinKernelHost): Any?
7+
8+
override fun replaceVariables(mapping: Map<String, String>): Execution = this
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package org.jetbrains.kotlinx.jupyter.api.libraries
2+
3+
import org.jetbrains.kotlinx.jupyter.api.AlwaysRendererTypeHandler
4+
import org.jetbrains.kotlinx.jupyter.api.KotlinKernelHost
5+
import org.jetbrains.kotlinx.jupyter.api.RendererTypeHandler
6+
7+
open class FunctionalLibraryDefinition(
8+
override val repositories: List<String> = emptyList(),
9+
override val dependencies: List<String> = emptyList(),
10+
override val imports: List<String> = emptyList(),
11+
) : LibraryDefinition {
12+
open fun onInit(host: KotlinKernelHost): Any? {
13+
return Unit
14+
}
15+
open fun onCellInit(host: KotlinKernelHost): Any? {
16+
return Unit
17+
}
18+
open fun onShutdown(host: KotlinKernelHost): Any? {
19+
return Unit
20+
}
21+
open fun render(host: KotlinKernelHost, value: Any?, resultFieldName: String?): Any? {
22+
return value
23+
}
24+
25+
override val init: List<Execution> by lazy {
26+
listOf(Execution(::onInit))
27+
}
28+
29+
override val initCell: List<Execution> by lazy {
30+
listOf(Execution(::onCellInit))
31+
}
32+
33+
override val shutdown: List<Execution> by lazy {
34+
listOf(Execution(::onShutdown))
35+
}
36+
37+
override val renderers: List<RendererTypeHandler> by lazy {
38+
listOf(
39+
AlwaysRendererTypeHandler { host, value, fieldName ->
40+
KotlinKernelHost.Result(render(host, value, fieldName), null)
41+
}
42+
)
43+
}
44+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package org.jetbrains.kotlinx.jupyter.api.libraries
2+
3+
import org.jetbrains.kotlinx.jupyter.api.GenerativeTypeHandler
4+
import org.jetbrains.kotlinx.jupyter.api.RendererTypeHandler
5+
6+
interface LibraryDefinition {
7+
/**
8+
* List of artifact dependencies in gradle colon-separated format
9+
*/
10+
val dependencies: List<String>
11+
get() = emptyList()
12+
13+
/**
14+
* List of repository URLs to resolve dependencies in
15+
*/
16+
val repositories: List<String>
17+
get() = emptyList()
18+
19+
/**
20+
* List of imports: simple and star imports are both allowed
21+
*/
22+
val imports: List<String>
23+
get() = emptyList()
24+
25+
/**
26+
* List of code snippets evaluated on library initialization
27+
*/
28+
val init: List<Execution>
29+
get() = emptyList()
30+
31+
/**
32+
* List of code snippets evaluated before every cell evaluation
33+
*/
34+
val initCell: List<Execution>
35+
get() = emptyList()
36+
37+
/**
38+
* List of code snippets evaluated on kernel shutdown
39+
*/
40+
val shutdown: List<Execution>
41+
get() = emptyList()
42+
43+
val renderers: List<RendererTypeHandler>
44+
get() = emptyList()
45+
val converters: List<GenerativeTypeHandler>
46+
get() = emptyList()
47+
val annotations: List<GenerativeTypeHandler>
48+
get() = emptyList()
49+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.jetbrains.kotlinx.jupyter.api.libraries
2+
3+
import org.jetbrains.kotlinx.jupyter.api.GenerativeTypeHandler
4+
import org.jetbrains.kotlinx.jupyter.api.RendererTypeHandler
5+
6+
class LibraryDefinitionImpl(
7+
override val dependencies: List<String> = emptyList(),
8+
override val repositories: List<String> = emptyList(),
9+
override val imports: List<String> = emptyList(),
10+
override val init: List<Execution> = emptyList(),
11+
override val initCell: List<Execution> = emptyList(),
12+
override val shutdown: List<Execution> = emptyList(),
13+
override val renderers: List<RendererTypeHandler> = emptyList(),
14+
override val converters: List<GenerativeTypeHandler> = emptyList(),
15+
override val annotations: List<GenerativeTypeHandler> = emptyList(),
16+
) : LibraryDefinition
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.jetbrains.kotlinx.jupyter.api.libraries
2+
3+
import org.jetbrains.kotlinx.jupyter.api.Notebook
4+
5+
interface LibraryDefinitionProducer {
6+
fun getDefinitions(notebook: Notebook<*>?): List<LibraryDefinition>
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package org.jetbrains.kotlinx.jupyter.api.libraries
2+
3+
interface VariablesSubstitutionAware<out T> {
4+
fun replaceVariables(mapping: Map<String, String>): T
5+
}

jupyter-lib/api/src/main/kotlin/org/jetbrains/kotlinx/jupyter/api/libraryConnection.kt

-117
This file was deleted.

jupyter-lib/api/src/main/kotlin/org/jetbrains/kotlinx/jupyter/api/typeHandlers.kt

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
package org.jetbrains.kotlinx.jupyter.api
22

33
import kotlinx.serialization.Serializable
4+
import org.jetbrains.kotlinx.jupyter.api.libraries.VariablesSubstitutionAware
45
import org.jetbrains.kotlinx.jupyter.util.TypeHandlerCodeExecutionSerializer
56
import org.jetbrains.kotlinx.jupyter.util.replaceVariables
67
import kotlin.reflect.KClass
78

8-
fun interface TypeHandlerExecution : VariablesSubstitutionAvailable<TypeHandlerExecution> {
9+
fun interface TypeHandlerExecution : VariablesSubstitutionAware<TypeHandlerExecution> {
910
fun execute(host: KotlinKernelHost, value: Any?, resultFieldName: String?): KotlinKernelHost.Result
1011

1112
override fun replaceVariables(mapping: Map<String, String>): TypeHandlerExecution = this
1213
}
1314

14-
interface RendererTypeHandler : VariablesSubstitutionAvailable<RendererTypeHandler> {
15+
interface RendererTypeHandler : VariablesSubstitutionAware<RendererTypeHandler> {
1516
fun acceptsType(type: KClass<*>): Boolean
1617

1718
val execution: TypeHandlerExecution
@@ -46,7 +47,7 @@ class ExactRendererTypeHandler(val className: TypeName, override val execution:
4647
}
4748

4849
@Serializable
49-
class GenerativeTypeHandler(val className: TypeName, val code: Code) : VariablesSubstitutionAvailable<GenerativeTypeHandler> {
50+
class GenerativeTypeHandler(val className: TypeName, val code: Code) : VariablesSubstitutionAware<GenerativeTypeHandler> {
5051
override fun replaceVariables(mapping: Map<String, String>): GenerativeTypeHandler {
5152
return GenerativeTypeHandler(className, replaceVariables(code, mapping))
5253
}

jupyter-lib/api/src/main/kotlin/org/jetbrains/kotlinx/jupyter/util/libraryProcessing.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package org.jetbrains.kotlinx.jupyter.util
22

3-
import org.jetbrains.kotlinx.jupyter.api.VariablesSubstitutionAvailable
3+
import org.jetbrains.kotlinx.jupyter.api.libraries.VariablesSubstitutionAware
44

55
fun replaceVariables(str: String, mapping: Map<String, String>) =
66
mapping.asSequence().fold(str) { s, template ->
@@ -11,4 +11,4 @@ fun replaceVariables(str: String, mapping: Map<String, String>) =
1111
fun Iterable<String>.replaceVariables(mapping: Map<String, String>) = map { replaceVariables(it, mapping) }
1212

1313
@JvmName("replaceVariablesExecution")
14-
fun <T : VariablesSubstitutionAvailable<T>> Iterable<T>.replaceVariables(mapping: Map<String, String>) = map { it.replaceVariables(mapping) }
14+
fun <T : VariablesSubstitutionAware<T>> Iterable<T>.replaceVariables(mapping: Map<String, String>) = map { it.replaceVariables(mapping) }

jupyter-lib/api/src/main/kotlin/org/jetbrains/kotlinx/jupyter/util/serializers.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ import kotlinx.serialization.encoding.Decoder
88
import kotlinx.serialization.encoding.Encoder
99
import kotlinx.serialization.serializer
1010
import org.jetbrains.kotlinx.jupyter.api.Code
11-
import org.jetbrains.kotlinx.jupyter.api.CodeExecution
1211
import org.jetbrains.kotlinx.jupyter.api.ExactRendererTypeHandler
1312
import org.jetbrains.kotlinx.jupyter.api.GenerativeTypeHandler
1413
import org.jetbrains.kotlinx.jupyter.api.TypeHandlerCodeExecution
14+
import org.jetbrains.kotlinx.jupyter.api.libraries.CodeExecution
1515
import kotlin.reflect.KClass
1616
import kotlin.reflect.KProperty1
1717

jupyter-lib/lib/src/main/kotlin/jupyter/kotlin/ScriptTemplateWithDisplayHelpers.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package jupyter.kotlin
22

3-
import org.jetbrains.kotlinx.jupyter.api.CodeExecution
43
import org.jetbrains.kotlinx.jupyter.api.Notebook
54
import org.jetbrains.kotlinx.jupyter.api.ResultsAccessor
5+
import org.jetbrains.kotlinx.jupyter.api.libraries.CodeExecution
66

77
abstract class ScriptTemplateWithDisplayHelpers(
88
val notebook: Notebook<*>,

jupyter-lib/shared-compiler/src/main/kotlin/org/jetbrains/kotlinx/jupyter/config/defaultImports.kt

+1
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ val defaultRepositories = arrayOf(
1111
val defaultGlobalImports = listOf(
1212
"kotlin.math.*",
1313
"org.jetbrains.kotlinx.jupyter.api.*",
14+
"org.jetbrains.kotlinx.jupyter.api.libraries.*",
1415
)

jupyter-lib/shared-compiler/src/main/kotlin/org/jetbrains/kotlinx/jupyter/libraries/LibrariesProcessor.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package org.jetbrains.kotlinx.jupyter.libraries
22

33
import org.jetbrains.kotlinx.jupyter.api.KotlinKernelVersion
4-
import org.jetbrains.kotlinx.jupyter.api.LibraryDefinitionProducer
4+
import org.jetbrains.kotlinx.jupyter.api.libraries.LibraryDefinitionImpl
5+
import org.jetbrains.kotlinx.jupyter.api.libraries.LibraryDefinitionProducer
56
import org.jetbrains.kotlinx.jupyter.compiler.util.ReplCompilerException
67
import org.jetbrains.kotlinx.jupyter.util.replaceVariables
78

0 commit comments

Comments
 (0)