-
Notifications
You must be signed in to change notification settings - Fork 385
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
handle the case kernelinfo si deserialised as dicittionary #2576
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -241,13 +241,68 @@ internal static bool TryGetKernelInfoFromMetadata( | |
{ | ||
if (metadata is not null) | ||
{ | ||
if (metadata.TryGetValue("kernelInfo", out var kernelInfoObj) && | ||
kernelInfoObj is JsonElement kernelInfoJson && kernelInfoJson.Deserialize<KernelInfoCollection>(ParserServerSerializer.JsonSerializerOptions) is | ||
{ } kernelInfoDeserialized) | ||
if (metadata.TryGetValue("kernelInfo", out var kernelInfoObj) ) | ||
{ | ||
kernelInfo = kernelInfoDeserialized; | ||
return true; | ||
if (kernelInfoObj is JsonElement kernelInfoJson && | ||
kernelInfoJson.Deserialize<KernelInfoCollection>(ParserServerSerializer.JsonSerializerOptions) is | ||
{ } kernelInfoDeserialized) | ||
{ | ||
kernelInfo = kernelInfoDeserialized; | ||
return true; | ||
} | ||
|
||
// todo: the kernelInfo should not deserialize as a dictionary | ||
if (kernelInfoObj is Dictionary<string,object> kernelInfoAsDictionary) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is there a test for the issue this is intended to resolve? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Just added a test that uses serialize and parse request. Serialize touches the new code. The document used in test comes from a vscode serialize request. |
||
{ | ||
var deserializedKernelInfo = new KernelInfoCollection(); | ||
if (kernelInfoAsDictionary.TryGetValue("defaultKernelName", out var defaultKernelNameObj) && | ||
defaultKernelNameObj is string defaultKernelName) | ||
{ | ||
deserializedKernelInfo.DefaultKernelName = defaultKernelName; | ||
} | ||
|
||
if (kernelInfoAsDictionary.TryGetValue("items", | ||
out var items)) | ||
{ | ||
if (items is IEnumerable<object> itemList) | ||
{ | ||
foreach (var item in itemList.Cast<IDictionary<string,object>>()) | ||
{ | ||
if (item.TryGetValue("name", out var nameObj) && | ||
nameObj is string name) | ||
{ | ||
string? language = null; | ||
if ( | ||
item.TryGetValue("language", out var languageObj) && | ||
languageObj is string deserializedLanguage) | ||
{ | ||
language = deserializedLanguage; | ||
} | ||
|
||
IReadOnlyCollection<string>? aliases = null; | ||
if ( | ||
item.TryGetValue("aliases", out var aliasesObj) && | ||
aliasesObj is object[] deserializedAliases) | ||
{ | ||
aliases = deserializedAliases.Select(a => a.ToString()).ToArray(); | ||
} | ||
|
||
deserializedKernelInfo.Add(new KernelInfo(name, language, aliases)); | ||
} | ||
} | ||
kernelInfo = deserializedKernelInfo; | ||
return true; | ||
} | ||
} | ||
} | ||
|
||
if (kernelInfoObj is KernelInfoCollection kernelInfoCollection) | ||
{ | ||
kernelInfo = kernelInfoCollection; | ||
return true; | ||
} | ||
} | ||
|
||
|
||
if (metadata.TryGetValue("dotnet_interactive", out var dotnetInteractiveObj)) | ||
{ | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jonsequitur this request is taken from vscode