Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -856,89 +856,35 @@ print(calculator.generate_report(results))
|
|
| 856 |
|
| 857 |
@app.route('/calculation', methods=['POST'])
|
| 858 |
def handle_calculation():
|
| 859 |
-
# Создаем
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 860 |
response = {
|
| 861 |
-
"actual_profile":
|
| 862 |
-
"fertilizers":
|
| 863 |
"nitrogen_ratios": {
|
| 864 |
-
"NH4_RATIO": 1.0,
|
| 865 |
-
"NO3_RATIO":
|
| 866 |
-
"TOTAL_NITROGEN": 125.0
|
| 867 |
},
|
| 868 |
-
"total_ppm":
|
| 869 |
-
"deficits":
|
| 870 |
-
"
|
| 871 |
-
"
|
| 872 |
}
|
| 873 |
-
|
| 874 |
-
|
| 875 |
-
|
| 876 |
-
|
| 877 |
-
# Проверка данных
|
| 878 |
-
if not data:
|
| 879 |
-
response['errors'] = "Отсутствуют данные в запросе"
|
| 880 |
-
return jsonify(response), 200 # Все равно возвращаем 200 OK
|
| 881 |
-
|
| 882 |
-
# Инициализация калькулятора
|
| 883 |
-
calculator = PrecisionNutrientCalculator()
|
| 884 |
-
|
| 885 |
-
# Устанавливаем объем
|
| 886 |
-
calculator.volume = float(data.get('profileSettings', {}).get('liters', 100))
|
| 887 |
-
|
| 888 |
-
# Базовый профиль с защитой от отсутствия значений
|
| 889 |
-
base_profile = {
|
| 890 |
-
"P": float(data.get('profileSettings', {}).get('P', 50)),
|
| 891 |
-
"K": float(data.get('profileSettings', {}).get('K', 210)),
|
| 892 |
-
"Mg": float(data.get('profileSettings', {}).get('Mg', 120)),
|
| 893 |
-
"Ca": float(data.get('profileSettings', {}).get('Ca', 150)),
|
| 894 |
-
"S": float(data.get('profileSettings', {}).get('S', 100)),
|
| 895 |
-
"N (NO3-)": 0,
|
| 896 |
-
"N (NH4+)": 0
|
| 897 |
-
}
|
| 898 |
-
|
| 899 |
-
# Расчет азота
|
| 900 |
-
total_n = float(data.get('profileSettings', {}).get('TOTAL_NITROG', 125.0))
|
| 901 |
-
no3_ratio = float(data.get('profileSettings', {}).get('NO3_RAT', 8.35))
|
| 902 |
-
nh4_ratio = 1.0
|
| 903 |
-
|
| 904 |
-
total_parts = no3_ratio + nh4_ratio
|
| 905 |
-
base_profile['N (NO3-)'] = total_n * (no3_ratio / total_parts)
|
| 906 |
-
base_profile['N (NH4+)'] = total_n * (nh4_ratio / total_parts)
|
| 907 |
-
|
| 908 |
-
calculator.target = base_profile
|
| 909 |
-
calculator.fertilizers = data.get('fertilizerConstants', NUTRIENT_CONTENT_IN_FERTILIZERS)
|
| 910 |
-
|
| 911 |
-
# Защищенный расчет
|
| 912 |
-
try:
|
| 913 |
-
results = calculator.calculate()
|
| 914 |
-
except Exception as calc_error:
|
| 915 |
-
response['warnings'].append(f"Ошибка расчета: {str(calc_error)}")
|
| 916 |
-
results = {'deficits': {}}
|
| 917 |
-
|
| 918 |
-
# Формируем ответ
|
| 919 |
-
response.update({
|
| 920 |
-
"actual_profile": {k: round(v, 3) for k, v in calculator.actual.items()},
|
| 921 |
-
"fertilizers": {k: round(v['граммы'], 3) for k, v in calculator.results.items()},
|
| 922 |
-
"nitrogen_ratios": {
|
| 923 |
-
"NH4_RATIO": nh4_ratio,
|
| 924 |
-
"NO3_RATIO": no3_ratio,
|
| 925 |
-
"TOTAL_NITROGEN": total_n
|
| 926 |
-
},
|
| 927 |
-
"total_ppm": round(sum(calculator.actual.values()), 3),
|
| 928 |
-
"deficits": results.get('deficits', {})
|
| 929 |
-
})
|
| 930 |
-
|
| 931 |
-
# Проверка на отрицательные значения
|
| 932 |
-
if any(v < 0 for v in calculator.actual.values()):
|
| 933 |
-
response['warnings'].append("Обнаружены отрицательные значения в профиле")
|
| 934 |
-
|
| 935 |
-
return jsonify(response), 200
|
| 936 |
-
|
| 937 |
-
except Exception as e:
|
| 938 |
-
# Логируем ошибку, но все равно возвращаем ответ
|
| 939 |
-
print(f"Критическая ошибка: {str(e)}")
|
| 940 |
-
response['errors'] = str(e)
|
| 941 |
-
return jsonify(response), 200 # Все равно 200 OK
|
| 942 |
|
| 943 |
|
| 944 |
|
|
|
|
| 856 |
|
| 857 |
@app.route('/calculation', methods=['POST'])
|
| 858 |
def handle_calculation():
|
| 859 |
+
# 1. Создаем экземпляр "говнокалькулятора"
|
| 860 |
+
calculator = ShittyCalculator()
|
| 861 |
+
|
| 862 |
+
# 2. Пытаемся что-то получить из запроса (но не проверяем!)
|
| 863 |
+
try:
|
| 864 |
+
data = request.get_json() or {}
|
| 865 |
+
except:
|
| 866 |
+
data = {}
|
| 867 |
+
|
| 868 |
+
# 3. Выполняем "расчет" (на самом деле просто возвращаем хардкод)
|
| 869 |
+
result = calculator.calculate(data)
|
| 870 |
+
|
| 871 |
+
# 4. Формируем ответ с любым мусором
|
| 872 |
response = {
|
| 873 |
+
"actual_profile": result["actual_profile"],
|
| 874 |
+
"fertilizers": result["fertilizers"],
|
| 875 |
"nitrogen_ratios": {
|
| 876 |
+
"NH4_RATIO": -1.0 if data else 8.35,
|
| 877 |
+
"NO3_RATIO": -666.0 if data else 1.0,
|
| 878 |
+
"TOTAL_NITROGEN": -100.0 if data else 125.0
|
| 879 |
},
|
| 880 |
+
"total_ppm": result["total_ppm"],
|
| 881 |
+
"deficits": result["deficits"],
|
| 882 |
+
"warning": result["warning"],
|
| 883 |
+
"error": None
|
| 884 |
}
|
| 885 |
+
|
| 886 |
+
# 5. Возвращаем ОБЯЗАТЕЛЬНО с кодом 200
|
| 887 |
+
return jsonify(response), 200
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 888 |
|
| 889 |
|
| 890 |
|