public RunInfo GetRunInfo(int runIndex) { if (_runInfoCache.ContainsKey(runIndex)) { return(_runInfoCache[runIndex]); } var jobInfo = this; // only get the first run asset for now var job = jobInfo.CloudJob; //check run index if valid var page = runIndex + 1; var totalRuns = job.Status.RunsCompleted + job.Status.RunsFailed + job.Status.RunsPending + job.Status.RunsRunning; if (totalRuns == 0) { throw new ArgumentException($"[Error] Job status: [{job.Status.Status}]. There is no run available in this job"); } if (page > totalRuns) { throw new ArgumentException($"[Error] This job has {totalRuns} runs in total, a valid run index could from 0 to { totalRuns - 1};"); } var api = new PollinationSDK.Api.RunsApi(); var runs = api.ListRuns(jobInfo.Project.Owner.Name, jobInfo.Project.Name, jobId: new List <string>() { job.Id }, page: page, perPage: 1).Resources; var firstRun = runs.FirstOrDefault(); var isRunFinished = firstRun.Status.FinishedAt > firstRun.Status.StartedAt; if (!isRunFinished) { throw new ArgumentException($"[Warning] Run status: {firstRun.Status.Status}. If this run [{firstRun.Id.Substring(0, 5)}] is scheduled but not finished, please check it again in a few seconds;"); } var runInfo = new RunInfo(jobInfo.Project, firstRun); _runInfoCache.Add(runIndex, runInfo); return(runInfo); }
private static void DownloadAssets(Project proj) { var runApi = new PollinationSDK.Api.RunsApi(); var firstRun = runApi.ListRuns(proj.Owner.Name, proj.Name, page: 1, perPage: 1).Resources.First(); var runInfo = new RunInfo(proj, firstRun); // get all output assets to download var assets = runInfo.GetOutputAssets("grasshopper").OfType <RunAssetBase>().ToList(); var inputAssets = runInfo.GetInputAssets(); assets = assets.Concat(inputAssets).ToList(); var savedPath = System.IO.Path.GetTempPath(); var task = Task.Run(async() => await DownloadAsync(runInfo, assets, savedPath)); var filePaths = task.GetAwaiter().GetResult(); foreach (var item in filePaths) { Console.WriteLine($"Asset: {item.Name}\nSaved Path: {item.LocalPath}"); } }