Beispiel #1
0
    def update_variants(self):
        old_flags = Flags(self.old_unit.extra_flags, self.old_unit.flags)
        new_flags = Flags(self.extra_flags, self.flags)

        old_variant = None
        if old_flags.has_value("variant"):
            old_variant = old_flags.get_value("variant")
        new_variant = None
        if new_flags.has_value("variant"):
            new_variant = new_flags.get_value("variant")

        # Check for relevant changes
        if old_variant == new_variant:
            return

        # Delete stale variant
        if old_variant:
            for variant in self.defined_variants.all():
                variant.defining_units.remove(self)
                if variant.defining_units.count() == 0:
                    variant.delete()
                else:
                    variant.unit_set.filter(id_hash=self.id_hash).update(
                        variant=None)

        # Add new variant
        if new_variant:
            variant = Variant.objects.get_or_create(
                key=new_variant, component=self.translation.component)[0]
            variant.defining_units.add(self)

        # Update variant links
        self.translation.component.update_variants()