Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -982,50 +982,77 @@ if __name__ == "__main__":
|
|
982 |
@app.route('/calculation', methods=['POST'])
|
983 |
def handle_calculation():
|
984 |
try:
|
985 |
-
# Получаем
|
986 |
-
|
987 |
|
988 |
-
# Проверяем
|
989 |
-
if not
|
990 |
-
return jsonify({"error": "
|
991 |
|
992 |
-
#
|
993 |
-
|
994 |
-
|
995 |
-
|
996 |
-
|
997 |
-
|
998 |
-
|
999 |
-
|
1000 |
-
|
1001 |
-
|
1002 |
-
|
1003 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1004 |
}
|
1005 |
}
|
1006 |
-
|
1007 |
-
# Обновляем глобальные переменные
|
1008 |
-
global NO3_RATIO, NH4_RATIO
|
1009 |
-
NO3_RATIO = float(raw_data.get('NO3_RATIO', 8.25))
|
1010 |
-
NH4_RATIO = float(raw_data.get('NH4_RATIO', 1.00))
|
1011 |
-
|
1012 |
-
# Создаем и настраиваем калькулятор
|
1013 |
-
calculator = NutrientCalculator(volume_liters=data['profileSettings']['liters'])
|
1014 |
-
calculator.fertilizers = data['fertilizerConstants']
|
1015 |
-
calculator.target_profile.update(data['profileSettings'])
|
1016 |
|
1017 |
-
|
|
|
|
|
1018 |
calculator.calculate()
|
1019 |
|
1020 |
-
# Возвращаем результаты
|
1021 |
return jsonify(calculator.get_web_results())
|
1022 |
|
1023 |
-
except ValueError as e:
|
1024 |
-
return jsonify({"error": f"Invalid numeric value: {str(e)}"}), 400
|
1025 |
-
except KeyError as e:
|
1026 |
-
return jsonify({"error": f"Missing required field: {str(e)}"}), 400
|
1027 |
except Exception as e:
|
1028 |
-
return jsonify({
|
|
|
|
|
|
|
1029 |
|
1030 |
|
1031 |
if __name__ == '__main__':
|
|
|
982 |
@app.route('/calculation', methods=['POST'])
|
983 |
def handle_calculation():
|
984 |
try:
|
985 |
+
# Получаем данные как есть, без преобразований
|
986 |
+
data = request.get_json()
|
987 |
|
988 |
+
# Проверяем только самое необходимое
|
989 |
+
if not data or 'fertilizerConstants' not in data or 'profileSettings' not in data:
|
990 |
+
return jsonify({"error": "Требуются fertilizerConstants и profileSettings"}), 400
|
991 |
|
992 |
+
# Берем глобальные переменные (они уже объявлены выше)
|
993 |
+
global NO3_RATIO, NH4_RATIO, TOTAL_NITROGEN, VOLUME_LITERS
|
994 |
+
|
995 |
+
# Обновляем глобальные переменные из запроса (если переданы)
|
996 |
+
NO3_RATIO = float(data.get('NO3_RATIO', NO3_RATIO))
|
997 |
+
NH4_RATIO = float(data.get('NH4_RATIO', NH4_RATIO))
|
998 |
+
TOTAL_NITROGEN = float(data['profileSettings'].get('N', TOTAL_NITROGEN))
|
999 |
+
VOLUME_LITERS = int(data['profileSettings'].get('liters', VOLUME_LITERS))
|
1000 |
+
|
1001 |
+
# Создаем калькулятор
|
1002 |
+
calculator = NutrientCalculator(volume_liters=VOLUME_LITERS)
|
1003 |
+
|
1004 |
+
# Обновляем профиль из полученных данных
|
1005 |
+
calculator.target_profile.update({
|
1006 |
+
'P': float(data['profileSettings']['P']),
|
1007 |
+
'K': float(data['profileSettings']['K']),
|
1008 |
+
'Mg': float(data['profileSettings']['Mg']),
|
1009 |
+
'Ca': float(data['profileSettings']['Ca']),
|
1010 |
+
'S': float(data['profileSettings']['S']),
|
1011 |
+
'N (NO3-)': float(data['profileSettings']['NO3']),
|
1012 |
+
'N (NH4+)': float(data['profileSettings']['NH4'])
|
1013 |
+
})
|
1014 |
+
|
1015 |
+
# Конвертируем удобрения (используем твой формат как есть)
|
1016 |
+
converted_fertilizers = {
|
1017 |
+
"Кальциевая селитра": {
|
1018 |
+
"N (NO3-)": data['fertilizerConstants']['CaN2O6']['NO3'] / 100,
|
1019 |
+
"Ca": data['fertilizerConstants']['CaN2O6']['Ca'] / 100
|
1020 |
+
},
|
1021 |
+
"Калий азотнокислый": {
|
1022 |
+
"N (NO3-)": data['fertilizerConstants']['KNO3']['NO3'] / 100,
|
1023 |
+
"K": data['fertilizerConstants']['KNO3']['K'] / 100
|
1024 |
+
},
|
1025 |
+
"Аммоний азотнокислый": {
|
1026 |
+
"N (NO3-)": data['fertilizerConstants']['NH4NO3']['NO3'] / 100,
|
1027 |
+
"N (NH4+)": data['fertilizerConstants']['NH4NO3']['NH4'] / 100
|
1028 |
+
},
|
1029 |
+
"Сульфат магния": {
|
1030 |
+
"Mg": data['fertilizerConstants']['MgSO4']['Mg'] / 100,
|
1031 |
+
"S": data['fertilizerConstants']['MgSO4']['S'] / 100
|
1032 |
+
},
|
1033 |
+
"Монофосфат калия": {
|
1034 |
+
"P": data['fertilizerConstants']['KH2PO4']['P'] / 100,
|
1035 |
+
"K": data['fertilizerConstants']['KH2PO4']['K'] / 100
|
1036 |
+
},
|
1037 |
+
"Калий сернокислый": {
|
1038 |
+
"K": data['fertilizerConstants']['K2SO4']['K'] / 100,
|
1039 |
+
"S": data['fertilizerConstants']['K2SO4']['S'] / 100
|
1040 |
}
|
1041 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1042 |
|
1043 |
+
calculator.fertilizers = converted_fertilizers
|
1044 |
+
|
1045 |
+
# Запускаем расчет
|
1046 |
calculator.calculate()
|
1047 |
|
1048 |
+
# Возвращаем результаты в том же формате, что и раньше
|
1049 |
return jsonify(calculator.get_web_results())
|
1050 |
|
|
|
|
|
|
|
|
|
1051 |
except Exception as e:
|
1052 |
+
return jsonify({
|
1053 |
+
"error": "Ошибка расчета",
|
1054 |
+
"details": str(e)
|
1055 |
+
}), 500
|
1056 |
|
1057 |
|
1058 |
if __name__ == '__main__':
|