Skip to content

Commit 9eacca5

Browse files
committed
Prototype new iteration of ImportDataSchema annotation
1 parent 295fe51 commit 9eacca5

File tree

22 files changed

+365
-16
lines changed

22 files changed

+365
-16
lines changed

core/api/core.api

Lines changed: 23 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;
@@ -6189,6 +6194,12 @@ public final class org/jetbrains/kotlinx/dataframe/io/DataFrameHtmlData$Companio
61896194
public static synthetic fun tableDefinitions$default (Lorg/jetbrains/kotlinx/dataframe/io/DataFrameHtmlData$Companion;ZZILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/io/DataFrameHtmlData;
61906195
}
61916196

6197+
public abstract interface class org/jetbrains/kotlinx/dataframe/io/DataFrameProvider {
6198+
public abstract fun default ()Lorg/jetbrains/kotlinx/dataframe/DataFrame;
6199+
public abstract fun getSchemaKType ()Lkotlin/reflect/KType;
6200+
public abstract fun read (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
6201+
}
6202+
61926203
public final class org/jetbrains/kotlinx/dataframe/io/DisplayConfiguration {
61936204
public static final field Companion Lorg/jetbrains/kotlinx/dataframe/io/DisplayConfiguration$Companion;
61946205
public synthetic fun <init> (Ljava/lang/Integer;Ljava/lang/Integer;ILkotlin/jvm/functions/Function3;Ljava/lang/String;ZZZZZILkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -6305,6 +6316,18 @@ public final class org/jetbrains/kotlinx/dataframe/io/RendererDecimalFormat$Comp
63056316
public final fun of-VVLz-gw (Ljava/lang/String;)Ljava/lang/String;
63066317
}
63076318

6319+
public abstract interface class org/jetbrains/kotlinx/dataframe/io/SchemaReader {
6320+
public static final field Companion Lorg/jetbrains/kotlinx/dataframe/io/SchemaReader$Companion;
6321+
public static final field DEFAULT_QUALIFIER Ljava/lang/String;
6322+
public fun accepts (Ljava/lang/String;Ljava/lang/String;)Z
6323+
public fun default (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
6324+
public abstract fun read (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
6325+
}
6326+
6327+
public final class org/jetbrains/kotlinx/dataframe/io/SchemaReader$Companion {
6328+
public static final field DEFAULT_QUALIFIER Ljava/lang/String;
6329+
}
6330+
63086331
public final class org/jetbrains/kotlinx/dataframe/io/StringKt {
63096332
public static final fun renderToString (Lorg/jetbrains/kotlinx/dataframe/DataFrame;IIZZZZZ)Ljava/lang/String;
63106333
public static synthetic fun renderToString$default (Lorg/jetbrains/kotlinx/dataframe/DataFrame;IIZZZZZILjava/lang/Object;)Ljava/lang/String;

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import org.jetbrains.kotlinx.dataframe.api.KeyValueProperty
55
import org.jetbrains.kotlinx.dataframe.columns.ColumnGroup
66
import org.jetbrains.kotlinx.dataframe.columns.FrameColumn
77
import org.jetbrains.kotlinx.dataframe.documentation.UnifyingNumbers
8+
import org.jetbrains.kotlinx.dataframe.io.SchemaReader
89

910
/**
1011
* Annotation preprocessing will generate a DataSchema interface from the data at `path`.
@@ -43,6 +44,9 @@ public annotation class ImportDataSchema(
4344
val enableExperimentalOpenApi: Boolean = false,
4445
)
4546

47+
@Target(AnnotationTarget.CLASS)
48+
public annotation class DataSchemaSource(val source: String, val qualifier: String = SchemaReader.DEFAULT_QUALIFIER)
49+
4650
public enum class DataSchemaVisibility {
4751
INTERNAL,
4852
IMPLICIT_PUBLIC,

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,36 @@ 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 companion object {
82+
public const val DEFAULT_QUALIFIER: String = "default"
83+
}
84+
85+
public fun accepts(path: String, qualifier: String): Boolean = qualifier == DEFAULT_QUALIFIER
86+
87+
public fun read(path: String): DataFrame<*>
88+
89+
public fun default(path: String): DataFrame<*> = read(path)
90+
}
91+
6292
/**
6393
* Implement this interface to provide additional [DataSchema] interface generation formats for DataFrames (such as OpenAPI).
6494
* 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
@@ -47,6 +47,13 @@ public final class org/jetbrains/kotlinx/dataframe/io/ArrowReadingKt {
4747
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;
4848
}
4949

50+
public final class org/jetbrains/kotlinx/dataframe/io/ArrowSchemaReader : org/jetbrains/kotlinx/dataframe/io/SchemaReader {
51+
public fun <init> ()V
52+
public fun accepts (Ljava/lang/String;Ljava/lang/String;)Z
53+
public fun default (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
54+
public fun read (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
55+
}
56+
5057
public final class org/jetbrains/kotlinx/dataframe/io/ArrowTypesMatchingKt {
5158
public static final fun toArrowField (Lorg/jetbrains/kotlinx/dataframe/DataColumn;Lkotlin/jvm/functions/Function1;)Lorg/apache/arrow/vector/types/pojo/Field;
5259
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: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,13 @@ public class ArrowFeather : SupportedDataFrameFormat {
3636
DefaultReadArrowMethod(pathRepresentation)
3737
}
3838

39+
public class ArrowSchemaReader : SchemaReader {
40+
override fun accepts(path: String, qualifier: String): Boolean =
41+
super.accepts(path, qualifier) && path.endsWith(".feather")
42+
43+
override fun read(path: String): DataFrame<*> = DataFrame.readArrowFeather(path)
44+
}
45+
3946
private const val READ_ARROW_FEATHER = "readArrowFeather"
4047

4148
internal const val ARROW_PARQUET_DEFAULT_BATCH_SIZE = 32768L
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: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,20 @@ 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 =
34+
super.accepts(path, qualifier) && path.endsWith(".csv")
35+
36+
override fun read(path: String): DataFrame<*> = DataFrame.readCsv(path)
37+
}
38+
39+
public class TsvSchemaReader : SchemaReader {
40+
override fun accepts(path: String, qualifier: String): Boolean =
41+
super.accepts(path, qualifier) && path.endsWith(".tsv")
42+
43+
override fun read(path: String): DataFrame<*> = DataFrame.readTsv(path)
44+
}
45+
3246
private const val READ_CSV = "readCsv"
3347

3448
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)