1
0
Fork 0

Merge branch 'c0103' into 'master'

pylint: resolve C0103 lint issues

See merge request librespacefoundation/satnogs/satnogs-network!782
merge-requests/782/merge
Alfredos-Panagiotis Damkalis 2019-10-03 08:05:23 +00:00
commit 2a658c91a5
23 changed files with 213 additions and 214 deletions

View File

@ -5,7 +5,6 @@ ignored-argument-names=args|kwargs
[MESSAGES CONTROL]
disable=
C0103,
C0111,
C0412,
E1101,

View File

@ -1,7 +1,7 @@
from __future__ import absolute_import
from ._version import get_versions
from .celery import app as celery_app # noqa
from .celery import APP as celery_app # noqa
__all__ = ['celery_app']

View File

@ -122,23 +122,23 @@ class NewObservationListSerializer(serializers.ListSerializer):
start_end_per_station[station_id].append((start, end))
try:
check_overlaps(start_end_per_station)
except ObservationOverlapError as e:
raise serializers.ValidationError(e, code='invalid')
except ObservationOverlapError as error:
raise serializers.ValidationError(error, code='invalid')
station_list = list(set(station_list))
try:
check_schedule_perms_per_station(user, station_list)
except UserNoPermissionError as e:
raise serializers.ValidationError(e, code='forbidden')
except UserNoPermissionError as error:
raise serializers.ValidationError(error, code='forbidden')
transmitter_uuid_list = list(set(transmitter_uuid_list))
try:
transmitters = get_transmitters_by_uuid_list(transmitter_uuid_list)
self.transmitters = transmitters
except ValueError as e:
raise serializers.ValidationError(e, code='invalid')
except DBConnectionError as e:
raise serializers.ValidationError(e)
except ValueError as error:
raise serializers.ValidationError(error, code='invalid')
except DBConnectionError as error:
raise serializers.ValidationError(error)
transmitter_uuid_station_set = set(transmitter_uuid_station_list)
transmitter_station_list = [
@ -146,8 +146,8 @@ class NewObservationListSerializer(serializers.ListSerializer):
]
try:
check_transmitter_station_pairs(transmitter_station_list)
except OutOfRangeError as e:
raise serializers.ValidationError(e, code='invalid')
except OutOfRangeError as error:
raise serializers.ValidationError(error, code='invalid')
return attrs
def create(self, validated_data):
@ -214,15 +214,15 @@ class NewObservationSerializer(serializers.Serializer):
def validate_start(self, value):
try:
check_start_datetime(value)
except ValueError as e:
raise serializers.ValidationError(e, code='invalid')
except ValueError as error:
raise serializers.ValidationError(error, code='invalid')
return value
def validate_end(self, value):
try:
check_end_datetime(value)
except ValueError as e:
raise serializers.ValidationError(e, code='invalid')
except ValueError as error:
raise serializers.ValidationError(error, code='invalid')
return value
def validate(self, attrs):
@ -230,8 +230,8 @@ class NewObservationSerializer(serializers.Serializer):
end = attrs['end']
try:
check_start_end_datetimes(start, end)
except ValueError as e:
raise serializers.ValidationError(e, code='invalid')
except ValueError as error:
raise serializers.ValidationError(error, code='invalid')
return attrs
def create(self, validated_data):

View File

@ -2,12 +2,12 @@ from rest_framework import routers
from network.api import views
router = routers.DefaultRouter()
ROUTER = routers.DefaultRouter()
router.register(r'jobs', views.JobView, base_name='jobs')
router.register(r'data', views.ObservationView, base_name='data')
router.register(r'observations', views.ObservationView, base_name='observations')
router.register(r'stations', views.StationView, base_name='stations')
router.register(r'transmitters', views.TransmitterView, base_name='transmitters')
ROUTER.register(r'jobs', views.JobView, base_name='jobs')
ROUTER.register(r'data', views.ObservationView, base_name='data')
ROUTER.register(r'observations', views.ObservationView, base_name='observations')
ROUTER.register(r'stations', views.StationView, base_name='stations')
ROUTER.register(r'transmitters', views.TransmitterView, base_name='transmitters')
api_urlpatterns = router.urls
API_URLPATTERNS = ROUTER.urls

View File

