1
0
Fork 0

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!831
merge-requests/831/merge
Fabian P. Schmidt 2019-12-31 09:15:08 +00:00
commit 38aa415c17
1 changed files with 45 additions and 53 deletions

View File

@ -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