"""Search indexes app signals.""" from django.db.models.signals import post_save from django.dispatch import receiver @receiver(post_save) def update_document(sender, **kwargs): from establishment.models import Establishment from search_indexes.tasks import es_update app_label = sender._meta.app_label model_name = sender._meta.model_name instance = kwargs['instance'] app_label_model_name_to_filter = { ('location', 'country'): 'address__city__country', # ('location', 'city'): 'address__city', ('location', 'address'): 'address', # todo: remove after migration ('establishment', 'establishmenttype'): 'establishment_type', ('establishment', 'establishmentsubtype'): 'establishment_subtypes', ('tag', 'tag'): 'tags', } filter_name = app_label_model_name_to_filter.get((app_label, model_name)) if filter_name: qs = Establishment.objects.filter(**{filter_name: instance}) for item in qs: es_update(item) @receiver(post_save) def update_news(sender, **kwargs): from news.models import News from search_indexes.tasks import es_update app_label = sender._meta.app_label model_name = sender._meta.model_name instance = kwargs['instance'] app_label_model_name_to_filter = { ('location', 'country'): 'country', ('news', 'newstype'): 'news_type', ('tag', 'tag'): 'tags', } filter_name = app_label_model_name_to_filter.get((app_label, model_name)) if filter_name: qs = News.objects.filter(**{filter_name: instance}) for item in qs: es_update(item) @receiver(post_save) def update_product(sender, **kwargs): from product.models import Product from search_indexes.tasks import es_update app_label = sender._meta.app_label model_name = sender._meta.model_name instance = kwargs['instance'] app_label_model_name_to_filter = { ('product', 'productstandard'): 'standards', ('product', 'producttype'): 'product_type', ('tag', 'tag'): 'tags', # ('location', 'wineregion'): 'wine_region', # ('location', 'winesubregion'): 'wine_sub_region', # ('location', 'winevillage'): 'wine_village', ('establishment', 'establishment'): 'establishment', } filter_name = app_label_model_name_to_filter.get((app_label, model_name)) if filter_name: qs = Product.objects.filter(**{filter_name: instance}) for product in qs: es_update(product)