Skip to content

Commit 05235f4

Browse files
Merge pull request #1563 from Kotlin/file_to_path
Path overloads
2 parents cfee364 + 19d2f16 commit 05235f4

File tree

23 files changed

+387
-75
lines changed

23 files changed

+387
-75
lines changed

core/api/core.api

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6086,6 +6086,7 @@ public final class org/jetbrains/kotlinx/dataframe/io/CSV : org/jetbrains/kotlin
60866086
public fun getTestOrder ()I
60876087
public fun readDataFrame (Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
60886088
public fun readDataFrame (Ljava/io/InputStream;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
6089+
public fun readDataFrame (Ljava/nio/file/Path;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
60896090
}
60906091

60916092
public final class org/jetbrains/kotlinx/dataframe/io/CSVType : java/lang/Enum {
@@ -6310,23 +6311,31 @@ public final class org/jetbrains/kotlinx/dataframe/io/GuessKt {
63106311
public static final fun read (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
63116312
public static final fun read (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/lang/String;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
63126313
public static final fun read (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/net/URL;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
6314+
public static final fun read (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/nio/file/Path;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
63136315
public static final fun read (Lorg/jetbrains/kotlinx/dataframe/DataRow$Companion;Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataRow;
63146316
public static final fun read (Lorg/jetbrains/kotlinx/dataframe/DataRow$Companion;Ljava/lang/String;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataRow;
63156317
public static final fun read (Lorg/jetbrains/kotlinx/dataframe/DataRow$Companion;Ljava/net/URL;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataRow;
6318+
public static final fun read (Lorg/jetbrains/kotlinx/dataframe/DataRow$Companion;Ljava/nio/file/Path;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataRow;
63166319
public static synthetic fun read$default (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/io/File;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
63176320
public static synthetic fun read$default (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/lang/String;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
63186321
public static synthetic fun read$default (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/net/URL;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
6322+
public static synthetic fun read$default (Lorg/jetbrains/kotlinx/dataframe/DataFrame$Companion;Ljava/nio/file/Path;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
63196323
public static synthetic fun read$default (Lorg/jetbrains/kotlinx/dataframe/DataRow$Companion;Ljava/io/File;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataRow;
63206324
public static synthetic fun read$default (Lorg/jetbrains/kotlinx/dataframe/DataRow$Companion;Ljava/lang/String;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataRow;
63216325
public static synthetic fun read$default (Lorg/jetbrains/kotlinx/dataframe/DataRow$Companion;Ljava/net/URL;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataRow;
6326+
public static synthetic fun read$default (Lorg/jetbrains/kotlinx/dataframe/DataRow$Companion;Ljava/nio/file/Path;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataRow;
63226327
public static final fun readDataFrame (Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
63236328
public static final fun readDataFrame (Ljava/net/URL;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
6329+
public static final fun readDataFrame (Ljava/nio/file/Path;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
63246330
public static synthetic fun readDataFrame$default (Ljava/io/File;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
63256331
public static synthetic fun readDataFrame$default (Ljava/net/URL;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
6332+
public static synthetic fun readDataFrame$default (Ljava/nio/file/Path;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
63266333
public static final fun readDataRow (Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataRow;
63276334
public static final fun readDataRow (Ljava/net/URL;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataRow;
6335+
public static final fun readDataRow (Ljava/nio/file/Path;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataRow;
63286336
public static synthetic fun readDataRow$default (Ljava/io/File;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataRow;
63296337
public static synthetic fun readDataRow$default (Ljava/net/URL;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataRow;
6338+
public static synthetic fun readDataRow$default (Ljava/nio/file/Path;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataRow;
63306339
}
63316340

63326341
public final class org/jetbrains/kotlinx/dataframe/io/HtmlKt {
@@ -6392,10 +6401,12 @@ public abstract interface class org/jetbrains/kotlinx/dataframe/io/SupportedCode
63926401
}
63936402

63946403
public abstract interface class org/jetbrains/kotlinx/dataframe/io/SupportedDataFrameFormat : org/jetbrains/kotlinx/dataframe/io/SupportedFormat {
6395-
public abstract fun readDataFrame (Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
6404+
public fun readDataFrame (Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
63966405
public abstract fun readDataFrame (Ljava/io/InputStream;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
6406+
public abstract fun readDataFrame (Ljava/nio/file/Path;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
63976407
public static synthetic fun readDataFrame$default (Lorg/jetbrains/kotlinx/dataframe/io/SupportedDataFrameFormat;Ljava/io/File;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
63986408
public static synthetic fun readDataFrame$default (Lorg/jetbrains/kotlinx/dataframe/io/SupportedDataFrameFormat;Ljava/io/InputStream;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
6409+
public static synthetic fun readDataFrame$default (Lorg/jetbrains/kotlinx/dataframe/io/SupportedDataFrameFormat;Ljava/nio/file/Path;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
63996410
}
64006411

64016412
public abstract interface class org/jetbrains/kotlinx/dataframe/io/SupportedFormat {
@@ -6423,6 +6434,20 @@ public final class org/jetbrains/kotlinx/dataframe/io/SupportedFormatSample$Data
64236434
public final synthetic fun unbox-impl ()Ljava/io/File;
64246435
}
64256436

6437+
public final class org/jetbrains/kotlinx/dataframe/io/SupportedFormatSample$DataPath : org/jetbrains/kotlinx/dataframe/io/SupportedFormatSample {
6438+
public static final synthetic fun box-impl (Ljava/nio/file/Path;)Lorg/jetbrains/kotlinx/dataframe/io/SupportedFormatSample$DataPath;
6439+
public static fun constructor-impl (Ljava/nio/file/Path;)Ljava/nio/file/Path;
6440+
public fun equals (Ljava/lang/Object;)Z
6441+
public static fun equals-impl (Ljava/nio/file/Path;Ljava/lang/Object;)Z
6442+
public static final fun equals-impl0 (Ljava/nio/file/Path;Ljava/nio/file/Path;)Z
6443+
public final fun getSamplePath ()Ljava/nio/file/Path;
6444+
public fun hashCode ()I
6445+
public static fun hashCode-impl (Ljava/nio/file/Path;)I
6446+
public fun toString ()Ljava/lang/String;
6447+
public static fun toString-impl (Ljava/nio/file/Path;)Ljava/lang/String;
6448+
public final synthetic fun unbox-impl ()Ljava/nio/file/Path;
6449+
}
6450+
64266451
public final class org/jetbrains/kotlinx/dataframe/io/SupportedFormatSample$DataString : org/jetbrains/kotlinx/dataframe/io/SupportedFormatSample {
64276452
public static final synthetic fun box-impl (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/io/SupportedFormatSample$DataString;
64286453
public static fun constructor-impl (Ljava/lang/String;)Ljava/lang/String;
@@ -6473,6 +6498,7 @@ public final class org/jetbrains/kotlinx/dataframe/io/TSV : org/jetbrains/kotlin
64736498
public fun getTestOrder ()I
64746499
public fun readDataFrame (Ljava/io/File;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
64756500
public fun readDataFrame (Ljava/io/InputStream;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
6501+
public fun readDataFrame (Ljava/nio/file/Path;Ljava/util/List;)Lorg/jetbrains/kotlinx/dataframe/DataFrame;
64766502
}
64776503

64786504
public final class org/jetbrains/kotlinx/dataframe/io/TsvKt {
@@ -6520,13 +6546,15 @@ public final class org/jetbrains/kotlinx/dataframe/jupyter/ImportDataSchema {
65206546
public fun <init> (Ljava/io/File;)V
65216547
public fun <init> (Ljava/lang/String;)V
65226548
public fun <init> (Ljava/net/URL;)V
6549+
public fun <init> (Ljava/nio/file/Path;)V
65236550
public final fun getUrl ()Ljava/net/URL;
65246551
}
65256552

65266553
public final class org/jetbrains/kotlinx/dataframe/jupyter/ImportDataSchemaKt {
65276554
public static final fun importDataSchema (Ljava/io/File;)Lorg/jetbrains/kotlinx/dataframe/jupyter/ImportDataSchema;
65286555
public static final fun importDataSchema (Ljava/lang/String;)Lorg/jetbrains/kotlinx/dataframe/jupyter/ImportDataSchema;
65296556
public static final fun importDataSchema (Ljava/net/URL;)Lorg/jetbrains/kotlinx/dataframe/jupyter/ImportDataSchema;
6557+
public static final fun importDataSchema (Ljava/nio/file/Path;)Lorg/jetbrains/kotlinx/dataframe/jupyter/ImportDataSchema;
65306558
}
65316559

65326560
public final class org/jetbrains/kotlinx/dataframe/jupyter/JupyterConfiguration {

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ import java.math.BigDecimal
5757
import java.math.BigInteger
5858
import java.net.URL
5959
import java.nio.charset.Charset
60+
import java.nio.file.Path
6061
import java.util.zip.GZIPInputStream
6162
import kotlin.reflect.KClass
6263
import kotlin.reflect.KType
@@ -73,6 +74,10 @@ public class CSV(private val delimiter: Char = ',') : SupportedDataFrameFormat {
7374
override fun readDataFrame(file: File, header: List<String>): AnyFrame =
7475
DataFrame.readCSV(file = file, delimiter = delimiter, header = header)
7576

77+
override fun readDataFrame(path: Path, header: List<String>): AnyFrame =
78+
// core CSV impl is deprecated, delegate via File to preserve module boundaries
79+
DataFrame.readCSV(file = path.toFile(), delimiter = delimiter, header = header)
80+
7681
override fun acceptsExtension(ext: String): Boolean = ext == "csv"
7782

7883
override fun acceptsSample(sample: SupportedFormatSample): Boolean = true // Extension is enough

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

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ import java.io.File
1616
import java.io.FileNotFoundException
1717
import java.io.InputStream
1818
import java.net.URL
19+
import java.nio.file.Path
1920
import java.util.ServiceLoader
21+
import kotlin.io.path.extension
2022
import kotlin.reflect.KType
2123

2224
public sealed interface SupportedFormat {
@@ -37,6 +39,9 @@ public sealed interface SupportedFormatSample {
3739
@JvmInline
3840
public value class DataFile(public val sampleFile: File) : SupportedFormatSample
3941

42+
@JvmInline
43+
public value class DataPath(public val samplePath: Path) : SupportedFormatSample
44+
4045
@JvmInline
4146
public value class DataUrl(public val sampleUrl: URL) : SupportedFormatSample
4247

@@ -56,7 +61,10 @@ public sealed interface SupportedFormatSample {
5661
public interface SupportedDataFrameFormat : SupportedFormat {
5762
public fun readDataFrame(stream: InputStream, header: List<String> = emptyList()): DataFrame<*>
5863

59-
public fun readDataFrame(file: File, header: List<String> = emptyList()): DataFrame<*>
64+
public fun readDataFrame(file: File, header: List<String> = emptyList()): DataFrame<*> =
65+
readDataFrame(file.toPath(), header)
66+
67+
public fun readDataFrame(path: Path, header: List<String> = emptyList()): DataFrame<*>
6068
}
6169

6270
/**
@@ -137,10 +145,10 @@ internal fun guessFormatForExtension(
137145
): SupportedFormat? = formats.firstOrNull { it.acceptsExtension(ext) && (sample == null || it.acceptsSample(sample)) }
138146

139147
internal fun guessFormat(
140-
file: File,
148+
path: Path,
141149
formats: List<SupportedFormat> = supportedFormats,
142-
sample: SupportedFormatSample.DataFile? = SupportedFormatSample.DataFile(file),
143-
): SupportedFormat? = guessFormatForExtension(file.extension.lowercase(), formats, sample = sample)
150+
sample: SupportedFormatSample.DataPath? = SupportedFormatSample.DataPath(path),
151+
): SupportedFormat? = guessFormatForExtension(path.extension.lowercase(), formats, sample = sample)
144152

145153
internal fun guessFormat(
146154
url: URL,
@@ -223,15 +231,15 @@ internal fun DataFrame.Companion.read(
223231
}
224232

225233
internal fun DataFrame.Companion.read(
226-
file: File,
234+
path: Path,
227235
format: SupportedDataFrameFormat? = null,
228236
header: List<String> = emptyList(),
229237
formats: List<SupportedDataFrameFormat> = supportedFormats.filterIsInstance<SupportedDataFrameFormat>(),
230238
): ReadAnyFrame {
231-
if (format != null) return format to format.readDataFrame(file, header = header)
239+
if (format != null) return format to format.readDataFrame(path, header = header)
232240
formats.sortedBy { it.testOrder }.forEach {
233241
try {
234-
return it to it.readDataFrame(file, header = header)
242+
return it to it.readDataFrame(path, header = header)
235243
} catch (e: FileNotFoundException) {
236244
throw e
237245
} catch (e: Exception) {
@@ -249,16 +257,10 @@ internal data class GeneratedCode(val format: SupportedCodeGenerationFormat, val
249257
internal infix fun SupportedCodeGenerationFormat.to(code: Code) = GeneratedCode(this, code)
250258

251259
public fun DataFrame.Companion.read(file: File, header: List<String> = emptyList()): AnyFrame =
252-
read(
253-
file = file,
254-
format = guessFormat(file)?.also {
255-
if (it !is SupportedDataFrameFormat) error("Format $it does not support reading dataframes")
256-
} as SupportedDataFrameFormat?,
257-
header = header,
258-
).df
260+
read(file.toPath(), header)
259261

260262
public fun DataRow.Companion.read(file: File, header: List<String> = emptyList()): AnyRow =
261-
DataFrame.read(file, header).single()
263+
DataFrame.read(file.toPath(), header).single()
262264

263265
public fun DataFrame.Companion.read(url: URL, header: List<String> = emptyList()): AnyFrame =
264266
when {
@@ -293,3 +295,19 @@ public fun URL.readDataRow(header: List<String> = emptyList()): AnyRow = DataRow
293295
public fun File.readDataFrame(header: List<String> = emptyList()): AnyFrame = DataFrame.read(this, header)
294296

295297
public fun File.readDataRow(header: List<String> = emptyList()): AnyRow = DataRow.read(this, header)
298+
299+
public fun DataFrame.Companion.read(path: Path, header: List<String> = emptyList()): AnyFrame =
300+
read(
301+
path = path,
302+
format = guessFormat(path)?.also {
303+
if (it !is SupportedDataFrameFormat) error("Format $it does not support reading dataframes")
304+
} as SupportedDataFrameFormat?,
305+
header = header,
306+
).df
307+
308+
public fun DataRow.Companion.read(path: Path, header: List<String> = emptyList()): AnyRow =
309+
DataFrame.read(path, header).single()
310+
311+
public fun Path.readDataFrame(header: List<String> = emptyList()): AnyFrame = DataFrame.read(this, header)
312+
313+
public fun Path.readDataRow(header: List<String> = emptyList()): AnyRow = DataRow.read(this, header)

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import java.io.FileInputStream
1717
import java.io.InputStream
1818
import java.net.URL
1919
import java.nio.charset.Charset
20+
import java.nio.file.Path
2021

2122
@Deprecated(
2223
message = APACHE_CSV,
@@ -28,6 +29,10 @@ public class TSV : SupportedDataFrameFormat {
2829

2930
override fun readDataFrame(file: File, header: List<String>): AnyFrame = DataFrame.readTSV(file, header = header)
3031

32+
override fun readDataFrame(path: Path, header: List<String>): AnyFrame =
33+
// legacy TSV implementation lives in this module; delegate via File to keep behavior
34+
DataFrame.readTSV(path.toFile(), header = header)
35+
3136
override fun acceptsExtension(ext: String): Boolean = ext == "tsv"
3237

3338
override fun acceptsSample(sample: SupportedFormatSample): Boolean = true // Extension is enough

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/jupyter/importDataSchema.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,20 @@ import org.intellij.lang.annotations.Language
44
import java.io.File
55
import java.net.URI
66
import java.net.URL
7+
import java.nio.file.Path
78

89
public class ImportDataSchema(public val url: URL) {
910
public constructor(path: String) : this(URI(path).toURL())
11+
public constructor(path: Path) : this(path.toUri().toURL())
1012
public constructor(file: File) : this(file.toURI().toURL())
1113
}
1214

1315
public fun importDataSchema(url: URL): ImportDataSchema = ImportDataSchema(url)
1416

1517
public fun importDataSchema(path: String): ImportDataSchema = ImportDataSchema(path)
1618

19+
public fun importDataSchema(path: Path): ImportDataSchema = ImportDataSchema(path)
20+
1721
public fun importDataSchema(file: File): ImportDataSchema = ImportDataSchema(file)
1822

1923
@Language("kts")
@@ -50,6 +54,9 @@ internal val importDataSchema =
5054
/** Import the type-only data schema from [path]. */
5155
fun importDataSchema(path: String, name: String): Unit = importDataSchema(URI(path).toURL(), name)
5256
57+
/** Import the type-only data schema from [path]. */
58+
fun importDataSchema(path: Path, name: String): Unit = importDataSchema(path.toUri().toURL(), name)
59+
5360
/** Import the type-only data schema from [file]. */
5461
fun importDataSchema(file: File, name: String): Unit = importDataSchema(file.toURI().toURL(), name)
5562
""".trimIndent()

0 commit comments

Comments
 (0)