Provide Path/URL in CSV reading exceptions
- 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
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