Skip to content

Commit e422860

Browse files
path overloads fixes
1 parent 8af8973 commit e422860

File tree

7 files changed

+75
-51
lines changed

7 files changed

+75
-51
lines changed

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import java.io.InputStream
1818
import java.net.URL
1919
import java.nio.file.Path
2020
import java.util.ServiceLoader
21+
import kotlin.io.path.extension
2122
import kotlin.reflect.KType
2223

2324
public sealed interface SupportedFormat {
@@ -36,7 +37,7 @@ public sealed interface SupportedFormat {
3637
public sealed interface SupportedFormatSample {
3738

3839
@JvmInline
39-
public value class DataFile(public val sampleFile: File) : SupportedFormatSample
40+
public value class DataFile(public val sampleFilePath: Path) : SupportedFormatSample
4041

4142
@JvmInline
4243
public value class DataUrl(public val sampleUrl: URL) : SupportedFormatSample
@@ -140,6 +141,12 @@ internal fun guessFormatForExtension(
140141
sample: SupportedFormatSample? = null,
141142
): SupportedFormat? = formats.firstOrNull { it.acceptsExtension(ext) && (sample == null || it.acceptsSample(sample)) }
142143

144+
internal fun guessFormat(
145+
path: Path,
146+
formats: List<SupportedFormat> = supportedFormats,
147+
sample: SupportedFormatSample.DataFile? = SupportedFormatSample.DataFile(path),
148+
): SupportedFormat? = guessFormatForExtension(path.extension.lowercase(), formats, sample = sample)
149+
143150
internal fun guessFormat(
144151
url: URL,
145152
formats: List<SupportedFormat> = supportedFormats,
@@ -286,7 +293,6 @@ public fun File.readDataFrame(header: List<String> = emptyList()): AnyFrame = Da
286293

287294
public fun File.readDataRow(header: List<String> = emptyList()): AnyRow = DataRow.read(this, header)
288295

289-
// Path-based overloads and extensions
290296
public fun DataFrame.Companion.read(path: Path, header: List<String> = emptyList()): AnyFrame =
291297
read(
292298
path = path,

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

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -114,25 +114,28 @@ public fun DataFrame.Companion.readCsv(
114114
parseParallel: Boolean = PARSE_PARALLEL,
115115
compression: Compression<*> = Compression.of(file),
116116
): DataFrame<*> =
117-
readCsv(
118-
path = file.toPath(),
119-
delimiter = delimiter,
120-
header = header,
121-
hasFixedWidthColumns = hasFixedWidthColumns,
122-
fixedColumnWidths = fixedColumnWidths,
123-
colTypes = colTypes,
124-
skipLines = skipLines,
125-
readLines = readLines,
126-
parserOptions = parserOptions,
127-
ignoreEmptyLines = ignoreEmptyLines,
128-
allowMissingColumns = allowMissingColumns,
129-
ignoreExcessColumns = ignoreExcessColumns,
130-
quote = quote,
131-
ignoreSurroundingSpaces = ignoreSurroundingSpaces,
132-
trimInsideQuoted = trimInsideQuoted,
133-
parseParallel = parseParallel,
134-
compression = Compression.of(file.toPath()),
135-
)
117+
FileInputStream(file).use {
118+
readDelimImpl(
119+
inputStream = it,
120+
delimiter = delimiter,
121+
header = header,
122+
hasFixedWidthColumns = hasFixedWidthColumns,
123+
fixedColumnWidths = fixedColumnWidths,
124+
colTypes = colTypes,
125+
skipLines = skipLines,
126+
readLines = readLines,
127+
parserOptions = parserOptions,
128+
ignoreEmptyLines = ignoreEmptyLines,
129+
allowMissingColumns = allowMissingColumns,
130+
ignoreExcessColumns = ignoreExcessColumns,
131+
quote = quote,
132+
ignoreSurroundingSpaces = ignoreSurroundingSpaces,
133+
trimInsideQuoted = trimInsideQuoted,
134+
parseParallel = parseParallel,
135+
compression = compression,
136+
adjustCsvSpecs = ADJUST_CSV_SPECS,
137+
)
138+
}
136139

137140
/**
138141
* @include [CommonReadDelimDocs.CsvDocs]

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

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
@file:JvmName("ReadTsvDeephavenKt")
2+
13
package org.jetbrains.kotlinx.dataframe.io
24

35
import org.jetbrains.kotlinx.dataframe.DataFrame
@@ -27,6 +29,7 @@ import org.jetbrains.kotlinx.dataframe.documentationCsv.DelimParams.TRIM_INSIDE_
2729
import org.jetbrains.kotlinx.dataframe.documentationCsv.DelimParams.TSV_DELIMITER
2830
import org.jetbrains.kotlinx.dataframe.impl.io.readDelimImpl
2931
import java.io.File
32+
import java.io.FileInputStream
3033
import java.io.InputStream
3134
import java.net.URL
3235
import java.nio.file.Path
@@ -111,25 +114,28 @@ public fun DataFrame.Companion.readTsv(
111114
parseParallel: Boolean = PARSE_PARALLEL,
112115
compression: Compression<*> = Compression.of(file),
113116
): DataFrame<*> =
114-
readTsv(
115-
path = file.toPath(),
116-
delimiter = delimiter,
117-
header = header,
118-
hasFixedWidthColumns = hasFixedWidthColumns,
119-
fixedColumnWidths = fixedColumnWidths,
120-
colTypes = colTypes,
121-
skipLines = skipLines,
122-
readLines = readLines,
123-
parserOptions = parserOptions,
124-
ignoreEmptyLines = ignoreEmptyLines,
125-
allowMissingColumns = allowMissingColumns,
126-
ignoreExcessColumns = ignoreExcessColumns,
127-
quote = quote,
128-
ignoreSurroundingSpaces = ignoreSurroundingSpaces,
129-
trimInsideQuoted = trimInsideQuoted,
130-
parseParallel = parseParallel,
131-
compression = Compression.of(file.toPath()),
132-
)
117+
FileInputStream(file).use {
118+
readDelimImpl(
119+
inputStream = it,
120+
delimiter = delimiter,
121+
header = header,
122+
hasFixedWidthColumns = hasFixedWidthColumns,
123+
fixedColumnWidths = fixedColumnWidths,
124+
colTypes = colTypes,
125+
skipLines = skipLines,
126+
readLines = readLines,
127+
parserOptions = parserOptions,
128+
ignoreEmptyLines = ignoreEmptyLines,
129+
allowMissingColumns = allowMissingColumns,
130+
ignoreExcessColumns = ignoreExcessColumns,
131+
quote = quote,
132+
ignoreSurroundingSpaces = ignoreSurroundingSpaces,
133+
trimInsideQuoted = trimInsideQuoted,
134+
parseParallel = parseParallel,
135+
compression = compression,
136+
adjustCsvSpecs = ADJUST_CSV_SPECS,
137+
)
138+
}
133139

134140
/**
135141
* @include [CommonReadDelimDocs.TsvDocs]

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,9 @@ public fun AnyFrame.writeDelim(
7676
headerComments: List<String> = HEADER_COMMENTS,
7777
recordSeparator: String = RECORD_SEPARATOR,
7878
): Unit =
79-
writeDelim(
80-
path = file.toPath(),
79+
writeDelimImpl(
80+
df = this,
81+
writer = FileWriter(file),
8182
delimiter = delimiter,
8283
includeHeader = includeHeader,
8384
quote = quote,
@@ -86,6 +87,7 @@ public fun AnyFrame.writeDelim(
8687
commentChar = commentChar,
8788
headerComments = headerComments,
8889
recordSeparator = recordSeparator,
90+
adjustCsvFormat = ADJUST_CSV_FORMAT,
8991
)
9092

9193
/**

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@ public class Jdbc :
1515
SupportedDataFrameFormat {
1616
public override fun readDataFrame(stream: InputStream, header: List<String>): AnyFrame = DataFrame.readJDBC(stream)
1717

18-
public override fun readDataFrame(file: File, header: List<String>): AnyFrame = DataFrame.readJDBC(file)
19-
20-
public override fun readDataFrame(path: Path, header: List<String>): AnyFrame = DataFrame.readJDBC(path.toFile())
18+
public override fun readDataFrame(path: Path, header: List<String>): AnyFrame = DataFrame.readJDBC(path)
2119

2220
override fun readCodeForGeneration(
2321
stream: InputStream,
@@ -45,6 +43,10 @@ private fun DataFrame.Companion.readJDBC(stream: File): DataFrame<*> {
4543
TODO("Not yet implemented")
4644
}
4745

46+
private fun DataFrame.Companion.readJDBC(path: Path): DataFrame<*> {
47+
TODO("Not yet implemented")
48+
}
49+
4850
private fun DataFrame.Companion.readJDBC(stream: InputStream): DataFrame<*> {
4951
TODO("Not yet implemented")
5052
}

dataframe-openapi-generator/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/OpenApi.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public class OpenApi : SupportedCodeGenerationFormat {
7777
try {
7878
when (sample) {
7979
is SupportedFormatSample.DataString -> isOpenApiStr(sample.sampleData)
80-
is SupportedFormatSample.DataFile -> isOpenApi(sample.sampleFile)
80+
is SupportedFormatSample.DataFile -> isOpenApi(sample.sampleFilePath)
8181
is SupportedFormatSample.PathString -> isOpenApi(sample.samplePath)
8282
is SupportedFormatSample.DataUrl -> isOpenApi(sample.sampleUrl)
8383
}

dataframe-openapi-generator/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/isOpenApi.kt

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import io.swagger.parser.OpenAPIParser
55
import java.io.File
66
import java.net.URL
77
import java.nio.file.Path
8+
import kotlin.io.path.extension
89
import kotlin.io.path.readText
910

1011
private val logger = KotlinLogging.logger {}
@@ -32,11 +33,15 @@ public fun isOpenApi(url: URL): Boolean {
3233
return isOpenApiStr(url.readText())
3334
}
3435

36+
3537
public fun isOpenApi(path: Path): Boolean {
36-
val name = path.fileName?.toString()?.lowercase() ?: return false
37-
if (name.endsWith(".yml") || name.endsWith(".yaml")) return true
38-
if (!name.endsWith(".json")) return false
38+
if (path.extension.lowercase() in listOf("yml", "yaml")) {
39+
return true
40+
}
41+
42+
if (path.extension.lowercase() != "json") {
43+
return false
44+
}
45+
3946
return isOpenApiStr(path.readText())
4047
}
41-
42-
public fun isOpenApi(file: File): Boolean = isOpenApi(file.toPath())

0 commit comments

Comments
 (0)