2015-05-10 04:31:19 -06:00
|
|
|
import json
|
|
|
|
import urllib2
|
2015-05-09 03:50:57 -06:00
|
|
|
|
|
|
|
from django.core.management.base import BaseCommand, CommandError
|
|
|
|
from django.conf import settings
|
|
|
|
|
2015-08-14 07:55:43 -06:00
|
|
|
from network.base.models import Mode, Satellite, Transmitter
|
2015-05-09 03:50:57 -06:00
|
|
|
|
|
|
|
|
|
|
|
class Command(BaseCommand):
|
|
|
|
help = 'Provide DB API endpoint'
|
|
|
|
|
|
|
|
def handle(self, *args, **options):
|
|
|
|
apiurl = settings.DB_API_ENDPOINT
|
2015-08-14 07:55:43 -06:00
|
|
|
modes_url = "{0}modes".format(apiurl)
|
2015-05-09 03:50:57 -06:00
|
|
|
satellites_url = "{0}satellites".format(apiurl)
|
2015-07-23 09:18:01 -06:00
|
|
|
transmitters_url = "{0}transmitters".format(apiurl)
|
2015-08-14 07:55:43 -06:00
|
|
|
|
2016-01-26 08:05:17 -07:00
|
|
|
self.stdout.write("==Fetching from: {0}==".format(apiurl))
|
2015-05-09 03:50:57 -06:00
|
|
|
try:
|
2015-08-14 07:55:43 -06:00
|
|
|
modes = urllib2.urlopen(modes_url).read()
|
2015-05-09 03:50:57 -06:00
|
|
|
satellites = urllib2.urlopen(satellites_url).read()
|
2015-07-23 09:18:01 -06:00
|
|
|
transmitters = urllib2.urlopen(transmitters_url).read()
|
2017-11-17 07:31:21 -07:00
|
|
|
except urllib2.URLError:
|
2015-05-09 03:50:57 -06:00
|
|
|
raise CommandError('API is unreachable')
|
|
|
|
|
2015-08-14 07:55:43 -06:00
|
|
|
# Fetch Modes
|
|
|
|
for mode in json.loads(modes):
|
|
|
|
id = mode['id']
|
|
|
|
name = mode['name']
|
|
|
|
try:
|
|
|
|
existing_mode = Mode.objects.get(id=id)
|
|
|
|
existing_mode.__dict__.update(mode)
|
|
|
|
existing_mode.save()
|
|
|
|
self.stdout.write('Mode {0} updated'.format(name))
|
|
|
|
except Mode.DoesNotExist:
|
|
|
|
Mode.objects.create(**mode)
|
|
|
|
self.stdout.write('Mode {0} added'.format(name))
|
|
|
|
|
|
|
|
# Fetch Satellites
|
2015-05-09 03:50:57 -06:00
|
|
|
for satellite in json.loads(satellites):
|
|
|
|
norad_cat_id = satellite['norad_cat_id']
|
|
|
|
name = satellite['name']
|
|
|
|
try:
|
2015-08-14 07:55:43 -06:00
|
|
|
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)
|
2015-07-22 05:16:15 -06:00
|
|
|
self.stdout.write('Satellite {0}-{1} added'.format(norad_cat_id, name))
|
2015-05-09 03:50:57 -06:00
|
|
|
|
2015-08-14 07:55:43 -06:00
|
|
|
# Fetch Transmitters
|
2015-07-23 09:18:01 -06:00
|
|
|
for transmitter in json.loads(transmitters):
|
|
|
|
norad_cat_id = transmitter['norad_cat_id']
|
|
|
|
uuid = transmitter['uuid']
|
|
|
|
description = transmitter['description']
|
2015-08-14 07:55:43 -06:00
|
|
|
mode_id = transmitter['mode_id']
|
2015-05-09 03:50:57 -06:00
|
|
|
|
|
|
|
try:
|
|
|
|
sat = Satellite.objects.get(norad_cat_id=norad_cat_id)
|
2015-08-14 07:55:43 -06:00
|
|
|
except Satellite.DoesNotExist:
|
2015-05-09 03:50:57 -06:00
|
|
|
self.stdout.write('Satellite {0} not present'.format(norad_cat_id))
|
2015-07-23 09:18:01 -06:00
|
|
|
transmitter.pop('norad_cat_id')
|
2015-08-14 07:55:43 -06:00
|
|
|
|
|
|
|
try:
|
|
|
|
mode = Mode.objects.get(id=mode_id)
|
|
|
|
except Mode.DoesNotExist:
|
|
|
|
mode = None
|
2015-05-09 03:50:57 -06:00
|
|
|
try:
|
2015-07-23 09:18:01 -06:00
|
|
|
existing_transmitter = Transmitter.objects.get(uuid=uuid)
|
|
|
|
existing_transmitter.__dict__.update(transmitter)
|
|
|
|
existing_transmitter.satellite = sat
|
2015-08-14 07:55:43 -06:00
|
|
|
existing_transmitter.save()
|
2015-07-23 09:18:01 -06:00
|
|
|
self.stdout.write('Transmitter {0}-{1} updated'.format(uuid, description))
|
|
|
|
except Transmitter.DoesNotExist:
|
|
|
|
new_transmitter = Transmitter.objects.create(**transmitter)
|
|
|
|
new_transmitter.satellite = sat
|
2015-08-14 07:55:43 -06:00
|
|
|
new_transmitter.mode = mode
|
2015-07-23 09:18:01 -06:00
|
|
|
new_transmitter.save()
|
|
|
|
self.stdout.write('Transmitter {0}-{1} created'.format(uuid, description))
|