satnogs_client: Use the new scheduling API
[kerel+git@mailbox.org: - Rebased on master (`schedule_observations` moved from `utils.py` to `satnogs_client.py`) - Moved error logging into the `schedule_observations` function (more context available) - Import python-requests in `satnogs_client` directly instead of passing a `requests` object to `schedule_observations` - Squashed the commits and reworded the commit message - Changed code formatting] Signed-off-by: Fabian P. Schmidt <kerel+git@mailbox.org>master
parent
0ae102d19b
commit
f7e11c683a
|
@ -13,7 +13,7 @@ pip install -r requirements.txt
|
|||
|
||||
## Configuration
|
||||
|
||||
Copy the env-dist file to .env and set your legacy SatNOGS Network credentials.
|
||||
Copy the env-dist file to .env and set your SatNOGS Network API token.
|
||||
|
||||
## Test run
|
||||
|
||||
|
|
5
env-dist
5
env-dist
|
@ -1,5 +1,4 @@
|
|||
# Copy this file to .env and complete the information needed
|
||||
|
||||
# Username and password to SatNOGS Network using the old authentication system
|
||||
NETWORK_USERNAME = ''
|
||||
NETWORK_PASSWORD = ''
|
||||
# Your SatNOGS network API token
|
||||
NETWORK_API_TOKEN = ''
|
||||
|
|
|
@ -145,19 +145,20 @@ def get_groundstation_info(ground_station_id, allow_testing):
|
|||
return {}
|
||||
|
||||
|
||||
def schedule_observation(session, norad_cat_id, uuid, ground_station_id, starttime, endtime):
|
||||
|
||||
obsURL = '{}/observations/new/'.format(settings.NETWORK_BASE_URL) # Observation URL
|
||||
# Get the observation/new/ page to get the CSFR token
|
||||
obs = session.get(obsURL)
|
||||
obs_html = lxml.html.fromstring(obs.text)
|
||||
hidden_inputs = obs_html.xpath(r'//form//input[@type="hidden"]')
|
||||
form = {x.attrib["name"]: x.attrib["value"] for x in hidden_inputs}
|
||||
form["obs-0-transmitter_uuid"] = uuid
|
||||
form["obs-0-start"] = starttime
|
||||
form["obs-0-end"] = endtime
|
||||
form["obs-0-ground_station"] = ground_station_id
|
||||
form["obs-TOTAL_FORMS"] = str(1)
|
||||
form["obs-INITIAL_FORMS"] = str(0)
|
||||
session.post(obsURL, data=form, headers={'referer': obsURL})
|
||||
logging.debug("Scheduled!")
|
||||
def schedule_observation(uuid,
|
||||
ground_station_id,
|
||||
starttime,
|
||||
endtime):
|
||||
observation = [{'ground_station': ground_station_id,
|
||||
'transmitter_uuid': uuid,
|
||||
'start': starttime,
|
||||
'end': endtime}]
|
||||
try:
|
||||
r = requests.post('{}/api/observations/'.format(settings.NETWORK_BASE_URL),
|
||||
json=observation,
|
||||
headers={'Authorization': 'Token {}'.format(settings.NETWORK_API_TOKEN)})
|
||||
r.raise_for_status()
|
||||
logging.debug("Scheduled!")
|
||||
except requests.HTTPError:
|
||||
err = r.json()
|
||||
logging.info("Failed to schedule pass: {}".format(err))
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#!/usr/bin/env python
|
||||
from __future__ import division
|
||||
import requests
|
||||
import ephem
|
||||
from datetime import datetime, timedelta
|
||||
import os
|
||||
|
@ -271,28 +270,6 @@ def main():
|
|||
|
||||
# Login and schedule passes
|
||||
if schedule and schedule_needed:
|
||||
loginUrl = '{}/accounts/login/'.format(settings.NETWORK_BASE_URL) # login URL
|
||||
session = requests.session()
|
||||
login = session.get(loginUrl) # Get login page for CSFR token
|
||||
login_html = lxml.html.fromstring(login.text)
|
||||
login_hidden_inputs = login_html.xpath(r'//form//input[@type="hidden"]') # Get CSFR token
|
||||
form = {x.attrib["name"]: x.attrib["value"] for x in login_hidden_inputs}
|
||||
form["login"] = settings.NETWORK_USERNAME
|
||||
form["password"] = settings.NETWORK_PASSWORD
|
||||
|
||||
# Login
|
||||
result = session.post(loginUrl,
|
||||
data=form,
|
||||
headers={
|
||||
'referer': loginUrl,
|
||||
'user-agent': 'satnogs-auto-scheduler/0.0.1'
|
||||
})
|
||||
if result.url.endswith("/accounts/login/"):
|
||||
logging.info("Authentication failed")
|
||||
sys.exit(-1)
|
||||
else:
|
||||
logging.info("Authentication successful")
|
||||
|
||||
# Sort passes
|
||||
scheduledpasses_sorted = sorted(scheduledpasses, key=lambda satpass: satpass['tr'])
|
||||
|
||||
|
@ -303,10 +280,10 @@ def main():
|
|||
(int(satpass['id']), satpass['tr'].strftime("%Y-%m-%dT%H:%M:%S"),
|
||||
satpass['ts'].strftime("%Y-%m-%dT%H:%M:%S"), float(satpass['altt']),
|
||||
satpass['priority'], satpass['uuid'], satpass['name'].rstrip()))
|
||||
schedule_observation(session, int(satpass['id']), satpass['uuid'],
|
||||
schedule_observation(satpass['uuid'],
|
||||
ground_station_id,
|
||||
satpass['tr'].strftime("%Y-%m-%d %H:%M:%S") + ".000",
|
||||
satpass['ts'].strftime("%Y-%m-%d %H:%M:%S") + ".000")
|
||||
satpass['tr'].strftime("%Y-%m-%d %H:%M:%S"),
|
||||
satpass['ts'].strftime("%Y-%m-%d %H:%M:%S"))
|
||||
|
||||
logging.info("All passes are scheduled. Exiting!")
|
||||
|
||||
|
|
|
@ -9,5 +9,4 @@ MAX_NORAD_CAT_ID = config('MAX_NORAD_CAT_ID', default=90000)
|
|||
MIN_PASS_DURATION = config('MIN_PASS_DURATION', default=2) # In minutes
|
||||
|
||||
# Credentials
|
||||
NETWORK_USERNAME = config('NETWORK_USERNAME', default='')
|
||||
NETWORK_PASSWORD = config('NETWORK_PASSWORD', default='')
|
||||
NETWORK_API_TOKEN = config('NETWORK_API_TOKEN', default='')
|
||||
|
|
Loading…
Reference in New Issue