src/extensions/speech_extension/commands/parsers/webjob_command_parser.cs (175 lines of code) (raw):

// // Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE.md file in the project root for full license information. // using System; using System.Linq; namespace Azure.AI.Details.Common.CLI { class WebJobCommandParser : CommandParser { public static bool ParseCommand(INamedValueTokens tokens, ICommandValues values) { return ParseCommands(_commands, _partialCommands, tokens, values, x => GetCommandParsers(x)); } public static bool ParseCommandValues(INamedValueTokens tokens, ICommandValues values) { return ParseCommandValues("webjob", GetCommandParsers(values), tokens, values); } private static readonly (string name, bool valuesRequired)[] _commands = { ("webjob.list", false), ("webjob.upload", true), ("webjob.run", true), ("webjob.status", true), ("webjob.download", false), ("webjob.delete", true) }; private static readonly string[] _partialCommands = { "webjob" }; private static INamedValueTokenParser[] GetCommandParsers(ICommandValues values) { var commandName = values.GetCommand(); switch (commandName) { case "webjob.list": return listCommandParsers; case "webjob.upload": return uploadCommandParsers; case "webjob.run": return runCommandParsers; case "webjob.status": return statusCommandParsers; case "webjob.download": return downloadCommandParsers; case "webjob.delete": return deleteCommandParsers; } values.AddThrowError("ERROR:", $"Unknown command: {commandName}"); return Array.Empty<INamedValueTokenParser>(); } #region private data [Flags] public enum Allow { None = 0, InputJobName = 1, InputJobRunId = 2, OutputJobName = 4, OutputJobRunId = 8, OutputUrl = 16, OutputJobNames = 32, OutputJobRunIds = 64, OutputUrls = 128, Wait = 256 } public class CommonWebjobNamedValueTokenParsers : NamedValueTokenParserList { public CommonWebjobNamedValueTokenParsers(Allow allow) : base( new Any1ValueNamedValueTokenParser(null, "x.command", "11"), new CommonNamedValueTokenParsers(), new ExpectConsoleOutputTokenParser(), new ParallelCommandsTokenParser(), new IniFileNamedValueTokenParser(), new Any1ValueNamedValueTokenParser("--user", "webjob.config.username", "001"), new Any1ValueNamedValueTokenParser("--pass", "webjob.config.password", "001"), new Any1ValueNamedValueTokenParser(null, "webjob.config.endpoint", "001"), new Any1ValueNamedValueTokenParser(null, "webjob.timeout", "01"), new OutputFileNameNamedValueTokenParser(null, "webjob.output.request.file", "0110"), new OutputFileNameNamedValueTokenParser(null, "webjob.output.json.file", "0110") ) { if ((allow & Allow.InputJobName) != 0 && (allow & Allow.InputJobRunId) != 0) { Add(new Any1ValueNamedValueTokenParser(null, "webjob.job.name", "001")); Add(new Any1or2ValueNamedValueTokenParser("--job", "webjob.job.id", "001")); } else if ((allow & Allow.InputJobName) != 0) { Add(new Any1ValueNamedValueTokenParser(null, "webjob.job.name", "001;010")); } else if ((allow & Allow.InputJobRunId) != 0) { Add(new Any1ValueNamedValueTokenParser(null, "webjob.job.id", "001")); } if ((allow & Allow.OutputJobName) != 0) { Add(new OutputFileNameNamedValueTokenParser(null, "webjob.output.name", "011")); Add(new OutputFileNameNamedValueTokenParser(null, "webjob.output.add.name", "0111")); } if ((allow & Allow.OutputJobRunId) != 0) { Add(new OutputFileNameNamedValueTokenParser(null, "webjob.output.id", "011")); Add(new OutputFileNameNamedValueTokenParser(null, "webjob.output.add.id", "0111")); } if ((allow & Allow.OutputUrl) != 0) { Add(new OutputFileNameNamedValueTokenParser(null, "webjob.output.url", "011")); Add(new OutputFileNameNamedValueTokenParser(null, "webjob.output.add.url", "0111")); } if ((allow & Allow.OutputJobNames) != 0) { Add(new OutputFileNameNamedValueTokenParser(null, "webjob.output.last.name", "0111;0101", "webjob.output.name", "true", "webjob.output.list.last")); Add(new OutputFileNameNamedValueTokenParser(null, "webjob.output.job.names", "0101", "webjob.output.names")); } if ((allow & Allow.OutputJobRunIds) != 0) { Add(new OutputFileNameNamedValueTokenParser(null, "webjob.output.last.id", "0111", "webjob.output.id", "true", "webjob.output.list.last")); Add(new OutputFileNameNamedValueTokenParser(null, "webjob.output.ids", "011", "webjob.output.ids")); } if ((allow & Allow.OutputUrls) != 0) { Add(new OutputFileNameNamedValueTokenParser(null, "webjob.output.last.url", "0110;0101", "webjob.output.url", "true", "webjob.output.list.last")); Add(new OutputFileNameNamedValueTokenParser(null, "webjob.output.job.urls", "0101", "webjob.output.urls")); } if ((allow & Allow.Wait) != 0) { Add(new OptionalWithDefaultNamedValueTokenParser(null, "webjob.wait.timeout", "010", "864000000")); } } } private static readonly INamedValueTokenParser[] listCommandParsers = { new CommonWebjobNamedValueTokenParsers( Allow.InputJobName | Allow.InputJobRunId | Allow.OutputJobName | Allow.OutputJobNames | Allow.OutputJobRunId | Allow.OutputJobRunIds | Allow.OutputUrl | Allow.OutputUrls), new PinnedNamedValueTokenParser("--jobs", "webjob.list.jobs", "001", "jobs", "webjob.list.kind"), new PinnedNamedValueTokenParser("--runs", "webjob.list.runs", "001", "runs", "webjob.list.kind"), new RequiredValidValueNamedValueTokenParser(null, "webjob.list.kind", "001", "jobs;runs"), }; private static readonly INamedValueTokenParser[] uploadCommandParsers = { new CommonWebjobNamedValueTokenParsers( Allow.InputJobName | Allow.OutputJobRunId | Allow.OutputUrl | Allow.Wait), new Any1ValueNamedValueTokenParser(null, "webjob.upload.job.file", "0001"), new TrueFalseNamedValueTokenParser("webjob.run.job", "010"), }; private static readonly INamedValueTokenParser[] runCommandParsers = { new CommonWebjobNamedValueTokenParsers( Allow.InputJobName | Allow.OutputJobRunId | Allow.OutputUrl | Allow.Wait) }; private static readonly INamedValueTokenParser[] statusCommandParsers = { new CommonWebjobNamedValueTokenParsers( Allow.InputJobName | Allow.InputJobRunId | Allow.OutputUrl | Allow.Wait), }; private static readonly INamedValueTokenParser[] deleteCommandParsers = { new CommonWebjobNamedValueTokenParsers( Allow.InputJobName) }; private static readonly INamedValueTokenParser[] downloadCommandParsers = { new CommonWebjobNamedValueTokenParsers( Allow.InputJobName | Allow.InputJobRunId), new Any1ValueNamedValueTokenParser("--href", "webjob.download.url", "001"), new Any1ValueNamedValueTokenParser(null, "webjob.download.file", "001"), new OutputFileNameNamedValueTokenParser(null, "webjob.output.file", "011"), }; #endregion } }