async def get_and_update_rule(servicebus_mgmt_client): print("-- Get and Update Rule") rule_properties = await servicebus_mgmt_client.get_rule( TOPIC_NAME, SUBSCRIPTION_NAME, RULE_NAME) print("Rule Name:", rule_properties.name) print("Please refer to RuleProperties for complete available properties.") print("") # update by updating the properties in the model rule_properties.filter = SqlRuleFilter( "property1 = @param1 AND property2 = @param2", parameters={ "@param1": "value2", "@param2": 2 }) await servicebus_mgmt_client.update_rule(TOPIC_NAME, SUBSCRIPTION_NAME, rule_properties) # update by passing keyword arguments rule_properties = await servicebus_mgmt_client.get_rule( TOPIC_NAME, SUBSCRIPTION_NAME, RULE_NAME) await servicebus_mgmt_client.update_rule( TOPIC_NAME, SUBSCRIPTION_NAME, rule_properties, filter=SqlRuleFilter("property1 = @param1 AND property2 = @param2", parameters={ "@param1": "value3", "@param2": 3 }))
def test_mgmt_rule_list_and_delete(self, servicebus_namespace_connection_string): mgmt_service = ServiceBusManagementClient.from_connection_string( servicebus_namespace_connection_string) clear_topics(mgmt_service) topic_name = "topic_testaddf" subscription_name = "sub_testkkk" rule_name_1 = 'test_rule_1' rule_name_2 = 'test_rule_2' rule_name_3 = 'test_rule_3' sql_filter_1 = SqlRuleFilter("Priority = 'low'") sql_filter_2 = SqlRuleFilter("Priority = 'middle'") sql_filter_3 = SqlRuleFilter("Priority = 'high'") rule_1 = RuleDescription(name=rule_name_1, filter=sql_filter_1) rule_2 = RuleDescription(name=rule_name_2, filter=sql_filter_2) rule_3 = RuleDescription(name=rule_name_3, filter=sql_filter_3) try: mgmt_service.create_topic(topic_name) mgmt_service.create_subscription(topic_name, subscription_name) rules = list(mgmt_service.list_rules(topic_name, subscription_name)) assert len(rules) == 1 # by default there is a True filter mgmt_service.create_rule(topic_name, subscription_name, rule_1) mgmt_service.create_rule(topic_name, subscription_name, rule_2) mgmt_service.create_rule(topic_name, subscription_name, rule_3) rules = list(mgmt_service.list_rules(topic_name, subscription_name)) assert len(rules) == 3 + 1 mgmt_service.delete_rule(topic_name, subscription_name, rule_name_2) rules = list(mgmt_service.list_rules(topic_name, subscription_name)) assert len(rules) == 2 + 1 assert rules[0].name == "$Default" assert rules[1].name == rule_name_1 assert type(rules[1].filter) == SqlRuleFilter assert rules[1].filter.sql_expression == "Priority = 'low'" assert rules[2].name == rule_name_3 assert type(rules[2].filter) == SqlRuleFilter assert rules[2].filter.sql_expression == "Priority = 'high'" mgmt_service.delete_rule(topic_name, subscription_name, rule_name_1) mgmt_service.delete_rule(topic_name, subscription_name, rule_name_3) rules = list(mgmt_service.list_rules(topic_name, subscription_name)) assert len(rules) == 1 finally: mgmt_service.delete_subscription(topic_name, subscription_name) mgmt_service.delete_topic(topic_name)
def test_mgmt_rule_create_duplicate(self, servicebus_namespace_connection_string, **kwargs): mgmt_service = ServiceBusAdministrationClient.from_connection_string( servicebus_namespace_connection_string) clear_topics(mgmt_service) topic_name = "dqkodq" subscription_name = 'kkaqo' rule_name = 'rule' sql_filter = SqlRuleFilter("Priority = 'low'") try: mgmt_service.create_topic(topic_name) mgmt_service.create_subscription(topic_name, subscription_name) mgmt_service.create_rule(topic_name, subscription_name, rule_name, filter=sql_filter) with pytest.raises(ResourceExistsError): mgmt_service.create_rule(topic_name, subscription_name, rule_name, filter=sql_filter) finally: mgmt_service.delete_rule(topic_name, subscription_name, rule_name) mgmt_service.delete_subscription(topic_name, subscription_name) mgmt_service.delete_topic(topic_name)
def test_mgmt_rule_update_dict_success(self, servicebus_namespace_connection_string, **kwargs): mgmt_service = ServiceBusAdministrationClient.from_connection_string(servicebus_namespace_connection_string) clear_topics(mgmt_service) topic_name = "fjruid" subscription_name = "eqkovcd" rule_name = 'rule' sql_filter = SqlRuleFilter("Priority = 'low'") try: topic_description = mgmt_service.create_topic(topic_name) subscription_description = mgmt_service.create_subscription(topic_description.name, subscription_name) mgmt_service.create_rule(topic_name, subscription_name, rule_name, filter=sql_filter) rule_desc = mgmt_service.get_rule(topic_name, subscription_name, rule_name) assert type(rule_desc.filter) == SqlRuleFilter assert rule_desc.filter.sql_expression == "Priority = 'low'" correlation_fitler = CorrelationRuleFilter(correlation_id='testcid') sql_rule_action = SqlRuleAction(sql_expression="SET Priority = 'low'") rule_desc.filter = correlation_fitler rule_desc.action = sql_rule_action rule_desc_dict = dict(rule_desc) mgmt_service.update_rule(topic_description.name, subscription_description.name, rule_desc_dict) rule_desc = mgmt_service.get_rule(topic_name, subscription_name, rule_name) assert type(rule_desc.filter) == CorrelationRuleFilter assert rule_desc.filter.correlation_id == 'testcid' assert rule_desc.action.sql_expression == "SET Priority = 'low'" finally: mgmt_service.delete_rule(topic_name, subscription_name, rule_name) mgmt_service.delete_subscription(topic_name, subscription_name) mgmt_service.delete_topic(topic_name)
async def test_async_mgmt_rule_update_success(self, servicebus_namespace_connection_string, **kwargs): mgmt_service = ServiceBusManagementClient.from_connection_string(servicebus_namespace_connection_string) await clear_topics(mgmt_service) topic_name = "fjrui" subscription_name = "eqkovc" rule_name = 'rule' sql_filter = SqlRuleFilter("Priority = 'low'") rule = RuleDescription(name=rule_name, filter=sql_filter) try: topic_description = await mgmt_service.create_topic(topic_name) subscription_description = await mgmt_service.create_subscription(topic_description, subscription_name) await mgmt_service.create_rule(topic_name, subscription_name, rule) rule_desc = await mgmt_service.get_rule(topic_name, subscription_name, rule_name) assert type(rule_desc.filter) == SqlRuleFilter assert rule_desc.filter.sql_expression == "Priority = 'low'" correlation_fitler = CorrelationRuleFilter(correlation_id='testcid') sql_rule_action = SqlRuleAction(sql_expression="SET Priority = 'low'") rule_desc.filter = correlation_fitler rule_desc.action = sql_rule_action await mgmt_service.update_rule(topic_description, subscription_description, rule_desc) rule_desc = await mgmt_service.get_rule(topic_name, subscription_name, rule_name) assert type(rule_desc.filter) == CorrelationRuleFilter assert rule_desc.filter.correlation_id == 'testcid' assert rule_desc.action.sql_expression == "SET Priority = 'low'" finally: await mgmt_service.delete_rule(topic_name, subscription_name, rule_name) await mgmt_service.delete_subscription(topic_name, subscription_name) await mgmt_service.delete_topic(topic_name)
def test_mgmt_rule_update_dict_error( self, servicebus_namespace_connection_string, **kwargs): mgmt_service = ServiceBusAdministrationClient.from_connection_string( servicebus_namespace_connection_string) clear_topics(mgmt_service) topic_name = "fjruid" subscription_name = "eqkovcd" rule_name = 'rule' sql_filter = SqlRuleFilter("Priority = 'low'") try: topic_description = mgmt_service.create_topic(topic_name) subscription_description = mgmt_service.create_subscription( topic_description.name, subscription_name) mgmt_service.create_rule(topic_name, subscription_name, rule_name, filter=sql_filter) # send in rule dict without non-name keyword args rule_description_only_name = {"name": topic_name} with pytest.raises(TypeError): mgmt_service.update_rule(topic_description.name, subscription_description.name, rule_description_only_name) finally: mgmt_service.delete_rule(topic_name, subscription_name, rule_name) mgmt_service.delete_subscription(topic_name, subscription_name) mgmt_service.delete_topic(topic_name)
def create_rules_with_filter(servicebus_mgmt_client): # First subscription is already created with default rule. Leave as is. print("SubscriptionName: {}, Removing and re-adding Default Rule".format( ALL_MSGS_SUBSCRIPTION_NAME)) create_rule_with_filter(servicebus_mgmt_client, ALL_MSGS_SUBSCRIPTION_NAME, "$Default", filter=TrueRuleFilter()) # Second subscription: Add required SqlRuleFilter Rule. print( "SubscriptionName: {}, Removing Default Rule and Adding SqlRuleFilter." .format(SQL_FILTER_ONLY_SUBSCRIPTION_NAME)) create_rule_with_filter(servicebus_mgmt_client, SQL_FILTER_ONLY_SUBSCRIPTION_NAME, "RedSqlRule", filter=SqlRuleFilter("Color = 'Red'")) # Third subscription: Add SqlRuleFilter and SqlRuleAction. print( "SubscriptionName: {}, Removing Default Rule and Adding SqlRuleFilter and SqlRuleAction" .format(SQL_FILTER_WITH_ACTION_SUBSCRIPTION_NAME)) create_rule_with_filter( servicebus_mgmt_client, SQL_FILTER_WITH_ACTION_SUBSCRIPTION_NAME, "BlueSqlRule", filter=SqlRuleFilter("Color = 'Blue'"), action=SqlRuleAction("SET Color = 'BlueProcessed'")) # Fourth subscription: Add CorrelationRuleFilter. print( "SubscriptionName: {}, Removing Default Rule and Adding CorrelationRuleFilter" .format(CORRELATION_FILTER_SUBSCRIPTION_NAME)) create_rule_with_filter(servicebus_mgmt_client, CORRELATION_FILTER_SUBSCRIPTION_NAME, "ImportantCorrelationRule", filter=CorrelationRuleFilter( correlation_id='important', label="Red")) # Get rules on subscription, called here only for one subscription as an example. print("SubscriptionName: {}".format(CORRELATION_FILTER_SUBSCRIPTION_NAME)) for rule in servicebus_mgmt_client.list_rules( TOPIC_NAME, CORRELATION_FILTER_SUBSCRIPTION_NAME): print("Rule {}; Filter: {}".format(rule.name, type(rule.filter).__name__))
def create_filter(lemmas: Iterable[str]) -> SqlRuleFilter: def keys(start_index: int = 0) -> Iterable[str]: while True: yield str.format("@w{}", start_index) start_index += 1 parameters = {k: w for (k, w) in zip(keys(start_index=1), lemmas)} sql_expression = str.format("sys.label IN ({})", ", ".join(parameters.keys())) return SqlRuleFilter(sql_expression, parameters)
async def test_async_mgmt_rule_update_invalid( self, servicebus_namespace_connection_string, **kwargs): mgmt_service = ServiceBusAdministrationClient.from_connection_string( servicebus_namespace_connection_string) await clear_topics(mgmt_service) topic_name = "fjrui" subscription_name = "eqkovc" rule_name = 'rule' sql_filter = SqlRuleFilter("Priority = 'low'") try: topic_description = await mgmt_service.create_topic(topic_name) subscription_description = await mgmt_service.create_subscription( topic_name, subscription_name) await mgmt_service.create_rule(topic_name, subscription_name, rule_name, filter=sql_filter) rule_desc = await mgmt_service.get_rule(topic_name, subscription_name, rule_name) # handle a null update properly. with pytest.raises(TypeError): await mgmt_service.update_rule(topic_name, subscription_name, None) # handle an invalid type update properly. with pytest.raises(TypeError): await mgmt_service.update_rule(topic_name, subscription_name, Exception("test")) # change the name to a topic that doesn't exist; should fail. rule_desc.name = "iewdm" with pytest.raises(HttpResponseError): await mgmt_service.update_rule(topic_name, subscription_description.name, rule_desc) rule_desc.name = rule_name # change the name to a topic with an invalid name exist; should fail. rule_desc.name = '' with pytest.raises(msrest.exceptions.ValidationError): await mgmt_service.update_rule(topic_name, subscription_description.name, rule_desc) rule_desc.name = rule_name finally: await mgmt_service.delete_rule(topic_name, subscription_name, rule_name) await mgmt_service.delete_subscription(topic_name, subscription_name) await mgmt_service.delete_topic(topic_name)
def create_rule(servicebus_mgmt_client): print("-- Create Rule") servicebus_mgmt_client.create_rule(TOPIC_NAME, SUBSCRIPTION_NAME, RULE_NAME) print("Rule {} is created.".format(RULE_NAME)) print("") print("-- Create Rule with SQL Filter") sql_filter_parametrized = SqlRuleFilter( "property1 = @param1 AND property2 = @param2", parameters={ "@param1": "value", "@param2": 1 } ) servicebus_mgmt_client.create_rule(TOPIC_NAME, SUBSCRIPTION_NAME, RULE_WITH_SQL_FILTER_NAME, filter=sql_filter_parametrized) print("Rule {} is created.".format(RULE_WITH_SQL_FILTER_NAME)) print("")
async def test_async_mgmt_rule_create_duplicate(self, servicebus_namespace_connection_string, **kwargs): mgmt_service = ServiceBusManagementClient.from_connection_string(servicebus_namespace_connection_string) await clear_topics(mgmt_service) topic_name = "dqkodq" subscription_name = 'kkaqo' rule_name = 'rule' sql_filter = SqlRuleFilter("Priority = 'low'") rule = RuleDescription(name=rule_name, filter=sql_filter) try: await mgmt_service.create_topic(topic_name) await mgmt_service.create_subscription(topic_name, subscription_name) await mgmt_service.create_rule(topic_name, subscription_name, rule) with pytest.raises(ResourceExistsError): await mgmt_service.create_rule(topic_name, subscription_name, rule) finally: await mgmt_service.delete_rule(topic_name, subscription_name, rule_name) await mgmt_service.delete_subscription(topic_name, subscription_name) await mgmt_service.delete_topic(topic_name)
async def test_async_mgmt_rule_create(self, servicebus_namespace_connection_string, **kwargs): mgmt_service = ServiceBusManagementClient.from_connection_string(servicebus_namespace_connection_string) await clear_topics(mgmt_service) topic_name = "topic_testaddf" subscription_name = "sub_testkkk" rule_name_1 = 'test_rule_1' rule_name_2 = 'test_rule_2' rule_name_3 = 'test_rule_3' correlation_fitler = CorrelationRuleFilter(correlation_id='testcid') sql_rule_action = SqlRuleAction(sql_expression="SET Priority = 'low'") rule_1 = RuleDescription(name=rule_name_1, filter=correlation_fitler, action=sql_rule_action) sql_filter = SqlRuleFilter("Priority = 'low'") rule_2 = RuleDescription(name=rule_name_2, filter=sql_filter) bool_filter = TrueRuleFilter() rule_3 = RuleDescription(name=rule_name_3, filter=bool_filter) try: await mgmt_service.create_topic(topic_name) await mgmt_service.create_subscription(topic_name, subscription_name) await mgmt_service.create_rule(topic_name, subscription_name, rule_1) rule_desc = await mgmt_service.get_rule(topic_name, subscription_name, rule_name_1) assert type(rule_desc.filter) == CorrelationRuleFilter assert rule_desc.filter.correlation_id == 'testcid' assert rule_desc.action.sql_expression == "SET Priority = 'low'" await mgmt_service.create_rule(topic_name, subscription_name, rule_2) rule_desc = await mgmt_service.get_rule(topic_name, subscription_name, rule_name_2) assert type(rule_desc.filter) == SqlRuleFilter assert rule_desc.filter.sql_expression == "Priority = 'low'" await mgmt_service.create_rule(topic_name, subscription_name, rule_3) rule_desc = await mgmt_service.get_rule(topic_name, subscription_name, rule_name_3) assert type(rule_desc.filter) == TrueRuleFilter finally: await mgmt_service.delete_rule(topic_name, subscription_name, rule_name_1) await mgmt_service.delete_rule(topic_name, subscription_name, rule_name_2) await mgmt_service.delete_rule(topic_name, subscription_name, rule_name_3) await mgmt_service.delete_subscription(topic_name, subscription_name) await mgmt_service.delete_topic(topic_name)
def test_mgmt_rule_create(self, servicebus_namespace_connection_string, **kwargs): mgmt_service = ServiceBusAdministrationClient.from_connection_string( servicebus_namespace_connection_string) clear_topics(mgmt_service) topic_name = "topic_testaddf" subscription_name = "sub_testkkk" rule_name_1 = 'test_rule_1' rule_name_2 = 'test_rule_2' rule_name_3 = 'test_rule_3' rule_name_4 = 'test_rule_4' correlation_fitler = CorrelationRuleFilter(correlation_id='testcid', properties={ "key_string": "str1", "key_int": 2, "key_long": INT32_MAX_VALUE + 3, "key_bool": False, "key_datetime": datetime( 2020, 7, 5, 11, 12, 13), "key_duration": timedelta(days=1, hours=2, minutes=3) }) sql_rule_action = SqlRuleAction(sql_expression="SET Priority = @param", parameters={ "@param": datetime(2020, 7, 5, 11, 12, 13), }) sql_filter = SqlRuleFilter("Priority = @param1", parameters={ "@param1": "str1", }) bool_filter = TrueRuleFilter() try: mgmt_service.create_topic(topic_name) mgmt_service.create_subscription(topic_name, subscription_name) mgmt_service.create_rule(topic_name, subscription_name, rule_name_1, filter=correlation_fitler, action=sql_rule_action) rule_desc = mgmt_service.get_rule(topic_name, subscription_name, rule_name_1) rule_properties = rule_desc.filter.properties assert type(rule_desc.filter) == CorrelationRuleFilter assert rule_desc.filter.correlation_id == 'testcid' assert rule_desc.action.sql_expression == "SET Priority = @param" assert rule_desc.action.parameters["@param"] == datetime( 2020, 7, 5, 11, 12, 13) assert rule_properties["key_string"] == "str1" assert rule_properties["key_int"] == 2 assert rule_properties["key_long"] == INT32_MAX_VALUE + 3 assert rule_properties["key_bool"] is False assert rule_properties["key_datetime"] == datetime( 2020, 7, 5, 11, 12, 13) assert rule_properties["key_duration"] == timedelta(days=1, hours=2, minutes=3) mgmt_service.create_rule(topic_name, subscription_name, rule_name_2, filter=sql_filter) rule_desc = mgmt_service.get_rule(topic_name, subscription_name, rule_name_2) assert type(rule_desc.filter) == SqlRuleFilter assert rule_desc.filter.sql_expression == "Priority = @param1" assert rule_desc.filter.parameters["@param1"] == "str1" mgmt_service.create_rule(topic_name, subscription_name, rule_name_3, filter=bool_filter) rule_desc = mgmt_service.get_rule(topic_name, subscription_name, rule_name_3) assert type(rule_desc.filter) == TrueRuleFilter mgmt_service.create_rule(topic_name, subscription_name, rule_name_4) rule_desc = mgmt_service.get_rule(topic_name, subscription_name, rule_name_4) assert type(rule_desc.filter) == TrueRuleFilter finally: try: mgmt_service.delete_rule(topic_name, subscription_name, rule_name_1) except: pass try: mgmt_service.delete_rule(topic_name, subscription_name, rule_name_2) except: pass try: mgmt_service.delete_rule(topic_name, subscription_name, rule_name_3) except: pass try: mgmt_service.delete_rule(topic_name, subscription_name, rule_name_4) except: pass try: mgmt_service.delete_subscription(topic_name, subscription_name) except: pass try: mgmt_service.delete_topic(topic_name) except: pass