Merge branch 'pr/fix_R0912_3' into 'master'
Refactor 'views/observation_new_post', fix too-many-branches error (R0912) See merge request librespacefoundation/satnogs/satnogs-network!831merge-requests/831/merge
commit
38aa415c17
|
@ -231,6 +231,28 @@ class ObservationListView(ListView): # pylint: disable=R0901
|
|||
return context
|
||||
|
||||
|
||||
def create_new_observations(formset, user):
|
||||
"""Creates new observations from formset. Error handling is performed by upper layers."""
|
||||
new_observations = []
|
||||
for observation_data in formset.cleaned_data:
|
||||
transmitter_uuid = observation_data['transmitter_uuid']
|
||||
transmitter = formset.transmitters[transmitter_uuid]
|
||||
|
||||
observation = create_new_observation(
|
||||
station=observation_data['ground_station'],
|
||||
transmitter=transmitter,
|
||||
start=observation_data['start'],
|
||||
end=observation_data['end'],
|
||||
author=user
|
||||
)
|
||||
new_observations.append(observation)
|
||||
|
||||
for observation in new_observations:
|
||||
observation.save()
|
||||
|
||||
return new_observations
|
||||
|
||||
|
||||
def observation_new_post(request):
|
||||
"""Handles POST requests for creating one or more new observations."""
|
||||
ObservationFormSet = formset_factory( # pylint: disable=C0103
|
||||
|
@ -238,71 +260,41 @@ def observation_new_post(request):
|
|||
)
|
||||
formset = ObservationFormSet(request.user, request.POST, prefix='obs')
|
||||
try:
|
||||
if formset.is_valid():
|
||||
new_observations = []
|
||||
for observation_data in formset.cleaned_data:
|
||||
transmitter_uuid = observation_data['transmitter_uuid']
|
||||
transmitter = formset.transmitters[transmitter_uuid]
|
||||
|
||||
observation = create_new_observation(
|
||||
station=observation_data['ground_station'],
|
||||
transmitter=transmitter,
|
||||
start=observation_data['start'],
|
||||
end=observation_data['end'],
|
||||
author=request.user
|
||||
)
|
||||
new_observations.append(observation)
|
||||
|
||||
total = formset.total_form_count()
|
||||
|
||||
for observation in new_observations:
|
||||
observation.save()
|
||||
|
||||
try:
|
||||
del request.session['scheduled']
|
||||
except KeyError:
|
||||
pass
|
||||
request.session['scheduled'] = list(obs.id for obs in new_observations)
|
||||
|
||||
# If it's a single observation redirect to that one
|
||||
if total == 1:
|
||||
messages.success(request, 'Observation was scheduled successfully.')
|
||||
response = redirect(
|
||||
reverse(
|
||||
'base:observation_view', kwargs={'observation_id': new_observations[0].id}
|
||||
)
|
||||
)
|
||||
else:
|
||||
messages.success(
|
||||
request,
|
||||
str(total) + ' Observations were scheduled successfully.'
|
||||
)
|
||||
response = redirect(reverse('base:observations_list'))
|
||||
|
||||
else:
|
||||
if not formset.is_valid():
|
||||
errors_list = [error for error in formset.errors if error]
|
||||
if errors_list:
|
||||
for field in errors_list[0]:
|
||||
messages.error(request, '{0}'.format(errors_list[0][field][0]))
|
||||
else:
|
||||
messages.error(request, '{0}'.format(formset.non_form_errors()[0]))
|
||||
response = redirect(reverse('base:observation_new'))
|
||||
except (ValueError, ValidationError) as error:
|
||||
return redirect(reverse('base:observation_new'))
|
||||
|
||||
new_observations = create_new_observations(formset, request.user)
|
||||
|
||||
if 'scheduled' in request.session:
|
||||
del request.session['scheduled']
|
||||
request.session['scheduled'] = list(obs.id for obs in new_observations)
|
||||
|
||||
# If it's a single observation redirect to that one
|
||||
total = formset.total_form_count()
|
||||
if total == 1:
|
||||
messages.success(request, 'Observation was scheduled successfully.')
|
||||
response = redirect(
|
||||
reverse(
|
||||
'base:observation_view', kwargs={'observation_id': new_observations[0].id}
|
||||
)
|
||||
)
|
||||
else:
|
||||
messages.success(request, str(total) + ' Observations were scheduled successfully.')
|
||||
response = redirect(reverse('base:observations_list'))
|
||||
except (ValueError, ValidationError, ObservationOverlapError, NegativeElevationError,
|
||||
SinglePassError) as error:
|
||||
messages.error(request, '{0}'.format(error.message))
|
||||
response = redirect(reverse('base:observation_new'))
|
||||
except LatestTle.DoesNotExist:
|
||||
message = 'Scheduling failed: Satellite without TLE'
|
||||
messages.error(request, '{0}'.format(message))
|
||||
response = redirect(reverse('base:observation_new'))
|
||||
except ObservationOverlapError as error:
|
||||
messages.error(request, '{0}'.format(error.message))
|
||||
response = redirect(reverse('base:observation_new'))
|
||||
except NegativeElevationError as error:
|
||||
messages.error(request, '{0}'.format(error.message))
|
||||
response = redirect(reverse('base:observation_new'))
|
||||
except SinglePassError as error:
|
||||
messages.error(request, '{0}'.format(error.message))
|
||||
response = redirect(reverse('base:observation_new'))
|
||||
return response
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue