Skip to content

Commit 6ab4ef8

Browse files
committed
Prototype new iteration of ImportDataSchema annotation
1 parent a7a2f7f commit 6ab4ef8

File tree

22 files changed

+333
-16
lines changed

22 files changed

+333
-16
lines changed

core/api/core.api

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,11 @@ public abstract interface annotation class org/jetbrains/kotlinx/dataframe/annot
227227
public abstract fun isOpen ()Z
228228
}
229229

230+
public abstract interface annotation class org/jetbrains/kotlinx/dataframe/annotations/DataSchemaSource : java/lang/annotation/Annotation {
231+
public abstract fun qualifier ()Ljava/lang/String;
232+
public abstract fun source ()Ljava/lang/String;
233+
}
234+
230235
public final class org/jetbrains/kotlinx/dataframe/annotations/DataSchemaVisibility : java/lang/Enum {
231236
public static final field EXPLICIT_PUBLIC Lorg/jetbrains/kotlinx/dataframe/annotations/DataSchemaVisibility;
232237
public static final field IMPLICIT_PUBLIC Lorg/jetbrains/kotlinx/dataframe/annotations/DataSchemaVisibility;
@@ -6156,6 +6161,12 @@ public final class org/jetbrains/kotlinx/dataframe/io/DataFrameHtmlData$Companio
61566161
public static synthetic fun tableDefinitions$default (Lorg/jetbrains/kotlinx/dataframe/io/DataFrameHtmlData$Companion;ZZILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/io/DataFrameHtmlData;
61576162
}
61586163

6164+
public abstract interface class org/jetbrains/kotlinx/dataframe/io/DataFrameProvider {
6165+
public abstract fun default ()Lorg/jetbrains/kotlinx/dataframe/DataFrame;
6166+
public abstract fun getSchemaKType ()Lkotlin/reflect/KType;
6167+
public abstract fun read (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
6168+
}
6169+
61596170
public final class org/jetbrains/kotlinx/dataframe/io/DisplayConfiguration {
61606171
public static final field Companion Lorg/jetbrains/kotlinx/dataframe/io/DisplayConfiguration$Companion;
61616172
public synthetic fun <init> (Ljava/lang/Integer;Ljava/lang/Integer;ILkotlin/jvm/functions/Function3;Ljava/lang/String;ZZZZZILkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -6272,6 +6283,12 @@ public final class org/jetbrains/kotlinx/dataframe/io/RendererDecimalFormat$Comp
62726283
public final fun of-VVLz-gw (Ljava/lang/String;)Ljava/lang/String;
62736284
}
62746285

6286+
public abstract interface class org/jetbrains/kotlinx/dataframe/io/SchemaReader {
6287+
public abstract fun accepts (Ljava/lang/String;Ljava/lang/String;)Z
6288+
public fun default (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
6289+
public abstract fun read (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
6290+
}
6291+
62756292
public abstract interface class org/jetbrains/kotlinx/dataframe/io/SupportedCodeGenerationFormat : org/jetbrains/kotlinx/dataframe/io/SupportedFormat {
62766293
public abstract fun readCodeForGeneration (Ljava/io/File;Ljava/lang/String;Z)Ljava/lang/String;
62776294
public abstract fun readCodeForGeneration (Ljava/io/InputStream;Ljava/lang/String;Z)Ljava/lang/String;

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/annotations/ImportDataSchema.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ public annotation class ImportDataSchema(
4343
val enableExperimentalOpenApi: Boolean = false,
4444
)
4545

46+
@Target(AnnotationTarget.CLASS)
47+
public annotation class DataSchemaSource(val source: String, val qualifier: String = "default")
48+
4649
public enum class DataSchemaVisibility {
4750
INTERNAL,
4851
IMPLICIT_PUBLIC,

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/guess.kt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,32 @@ public interface SupportedDataFrameFormat : SupportedFormat {
5959
public fun readDataFrame(file: File, header: List<String> = emptyList()): DataFrame<*>
6060
}
6161

62+
/**
63+
* User-facing API implemented by a companion object of an imported schema [org.jetbrains.kotlinx.dataframe.annotations.DataSchemaSource]
64+
* Intended use:
65+
* 1. Interact with this API to read dataframe of a desired type
66+
* 2. API is used to implement "generic dataframe reader" based on [schemaKType] and other available methods
67+
*/
68+
public interface DataFrameProvider<T> {
69+
public val schemaKType: KType
70+
71+
public fun default(): DataFrame<T>
72+
73+
public fun read(path: String): DataFrame<T>
74+
}
75+
76+
/**
77+
* Handler of classes annotated with [org.jetbrains.kotlinx.dataframe.annotations.DataSchemaSource].
78+
* Implementations must have a single zero-argument constructor
79+
*/
80+
public interface SchemaReader {
81+
public fun accepts(path: String, qualifier: String): Boolean
82+
83+
public fun read(path: String): DataFrame<*>
84+
85+
public fun default(path: String): DataFrame<*> = read(path)
86+
}
87+
6288
/**
6389
* Implement this interface to provide additional [DataSchema] interface generation formats for DataFrames (such as OpenAPI).
6490
* Note, this doesn't add functionality to [DataFrame.Companion.read], just [ImportDataSchema] and Gradle plugin.

dataframe-arrow/api/dataframe-arrow.api

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ public final class org/jetbrains/kotlinx/dataframe/io/ArrowReadingKt {
3939
public static synthetic fun toDataFrame$default (Lorg/apache/arrow/vector/ipc/ArrowReader;Lorg/jetbrains/kotlinx/dataframe/api/NullabilityOptions;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
4040
}
4141

42+
public final class org/jetbrains/kotlinx/dataframe/io/ArrowSchemaReader : org/jetbrains/kotlinx/dataframe/io/SchemaReader {
43+
public fun <init> ()V
44+
public fun accepts (Ljava/lang/String;Ljava/lang/String;)Z
45+
public fun default (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
46+
public fun read (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
47+
}
48+
4249
public final class org/jetbrains/kotlinx/dataframe/io/ArrowTypesMatchingKt {
4350
public static final fun toArrowField (Lorg/jetbrains/kotlinx/dataframe/DataColumn;Lkotlin/jvm/functions/Function1;)Lorg/apache/arrow/vector/types/pojo/Field;
4451
public static synthetic fun toArrowField$default (Lorg/jetbrains/kotlinx/dataframe/DataColumn;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lorg/apache/arrow/vector/types/pojo/Field;

dataframe-arrow/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/arrowReading.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ public class ArrowFeather : SupportedDataFrameFormat {
3434
DefaultReadArrowMethod(pathRepresentation)
3535
}
3636

37+
public class ArrowSchemaReader : SchemaReader {
38+
override fun accepts(path: String, qualifier: String): Boolean = path.endsWith(".feather")
39+
override fun read(path: String): DataFrame<*> = DataFrame.readArrowFeather(path)
40+
}
41+
3742
private const val READ_ARROW_FEATHER = "readArrowFeather"
3843

3944
private class DefaultReadArrowMethod(path: String?) :
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
org.jetbrains.kotlinx.dataframe.io.ArrowSchemaReader

dataframe-csv/api/dataframe-csv.api

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@ public final class org/jetbrains/kotlinx/dataframe/io/CsvDeephaven : org/jetbrai
1010
public fun readDataFrame (Ljava/io/InputStream;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
1111
}
1212

13+
public final class org/jetbrains/kotlinx/dataframe/io/CsvSchemaReader : org/jetbrains/kotlinx/dataframe/io/SchemaReader {
14+
public fun <init> ()V
15+
public fun accepts (Ljava/lang/String;Ljava/lang/String;)Z
16+
public fun default (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
17+
public fun read (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
18+
}
19+
1320
public final class org/jetbrains/kotlinx/dataframe/io/QuoteMode : java/lang/Enum {
1421
public static final field ALL Lorg/jetbrains/kotlinx/dataframe/io/QuoteMode;
1522
public static final field ALL_NON_NULL Lorg/jetbrains/kotlinx/dataframe/io/QuoteMode;
@@ -102,6 +109,13 @@ public final class org/jetbrains/kotlinx/dataframe/io/TsvDeephaven : org/jetbrai
102109
public fun readDataFrame (Ljava/io/InputStream;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
103110
}
104111

112+
public final class org/jetbrains/kotlinx/dataframe/io/TsvSchemaReader : org/jetbrains/kotlinx/dataframe/io/SchemaReader {
113+
public fun <init> ()V
114+
public fun accepts (Ljava/lang/String;Ljava/lang/String;)Z
115+
public fun default (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
116+
public fun read (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
117+
}
118+
105119
public final class org/jetbrains/kotlinx/dataframe/io/UtilKt {
106120
public static final fun getDEFAULT_DELIM_NULL_STRINGS ()Ljava/util/Set;
107121
}

dataframe-csv/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/csv.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,18 @@ public class CsvDeephaven(private val delimiter: Char = DelimParams.CSV_DELIMITE
2929
}
3030
}
3131

32+
public class CsvSchemaReader : SchemaReader {
33+
override fun accepts(path: String, qualifier: String): Boolean = path.endsWith(".csv")
34+
35+
override fun read(path: String): DataFrame<*> = DataFrame.readCsv(path)
36+
}
37+
38+
public class TsvSchemaReader : SchemaReader {
39+
override fun accepts(path: String, qualifier: String): Boolean = path.endsWith(".tsv")
40+
41+
override fun read(path: String): DataFrame<*> = DataFrame.readTsv(path)
42+
}
43+
3244
private const val READ_CSV = "readCsv"
3345

3446
internal class DefaultReadCsvMethod(path: String?, arguments: MethodArguments) :
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
org.jetbrains.kotlinx.dataframe.io.CsvSchemaReader
2+
org.jetbrains.kotlinx.dataframe.io.TsvSchemaReader

dataframe-excel/api/dataframe-excel.api

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@ public final class org/jetbrains/kotlinx/dataframe/io/Excel : org/jetbrains/kotl
88
public fun readDataFrame (Ljava/io/InputStream;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
99
}
1010

11+
public final class org/jetbrains/kotlinx/dataframe/io/ExcelSchemaReader : org/jetbrains/kotlinx/dataframe/io/SchemaReader {
12+
public fun <init> ()V
13+
public fun accepts (Ljava/lang/String;Ljava/lang/String;)Z
14+
public fun default (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
15+
public fun read (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
16+
}
17+
1118
public final class org/jetbrains/kotlinx/dataframe/io/FormattingOptions {
1219
public fun <init> (Ljava/lang/String;Lorg/apache/poi/ss/usermodel/DataFormatter;)V
1320
public synthetic fun <init> (Ljava/lang/String;Lorg/apache/poi/ss/usermodel/DataFormatter;ILkotlin/jvm/internal/DefaultConstructorMarker;)V

0 commit comments

Comments
 (0)