ValarMayar
@ValarMayar
Д У Р А Ч О К / недопрограммист графоман

Как правильно сократить код?

Есть такие функции, они абсолютно идентичны
def check_faith_potion(uid):
    faith_potion = user_faith_potion.objects.filter(user_potion_id = uid)
    if faith_potion: # если есть зелье скорости получаем инфу
        for f in faith_potion:
            if f.potion_exp_time.timestamp() < datetime.datetime.now().timestamp(): # если время вышло - удаляем
                faith_potion.delete()
                return False

def check_mf_potion(uid):
    mf_potion = user_mf_potion.objects.filter(user_potion_id = uid)
    if mf_potion: # если есть зелье скорости получаем инфу
        for m in mf_potion:
            if m.potion_exp_time.timestamp() < datetime.now().timestamp(): # если время вышло - удаляем
                mf_potion.delete()
                return False


и таких штук 5, на разные запросы к бд
тяну я их вот так
mf_potion_status = check_mf_potion(uid)
damage_potion_status = check_damage_potion(uid)
faith_potion_status = check_faith_potion(uid)

В чем суть вопроса?
Хочу сократить множество функций в одну, передавая лишь названия таблицы
примерно так
mf_potion_status = check_potion(uid, table_name)
Подскажите как правильно организовать такой подход
что бы было понятнее - работаю с django
Спасибо
  • Вопрос задан
  • 99 просмотров
Пригласить эксперта
Ответы на вопрос 1
SoreMix
@SoreMix Куратор тега Python
yellow
Что-то вроде такого, я думаю

def check_potion(uid, potion_type):

    potions = {'user_faith_potion': user_faith_potion,
                'user_mf_potion': user_mf_potion,
                'user_damage_potion': user_damage_potion}

    current_potion = potions.get(potion_type)

    if current_potion:
        potion = current_potion.objects.filter(user_potion_id = uid)
        if potion:
            for f in potion:
                if f.potion_exp_time.timestamp() < datetime.datetime.now().timestamp():
                    potion.delete()
                    return False
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы