74 lines
2.7 KiB
Python
74 lines
2.7 KiB
Python
"""SatNOGS Network django management command to fetch data (Satellites and Transmitters)"""
|
|
from __future__ import absolute_import
|
|
|
|
import requests
|
|
from django.conf import settings
|
|
from django.core.management.base import BaseCommand, CommandError
|
|
|
|
from network.base.models import Satellite, Transmitter
|
|
|
|
|
|
class Command(BaseCommand):
|
|
"""Django management command to fetch Satellites and Transmitters from SatNOGS DB"""
|
|
help = 'Fetches Satellites and Transmitters from SaTNOGS DB'
|
|
|
|
def handle(self, *args, **options):
|
|
db_api_url = settings.DB_API_ENDPOINT
|
|
if not db_api_url:
|
|
self.stdout.write("Zero length api url, fetching is stopped")
|
|
return
|
|
satellites_url = "{}satellites".format(db_api_url)
|
|
transmitters_url = "{}transmitters".format(db_api_url)
|
|
|
|
try:
|
|
self.stdout.write("Fetching Satellites from {}".format(satellites_url))
|
|
r_satellites = requests.get(satellites_url)
|
|
|
|
self.stdout.write("Fetching Transmitters from {}".format(transmitters_url))
|
|
r_transmitters = requests.get(transmitters_url)
|
|
except requests.exceptions.ConnectionError:
|
|
raise CommandError('API is unreachable')
|
|
|
|
# Fetch Satellites
|
|
satellites_added = 0
|
|
satellites_updated = 0
|
|
for satellite in r_satellites.json():
|
|
norad_cat_id = satellite['norad_cat_id']
|
|
satellite.pop('decayed', None)
|
|
try:
|
|
# Update Satellite
|
|
existing_satellite = Satellite.objects.get(norad_cat_id=norad_cat_id)
|
|
existing_satellite.__dict__.update(satellite)
|
|
existing_satellite.save()
|
|
satellites_updated += 1
|
|
except Satellite.DoesNotExist:
|
|
# Add Satellite
|
|
satellite.pop('telemetries', None)
|
|
Satellite.objects.create(**satellite)
|
|
satellites_added += 1
|
|
|
|
self.stdout.write(
|
|
'Added/Updated {}/{} satellites from db.'.format(satellites_added, satellites_updated)
|
|
)
|
|
|
|
# Fetch Transmitters
|
|
transmitters_added = 0
|
|
transmitters_skipped = 0
|
|
for transmitter in r_transmitters.json():
|
|
uuid = transmitter['uuid']
|
|
|
|
try:
|
|
# Transmitter already exists, skip
|
|
Transmitter.objects.get(uuid=uuid)
|
|
transmitters_skipped += 1
|
|
except Transmitter.DoesNotExist:
|
|
# Create Transmitter
|
|
Transmitter.objects.create(uuid=uuid)
|
|
transmitters_added += 1
|
|
|
|
self.stdout.write(
|
|
'Added/Skipped {}/{} transmitters from db.'.format(
|
|
transmitters_added, transmitters_skipped
|
|
)
|
|
)
|