in src/common/details/ai_python_generative_sdk/AiSdkConsoleGui_PickOrCreate_AiHubProject.cs [139:201]
private static AiHubProjectInfo PickOrCreateAiHubProject(bool allowCreate, ICommandValues values, string subscription, string resourceId, out bool createNew)
{
ConsoleHelpers.WriteLineWithHighlight($"\n`AZURE AI PROJECT`");
Console.Write("\rName: *** Loading choices ***");
var json = PythonSDKWrapper.ListProjects(values, subscription);
if (Program.Debug) Console.WriteLine(json);
var parsed = !string.IsNullOrEmpty(json) ? JsonDocument.Parse(json) : default;
var items = parsed?.GetPropertyArrayOrEmpty("projects") ?? Array.Empty<JsonElement>();
var choices = new List<string>();
var itemJsonElements = new List<JsonElement>();
foreach (var item in items)
{
if (item.TryGetProperty("workspace_hub", out var workspaceHubElement))
{
var hub = workspaceHubElement.GetString();
var hubOk = string.IsNullOrEmpty(resourceId) || hub == resourceId;
if (!hubOk) continue;
itemJsonElements.Add(item);
var name = item.GetProperty("name").GetString();
var location = item.GetProperty("location").GetString();
var displayName = item.GetProperty("display_name").GetString();
choices.Add(string.IsNullOrEmpty(displayName)
? $"{name} ({location})"
: $"{displayName} ({location})");
}
}
if (allowCreate)
{
choices.Insert(0, "(Create new)");
}
if (choices.Count == 0)
{
throw new ApplicationException($"CANCELED: No projects found");
}
Console.Write("\rName: ");
var picked = ListBoxPicker.PickIndexOf(choices.ToArray());
if (picked < 0)
{
throw new ApplicationException($"CANCELED: No project selected");
}
Console.WriteLine($"\rName: {choices[picked]}");
var project = allowCreate
? (picked > 0 ? itemJsonElements[picked - 1] : default(JsonElement?))
: itemJsonElements[picked];
createNew = allowCreate && picked == 0;
if (createNew)
{
project = TryCreateAiHubProjectInteractive(values, subscription, resourceId);
}
return AiHubProjectInfoFromToken(values, project);
}