Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -900,7 +900,69 @@ class NutrientCalculator:
|
|
900 |
def _format_profile(self):
|
901 |
return [{'element': k, 'ppm': round(v, 1)}
|
902 |
for k, v in self.actual_profile.items()]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
903 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
904 |
|
905 |
if __name__ == "__main__":
|
906 |
try:
|
|
|
900 |
def _format_profile(self):
|
901 |
return [{'element': k, 'ppm': round(v, 1)}
|
902 |
for k, v in self.actual_profile.items()]
|
903 |
+
def calculate_deficits(self):
|
904 |
+
"""Вычисляет остаточные дефициты элементов"""
|
905 |
+
return {
|
906 |
+
k: max(self.target_profile[k] - self.actual_profile[k], 0)
|
907 |
+
for k in self.target_profile
|
908 |
+
}
|
909 |
+
|
910 |
+
def get_web_results(self):
|
911 |
+
"""Возвращает данные в формате для web-интерфейса"""
|
912 |
+
return {
|
913 |
+
'fertilizers': self._format_fertilizers(),
|
914 |
+
'profile': self._format_profile(),
|
915 |
+
'ec': self.calculate_ec(),
|
916 |
+
'deficits': self.calculate_deficits(),
|
917 |
+
'volume': self.volume
|
918 |
+
}
|
919 |
|
920 |
+
def _format_fertilizers(self):
|
921 |
+
formatted = []
|
922 |
+
for name, data in self.results.items():
|
923 |
+
fert = {
|
924 |
+
'name': name,
|
925 |
+
'grams': round(data['граммы'], 3),
|
926 |
+
'adds': {}
|
927 |
+
}
|
928 |
+
for k, v in data.items():
|
929 |
+
if k.startswith('внесет'):
|
930 |
+
fert['adds'][k.replace('внесет ', '')] = round(v, 1)
|
931 |
+
formatted.append(fert)
|
932 |
+
return formatted
|
933 |
+
|
934 |
+
def _format_profile(self):
|
935 |
+
return [{'element': k.replace(' (NO3-)', '-NO3').replace(' (NH4+)', '-NH4'),
|
936 |
+
'ppm': round(v, 1)}
|
937 |
+
for k, v in self.actual_profile.items()]
|
938 |
+
|
939 |
+
# Функции для преобразования данных от клиента
|
940 |
+
FERTILIZER_NAME_MAP = {
|
941 |
+
"CaN2O6": "Кальциевая селитра",
|
942 |
+
"KNO3": "Калий азотнокислый",
|
943 |
+
"K2SO4": "Калий сернокислый",
|
944 |
+
"NH4NO3": "Аммоний азотнокислый",
|
945 |
+
"MgSO4": "Сульфат магния",
|
946 |
+
"KH2PO4": "Монофосфат калия"
|
947 |
+
}
|
948 |
+
|
949 |
+
NUTRIENT_MAP = {
|
950 |
+
"NO3": "N (NO3-)",
|
951 |
+
"NH4": "N (NH4+)"
|
952 |
+
}
|
953 |
+
|
954 |
+
def convert_client_data(client_data):
|
955 |
+
"""Преобразует данные от клиента в серверный формат"""
|
956 |
+
server_format = {}
|
957 |
+
for chem_form, nutrients in client_data.items():
|
958 |
+
fert_name = FERTILIZER_NAME_MAP.get(chem_form, chem_form)
|
959 |
+
server_format[fert_name] = {}
|
960 |
+
|
961 |
+
for element, value in nutrients.items():
|
962 |
+
server_element = NUTRIENT_MAP.get(element, element)
|
963 |
+
server_format[fert_name][server_element] = value
|
964 |
+
|
965 |
+
return server_format
|
966 |
|
967 |
if __name__ == "__main__":
|
968 |
try:
|