-# def get_resource_dict(resource_type):
-# return {
-# 'resourceTypeId': resource_type.resourceTypeId,
-# 'name': resource_type.name,
-# 'description': resource_type.description,
-# 'vendor': resource_type.vendor,
-# 'model': resource_type.model,
-# 'version': resource_type.version,
-# }
-#
-#
-# def handle_filter(filter: str, f_type: str):
-# if not filter:
-# return
-#
-# filter_list = filter.strip(' []').split('|')
-#
-# match_type_count = 0
-# filters = []
-# for sub_filter in filter_list:
-# objectType, objectTypeValue = get_object_type_and_value(sub_filter)
-# if objectTypeValue == f_type:
-# match_type_count += 1
-# filters.append(sub_filter)
-# elif not objectType and f_type == 'ResourceInfo':
-# filters.append(sub_filter)
-#
-# return match_type_count, filters
-#
-#
-# def get_object_type_and_value(sub_filter):
-# exprs = sub_filter.split(';')
-# for expr in exprs:
-# items = expr.strip(' ()').split(',')
-# item_key = items[1].strip()
-# if item_key == 'objectType':
-# return True, items[2].strip()
-# return False, ''
-#
-#
-# def check_filters(filters, sub_data, uow, id):
-# for filter in filters[1]:
-# if isinstance(filter, bool) and filter:
-# return True
-#
-# try:
-# args = gen_orm_filter(ocloud.ResourceType, filter)
-# except KeyError:
-# logger.warning(
-# 'Subscription {} filter {} has wrong attribute '
-# 'name or value. Ignore the filter.'.format(
-# sub_data['subscriptionId'],
-# sub_data['filter']))
-# continue
-#
-# if len(args) == 0 and 'objectType' in filter:
-# return True
-#
-# args.append(ocloud.ResourceType.resourceTypeId == id)
-# obj_count, _ = uow.resource_types.list_with_count(*args)
-# if obj_count > 0:
-# return True
-# return False
-#
-#
-# def _notify_resourcetype(uow, notifications, data):
-# with uow:
-# resource_type = uow.resource_types.get(data.id)
-# if resource_type is None:
-# logger.warning('ResourceType {} does not exists.'.format(data.id))
-# return
-#
-# resource_type_dict = get_resource_dict(resource_type)
-#
-# subs = uow.subscriptions.list()
-# for sub in subs:
-# sub_data = sub.serialize()
-# filters = handle_filter(sub_data['filter'], 'ResourceTypeInfo')
-# logger.debug(f'filters: {filters}, sub_data: {sub_data}')
-#
-# if not filters or filters[0] == 0 or check_filters(
-# filters, sub_data, uow, data.id):
-# callback_smo(notifications, sub, data, resource_type_dict)
-# continue
-#
-# logger.info('Subscription {} filter hit, skip ResourceType {}.'
-# .format(sub_data['subscriptionId'], data.id))
+def __get_object_type_and_value(sub_filter):
+ exprs = sub_filter.split(';')
+ for expr in exprs:
+ items = expr.strip(' ()').split(',')
+ item_key = items[1].strip()
+ if item_key == 'objectType':
+ return True, items[2].strip()
+ return False, ''
+
+
+def handle_filter(filter: str, f_type: str):
+ if not filter:
+ return
+
+ filter_list = filter.strip(' []').split('|')
+ if not filter_list:
+ return
+
+ match_type_count = 0
+ filters = []
+ for sub_filter in filter_list:
+ objectType, objectTypeValue = __get_object_type_and_value(sub_filter)
+ if objectTypeValue == f_type:
+ match_type_count += 1
+ filters.append(sub_filter)
+ elif not objectType and f_type == 'ResourceInfo':
+ match_type_count += 1
+ filters.append(sub_filter)
+
+ return match_type_count, filters
+
+
+def check_filters(filters, sub_data, uow_cls, obj_cls, attr_id, id):
+ for filter in filters[1]:
+ logger.debug(f'filter: {filter}')
+ try:
+ args = gen_orm_filter(obj_cls, filter)
+ except KeyError:
+ logger.warning(
+ 'Subscription {} filter {} has wrong attribute '
+ 'name or value. Ignore the filter.'.format(
+ sub_data['subscriptionId'],
+ sub_data['filter']))
+ continue
+ logger.debug(f'args: {args}')
+
+ if len(args) == 0 and 'objectType' in filter:
+ return False
+
+ args.append(attr_id == id)
+ obj_count, _ = uow_cls.list_with_count(*args)
+ if obj_count > 0:
+ return True
+ return False
+