コード例 #1
0
    def handle(self, *args, **kwargs):
        diretory = os.path.join(os.path.dirname(__file__),
                                '../../../feedeasyform_project/assets/')
        csvfile_path = diretory + 'table_ingredients.csv'

        try:
            with open(csvfile_path, newline='') as csvfile:
                foods = csv.DictReader(csvfile)

                for food in foods:
                    name_grp_parsed = food['alim_grp_nom_fr'].replace(
                        ' et ', ' & ')
                    try:
                        group = FoodGroup.objects.get(name=name_grp_parsed)

                    except ObjectDoesNotExist:
                        group = FoodGroup()
                        group.name = name_grp_parsed
                        group.save()

                    name_food_parsed = food['alim_nom_fr'].replace(
                        ' et ', ' & ')
                    new_food = Food()
                    new_food.name = name_food_parsed
                    new_food.id_group = group
                    new_food.food_code = food["alim_code"]
                    new_food.proteine = food["Protéines (g/100g)"]
                    new_food.glucide = food["Glucides (g/100g)"]
                    new_food.lipide = food["Lipides (g/100g)"]
                    new_food.sucre = food["Sucres (g/100g)"]
                    new_food.fibre = food["Fibres alimentaires (g/100g)"]
                    new_food.acide_gras_sature = food["AG saturés (g/100g)"]
                    new_food.cholesterol = food["Cholestérol (mg/100g)"]
                    new_food.sel_chlorure_de_sodium = food[
                        "Sel chlorure de sodium (g/100g)"]
                    new_food.calcium = food["Calcium (mg/100g)"]
                    new_food.fer = food["Fer (mg/100g)"]
                    new_food.magnesium = food["Magnésium (mg/100g)"]
                    new_food.potassium = food["Potassium (mg/100g)"]
                    new_food.zinc = food["Zinc (mg/100g)"]
                    new_food.vitamine_c = food["Vitamine C (mg/100g)"]
                    new_food.vitamine_d = food["Vitamine D (µg/100g)"]
                    new_food.vitamine_e = food["Vitamine E (mg/100g)"]
                    new_food.energie = food["Energie (kcal/100g)"]
                    new_food.save()

                    if kwargs['verbose']:
                        self.stdout.write(
                            f"{self.style.SUCCESS(name_food_parsed)} ajouté à la base de données"
                        )
        except:
            self.stderr.write(
                self.style.ERROR('Une erreur est survenu. \
\nIl est possible que les ingrédients existe déjà dans la base de données.'))
コード例 #2
0
    def handle(self, *args, **kwargs):
        diretory = os.path.join(os.path.dirname(__file__),
                                '../../../feedeasyform_project/assets/')
        jsonfile_path = diretory + 'new_foods.json'

        try:
            with open(jsonfile_path, 'r') as jsonfile:
                foods = json.load(jsonfile)

                for food in foods:
                    name_food_parsed = food.pop('name').replace(' et ', ' & ')

                    try:
                        new_food = Food.objects.get(name=name_food_parsed)
                        state = "modifié dans"
                    except ObjectDoesNotExist:
                        new_food = Food()
                        state = "ajouté à"

                    name_grp_parsed = food.pop('categorie_name').replace(
                        ' et ', ' & ')
                    food.pop('source AJOUT')

                    try:
                        group = FoodGroup.objects.get(name=name_grp_parsed)
                    except ObjectDoesNotExist:
                        group = FoodGroup()
                        group.name = name_grp_parsed
                        group.save()

                    new_food.name = name_food_parsed
                    new_food.id_group = group
                    for k, v in food.items():
                        setattr(new_food, k, v)
                    new_food.save()

                    if kwargs['verbose']:
                        self.stdout.write(
                            f"{self.style.SUCCESS(name_food_parsed)} {state} la base de données"
                        )

        except Exception as e:
            print(e)
            self.stderr.write(
                self.style.ERROR('Une erreur est survenu. \
\nIl est possible que les ingrédients existe déjà dans la base de données.'))
コード例 #3
0
    def handle(self, *args, **kwargs):
        self.stdout.write("Ouverture du fichier de sauvegarde et restauration \
en cours. Merci de patienter...")
        directory_path = kwargs['path'][0]
        add_media = kwargs['add_media'][0]
        if 'database.json' not in os.listdir(directory_path):
            if 'recipe' not in os.listdir(directory_path):
                cmd1 = f"cd {directory_path}"
                cmd2 = "unzip backup_db.zip"
                os.system(f"{cmd1} && {cmd2}")
                if add_media == 'add-media':
                    os.system(
                        f"mv {directory_path}recipe \"{settings.MEDIA_ROOT}\"")

        jsonfile_path = directory_path + 'database.json'
        with open(jsonfile_path, 'r') as jsonfile:
            data = json.load(jsonfile)

            for mlp in data['meals_per_day']:
                try:
                    MealsPerDay.objects.get(name=mlp)
                except:
                    new_mlp = MealsPerDay(name=mlp)
                    new_mlp.save()
                    if kwargs['verbose']:
                        self.stdout.write(
                            f"{self.style.SUCCESS(new_mlp.name)} \
ajouté à la base de données")

            for food_group in data['food_groups']:
                try:
                    FoodGroup.objects.get(name=food_group)
                except:
                    new_f_g = FoodGroup(name=food_group)
                    new_f_g.save()
                    if kwargs['verbose']:
                        self.stdout.write(
                            f"{self.style.SUCCESS(new_f_g.name)} \
ajouté à la base de données")

            for food in data['foods']:
                try:
                    Food.objects.get(name=food['name'])
                except:
                    new_food = Food()
                    for k, v in food.items():
                        if k == 'group_name':
                            new_food.id_group = FoodGroup.objects.get(name=v)
                        else:
                            setattr(new_food, k, v)
                    new_food.save()
                    if kwargs['verbose']:
                        self.stdout.write(
                            f"{self.style.SUCCESS(new_food.name)} \
ajouté à la base de données")

            for categ in data['recipe_categories']:
                try:
                    CategorieRecipe.objects.get(name=categ['name'])
                except:
                    new_categ = CategorieRecipe()
                    new_categ.name = categ['name']
                    new_categ.image_active = categ['image_active']
                    new_categ.image_not_active = categ['image_not_active']
                    new_categ.save()
                    if kwargs['verbose']:
                        self.stdout.write(
                            f"{self.style.SUCCESS(new_categ.name)} \
ajouté à la base de données")

            for origin in data['origins_recipe']:
                try:
                    OriginRecipe.objects.get(name=origin)
                except:
                    new_origin = OriginRecipe(name=origin)
                    new_origin.save()
                    if kwargs['verbose']:
                        self.stdout.write(
                            f"{self.style.SUCCESS(new_origin.name)} \
ajouté à la base de données")

            for level in data['levels']:
                try:
                    Level.objects.get(name=level)
                except:
                    new_level = Level(name=level)
                    new_level.save()
                    if kwargs['verbose']:
                        self.stdout.write(
                            f"{self.style.SUCCESS(new_level.name)} \
ajouté à la base de données")

            for price_scale in data['price_scales']:
                try:
                    PriceScale.objects.get(name=price_scale)
                except:
                    new_p_s = PriceScale(name=price_scale)
                    new_p_s.save()
                    if kwargs['verbose']:
                        self.stdout.write(
                            f"{self.style.SUCCESS(new_p_s.name)} \
ajouté à la base de données")

            for utensil in data['utensils']:
                try:
                    Utensil.objects.get(name=utensil)
                except:
                    new_u = Utensil(name=utensil)
                    new_u.save()
                    if kwargs['verbose']:
                        self.stdout.write(f"{self.style.SUCCESS(new_u.name)} \
ajouté à la base de données")

            for season in data['seasons']:
                try:
                    Season.objects.get(name=season)
                except:
                    new_s = Season(name=season)
                    new_s.save()
                    if kwargs['verbose']:
                        self.stdout.write(f"{self.style.SUCCESS(new_s.name)} \
ajouté à la base de données")

            for diet in data['diets']:
                try:
                    DietaryPlan.objects.get(name=diet['name'])
                except:
                    new_d = DietaryPlan(name=diet['name'],
                                        description=diet['desc'])
                    new_d.save()
                    if kwargs['verbose']:
                        self.stdout.write(f"{self.style.SUCCESS(new_d.name)} \
ajouté à la base de données")

            for allergie in data['allergies']:
                try:
                    Allergie.objects.get(name=allergie)
                except:
                    new_a = Allergie(name=allergie)
                    new_a.save()
                    if kwargs['verbose']:
                        self.stdout.write(f"{self.style.SUCCESS(new_a.name)} \
ajouté à la base de données")

            for recipe in data['recipes']:
                r_origin = OriginRecipe.objects.get(name=recipe['origin'])
                r_price_scale = PriceScale.objects.get(
                    name=recipe['price_scale'])
                r_level = Level.objects.get(name=recipe['level'])

                categories = set()
                for categ in recipe['categories']:
                    c = CategorieRecipe.objects.get(name=categ)
                    categories.add(c)

                utensils = set()
                for utensil in recipe['utensils']:
                    u = Utensil.objects.get(name=utensil)
                    utensils.add(u)

                seasons = set()
                for season in recipe['season']:
                    s = Season.objects.get(name=season)
                    seasons.add(s)

                diets = set()
                for diet in recipe['dietary_plan']:
                    d = DietaryPlan.objects.get(name=diet)
                    diets.add(d)

                try:
                    new_r = Recipe.objects.get(name=recipe['name'])
                    state = 'modifiée'
                except:
                    new_r = Recipe()
                    state = 'ajoutée'

                new_r.name = recipe['name']
                new_r.preparation_time = recipe['preparation_time']
                new_r.cooking_time = recipe['cooking_time']
                new_r.step = recipe['step']
                new_r.tip = recipe['tip']
                new_r.portion = recipe['portion']
                new_r.point = recipe['point']
                new_r.typical_recipe_city = recipe['typical_recipe_city']
                new_r.source = recipe['source']
                new_r.image = recipe['image']
                new_r.origin = r_origin
                new_r.price_scale = r_price_scale
                new_r.level = r_level
                new_r.save()

                new_r.categories.set(categories)
                new_r.utensils.set(utensils)
                new_r.season.set(seasons)
                new_r.dietary_plan.set(diets)

                for food in recipe['food']:
                    f = Food.objects.get(name=food['name'])
                    fq = FoodAndQuantity()
                    fq.food = f
                    fq.recipe = new_r
                    fq.recipe_quantity = food['recipe_quantity']
                    fq.recipe_unity = food['recipe_unity']
                    fq.food_purchase_quantity = food['purchase_quantity']
                    fq.food_purchase_unity = food['purchase_unity']
                    fq.save()

                if kwargs['verbose']:
                    self.stdout.write(
                        f"{self.style.SUCCESS(new_r.name)} {state} à la base de données"
                    )