PrintSupportedRevits() { PyRevitCLIAppCmds.PrintHeader("Supported Revits"); foreach (var revit in RevitProduct.ListSupportedProducts().OrderByDescending(x => x.Version)) { Console.WriteLine(string.Format("{0} | Version: {1} | Build: {2}({3})", revit.ProductName, revit.Version, revit.BuildNumber, revit.BuildTarget)); } }
PrintExtensionDefinitions(string searchPattern, string headerPrefix = "Registered") { PyRevitCLIAppCmds.PrintHeader(string.Format("{0} Extensions", headerPrefix)); foreach (PyRevitExtensionDefinition ext in PyRevit.LookupRegisteredExtensions(searchPattern)) { Console.WriteLine(ext); } }
PrintExtensionLookupSources() { PyRevitCLIAppCmds.PrintHeader("Extension Sources - Default"); Console.WriteLine(PyRevit.GetDefaultExtensionLookupSource()); PyRevitCLIAppCmds.PrintHeader("Extension Sources - Additional"); foreach (var extLookupSrc in PyRevit.GetRegisteredExtensionLookupSources()) { Console.WriteLine(extLookupSrc); } }
PrintExtensionSearchPaths() { PyRevitCLIAppCmds.PrintHeader("Default Extension Search Path"); Console.WriteLine(PyRevit.pyRevitDefaultExtensionsPath); PyRevitCLIAppCmds.PrintHeader("Extension Search Paths"); foreach (var searchPath in PyRevit.GetRegisteredExtensionSearchPaths()) { Console.WriteLine(searchPath); } }
PrintCloneEngines(string cloneName) { if (cloneName != null) { var clone = PyRevit.GetRegisteredClone(cloneName); PyRevitCLIAppCmds.PrintHeader(string.Format("Deployments for \"{0}\"", clone.Name)); foreach (var engine in clone.GetConfiguredEngines()) { Console.WriteLine(engine); } } }
PrintExtensions(IEnumerable <PyRevitExtension> extList = null, string headerPrefix = "Installed") { if (extList == null) { extList = PyRevit.GetInstalledExtensions(); } PyRevitCLIAppCmds.PrintHeader(string.Format("{0} Extensions", headerPrefix)); foreach (PyRevitExtension ext in extList.OrderBy(x => x.Name)) { Console.WriteLine(ext); } }
PrintAttachments(int revitYear = 0) { PyRevitCLIAppCmds.PrintHeader("Attachments"); foreach (var attachment in PyRevit.GetAttachments().OrderByDescending(x => x.Product.Version)) { if (revitYear == 0) { Console.WriteLine(attachment); } else if (revitYear == attachment.Product.ProductYear) { Console.WriteLine(attachment); } } }
PrintClones() { PyRevitCLIAppCmds.PrintHeader("Registered Clones (full git repos)"); var clones = PyRevit.GetRegisteredClones().OrderBy(x => x.Name); foreach (var clone in clones.Where(c => c.IsRepoDeploy)) { Console.WriteLine(clone); } PyRevitCLIAppCmds.PrintHeader("Registered Clones (deployed from archive/image)"); foreach (var clone in clones.Where(c => !c.IsRepoDeploy)) { Console.WriteLine(clone); } }
PrintCloneDeployments(string cloneName) { if (cloneName != null) { var clone = PyRevit.GetRegisteredClone(cloneName); PyRevitCLIAppCmds.PrintHeader(string.Format("Deployments for \"{0}\"", clone.Name)); foreach (var dep in clone.GetConfiguredDeployments()) { Console.WriteLine(string.Format("\"{0}\" deploys:", dep.Name)); foreach (var path in dep.Paths) { Console.WriteLine(" " + path); } Console.WriteLine(); } } }
PrintLocalRevits(bool running = false) { if (running) { PyRevitCLIAppCmds.PrintHeader("Running Revit Instances"); foreach (var revit in RevitController.ListRunningRevits().OrderByDescending(x => x.RevitProduct.Version)) { Console.WriteLine(revit); } } else { PyRevitCLIAppCmds.PrintHeader("Installed Revits"); foreach (var revit in RevitProduct.ListInstalledProducts().OrderByDescending(x => x.Version)) { Console.WriteLine(revit); } } }
PrintReleases(string searchPattern, bool latest = false, bool printReleaseNotes = false, bool listPreReleases = false) { PyRevitCLIAppCmds.PrintHeader("Releases"); List <PyRevitRelease> releasesToList = new List <PyRevitRelease>(); // determine latest release if (latest) { var latestRelease = PyRevitRelease.GetLatestRelease(includePreRelease: listPreReleases); if (latestRelease == null) { throw new pyRevitException("Can not determine latest release."); } releasesToList.Add(latestRelease); } else { if (searchPattern != null) { releasesToList = PyRevitRelease.FindReleases(searchPattern, includePreRelease: listPreReleases); } else { releasesToList = PyRevitRelease.GetReleases().Where(r => r.IsPyRevitRelease).ToList(); } } foreach (var prelease in releasesToList) { Console.WriteLine(prelease); if (printReleaseNotes) { Console.WriteLine(prelease.ReleaseNotes.Indent(1)); } } }
PrintCloneInfo(string cloneName) { PyRevitCLIAppCmds.PrintHeader("Clone info"); Console.WriteLine(PyRevit.GetRegisteredClone(cloneName)); }
RunPythonCommand(string inputCommand, string targetFile, string revitYear, PyRevitRunnerOptions runOptions) { // determine if script or command var modelFiles = new List <string>(); // make sure file exists if (targetFile != null) { CommonUtils.VerifyFile(targetFile); } if (inputCommand != null) { // determine target revit year int revitYearNumber = 0; // if revit year is not specified try to get from model file if (revitYear == null) { if (targetFile != null) { try { revitYearNumber = new RevitModelFile(targetFile).RevitProduct.ProductYear; // collect model names also modelFiles.Add(targetFile); } catch (Exception ex) { logger.Error( "Revit version must be explicitly specifies if using a model list file. | {0}", ex.Message ); } } // if no revit year and no model, run with latest revit else { revitYearNumber = RevitProduct.ListInstalledProducts().Max(r => r.ProductYear); } } // otherwise, grab the year from argument else { revitYearNumber = int.Parse(revitYear); // prepare model list of provided if (targetFile != null) { try { var modelVer = new RevitModelFile(targetFile).RevitProduct.ProductYear; if (revitYearNumber < modelVer) { logger.Warn("Model is newer than the target Revit version."); } else { modelFiles.Add(targetFile); } } catch { // attempt at reading the list file and grab the model files only foreach (var modelPath in File.ReadAllLines(targetFile)) { if (CommonUtils.VerifyFile(modelPath)) { try { var modelVer = new RevitModelFile(modelPath).RevitProduct.ProductYear; if (revitYearNumber < modelVer) { logger.Warn("Model is newer than the target Revit version."); } else { modelFiles.Add(modelPath); } } catch { logger.Error("File is not a valid Revit file: \"{0}\"", modelPath); } } else { logger.Error("File does not exist: \"{0}\"", modelPath); } } } } } // now run if (revitYearNumber != 0) { // determine attached clone var attachment = PyRevit.GetAttached(revitYearNumber); if (attachment == null) { logger.Error("pyRevit is not attached to Revit \"{0}\". " + "Runner needs to use the attached clone and engine to execute the script.", revitYear); } else { // determine script to run string commandScriptPath = null; if (!CommonUtils.VerifyPythonScript(inputCommand)) { logger.Debug("Input is not a script file \"{0}\"", inputCommand); logger.Debug("Attempting to find run command matching \"{0}\"", inputCommand); // try to find run command in attached clone being used for execution // if not found, try to get run command from all other installed extensions var targetExtensions = new List <PyRevitExtension>(); if (attachment.Clone != null) { targetExtensions.AddRange(attachment.Clone.GetExtensions()); } targetExtensions.AddRange(PyRevit.GetInstalledExtensions()); foreach (PyRevitExtension ext in targetExtensions) { logger.Debug("Searching for run command in: \"{0}\"", ext.ToString()); if (ext.Type == PyRevitExtensionTypes.RunnerExtension) { try { var cmdScript = ext.GetRunCommand(inputCommand); if (cmdScript != null) { logger.Debug("Run command matching \"{0}\" found: \"{1}\"", inputCommand, cmdScript); commandScriptPath = cmdScript; break; } } catch { // does not include command continue; } } } } else { commandScriptPath = inputCommand; } // if command is not found, stop if (commandScriptPath == null) { throw new pyRevitException( string.Format("Run command not found: \"{0}\"", inputCommand) ); } // RUN! var execEnv = PyRevitRunner.Run( attachment, commandScriptPath, modelFiles, runOptions ); // print results (exec env) PyRevitCLIAppCmds.PrintHeader("Execution Environment"); Console.WriteLine(string.Format("Execution Id: \"{0}\"", execEnv.ExecutionId)); Console.WriteLine(string.Format("Product: {0}", execEnv.Revit)); Console.WriteLine(string.Format("Clone: {0}", execEnv.Clone)); Console.WriteLine(string.Format("Engine: {0}", execEnv.Engine)); Console.WriteLine(string.Format("Script: \"{0}\"", execEnv.Script)); Console.WriteLine(string.Format("Working Directory: \"{0}\"", execEnv.WorkingDirectory)); Console.WriteLine(string.Format("Journal File: \"{0}\"", execEnv.JournalFile)); Console.WriteLine(string.Format("Manifest File: \"{0}\"", execEnv.PyRevitRunnerManifestFile)); Console.WriteLine(string.Format("Log File: \"{0}\"", execEnv.LogFile)); // report whether the env was purge or not if (execEnv.Purged) { Console.WriteLine("Execution env is successfully purged."); } // print target models if (execEnv.ModelPaths.Count() > 0) { PyRevitCLIAppCmds.PrintHeader("Target Models"); foreach (var modelPath in execEnv.ModelPaths) { Console.WriteLine(modelPath); } } // print log file contents if exists if (File.Exists(execEnv.LogFile)) { PyRevitCLIAppCmds.PrintHeader("Execution Log"); Console.WriteLine(File.ReadAllText(execEnv.LogFile)); } } } } }