Exemplo n.º 1
0
    def feed_db(self, raw_products):

        style = color.make_style()
        stdout = base.OutputWrapper(sys.stdout)

        self._clear_db()

        # Insert each product in the application's database
        stdout.write("====   Insert products in the database    ====")
        stdout.write("Inserting products in the database...")
        for raw_product in raw_products:
            serialized_product = self._serialize_product(raw_product)

            try:
                product = Product(
                    code=serialized_product["code"],
                    name=serialized_product["name"],
                    url=serialized_product["url"],
                    nutriscore_grade=serialized_product["nutriscore_grade"],
                    image_url=serialized_product["image_url"],
                    image_small_url=serialized_product["image_small_url"],
                    salt_100=serialized_product["salt_100"],
                    sugars_100=serialized_product["sugars_100"],
                    saturated_fat_100=serialized_product["saturated_fat_100"],
                    fat_100=serialized_product["fat_100"],
                )
                product.full_clean()
            except ValidationError:
                # Ignore products with ValidationError
                continue
            product.save()

            # Insert associated categories, stores and brands
            for category in serialized_product["categories"]:
                try:
                    obj = Category.objects.get(name=category)
                except ObjectDoesNotExist:
                    try:
                        obj = Category(name=category)
                        obj.full_clean()
                    except ValidationError:
                        # Ignore categories with ValidationError
                        continue
                    obj.save()

                product.categories.add(obj)
        stdout.write(style.SUCCESS("DONE"))
        stdout.write("==============================================")