Files
account_store/RoutesApp/funcs.py
SDE c8c0f43d4d 0.5.3
find route limit slice
2023-08-29 13:31:00 +03:00

86 lines
2.6 KiB
Python

from .models import *
def get_routes_Dict(user=None, data=None):
from ReferenceDataApp.models import Airport, Country, City
# if not user and user.is_authenticated:
# errors_Dict = {
# 'errors': {
# 'all__': f'ошибка идентификации пользователя'
# }
# }
# return errors_Dict
kwargs = {}
if user:
kwargs.update({
'owner': user
})
from_el = None
to_el = None
if data:
for key, val in data.items():
if val:
if key == 'weight':
weight_list = val.split(';')
if weight_list[0]:
kwargs.update({f'{key}__gte': int(weight_list[0])})
if weight_list[1]:
kwargs.update({f'{key}__lte': int(weight_list[1])})
if key not in (
'from_address_point_txt', 'to_address_point_txt', 'csrfmiddlewaretoken', 'sort', 'weight',
'from_el', 'to_el'
):
kwargs.update({key: val})
if key == 'from_el':
from_el = int(val)
if key == 'to_el':
to_el = int(val)
routes = Route.objects.filter(**kwargs).order_by('-modifiedDT')
if from_el and to_el:
routes = routes[from_el:to_el]
elif from_el:
routes = routes[from_el:]
elif to_el:
routes = routes[:to_el]
res_Dict = {}
try:
for route in routes:
try:
if route.type_transport == 'avia':
route.from_airport = Airport.objects.get(id=route.from_address_point)
route.to_airport = Airport.objects.get(id=route.to_address_point)
route.from_city = route.from_airport.city
route.to_city = route.to_airport.city
else:
route.from_city = City.objects.get(id=route.from_address_point)
route.to_city = City.objects.get(id=route.to_address_point)
route.from_country = route.from_city.country
route.to_country = route.to_city.country
except Exception as e:
msg = f'get_routes_for_user get route Error = {str(e)}'
print(msg)
res_Dict = {
'routes': routes
}
return res_Dict
except Exception as e:
msg = f'get_routes_for_user = {str(e)}'
print(msg)
errors_Dict = {
'errors': {
'all__': msg
}
}
return errors_Dict