コード例 #1
0
ファイル: fields.py プロジェクト: whit/ella
    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)
コード例 #2
0
ファイル: fields.py プロジェクト: ella/ella-newman
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)
コード例 #3
0
ファイル: test_fields.py プロジェクト: whit/django-markup
 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