1
0
Fork 0
satnogs-network/network/base/management/commands/fetch_data.py

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