Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -979,41 +979,53 @@ if __name__ == "__main__":
|
|
979 |
|
980 |
|
981 |
|
982 |
-
|
983 |
@app.route('/calculation', methods=['POST'])
|
984 |
def handle_calculation():
|
985 |
try:
|
986 |
-
# Получаем данные запроса
|
987 |
-
|
988 |
|
989 |
-
# Проверяем
|
990 |
-
if not
|
991 |
-
return jsonify({"error": "Invalid request
|
992 |
|
993 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
994 |
global NO3_RATIO, NH4_RATIO
|
995 |
-
NO3_RATIO = float(
|
996 |
-
NH4_RATIO = float(
|
997 |
|
998 |
-
# Создаем
|
999 |
-
calculator = NutrientCalculator(volume_liters=data
|
|
|
|
|
1000 |
|
1001 |
# Выполняем расчет
|
1002 |
calculator.calculate()
|
1003 |
|
1004 |
-
# Возвращаем
|
1005 |
-
return jsonify(
|
1006 |
-
"fertilizers": calculator._format_fertilizers(),
|
1007 |
-
"profile": calculator._format_profile(),
|
1008 |
-
"ec": calculator.calculate_ec(),
|
1009 |
-
"deficits": calculator.calculate_deficits()
|
1010 |
-
})
|
1011 |
|
|
|
|
|
|
|
|
|
1012 |
except Exception as e:
|
1013 |
-
return jsonify({
|
1014 |
-
"error": "Calculation failed",
|
1015 |
-
"details": str(e)
|
1016 |
-
}), 500
|
1017 |
|
1018 |
|
1019 |
if __name__ == '__main__':
|
|
|
979 |
|
980 |
|
981 |
|
|
|
982 |
@app.route('/calculation', methods=['POST'])
|
983 |
def handle_calculation():
|
984 |
try:
|
985 |
+
# Получаем сырые данные запроса
|
986 |
+
raw_data = request.get_json()
|
987 |
|
988 |
+
# Проверяем базовую структуру
|
989 |
+
if not raw_data or 'fertilizerConstants' not in raw_data or 'profileSettings' not in raw_data:
|
990 |
+
return jsonify({"error": "Invalid request structure"}), 400
|
991 |
|
992 |
+
# Преобразуем данные клиента в серверный формат
|
993 |
+
data = {
|
994 |
+
'fertilizerConstants': convert_client_data(raw_data['fertilizerConstants']),
|
995 |
+
'profileSettings': {
|
996 |
+
'P': float(raw_data['profileSettings'].get('P', 0)),
|
997 |
+
'K': float(raw_data['profileSettings'].get('K', 0)),
|
998 |
+
'Mg': float(raw_data['profileSettings'].get('Mg', 0)),
|
999 |
+
'Ca': float(raw_data['profileSettings'].get('Ca', 0)),
|
1000 |
+
'S': float(raw_data['profileSettings'].get('S', 0)),
|
1001 |
+
'N (NO3-)': float(raw_data['profileSettings'].get('NO3', 0)),
|
1002 |
+
'N (NH4+)': float(raw_data['profileSettings'].get('NH4', 0)),
|
1003 |
+
'liters': int(raw_data['profileSettings'].get('liters', 100))
|
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({"error": f"Calculation error: {str(e)}"}), 500
|
|
|
|
|
|
|
1029 |
|
1030 |
|
1031 |
if __name__ == '__main__':
|