JetBrains/requirements

Plugin 2022.3 causes an IDE Error when a PyPI project has an empty comment

Closed this issue · 1 comments

Describe the bug

If the PyPI package comment is empty, Requirements will throw an exception because it cannot decode a null value

kotlinx.serialization.json.internal.JsonDecodingException: Unexpected JSON token at offset 189126: Expected string literal but 'null' literal was found at path: $.releases['0.75.1'][0].comment_text
Use 'coerceInputValues = true' in 'Json {}` builder to coerce nulls to default values.
JSON input: .....l}],"0.75.1":[{"comment_text":null,"digests":{"md5":"c61ad39.....
	at kotlinx.serialization.json.internal.JsonExceptionsKt.JsonDecodingException(JsonExceptions.kt:24)
	at kotlinx.serialization.json.internal.JsonExceptionsKt.JsonDecodingException(JsonExceptions.kt:32)
	at kotlinx.serialization.json.internal.AbstractJsonLexer.fail(AbstractJsonLexer.kt:528)
	at kotlinx.serialization.json.internal.AbstractJsonLexer.unexpectedToken(AbstractJsonLexer.kt:205)
	at kotlinx.serialization.json.internal.StringJsonLexer.consumeNextToken(StringJsonLexer.kt:74)
	at kotlinx.serialization.json.internal.StringJsonLexer.consumeKeyString(StringJsonLexer.kt:85)
	at kotlinx.serialization.json.internal.AbstractJsonLexer.consumeString(AbstractJsonLexer.kt:313)
	at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeString(StreamingJsonDecoder.kt:292)
	at kotlinx.serialization.encoding.AbstractDecoder.decodeStringElement(AbstractDecoder.kt:58)
	at ru.meanmail.pypi.serializers.FileInfo$$serializer.deserialize(FileInfo.kt:5)
	at ru.meanmail.pypi.serializers.FileInfo$$serializer.deserialize(FileInfo.kt:5)
	at kotlinx.serialization.json.internal.PolymorphicKt.decodeSerializableValuePolymorphic(Polymorphic.kt:59)
	at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:38)
	at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableValue(AbstractDecoder.kt:43)
	at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableElement(AbstractDecoder.kt:70)
	at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableElement(StreamingJsonDecoder.kt:111)
	at kotlinx.serialization.encoding.CompositeDecoder$DefaultImpls.decodeSerializableElement$default(Decoding.kt:537)
	at kotlinx.serialization.internal.CollectionLikeSerializer.readElement(CollectionSerializers.kt:80)
	at kotlinx.serialization.internal.AbstractCollectionSerializer.readElement$default(CollectionSerializers.kt:51)
	at kotlinx.serialization.internal.AbstractCollectionSerializer.merge(CollectionSerializers.kt:36)
	at kotlinx.serialization.internal.AbstractCollectionSerializer.deserialize(CollectionSerializers.kt:43)
	at kotlinx.serialization.json.internal.PolymorphicKt.decodeSerializableValuePolymorphic(Polymorphic.kt:59)
	at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:38)
	at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableValue(AbstractDecoder.kt:43)
	at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableElement(AbstractDecoder.kt:70)
	at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableElement(StreamingJsonDecoder.kt:111)
	at kotlinx.serialization.encoding.CompositeDecoder$DefaultImpls.decodeSerializableElement$default(Decoding.kt:537)
	at kotlinx.serialization.internal.MapLikeSerializer.readElement(CollectionSerializers.kt:111)
	at kotlinx.serialization.internal.MapLikeSerializer.readElement(CollectionSerializers.kt:84)
	at kotlinx.serialization.internal.AbstractCollectionSerializer.readElement$default(CollectionSerializers.kt:51)
	at kotlinx.serialization.internal.AbstractCollectionSerializer.merge(CollectionSerializers.kt:36)
	at kotlinx.serialization.internal.AbstractCollectionSerializer.deserialize(CollectionSerializers.kt:43)
	at kotlinx.serialization.json.internal.PolymorphicKt.decodeSerializableValuePolymorphic(Polymorphic.kt:59)
	at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:38)
	at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableValue(AbstractDecoder.kt:43)
	at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableElement(AbstractDecoder.kt:70)
	at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableElement(StreamingJsonDecoder.kt:111)
	at ru.meanmail.pypi.serializers.PackageInfo$$serializer.deserialize(PackageInfo.kt:5)
	at ru.meanmail.pypi.serializers.PackageInfo$$serializer.deserialize(PackageInfo.kt:5)
	at kotlinx.serialization.json.internal.PolymorphicKt.decodeSerializableValuePolymorphic(Polymorphic.kt:59)
	at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:38)
	at kotlinx.serialization.json.Json.decodeFromString(Json.kt:100)
	at ru.meanmail.pypi.PyPiKt.loadPackageFromPyPi$lambda-0(PyPi.kt:267)
	at com.intellij.util.io.HttpRequests.doProcess(HttpRequests.java:516)
	at com.intellij.util.io.HttpRequests.process(HttpRequests.java:498)
	at com.intellij.util.io.HttpRequests$RequestBuilderImpl.connect(HttpRequests.java:333)
	at ru.meanmail.pypi.PyPiKt.loadPackageFromPyPi(PyPi.kt:49)
	at ru.meanmail.pypi.PyPiKt.loadPackage(PyPi.kt:143)
	at ru.meanmail.pypi.PyPiKt.getPackageInfo(PyPi.kt:165)
	at ru.meanmail.pypi.PyPiKt.getPackageInfo$default(PyPi.kt:151)
	at ru.meanmail.pypi.PyPiKt.getVersionsList$lambda-6(PyPi.kt:190)
	at com.intellij.openapi.application.impl.ApplicationImpl$2.call(ApplicationImpl.java:328)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:702)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:699)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:699)
	at java.base/java.lang.Thread.run(Thread.java:833)

To Reproduce
Steps to reproduce the behavior:

  1. Open IntelliJ or PyCharm with the Requirements Plugin installed
  2. add fastapi or idna to requirements.txt
  3. Wait for IDE error

Expected behavior

The Requirements Plugin should not produce an error.

Screenshots

image

IDE

  • OS: Windows 10, Ubuntu 22.04
  • Product: IntelliJ Ultimate, PyCharm Professional
  • Version IU-222.4167.29 - JRE Version: OpenJDK 64-Bit Server VM by JetBrains s.r.o
  • Project SDK: Python 3.10

Plugin (please complete the following information. See Main Menu -> File -> Settings -> Plugins):

  • Version 2022.3-222

Fixed in Requirements 2022.3.1-2022.2.2