Kotlin / Kotlin/dataframe

Provide Path/URL in CSV reading exceptions

Open
#1,815 0 comments 0 reactions 0 assignees View on GitHub
enhancement
Dominant language
Kotlin
Stars
1.1k
Forks
83
Avg merge
4d 12h
Merged PRs (30d)
30

Description

Try running this code that contains a user error in URL:
`DataFrame.readCsv("https://github.com/Kotlin/dataframe/blob/master/data/jetbrains_repositories.csv")`

What users sees:
```
Exception in thread "main" java.lang.IllegalStateException: Could not read delimiter-separated data: CsvReaderException: Caught exception: While processing row 7, column (Column 0):
at org.jetbrains.kotlinx.dataframe.impl.io.ReadDelimDeephavenKt.readDelimImpl(readDelim.kt:155)
at org.jetbrains.kotlinx.dataframe.io.ReadCsvDeephavenKt.readCsv$lambda$3(readCsv.kt:220)
at org.jetbrains.kotlinx.dataframe.io.CommonKt.catchHttpResponse(common.kt:42)
at org.jetbrains.kotlinx.dataframe.io.ReadCsvDeephavenKt.readCsv(readCsv.kt:219)
at org.jetbrains.kotlinx.dataframe.io.ReadCsvDeephavenKt.readCsv$default(readCsv.kt:200)
at org.jetbrains.kotlin.MainKt.main(Main.kt:8)
at org.jetbrains.kotlin.MainKt.main(Main.kt)
Caused by: io.deephaven.csv.util.CsvReaderException: Caught exception
at io.deephaven.csv.reading.CsvReader.commonReadLogic(CsvReader.java:240)
at io.deephaven.csv.reading.CsvReader.delimitedReadLogic(CsvReader.java:99)
at io.deephaven.csv.reading.CsvReader.read(CsvReader.java:70)
at org.jetbrains.kotlinx.dataframe.impl.io.ReadDelimDeephavenKt.readDelimImpl(readDelim.kt:143)
... 6 more
Caused by: io.deephaven.csv.util.CsvReaderException: While processing row 7, column (Column 0):
at io.deephaven.csv.reading.ParseInputToDenseStorage$RowAppender.processNextRow(ParseInputToDenseStorage.java:200)
at io.deephaven.csv.reading.ParseInputToDenseStorage.doit(ParseInputToDenseStorage.java:64)
at io.deephaven.csv.reading.CsvReader.lambda$commonReadLogic$0(CsvReader.java:141)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614)
at java.base/java.lang.Thread.run(Thread.java:1474)
Caused by: io.deephaven.csv.util.CsvReaderException: Column assumed empty but contains data
at io.deephaven.csv.reading.ParseInputToDenseStorage.appendToDenseStorageWriter(ParseInputToDenseStorage.java:263)
at io.deephaven.csv.reading.ParseInputToDenseStorage.access$000(ParseInputToDenseStorage.java:23)
at io.deephaven.csv.reading.ParseInputToDenseStorage$RowAppender.processNextRow(ParseInputToDenseStorage.java:192)
... 8 more
```

Proposed:
Let's catch CsvReaderException and re-throw our own exception with URL + original exception as cause. Maybe clickable URL will prompt user to check actual content and see that in fact this is not direct link to CSV, but to a GitHub page. IMO all our reading functions should follow this idea

Contributor guide

Open the contributing guide

Research direction

Start by tracing CSV errors through impl/io/readDelim.kt, io/ReadCsvDeephavenKt/readCsv.kt, and io/common.kt, using the stack trace as the entry point. Check how the reading functions propagate CsvReaderException and add coverage for the supplied GitHub URL case; done means the resulting exception includes the source URL while preserving the original cause.

Written by the indexing model from the issue text.

Assessment

Tech stack
kotlin
Domain
data
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
58/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.