1# -------------------------------------------------------------------------------------------- 2# Copyright (c) Microsoft Corporation. All rights reserved. 3# Licensed under the MIT License. See License.txt in the project root for license information. 4# -------------------------------------------------------------------------------------------- 5 6import argparse 7from knack.util import CLIError 8 9from azure.mgmt.eventgrid.models import ( 10 NumberGreaterThanAdvancedFilter, 11 NumberGreaterThanOrEqualsAdvancedFilter, 12 NumberInAdvancedFilter, 13 NumberLessThanAdvancedFilter, 14 NumberLessThanOrEqualsAdvancedFilter, 15 NumberNotInAdvancedFilter, 16 StringBeginsWithAdvancedFilter, 17 StringContainsAdvancedFilter, 18 StringEndsWithAdvancedFilter, 19 StringInAdvancedFilter, 20 StringNotInAdvancedFilter, 21 BoolEqualsAdvancedFilter) 22 23NUMBERIN = "NumberIn" 24NUMBERNOTIN = "NumberNotIn" 25STRINGIN = "StringIn" 26STRINGNOTIN = "StringNotIn" 27STRINGBEGINSWITH = "StringBeginsWith" 28STRINGCONTAINS = "StringContains" 29STRINGENDSWITH = "StringEndsWith" 30NUMBERGREATERTHAN = "NumberGreaterThan" 31NUMBERGREATERTHANOREQUALS = "NumberGreaterThanOrEquals" 32NUMBERLESSTHAN = "NumberLessThan" 33NUMBERLESSTHANOREQUALS = "NumberLessThanOrEquals" 34BOOLEQUALS = "BoolEquals" 35 36 37# pylint: disable=protected-access 38# pylint: disable=too-few-public-methods 39class EventChannelAddFilter(argparse._AppendAction): 40 def __call__(self, parser, namespace, values, option_string=None): 41 if len(values) < 3: 42 raise CLIError('usage error: --publisher-filter KEY[.INNERKEY] FILTEROPERATOR VALUE [VALUE ...]') 43 44 key = values[0] 45 operator = values[1] 46 47# operators that support single value 48 if operator.lower() == NUMBERLESSTHAN.lower(): 49 _validate_only_single_value_is_specified(NUMBERLESSTHAN, values) 50 publisher_filter = NumberLessThanAdvancedFilter(key=key, value=float(values[2])) 51 elif operator.lower() == NUMBERLESSTHANOREQUALS.lower(): 52 _validate_only_single_value_is_specified(NUMBERLESSTHANOREQUALS, values) 53 publisher_filter = NumberLessThanOrEqualsAdvancedFilter(key=key, value=float(values[2])) 54 elif operator.lower() == NUMBERGREATERTHAN.lower(): 55 _validate_only_single_value_is_specified(NUMBERGREATERTHAN, values) 56 publisher_filter = NumberGreaterThanAdvancedFilter(key=key, value=float(values[2])) 57 elif operator.lower() == NUMBERGREATERTHANOREQUALS.lower(): 58 _validate_only_single_value_is_specified(NUMBERGREATERTHANOREQUALS, values) 59 publisher_filter = NumberGreaterThanOrEqualsAdvancedFilter(key=key, value=float(values[2])) 60 elif operator.lower() == BOOLEQUALS.lower(): 61 _validate_only_single_value_is_specified(BOOLEQUALS, values) 62 publisher_filter = BoolEqualsAdvancedFilter(key=key, value=bool(values[2])) 63 64# operators that support multiple values 65 elif operator.lower() == NUMBERIN.lower(): 66 float_values = [float(i) for i in values[2:]] 67 publisher_filter = NumberInAdvancedFilter(key=key, values=float_values) 68 elif operator.lower() == NUMBERNOTIN.lower(): 69 float_values = [float(i) for i in values[2:]] 70 publisher_filter = NumberNotInAdvancedFilter(key=key, values=float_values) 71 elif operator.lower() == STRINGIN.lower(): 72 publisher_filter = StringInAdvancedFilter(key=key, values=values[2:]) 73 elif operator.lower() == STRINGNOTIN.lower(): 74 publisher_filter = StringNotInAdvancedFilter(key=key, values=values[2:]) 75 elif operator.lower() == STRINGBEGINSWITH.lower(): 76 publisher_filter = StringBeginsWithAdvancedFilter(key=key, values=values[2:]) 77 elif operator.lower() == STRINGENDSWITH.lower(): 78 publisher_filter = StringEndsWithAdvancedFilter(key=key, values=values[2:]) 79 elif operator.lower() == STRINGCONTAINS.lower(): 80 publisher_filter = StringContainsAdvancedFilter(key=key, values=values[2:]) 81 else: 82 raise CLIError("--publisher-filter: The specified filter operator '{}' is not" 83 " a valid operator. Supported values are ".format(operator) + 84 NUMBERIN + "," + NUMBERNOTIN + "," + STRINGIN + "," + 85 STRINGNOTIN + "," + STRINGBEGINSWITH + "," + 86 STRINGCONTAINS + "," + STRINGENDSWITH + "," + 87 NUMBERGREATERTHAN + "," + NUMBERGREATERTHANOREQUALS + "," + 88 NUMBERLESSTHAN + "," + NUMBERLESSTHANOREQUALS + "," + BOOLEQUALS + ".") 89 if namespace.publisher_filter is None: 90 namespace.publisher_filter = [] 91 namespace.publisher_filter.append(publisher_filter) 92 93 94def _validate_only_single_value_is_specified(operator_type, values): 95 if len(values) != 3: 96 raise CLIError("--publisher-filter: For '{}' operator, only one filter value " 97 "must be specified.".format(operator_type)) 98