/// <summary> /// Provides very basic workbook parsing and shunting of code cells /// into the evaluation service. Does not display non-code-cell contents /// but does evaluate a workbook from top-to-bottom. Restores nuget /// packages from the workbook's manifest. /// </summary> static async Task <int> WorkbookPlayerMain(InteractiveSession session, ClientSessionUri sessionUri) { var path = new FilePath(sessionUri.WorkbookPath); if (!path.FileExists) { Error.WriteLine($"File does not exist: {path}"); return(1); } // load the workbook file var workbook = new WorkbookPackage(path); await workbook.Open( quarantineInfo => Task.FromResult(true), path); #pragma warning disable 0618 // TODO: WorkbookDocumentManifest needs to eliminate AgentType like we've done on web // to avoid having to use the the flavor mapping in AgentIdentity. var targetPlatformIdentifier = AgentIdentity.GetFlavorId(workbook.PlatformTargets [0]); #pragma warning restore 0618 // initialize the session based on manifest metadata from the workbook file language = workbook.GetLanguageDescriptions().First(); await session.InitializeAsync(new InteractiveSessionDescription ( language, targetPlatformIdentifier, new EvaluationEnvironment(Environment.CurrentDirectory))); // restore NuGet packages await session.PackageManagerService.RestoreAsync( workbook.Pages.SelectMany(page => page.Packages)); // insert and evaluate cells in the workbook foreach (var cell in workbook.IndexPage.Contents.OfType <CodeCell> ()) { var buffer = cell.CodeAnalysisBuffer.Value; lastCodeCellId = await session.EvaluationService.InsertCodeCellAsync( buffer, lastCodeCellId); ForegroundColor = ConsoleColor.DarkYellow; Write(GetPrompt()); ResetColor(); WriteLine(buffer); await session.EvaluationService.EvaluateAsync(lastCodeCellId); if (lastCellEvaluationStatus != CodeCellEvaluationStatus.Success) { break; } } return(0); }
/// <summary> /// Provides very basic workbook parsing and shunting of code cells /// into the evaluation service. Does not display non-code-cell contents /// but does evaluate a workbook from top-to-bottom. Restores nuget /// packages from the workbook's manifest. /// </summary> static async Task <int> WorkbookPlayerMain(string workbookPath) { var path = new FilePath(workbookPath); if (!path.FileExists) { Error.WriteLine($"File does not exist: {path}"); return(1); } // load the workbook file var workbook = new WorkbookPackage(path); await workbook.Open( quarantineInfo => Task.FromResult(true), path); // create and get ready to deal with the session; a more complete // client should handle more than just OnNext from the observer. var session = InteractiveSession.CreateWorkbookSession(); session.Events.Subscribe(new Observer <InteractiveSessionEvent> (OnSessionEvent)); #pragma warning disable 0618 // TODO: WorkbookDocumentManifest needs to eliminate AgentType like we've done on web // to avoid having to use the the flavor mapping in AgentIdentity. var targetPlatformIdentifier = AgentIdentity.GetFlavorId(workbook.PlatformTargets [0]); #pragma warning restore 0618 // initialize the session based on manifest metadata from the workbook file language = workbook.GetLanguageDescriptions().First(); await session.InitializeAsync(new InteractiveSessionDescription ( language, targetPlatformIdentifier, new EvaluationEnvironment(Environment.CurrentDirectory))); // restore NuGet packages await session.PackageManagerService.RestoreAsync( workbook.Pages.SelectMany(page => page.Packages)); // insert and evaluate cells in the workbook foreach (var cell in workbook.IndexPage.Contents.OfType <CodeCell> ()) { var buffer = cell.CodeAnalysisBuffer.Value; lastCodeCellId = await session.EvaluationService.InsertCodeCellAsync( buffer, lastCodeCellId); WriteReplPrompt(); WriteLine(buffer); await session.EvaluationService.EvaluateAsync(lastCodeCellId); await EvaluationServiceRaceBug(); if (lastCellEvaluationStatus != CodeCellEvaluationStatus.Success) { break; } } return(0); }
#pragma warning disable 0618 public static WorkbookAppInstallation Locate(AgentType agentType) => LookupById(AgentIdentity.GetFlavorId(agentType));