def dependency_post_save_listener(sender, instance, **kwargs): from ella.core.templatetags.core import BoxNode from ella.newman.licenses.models import License from djangomarkup.fields import post_save_listener src_texts = post_save_listener(sender, instance, src_text_attr=DEP_SRC_TEXT_ATTR) if not src_texts: return ct = ContentType.objects.get_for_model(instance) deps = list( Dependency.objects.filter(dependent_ct=ct, dependent_id=instance.pk)) kw = { 'dependent_ct': ct, 'dependent_id': instance.pk, } # gather objects used id all texts objs = [] for st in src_texts: content = getattr(instance, st.field) t = Template(content) objs.extend(box.get_obj() for box in t.nodelist.get_nodes_by_type(BoxNode)) objs = set(objs) add = [] for obj in objs: dep, created = Dependency.objects.get_or_create( target_ct=ContentType.objects.get_for_model(obj), target_id=obj.pk, **kw) if created: add.append(dep) else: deps.remove(dep) # delete outdated dependencies Dependency.objects.filter(pk__in=map(lambda d: d.pk, deps)).delete() if License._meta.installed: License.objects.reflect_added_dependencies(add) License.objects.reflect_removed_dependencies(deps)
def dependency_post_save_listener(sender, instance, **kwargs): src_texts = post_save_listener(sender, instance, src_text_attr=DEP_SRC_TEXT_ATTR) if not src_texts: return ct = ContentType.objects.get_for_model(instance) deps = list(Dependency.objects.filter(dependent_ct=ct, dependent_id=instance.pk)) kw = { 'dependent_ct': ct, 'dependent_id': instance.pk, } # gather objects used id all texts objs = [] context = Context() for st in src_texts: content = getattr(instance, st.field) t = Template(content) objs.extend(box.get_obj(context) for box in t.nodelist.get_nodes_by_type(BoxNode)) objs = set(objs) add = [] for obj in objs: dep, created = Dependency.objects.get_or_create( target_ct=ContentType.objects.get_for_model(obj), target_id=obj.pk, **kw ) if created: add.append(dep) else: deps.remove(dep) # delete outdated dependencies Dependency.objects.filter(pk__in=map(lambda d: d.pk, deps)).delete() if License._meta.installed: License.objects.reflect_added_dependencies(add) License.objects.reflect_removed_dependencies(deps)
def wrapped_post_save_listener(sender, instance, **kwargs): src_texts = post_save_listener(sender, instance, src_text_attr=my_arg, **kwargs) wrapped_post_save_listener.called += 1