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

52 lines
2.1 KiB
Python

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):
help = 'Fetch Modes, Satellites and Transmitters from satnogs-db'
def handle(self, *args, **options):
db_api_url = settings.DB_API_ENDPOINT
if len(db_api_url) == 0:
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
for satellite in r_satellites.json():
norad_cat_id = satellite['norad_cat_id']
name = satellite['name']
satellite.pop('decayed', None)
try:
existing_satellite = Satellite.objects.get(norad_cat_id=norad_cat_id)
existing_satellite.__dict__.update(satellite)
existing_satellite.save()
self.stdout.write('Satellite {0}-{1} updated'.format(norad_cat_id, name))
except Satellite.DoesNotExist:
Satellite.objects.create(**satellite)
self.stdout.write('Satellite {0}-{1} added'.format(norad_cat_id, name))
# Fetch Transmitters
for transmitter in r_transmitters.json():
uuid = transmitter['uuid']
try:
Transmitter.objects.get(uuid=uuid)
self.stdout.write('Transmitter {0} already exists'.format(uuid))
except Transmitter.DoesNotExist:
Transmitter.objects.create(uuid=uuid)
self.stdout.write('Transmitter {0} created'.format(uuid))