Example #1
0
    def revise(self, force=False, **data):
        revision = self.latest_revision

        if "arguments" in data:
            data["arguments_json"] = json.dumps(data.pop("arguments"))

        if "filter_object" in data:
            data["filter_object_json"] = json.dumps(data.pop("filter_object"))

        if revision:
            revisions = RecipeRevision.objects.filter(id=revision.id)

            revision_data = revision.data
            revision_data.update(data)

            channels = revision_data.pop("channels")
            revisions = filter_m2m(revisions, "channels", channels)

            countries = revision_data.pop("countries")
            revisions = filter_m2m(revisions, "countries", countries)

            locales = revision_data.pop("locales")
            revisions = filter_m2m(revisions, "locales", locales)

            data = revision_data
            revisions = revisions.filter(**data)

            is_clean = revisions.exists()
        else:
            channels = data.pop("channels", [])
            countries = data.pop("countries", [])
            locales = data.pop("locales", [])
            is_clean = False

        if not is_clean or force:
            logger.info(
                f"Creating new revision for recipe ID [{self.id}]",
                extra={"code": INFO_CREATE_REVISION},
            )

            if revision and revision.approval_status == RecipeRevision.PENDING:
                revision.approval_request.delete()

            self.latest_revision = RecipeRevision.objects.create(
                recipe=self, parent=revision, **data
            )

            for channel in channels:
                self.latest_revision.channels.add(channel)

            for country in countries:
                self.latest_revision.countries.add(country)

            for locale in locales:
                self.latest_revision.locales.add(locale)

            self.save()
Example #2
0
    def revise(self, force=False, **data):
        revision = self.latest_revision

        if "arguments" in data:
            data["arguments_json"] = json.dumps(data.pop("arguments"))

        if "filter_object" in data:
            data["filter_object_json"] = json.dumps(data.pop("filter_object"))

        if revision:
            revisions = RecipeRevision.objects.filter(id=revision.id)

            revision_data = revision.data
            revision_data.update(data)

            channels = revision_data.pop("channels")
            revisions = filter_m2m(revisions, "channels", channels)

            countries = revision_data.pop("countries")
            revisions = filter_m2m(revisions, "countries", countries)

            locales = revision_data.pop("locales")
            revisions = filter_m2m(revisions, "locales", locales)

            data = revision_data
            revisions = revisions.filter(**data)

            is_clean = revisions.exists()
        else:
            channels = data.pop("channels", [])
            countries = data.pop("countries", [])
            locales = data.pop("locales", [])
            is_clean = False

        if not is_clean or force:
            logger.info(
                f"Creating new revision for recipe ID [{self.id}]",
                extra={"code": INFO_CREATE_REVISION},
            )

            if revision and revision.approval_status == RecipeRevision.PENDING:
                revision.approval_request.delete()

            self.latest_revision = RecipeRevision.objects.create(
                recipe=self, parent=revision, **data)

            for channel in channels:
                self.latest_revision.channels.add(channel)

            for country in countries:
                self.latest_revision.countries.add(country)

            for locale in locales:
                self.latest_revision.locales.add(locale)

            self.save()
Example #3
0
    def update(self, force=False, **data):
        revision = self.latest_revision

        if 'arguments' in data:
            data['arguments_json'] = json.dumps(data.pop('arguments'))

        if revision:
            revisions = RecipeRevision.objects.filter(id=revision.id)

            revision_data = revision.data
            revision_data.update(data)

            channels = revision_data.pop('channels')
            revisions = filter_m2m(revisions, 'channels', channels)

            countries = revision_data.pop('countries')
            revisions = filter_m2m(revisions, 'countries', countries)

            locales = revision_data.pop('locales')
            revisions = filter_m2m(revisions, 'locales', locales)

            data = revision_data
            revisions = revisions.filter(**data)

            is_clean = revisions.exists()
        else:
            channels = data.pop('channels', [])
            countries = data.pop('countries', [])
            locales = data.pop('locales', [])
            is_clean = False

        if not is_clean or force:
            logger.info(
                f'Creating new revision for recipe ID [{self.id}]',
                extra={'code': INFO_CREATE_REVISION}
            )

            self.latest_revision = RecipeRevision.objects.create(
                recipe=self, parent=revision, **data)

            for channel in channels:
                self.latest_revision.channels.add(channel)

            for country in countries:
                self.latest_revision.countries.add(country)

            for locale in locales:
                self.latest_revision.locales.add(locale)

            self.save()