@ -35,20 +35,20 @@ class ObservationView(mixins.ListModelMixin, mixins.RetrieveModelMixin, mixins.U
else:
data = serializer.errors
response = Response(data, status=status.HTTP_400_BAD_REQUEST)
except ValidationError as e:
data = e.message
except ValidationError as error:
data = error.message
response = Response(data, status=status.HTTP_400_BAD_REQUEST)
except LatestTle.DoesNotExist:
data = 'Scheduling failed: Satellite without TLE'
response = Response(data, status=status.HTTP_501_NOT_IMPLEMENTED)
except ObservationOverlapError as e:
data = e.message
except ObservationOverlapError as error:
data = error.message
response = Response(data, status=status.HTTP_409_CONFLICT)
except NegativeElevationError as e:
data = e.message
except NegativeElevationError as error:
data = error.message
response = Response(data, status=status.HTTP_400_BAD_REQUEST)
except SinglePassError as e:
data = e.message
except SinglePassError as error:
data = error.message
response = Response(data, status=status.HTTP_400_BAD_REQUEST)
return response
@ -104,17 +104,17 @@ class JobView(viewsets.ReadOnlyModelViewSet):
def get_queryset(self):
queryset = self.queryset.filter(start__gte=now())
gs_id = self.request.query_params.get('ground_station', None)
if gs_id and self.request.user.is_authenticated():
gs = get_object_or_404(Station, id=gs_id)
if gs.owner == self.request.user:
ground_station_id = self.request.query_params.get('ground_station', None)
if ground_station_id and self.request.user.is_authenticated():
ground_station = get_object_or_404(Station, id=ground_station_id)
if ground_station.owner == self.request.user:
lat = self.request.query_params.get('lat', None)
lon = self.request.query_params.get('lon', None)
alt = self.request.query_params.get('alt', None)
if not (lat is None or lon is None or alt is None):
gs.lat = float(lat)
gs.lng = float(lon)
gs.alt = int(alt)
gs.last_seen = now()
gs.save()
ground_station.lat = float(lat)
ground_station.lng = float(lon)
ground_station.alt = int(alt)
ground_station.last_seen = now()
ground_station.save()
return queryset

View File

@ -1,7 +1,7 @@
import requests
from django.conf import settings
db_api_url = settings.DB_API_ENDPOINT
DB_API_URL = settings.DB_API_ENDPOINT
class DBConnectionError(Exception):
@ -9,7 +9,7 @@ class DBConnectionError(Exception):
def transmitters_api_request(url):
if not db_api_url:
if not DB_API_URL:
raise DBConnectionError('Error in DB API connection. Blank DB API URL!')
try:
request = requests.get(url)
@ -19,22 +19,22 @@ def transmitters_api_request(url):
def get_transmitter_by_uuid(uuid):
transmitters_url = "{}transmitters/?uuid={}".format(db_api_url, uuid)
transmitters_url = "{}transmitters/?uuid={}".format(DB_API_URL, uuid)
return transmitters_api_request(transmitters_url)
def get_transmitters_by_norad_id(norad_id):
transmitters_url = "{}transmitters/?satellite__norad_cat_id={}".format(db_api_url, norad_id)
transmitters_url = "{}transmitters/?satellite__norad_cat_id={}".format(DB_API_URL, norad_id)
return transmitters_api_request(transmitters_url)
def get_transmitters_by_status(status):
transmitters_url = "{}transmitters/?status={}".format(db_api_url, status)
transmitters_url = "{}transmitters/?status={}".format(DB_API_URL, status)
return transmitters_api_request(transmitters_url)
def get_transmitters():
transmitters_url = "{}transmitters".format(db_api_url)
transmitters_url = "{}transmitters".format(DB_API_URL)
return transmitters_api_request(transmitters_url)

View File

@ -44,16 +44,16 @@ class ObservationForm(forms.ModelForm):
start = self.cleaned_data['start']
try:
check_start_datetime(start)
except ValueError as e:
raise forms.ValidationError(e, code='invalid')
except ValueError as error:
raise forms.ValidationError(error, code='invalid')
return start
def clean_end(self):
end = self.cleaned_data['end']
try:
check_end_datetime(end)
except ValueError as e:
raise forms.ValidationError(e, code='invalid')
except ValueError as error:
raise forms.ValidationError(error, code='invalid')
return end
def clean(self):
@ -65,8 +65,8 @@ class ObservationForm(forms.ModelForm):
end = cleaned_data['end']
try:
check_start_end_datetimes(start, end)
except ValueError as e:
raise forms.ValidationError(e, code='invalid')
except ValueError as error:
raise forms.ValidationError(error, code='invalid')
class Meta:
model = Observation
@ -106,23 +106,23 @@ class BaseObservationFormSet(forms.BaseFormSet):
try:
check_overlaps(start_end_per_station)
except ObservationOverlapError as e:
raise forms.ValidationError(e, code='invalid')
except ObservationOverlapError as error:
raise forms.ValidationError(error, code='invalid')
station_list = list(set(station_list))
try:
check_schedule_perms_per_station(self.user, station_list)
except UserNoPermissionError as e:
raise forms.ValidationError(e, code='forbidden')
except UserNoPermissionError as error:
raise forms.ValidationError(error, code='forbidden')
transmitter_uuid_list = list(set(transmitter_uuid_list))
try:
transmitters = get_transmitters_by_uuid_list(transmitter_uuid_list)
self.transmitters = transmitters
except ValueError as e:
raise forms.ValidationError(e, code='invalid')
except DBConnectionError as e:
raise forms.ValidationError(e)
except ValueError as error:
raise forms.ValidationError(error, code='invalid')
except DBConnectionError as error:
raise forms.ValidationError(error)
transmitter_uuid_station_set = set(transmitter_uuid_station_list)
transmitter_station_list = [
@ -130,8 +130,8 @@ class BaseObservationFormSet(forms.BaseFormSet):
]
try:
check_transmitter_station_pairs(transmitter_station_list)
except OutOfRangeError as e:
raise forms.ValidationError(e, code='invalid')
except OutOfRangeError as error:
raise forms.ValidationError(error, code='invalid')
class StationForm(forms.ModelForm):

View File

@ -10,12 +10,12 @@ class Command(LabelCommand):
def handle_label(self, label, **options):
try:
gs = Station.objects.get(id=label)
ground_station = Station.objects.get(id=label)
except Station.DoesNotExist:
self.stderr.write('Station with ID {} does not exist'.format(label))
return
timestamp = now()
gs.last_seen = timestamp
gs.save()
ground_station.last_seen = timestamp
ground_station.save()
self.stdout.write('Updated Last_Seen for Station {} to {}'.format(label, timestamp))

View File

@ -461,12 +461,12 @@ class Observation(models.Model):
if self.has_audio:
if self.archive_url:
try:
r = requests.get(self.archive_url, allow_redirects=False)
url = r.headers['Location']
request = requests.get(self.archive_url, allow_redirects=False)
url = request.headers['Location']
return url
except Exception as e:
except Exception as error:
logger = logging.getLogger(__name__)
logger.warning("Error in request to '%s'. Error: %s", self.archive_url, e)
logger.warning("Error in request to '%s'. Error: %s", self.archive_url, error)
return ''
else:
return self.payload.url
@ -479,7 +479,7 @@ class Observation(models.Model):
return str(self.id)
def get_absolute_url(self):
return reverse('base:observation_view', kwargs={'id': self.id})
return reverse('base:observation_view', kwargs={'observation_id': self.id})
@receiver(models.signals.post_delete, sender=Observation)
@ -503,17 +503,17 @@ class DemodData(models.Model):
copied_to_db = models.BooleanField(default=False)
def is_image(self):
with open(self.payload_demod.path) as fp:
with open(self.payload_demod.path) as file_path:
try:
Image.open(fp)
Image.open(file_path)
except (IOError, TypeError):
return False
else:
return True
def display_payload(self):
with open(self.payload_demod.path) as fp:
payload = fp.read()
with open(self.payload_demod.path) as file_path:
payload = file_path.read()
try:
return unicode(payload)
except UnicodeDecodeError:

View File

@ -172,14 +172,14 @@ def create_station_windows(scheduled_obs, overlapped, pass_params, observer, sat
def next_pass(observer, satellite):
tr, azr, tt, altt, ts, azs = observer.next_pass(satellite, True)
rise_time, rise_az, tca_time, tca_alt, set_time, set_az = observer.next_pass(satellite, True)
# Convert output of pyephems.next_pass into processible values
pass_start = make_aware(ephem.Date(tr).datetime(), utc)
pass_end = make_aware(ephem.Date(ts).datetime(), utc)
pass_tca = make_aware(ephem.Date(tt).datetime(), utc)
pass_azr = float(format(math.degrees(azr), '.0f'))
pass_azs = float(format(math.degrees(azs), '.0f'))
pass_altitude = float(format(math.degrees(altt), '.0f'))
pass_start = make_aware(ephem.Date(rise_time).datetime(), utc)
pass_end = make_aware(ephem.Date(set_time).datetime(), utc)
pass_tca = make_aware(ephem.Date(tca_time).datetime(), utc)
pass_azr = float(format(math.degrees(rise_az), '.0f'))
pass_azs = float(format(math.degrees(set_az), '.0f'))
pass_altitude = float(format(math.degrees(tca_alt), '.0f'))
return {
'rise_time': pass_start,

View File

@ -16,10 +16,10 @@ from satellite_tle import fetch_tle_from_celestrak
from network.base.models import DemodData, LatestTle, Observation, Satellite, \
Station, Tle, Transmitter
from network.base.utils import demod_to_db
from network.celery import app
from network.celery import APP
@app.task(ignore_result=True)
@APP.task(ignore_result=True)
def update_all_tle():
"""Task to update all satellite TLEs"""
latest_tle_queryset = LatestTle.objects.all()
@ -50,7 +50,7 @@ def update_all_tle():
print '{} - {}: new TLE found [updated]'.format(obj.name, norad_id)
@app.task(ignore_result=True)
@APP.task(ignore_result=True)
def fetch_data():
"""Task to fetch all data from DB"""
apiurl = settings.DB_API_ENDPOINT
@ -86,7 +86,7 @@ def fetch_data():
Transmitter.objects.create(uuid=uuid)
@app.task(ignore_result=True)
@APP.task(ignore_result=True)
def archive_audio(obs_id):
obs = Observation.objects.get(id=obs_id)
suffix = '-{0}'.format(settings.ENVIRONMENT)
@ -101,7 +101,7 @@ def archive_audio(obs_id):
'<p>Audio file from SatNOGS{0} <a href="{1}/observations/{2}">'
'Observation {3}</a>.</p>'
).format(suffix, site.domain, obs.id, obs.id)
md = dict(
metadata = dict(
collection=settings.ARCHIVE_COLLECTION,
title=identifier,
mediatype='audio',
@ -112,7 +112,7 @@ def archive_audio(obs_id):
res = upload(
identifier,
files=[ogg],
metadata=md,
metadata=metadata,
access_key=settings.S3_ACCESS_KEY,
secret_key=settings.S3_SECRET_KEY
)
@ -126,7 +126,7 @@ def archive_audio(obs_id):
obs.payload.delete()
@app.task(ignore_result=True)
@APP.task(ignore_result=True)
def clean_observations():
"""Task to clean up old observations that lack actual data."""
threshold = now() - timedelta(days=int(settings.OBSERVATION_OLD_RANGE))
@ -141,13 +141,13 @@ def clean_observations():
archive_audio.delay(obs.id)
@app.task
@APP.task
def sync_to_db():
"""Task to send demod data to db / SiDS"""
q = now() - timedelta(days=1)
period = now() - timedelta(days=1)
transmitters = Transmitter.objects.filter(sync_to_db=True).values_list('uuid', flat=True)
frames = DemodData.objects.filter(
observation__end__gte=q,
observation__end__gte=period,
copied_to_db=False,
observation__transmitter_uuid__in=transmitters
)
@ -160,7 +160,7 @@ def sync_to_db():
continue
@app.task(ignore_result=True)
@APP.task(ignore_result=True)
def station_status_update():
"""Task to update Station status."""
for station in Station.objects.all():
@ -173,7 +173,7 @@ def station_status_update():
station.save()
@app.task(ignore_result=True)
@APP.task(ignore_result=True)
def notify_for_stations_without_results():
"""Task to send email for stations with observations without results."""
email_to = settings.EMAIL_FOR_STATIONS_ISSUES
@ -204,7 +204,7 @@ def notify_for_stations_without_results():
)
@app.task(ignore_result=True)
@APP.task(ignore_result=True)
def stations_cache_rates():
stations = Station.objects.all()
for station in stations:

View File

@ -169,9 +169,9 @@ class StationListViewTest(TestCase):
def test_station_list(self):
response = self.client.get('/stations/')
for x in self.stations:
self.assertContains(response, x.owner)
self.assertContains(response, x.name)
for station in self.stations:
self.assertContains(response, station.owner)
self.assertContains(response, station.name)
@pytest.mark.django_db(transaction=True)
@ -214,26 +214,26 @@ class ObservationsListViewTest(TestCase):
def test_observations_list(self):
response = self.client.get('/observations/')
for x in self.observations:
self.assertContains(response, x.transmitter_mode)
for observation in self.observations:
self.assertContains(response, observation.transmitter_mode)
def test_observations_list_select_bad(self):
response = self.client.get('/observations/?bad=1')
for x in self.observations_bad:
self.assertContains(response, x.transmitter_mode)
for observation in self.observations_bad:
self.assertContains(response, observation.transmitter_mode)
def test_observations_list_select_good(self):
response = self.client.get('/observations/?good=1')
for x in self.observations_good:
self.assertContains(response, x.transmitter_mode)
for observation in self.observations_good:
self.assertContains(response, observation.transmitter_mode)
def test_observations_list_select_unvetted(self):
response = self.client.get('/observations/?unvetted=1')
for x in self.observations_unvetted:
self.assertContains(response, x.transmitter_mode)
for observation in self.observations_unvetted:
self.assertContains(response, observation.transmitter_mode)
class NotFoundErrorTest(TestCase):
@ -271,8 +271,8 @@ class ObservationViewTest(TestCase):
def setUp(self):
self.user = UserFactory()
g = Group.objects.get(name='Moderators')
g.user_set.add(self.user)
moderators = Group.objects.get(name='Moderators')
moderators.user_set.add(self.user)
for _ in xrange(1, 10):
self.satellites.append(SatelliteFactory())
for _ in xrange(1, 10):
@ -323,8 +323,8 @@ class ObservationDeleteTest(TestCase):
def test_future_observation_delete_moderator(self):
"""Deletion OK when user is moderator and observation is in future"""
self.user = UserFactory()
g = Group.objects.get(name='Moderators')
g.user_set.add(self.user)
moderators = Group.objects.get(name='Moderators')
moderators.user_set.add(self.user)
self.client.force_login(self.user)
response = self.client.get('/observations/%d/delete/' % self.future_observation.id)
self.assertRedirects(response, '/observations/')
@ -342,8 +342,8 @@ class ObservationDeleteTest(TestCase):
def test_past_observation_delete_moderator(self):
"""Deletion NOT OK when user is moderator and observation is in past"""
self.user = UserFactory()
g = Group.objects.get(name='Moderators')
g.user_set.add(self.user)
moderators = Group.objects.get(name='Moderators')
moderators.user_set.add(self.user)
self.client.force_login(self.user)
response = self.client.get('/observations/%d/delete/' % self.past_observation.id)
self.assertRedirects(response, '/observations/')

View File

@ -3,7 +3,7 @@ from django.views.generic import TemplateView
from network.base import views
base_urlpatterns = (
BASE_URLPATTERNS = (
[
url(r'^$', views.index, name='home'),
url(r'^about/$', TemplateView.as_view(template_name='base/about.html'), name='about'),
@ -12,35 +12,47 @@ base_urlpatterns = (
# Observations
url(r'^observations/$', views.ObservationListView.as_view(), name='observations_list'),
url(r'^observations/(?P<id>[0-9]+)/$', views.observation_view, name='observation_view'),
url(
r'^observations/(?P<id>[0-9]+)/delete/$',
r'^observations/(?P<observation_id>[0-9]+)/$',
views.observation_view,
name='observation_view'
),
url(
r'^observations/(?P<observation_id>[0-9]+)/delete/$',
views.observation_delete,
name='observation_delete'
),
url(r'^observations/new/$', views.observation_new, name='observation_new'),
url(r'^prediction_windows/$', views.prediction_windows, name='prediction_windows'),
url(
r'^pass_predictions/(?P<id>[\w.@+-]+)/$',
r'^pass_predictions/(?P<observation_id>[\w.@+-]+)/$',
views.pass_predictions,
name='pass_predictions'
),
url(r'^observation_vet/(?P<id>[0-9]+)/$', views.observation_vet, name='observation_vet'),
url(
r'^observation_vet/(?P<observation_id>[0-9]+)/$',
views.observation_vet,
name='observation_vet'
),
# Stations
url(r'^stations/$', views.stations_list, name='stations_list'),
url(r'^stations/(?P<id>[0-9]+)/$', views.station_view, name='station_view'),
url(r'^stations/(?P<id>[0-9]+)/log/$', views.station_log, name='station_log'),
url(r'^stations/(?P<id>[0-9]+)/delete/$', views.station_delete, name='station_delete'),
url(r'^stations/(?P<station_id>[0-9]+)/$', views.station_view, name='station_view'),
url(r'^stations/(?P<station_id>[0-9]+)/log/$', views.station_log, name='station_log'),
url(
r'^stations/(?P<station_id>[0-9]+)/delete/$',
views.station_delete,
name='station_delete'
),
url(r'^stations/edit/$', views.station_edit, name='station_edit'),
url(r'^stations/edit/(?P<id>[0-9]+)/$', views.station_edit, name='station_edit'),
url(r'^stations/edit/(?P<station_id>[0-9]+)/$', views.station_edit, name='station_edit'),
url(
r'^stations_all/$', views.StationAllView.as_view({'get': 'list'}), name='stations_all'
),
url(r'^scheduling_stations/$', views.scheduling_stations, name='scheduling_stations'),
# Satellites
url(r'^satellites/(?P<id>[0-9]+)/$', views.satellite_view, name='satellite_view'),
url(r'^satellites/(?P<norad_id>[0-9]+)/$', views.satellite_view, name='satellite_view'),
# Transmitters
url(r'^transmitters/', views.transmitters_view, name='transmitters_view'),

View File

@ -10,8 +10,7 @@ from django.contrib.auth.decorators import login_required
from django.core.urlresolvers import reverse
from django.db.models import Count, Prefetch
from django.forms import ValidationError, formset_factory
from django.http import HttpResponse, HttpResponseNotFound, \
HttpResponseServerError, JsonResponse
from django.http import HttpResponse, JsonResponse
from django.shortcuts import get_object_or_404, redirect, render
from django.utils.text import slugify
from django.utils.timezone import make_aware, now, utc
@ -67,16 +66,6 @@ def index(request):
)
def custom_404(request):
"""Custom 404 error handler."""
return HttpResponseNotFound(render(request, '404.html'))
def custom_500(request):
"""Custom 500 error handler."""
return HttpResponseServerError(render(request, '500.html'))
def robots(request):
data = render(request, 'robots.txt', {'environment': settings.ENVIRONMENT})
response = HttpResponse(data, content_type='text/plain; charset=utf-8')
@ -232,7 +221,7 @@ class ObservationListView(ListView):
def observation_new_post(request):
ObservationFormSet = formset_factory(
ObservationFormSet = formset_factory( # pylint: disable=C0103
ObservationForm, formset=BaseObservationFormSet, min_num=1, validate_min=True
)
formset = ObservationFormSet(request.user, request.POST, prefix='obs')
@ -266,7 +255,9 @@ def observation_new_post(request):
if total == 1:
messages.success(request, 'Observation was scheduled successfully.')
response = redirect(
reverse('base:observation_view', kwargs={'id': new_observations[0].id})
reverse(
'base:observation_view', kwargs={'observation_id': new_observations[0].id}
)
)
else:
messages.success(
@ -283,21 +274,21 @@ def observation_new_post(request):
else:
messages.error(request, '{0}'.format(formset.non_form_errors()[0]))
response = redirect(reverse('base:observation_new'))
except ValidationError as e:
messages.error(request, '{0}'.format(e.message))
except ValidationError 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 e:
messages.error(request, '{0}'.format(e.message))
except ObservationOverlapError as error:
messages.error(request, '{0}'.format(error.message))
response = redirect(reverse('base:observation_new'))
except NegativeElevationError as e:
messages.error(request, '{0}'.format(e.message))
except NegativeElevationError as error:
messages.error(request, '{0}'.format(error.message))
response = redirect(reverse('base:observation_new'))
except SinglePassError as e:
messages.error(request, '{0}'.format(e.message))
except SinglePassError as error:
messages.error(request, '{0}'.format(error.message))
response = redirect(reverse('base:observation_new'))
return response
@ -383,8 +374,8 @@ def prediction_windows(request):
return JsonResponse(data, safe=False)
else:
downlink = transmitter[0]['downlink_low']
except DBConnectionError as e:
data = [{'error': e.message}]
except DBConnectionError as error:
data = [{'error': error.message}]
return JsonResponse(data, safe=False)
start = make_aware(datetime.strptime(start, '%Y-%m-%d %H:%M'), utc)
@ -447,9 +438,9 @@ def prediction_windows(request):
return JsonResponse(data, safe=False)
def observation_view(request, id):
def observation_view(request, observation_id):
"""View for single observation page."""
observation = get_object_or_404(Observation, id=id)
observation = get_object_or_404(Observation, id=observation_id)
can_vet = vet_perms(request.user, observation)
@ -499,9 +490,9 @@ def observation_view(request, id):
@login_required
def observation_delete(request, id):
def observation_delete(request, observation_id):
"""View for deleting observation."""
observation = get_object_or_404(Observation, id=id)
observation = get_object_or_404(Observation, id=observation_id)
can_delete = delete_perms(request.user, observation)
if can_delete:
observation.delete()
@ -513,9 +504,9 @@ def observation_delete(request, id):
@login_required
@ajax_required
def observation_vet(request, id):
def observation_vet(request, observation_id):
try:
observation = Observation.objects.get(id=id)
observation = Observation.objects.get(id=observation_id)
except Observation.DoesNotExist:
data = {'error': 'Observation does not exist.'}
return JsonResponse(data, safe=False)
@ -566,9 +557,9 @@ def stations_list(request):
)
def station_view(request, id):
def station_view(request, station_id):
"""View for single station page."""
station = get_object_or_404(Station, id=id)
station = get_object_or_404(Station, id=station_id)
form = StationForm(instance=station)
antennas = Antenna.objects.all()
unsupported_frequencies = request.GET.get('unsupported_frequencies', '0')
@ -628,9 +619,9 @@ def station_view(request, id):
)
def station_log(request, id):
def station_log(request, station_id):
"""View for single station status log."""
station = get_object_or_404(Station, id=id)
station = get_object_or_404(Station, id=station_id)
station_log = StationStatusLog.objects.filter(station=station)
return render(
@ -659,8 +650,8 @@ def scheduling_stations(request):
if downlink is None:
data = [{'error': 'You should select a valid Transmitter.'}]
return JsonResponse(data, safe=False)
except DBConnectionError as e:
data = [{'error': e.message}]
except DBConnectionError as error:
data = [{'error': error.message}]
return JsonResponse(data, safe=False)
stations = Station.objects.filter(status__gt=0)
@ -672,7 +663,7 @@ def scheduling_stations(request):
@ajax_required
def pass_predictions(request, id):
def pass_predictions(request, station_id):
"""Endpoint for pass predictions"""
scheduled_obs_queryset = Observation.objects.filter(end__gt=now())
station = get_object_or_404(
@ -680,7 +671,7 @@ def pass_predictions(request, id):
Prefetch('observations', queryset=scheduled_obs_queryset, to_attr='scheduled_obs'),
'antenna'
),
id=id
id=station_id
)
unsupported_frequencies = request.GET.get('unsupported_frequencies', '0')
@ -767,7 +758,7 @@ def pass_predictions(request, id):
nextpasses.append(sat_pass)
data = {
'id': id,
'id': station_id,
'nextpasses': sorted(nextpasses, key=itemgetter('tr')),
'ground_station': {
'lng': str(station.lng),
@ -779,12 +770,12 @@ def pass_predictions(request, id):
return JsonResponse(data, safe=False)
def station_edit(request, id=None):
def station_edit(request, station_id=None):
"""Edit or add a single station."""
station = None
antennas = Antenna.objects.all()
if id:
station = get_object_or_404(Station, id=id, owner=request.user)
if station_id:
station = get_object_or_404(Station, id=station_id, owner=request.user)
if request.method == 'POST':
if station:
@ -792,14 +783,14 @@ def station_edit(request, id=None):
else:
form = StationForm(request.POST, request.FILES)
if form.is_valid():
f = form.save(commit=False)
station_form = form.save(commit=False)
if not station:
f.testing = True
f.owner = request.user
f.save()
station_form.testing = True
station_form.owner = request.user
station_form.save()
form.save_m2m()
messages.success(request, 'Ground Station saved successfully.')
return redirect(reverse('base:station_view', kwargs={'id': f.id}))
return redirect(reverse('base:station_view', kwargs={'station_id': station_form.id}))
else:
messages.error(
request, ('Your Ground Station submission has some '
@ -827,13 +818,13 @@ def station_edit(request, id=None):
@login_required
def station_delete(request, id):
def station_delete(request, station_id):
"""View for deleting a station."""
me = request.user
station = get_object_or_404(Station, id=id, owner=request.user)
username = request.user
station = get_object_or_404(Station, id=station_id, owner=request.user)
station.delete()
messages.success(request, 'Ground Station deleted successfully.')
return redirect(reverse('users:view_user', kwargs={'username': me}))
return redirect(reverse('users:view_user', kwargs={'username': username}))
def transmitters_with_stats(transmitters_list):
@ -845,21 +836,21 @@ def transmitters_with_stats(transmitters_list):
return transmitters_with_stats_list
def satellite_view(request, id):
def satellite_view(request, norad_id):
try:
sat = Satellite.objects.get(norad_cat_id=id)
sat = Satellite.objects.get(norad_cat_id=norad_id)
except Satellite.DoesNotExist:
data = {'error': 'Unable to find that satellite.'}
return JsonResponse(data, safe=False)
try:
transmitters = get_transmitters_by_norad_id(norad_id=id)
except DBConnectionError as e:
data = [{'error': e.message}]
transmitters = get_transmitters_by_norad_id(norad_id=norad_id)
except DBConnectionError as error:
data = [{'error': error.message}]
return JsonResponse(data, safe=False)
satellite_stats = satellite_stats_by_transmitter_list(transmitters)
data = {
'id': id,
'id': norad_id,
'name': sat.name,
'names': sat.names,
'image': sat.image,
@ -886,8 +877,8 @@ def transmitters_view(request):
try:
transmitters = get_transmitters_by_norad_id(norad_id)
except DBConnectionError as e:
data = [{'error': e.message}]
except DBConnectionError as error:
data = [{'error': error.message}]
return JsonResponse(data, safe=False)
transmitters = [

View File

@ -13,13 +13,13 @@ RUN_HOURLY = 60 * 60
RUN_EVERY_MINUTE = 60
RUN_TWICE_HOURLY = 60 * 30
app = Celery('network')
APP = Celery('network')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
APP.config_from_object('django.conf:settings', namespace='CELERY')
APP.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.on_after_finalize.connect
@APP.on_after_finalize.connect
def setup_periodic_tasks(sender, **kwargs): # pylint: disable=W0613
from network.base.tasks import (
update_all_tle, fetch_data, clean_observations, station_status_update,

View File

@ -41,7 +41,7 @@
</a>
{% endif %}
{% if can_delete %}
<a href="{% url 'base:observation_delete' id=observation.id %}" id="obs-delete" class="btn btn-danger">
<a href="{% url 'base:observation_delete' observation_id=observation.id %}" id="obs-delete" class="btn btn-danger">
<span class="glyphicon glyphicon-trash" aria-hidden="true" title="Delete Observation (x)"></span>
</a>
{% endif %}
@ -63,7 +63,7 @@
<span class="label label-default">Station</span>
<span class="front-data">
{% if observation.ground_station %}
<a href="{% url 'base:station_view' id=observation.ground_station.id %}">
<a href="{% url 'base:station_view' station_id=observation.ground_station.id %}">
{{ observation.ground_station.id }} - {{ observation.ground_station.name }}
</a>
{% endif %}
@ -416,7 +416,7 @@
</a>
{% endif %}
{% if can_delete %}
<a href="{% url 'base:observation_delete' id=observation.id %}" id="obs-delete" class="btn btn-danger">
<a href="{% url 'base:observation_delete' observation_id=observation.id %}" id="obs-delete" class="btn btn-danger">
<span class="glyphicon glyphicon-trash" aria-hidden="true" title="Delete Observation"></span> Delete
</a>
{% endif %}

View File

@ -215,9 +215,9 @@
{% for observation in observations %}
<tr data-norad="{{ observation.satellite.norad_cat_id }}"
class="clickable-row{% if observation.id in scheduled %} bg-info{% endif %}"
data-href="{% url 'base:observation_view' id=observation.id %}">
data-href="{% url 'base:observation_view' observation_id=observation.id %}">
<td>
<a href="{% url 'base:observation_view' id=observation.id %}" class="obs-link">
<a href="{% url 'base:observation_view' observation_id=observation.id %}" class="obs-link">
{% if observation.is_vetted %}
<span class="label label-{{observation.vetted_status }}">{{ observation.id }}</span>
{% elif observation.is_future %}
@ -273,7 +273,7 @@
</td>
<td>
{% if observation.ground_station %}
<a href="{% url 'base:station_view' id=observation.ground_station.id %}">
<a href="{% url 'base:station_view' station_id=observation.ground_station.id %}">
{{ observation.ground_station }}
</a>
{% endif %}

View File

@ -9,7 +9,7 @@
<div class="row">
<div class="col-md-12">
<h2>
<a href="{% url 'base:station_view' id=station.id %}">
<a href="{% url 'base:station_view' station_id=station.id %}">
{{ station.id }} - {{ station.name }}
</a>
</h2>

View File

@ -26,7 +26,7 @@
<div class="col-md-6 text-right">
<h2>
{% if request.user == station.owner %}
<a class="btn btn-primary" href="{% url 'base:station_edit' id=station.id %}">
<a class="btn btn-primary" href="{% url 'base:station_edit' station_id=station.id %}">
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
Edit
</a>
@ -162,7 +162,7 @@
<span class="front-data">
{{ uptime }}
<div class="pull-right">
<a href="{% url 'base:station_log' id=station.id %}">
<a href="{% url 'base:station_log' station_id=station.id %}">
<button type="button" class="btn btn-xs btn-info">
Log
</button>
@ -220,7 +220,7 @@
<input id="overlap-filter" type="text"/>
</div>
<div class="col-md-3 pull-right">
<form id="antenna-filter" class="form-inline pull-right" method="get" action="{% url 'base:station_view' id=station.id %}#satellites">
<form id="antenna-filter" class="form-inline pull-right" method="get" action="{% url 'base:station_view' station_id=station.id %}#satellites">
<div class="form-group">
<div class="btn-group" data-toggle="buttons">
<label class="btn btn-default btn-sm {% if unsupported_frequencies == '1' %}active{% endif %}" aria-expanded="true" aria-controls="unsupported_frequencies">
@ -301,7 +301,7 @@
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
<a class="btn btn-danger" id="station-delete" href="{% url 'base:station_delete' id=station.id %}">
<a class="btn btn-danger" id="station-delete" href="{% url 'base:station_delete' station_id=station.id %}">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
Delete
</a>

View File

@ -44,9 +44,9 @@
</thead>
<tbody>
{% for station in stations.all %}
<tr class="station-row clickable-row" data-href="{% url 'base:station_view' id=station.id %}">
<tr class="station-row clickable-row" data-href="{% url 'base:station_view' station_id=station.id %}">
<td>
<a href="{% url 'base:station_view' id=station.id %}">
<a href="{% url 'base:station_view' station_id=station.id %}">
<span class="station
{% if station.last_seen %}
label label-{{ station.get_status_display|lower }}

View File

@ -43,9 +43,9 @@
</thead>
<tbody>
{% for station in stations.all %}
<tr class="clickable-row" data-href="{% url 'base:station_view' id=station.id %}">
<tr class="clickable-row" data-href="{% url 'base:station_view' station_id=station.id %}">
<td>
<a href="{% url 'base:station_view' id=station.id %}">
<a href="{% url 'base:station_view' station_id=station.id %}">
<span class="label label-{{ station.get_status_display|lower }}"
data-toggle="tooltip"
data-placement="bottom"
@ -146,9 +146,9 @@
</thead>
<tbody>
{% for observation in observations.all %}
<tr class="clickable-row" data-href="{% url 'base:observation_view' id=observation.id %}">
<tr class="clickable-row" data-href="{% url 'base:observation_view' observation_id=observation.id %}">
<td>
<a href="{% url 'base:observation_view' id=observation.id %}">
<a href="{% url 'base:observation_view' observation_id=observation.id %}">
{% if observation.is_vetted %}
<span class="label label-{{observation.vetted_status }}">{{ observation.id }}</span>
{% elif observation.is_future %}
@ -173,7 +173,7 @@
</td>
<td>
{% if observation.ground_station %}
<a href="{% url 'base:station_view' id=observation.ground_station.id %}">
<a href="{% url 'base:station_view' station_id=observation.ground_station.id %}">
{{ observation.ground_station }}
</a>
{% endif %}

View File

@ -5,21 +5,18 @@ from django.conf.urls import include, url
from django.contrib import admin
from django.views.static import serve
from network.api.urls import api_urlpatterns
from network.base.urls import base_urlpatterns
from network.users.urls import users_urlpatterns
handler404 = 'network.base.views.custom_404'
handler500 = 'network.base.views.custom_500'
from network.api.urls import API_URLPATTERNS
from network.base.urls import BASE_URLPATTERNS
from network.users.urls import USERS_URLPATTERNS
urlpatterns = [
# Base urls
url(r'^', include(base_urlpatterns)),
url(r'^', include(BASE_URLPATTERNS)),
url(r'^admin/', admin.site.urls),
url(r'^users/', include(users_urlpatterns)),
url(r'^users/', include(USERS_URLPATTERNS)),
url(r'^accounts/', include(allauth_urls)),
url(r'^avatar/', include(avatar_urls)),
url(r'^api/', include(api_urlpatterns))
url(r'^api/', include(API_URLPATTERNS))
]
# Auth0

View File

@ -2,7 +2,7 @@ from django.conf.urls import url
from network.users import views
users_urlpatterns = (
USERS_URLPATTERNS = (
[
url(r'^redirect/$', views.UserRedirectView.as_view(), name='redirect_user'),
url(r'^update/$', views.UserUpdateView.as_view(), name='update_user'),