Fix code for pep8 via yapf

Signed-off-by: Pierros Papadeas <pierros@papadeas.gr>
merge-requests/18/head
Pierros Papadeas 2019-05-10 10:33:54 +03:00
parent 289bad05cb
commit fee88c5fc1
No known key found for this signature in database
GPG Key ID: 8DB97129D9982991
3 changed files with 101 additions and 111 deletions

View File

@ -55,8 +55,8 @@ class satellite:
self.data_count = data_count self.data_count = data_count
def __repr__(self): def __repr__(self):
return "%s %s %d %d %d %s" % (self.id, self.transmitter, self.success_rate, return "%s %s %d %d %d %s" % (self.id, self.transmitter, self.success_rate, self.good_count,
self.good_count, self.data_count, self.name) self.data_count, self.name)
def _log_level_string_to_int(log_level_string): def _log_level_string_to_int(log_level_string):
@ -77,27 +77,49 @@ def main():
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description="Automatically schedule observations on a SatNOGS station.") description="Automatically schedule observations on a SatNOGS station.")
parser.add_argument("-s", "--station", help="Ground station ID", type=int) parser.add_argument("-s", "--station", help="Ground station ID", type=int)
parser.add_argument("-t", "--starttime", help="Start time (YYYY-MM-DD HH:MM:SS) [default: now]", parser.add_argument("-t",
"--starttime",
help="Start time (YYYY-MM-DD HH:MM:SS) [default: now]",
default=datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S")) default=datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S"))
parser.add_argument("-d", "--duration", help="Duration to schedule [hours; default 1.0]", parser.add_argument("-d",
type=float, default=1) "--duration",
parser.add_argument("-m", "--min-horizon", help="Minimum horizon [default 0]", type=float, help="Duration to schedule [hours; default 1.0]",
type=float,
default=1)
parser.add_argument("-m",
"--min-horizon",
help="Minimum horizon [default 0]",
type=float,
default=0.) default=0.)
parser.add_argument("-f", "--no-search-transmitters", parser.add_argument("-f",
"--no-search-transmitters",
help="Do not search good transmitters [default searching]", help="Do not search good transmitters [default searching]",
dest='search_transmitters', action='store_false') dest='search_transmitters',
action='store_false')
parser.set_defaults(search_transmitters=True) parser.set_defaults(search_transmitters=True)
parser.add_argument("-w", "--wait", parser.add_argument("-w",
"--wait",
help="Wait time between consecutive observations (for setup and slewing)" + help="Wait time between consecutive observations (for setup and slewing)" +
" [seconds; default: 0.0]", type=float, default=0) " [seconds; default: 0.0]",
parser.add_argument("-n", "--dryrun", help="Dry run (do not schedule passes)", type=float,
default=0)
parser.add_argument("-n",
"--dryrun",
help="Dry run (do not schedule passes)",
action="store_true") action="store_true")
parser.add_argument("-P", "--priorities", help="File with transmitter priorities. Should have" + parser.add_argument("-P",
"--priorities",
help="File with transmitter priorities. Should have" +
"columns of the form |NORAD priority UUID| like |43017 0.9" + "columns of the form |NORAD priority UUID| like |43017 0.9" +
" KgazZMKEa74VnquqXLwAvD|. Priority is fractional, one transmitter " + " KgazZMKEa74VnquqXLwAvD|. Priority is fractional, one transmitter " +
"per line.", default=None) "per line.",
parser.add_argument("-l", "--log-level", default="INFO", dest="log_level", default=None)
type=_log_level_string_to_int, nargs="?", parser.add_argument("-l",
"--log-level",
default="INFO",
dest="log_level",
type=_log_level_string_to_int,
nargs="?",
help="Set the logging output level. {0}".format(_LOG_LEVEL_STRINGS)) help="Set the logging output level. {0}".format(_LOG_LEVEL_STRINGS))
args = parser.parse_args() args = parser.parse_args()
@ -172,9 +194,11 @@ def main():
# Get NORAD IDs # Get NORAD IDs
norad_cat_ids = sorted( norad_cat_ids = sorted(
set([transmitter["norad_cat_id"] for transmitter in transmitters.values() set([
if transmitter["norad_cat_id"] < settings.MAX_NORAD_CAT_ID and transmitter["norad_cat_id"] for transmitter in transmitters.values()
transmitter["norad_cat_id"] in alive_norad_cat_ids])) if transmitter["norad_cat_id"] < settings.MAX_NORAD_CAT_ID
and transmitter["norad_cat_id"] in alive_norad_cat_ids
]))
# Store transmitters # Store transmitters
fp = open(os.path.join(cache_dir, "transmitters_%d.txt" % ground_station_id), "w") fp = open(os.path.join(cache_dir, "transmitters_%d.txt" % ground_station_id), "w")
@ -189,12 +213,10 @@ def main():
if transmitters[uuid]["norad_cat_id"] not in alive_norad_cat_ids: if transmitters[uuid]["norad_cat_id"] not in alive_norad_cat_ids:
continue continue
fp.write("%05d %s %d %d %d\n" % fp.write(
(transmitters[uuid]["norad_cat_id"], "%05d %s %d %d %d\n" %
uuid, (transmitters[uuid]["norad_cat_id"], uuid, transmitter["stats"]["success_rate"],
transmitter["stats"]["success_rate"], transmitter["stats"]["good_count"], transmitter["stats"]["total_count"]))
transmitter["stats"]["good_count"],
transmitter["stats"]["total_count"]))
logging.info("Transmitter success rates received!") logging.info("Transmitter success rates received!")
fp.close() fp.close()
@ -218,8 +240,9 @@ def main():
# Read tles # Read tles
with open(os.path.join(cache_dir, "tles_%d.txt" % ground_station_id), "r") as f: with open(os.path.join(cache_dir, "tles_%d.txt" % ground_station_id), "r") as f:
lines = f.readlines() lines = f.readlines()
tles = [twolineelement(lines[i], lines[i + 1], lines[i + 2]) tles = [
for i in range(0, len(lines), 3)] twolineelement(lines[i], lines[i + 1], lines[i + 2]) for i in range(0, len(lines), 3)
]
# Read transmitters # Read transmitters
satellites = [] satellites = []
@ -231,12 +254,7 @@ def main():
item[0]), item[1], float(item[2]) / 100.0, int(item[3]), int(item[4]) item[0]), item[1], float(item[2]) / 100.0, int(item[3]), int(item[4])
for tle in tles: for tle in tles:
if tle.id == norad_cat_id: if tle.id == norad_cat_id:
satellites.append(satellite( satellites.append(satellite(tle, uuid, success_rate, good_count, data_count))
tle,
uuid,
success_rate,
good_count,
data_count))
# Find passes # Find passes
passes = find_passes(satellites, observer, tmin, tmax, minimum_altitude) passes = find_passes(satellites, observer, tmin, tmax, minimum_altitude)
@ -273,8 +291,7 @@ def main():
* satpass['success_rate'] \ * satpass['success_rate'] \
* float(satpass['good_count']) / max_good_count * float(satpass['good_count']) / max_good_count
else: else:
satpass['priority'] = ( satpass['priority'] = (float(satpass['altt']) / 90.0) * satpass['success_rate']
float(satpass['altt']) / 90.0) * satpass['success_rate']
normalpasses.append(satpass) normalpasses.append(satpass)
# Priority scheduler # Priority scheduler
@ -302,15 +319,10 @@ def main():
for satpass in sorted(scheduledpasses, key=lambda satpass: satpass['tr']): for satpass in sorted(scheduledpasses, key=lambda satpass: satpass['tr']):
logging.info( logging.info(
"%3d | %3.d | %05d | %s | %s | %3.0f | %4.6f | %s | %s" % "%3d | %3.d | %05d | %s | %s | %3.0f | %4.6f | %s | %s" %
(ground_station_id, (ground_station_id, satpass['scheduled'], int(
satpass['scheduled'], satpass['id']), satpass['tr'].strftime("%Y-%m-%dT%H:%M:%S"),
int(satpass['id']), satpass['ts'].strftime("%Y-%m-%dT%H:%M:%S"), float(satpass['altt']) if satpass['altt']
satpass['tr'].strftime("%Y-%m-%dT%H:%M:%S"), else 0., satpass['priority'], satpass['uuid'], satpass['name'].rstrip()))
satpass['ts'].strftime("%Y-%m-%dT%H:%M:%S"),
float(satpass['altt']) if satpass['altt'] else 0.,
satpass['priority'],
satpass['uuid'],
satpass['name'].rstrip()))
if not satpass['scheduled']: if not satpass['scheduled']:
schedule_needed = True schedule_needed = True
@ -320,8 +332,7 @@ def main():
session = requests.session() session = requests.session()
login = session.get(loginUrl) # Get login page for CSFR token login = session.get(loginUrl) # Get login page for CSFR token
login_html = lxml.html.fromstring(login.text) login_html = lxml.html.fromstring(login.text)
login_hidden_inputs = login_html.xpath( login_hidden_inputs = login_html.xpath(r'//form//input[@type="hidden"]') # Get CSFR token
r'//form//input[@type="hidden"]') # Get CSFR token
form = {x.attrib["name"]: x.attrib["value"] for x in login_hidden_inputs} form = {x.attrib["name"]: x.attrib["value"] for x in login_hidden_inputs}
form["login"] = settings.NETWORK_USERNAME form["login"] = settings.NETWORK_USERNAME
form["password"] = settings.NETWORK_PASSWORD form["password"] = settings.NETWORK_PASSWORD
@ -329,8 +340,10 @@ def main():
# Login # Login
result = session.post(loginUrl, result = session.post(loginUrl,
data=form, data=form,
headers={'referer': loginUrl, headers={
'user-agent': 'satnogs-auto-scheduler/0.0.1'}) 'referer': loginUrl,
'user-agent': 'satnogs-auto-scheduler/0.0.1'
})
if result.url.endswith("/accounts/login/"): if result.url.endswith("/accounts/login/"):
logging.info("Authentication failed") logging.info("Authentication failed")
else: else:
@ -342,18 +355,11 @@ def main():
logging.info('Checking and scheduling passes as needed.') logging.info('Checking and scheduling passes as needed.')
for satpass in tqdm(scheduledpasses_sorted): for satpass in tqdm(scheduledpasses_sorted):
if not satpass['scheduled']: if not satpass['scheduled']:
logging.debug( logging.debug("Scheduling %05d %s %s %3.0f %4.3f %s %s" %
"Scheduling %05d %s %s %3.0f %4.3f %s %s" % (int(satpass['id']), satpass['tr'].strftime("%Y-%m-%dT%H:%M:%S"),
(int(satpass['id']), satpass['ts'].strftime("%Y-%m-%dT%H:%M:%S"), float(satpass['altt']),
satpass['tr'].strftime("%Y-%m-%dT%H:%M:%S"), satpass['priority'], satpass['uuid'], satpass['name'].rstrip()))
satpass['ts'].strftime("%Y-%m-%dT%H:%M:%S"), schedule_observation(session, int(satpass['id']), satpass['uuid'],
float(satpass['altt']),
satpass['priority'],
satpass['uuid'],
satpass['name'].rstrip()))
schedule_observation(session,
int(satpass['id']),
satpass['uuid'],
ground_station_id, ground_station_id,
satpass['tr'].strftime("%Y-%m-%d %H:%M:%S") + ".000", satpass['tr'].strftime("%Y-%m-%d %H:%M:%S") + ".000",
satpass['ts'].strftime("%Y-%m-%d %H:%M:%S") + ".000") satpass['ts'].strftime("%Y-%m-%d %H:%M:%S") + ".000")

View File

@ -33,3 +33,7 @@ install_requires =
max-complexity = 25 max-complexity = 25
max-line-length = 100 max-line-length = 100
ignore = F403,W504 ignore = F403,W504
[yapf]
based_on_style = pep8
column_limit = 100

View File

@ -67,8 +67,7 @@ def get_active_transmitter_info(fmin, fmax):
for o in r.json(): for o in r.json():
if o["downlink_low"]: if o["downlink_low"]:
if o["status"] == "active" and o["downlink_low"] > fmin and o["downlink_low"] <= fmax: if o["status"] == "active" and o["downlink_low"] > fmin and o["downlink_low"] <= fmax:
transmitter = {"norad_cat_id": o["norad_cat_id"], transmitter = {"norad_cat_id": o["norad_cat_id"], "uuid": o["uuid"]}
"uuid": o["uuid"]}
transmitters.append(transmitter) transmitters.append(transmitter)
logging.info("Transmitters filtered based on ground station capability.") logging.info("Transmitters filtered based on ground station capability.")
return transmitters return transmitters
@ -92,8 +91,7 @@ def get_scheduled_passes_from_network(ground_station, tmin, tmax):
while True: while True:
if start: if start:
r = client.get('{}/api/observations/?ground_station={:d}'.format( r = client.get('{}/api/observations/?ground_station={:d}'.format(
settings.NETWORK_BASE_URL, settings.NETWORK_BASE_URL, ground_station))
ground_station))
start = False start = False
else: else:
nextpage = r.links.get("next") nextpage = r.links.get("next")
@ -103,21 +101,14 @@ def get_scheduled_passes_from_network(ground_station, tmin, tmax):
for o in r.json(): for o in r.json():
satpass = { satpass = {
"id": o['norad_cat_id'], "id": o['norad_cat_id'],
"tr": datetime.strptime( "tr": datetime.strptime(o['start'].replace("Z", ""), "%Y-%m-%dT%H:%M:%S"),
o['start'].replace( "ts": datetime.strptime(o['end'].replace("Z", ""), "%Y-%m-%dT%H:%M:%S"),
"Z",
""),
"%Y-%m-%dT%H:%M:%S"),
"ts": datetime.strptime(
o['end'].replace(
"Z",
""),
"%Y-%m-%dT%H:%M:%S"),
"scheduled": True, "scheduled": True,
"altt": o['max_altitude'], "altt": o['max_altitude'],
"priority": 1, "priority": 1,
"uuid": o['transmitter'], "uuid": o['transmitter'],
"name": ''} "name": ''
}
if satpass['ts'] > tmin and satpass['tr'] < tmax: if satpass['ts'] > tmin and satpass['tr'] < tmax:
scheduledpasses.append(satpass) scheduledpasses.append(satpass)
@ -195,8 +186,7 @@ def efficiency(passes):
# Total time covered # Total time covered
dttot = tmax - tmin dttot = tmax - tmin
return dt.total_seconds(), dttot.total_seconds( return dt.total_seconds(), dttot.total_seconds(), dt.total_seconds() / dttot.total_seconds()
), dt.total_seconds() / dttot.total_seconds()
def find_passes(satellites, observer, tmin, tmax, minimum_altitude): def find_passes(satellites, observer, tmin, tmax, minimum_altitude):
@ -210,9 +200,7 @@ def find_passes(satellites, observer, tmin, tmax, minimum_altitude):
# Load TLE # Load TLE
try: try:
sat_ephem = ephem.readtle(str(satellite.tle0), sat_ephem = ephem.readtle(str(satellite.tle0), str(satellite.tle1), str(satellite.tle2))
str(satellite.tle1),
str(satellite.tle2))
except (ValueError, AttributeError): except (ValueError, AttributeError):
continue continue
@ -246,30 +234,30 @@ def find_passes(satellites, observer, tmin, tmax, minimum_altitude):
if tr < ephem.date(tmax): if tr < ephem.date(tmax):
if (float(elevation) >= minimum_altitude and tr < ts): if (float(elevation) >= minimum_altitude and tr < ts):
valid = True valid = True
if tr < ephem.Date(datetime.now() + if tr < ephem.Date(datetime.now() + timedelta(minutes=5)):
timedelta(minutes=5)):
valid = False valid = False
satpass = {'passid': passid, satpass = {
'mytime': str(observer.date), 'passid': passid,
'name': str(satellite.name), 'mytime': str(observer.date),
'id': str(satellite.id), 'name': str(satellite.name),
'tle1': str(satellite.tle1), 'id': str(satellite.id),
'tle2': str(satellite.tle2), 'tle1': str(satellite.tle1),
'tr': tr.datetime(), # Rise time 'tle2': str(satellite.tle2),
'azr': azimuth_r, # Rise Azimuth 'tr': tr.datetime(), # Rise time
'tt': tt.datetime(), # Max altitude time 'azr': azimuth_r, # Rise Azimuth
'altt': elevation, # Max altitude 'tt': tt.datetime(), # Max altitude time
'ts': ts.datetime(), # Set time 'altt': elevation, # Max altitude
'azs': azimuth_s, # Set azimuth 'ts': ts.datetime(), # Set time
'valid': valid, 'azs': azimuth_s, # Set azimuth
'uuid': satellite.transmitter, 'valid': valid,
'success_rate': satellite.success_rate, 'uuid': satellite.transmitter,
'good_count': satellite.good_count, 'success_rate': satellite.success_rate,
'data_count': satellite.data_count, 'good_count': satellite.good_count,
'scheduled': False} 'data_count': satellite.data_count,
'scheduled': False
}
passes.append(satpass) passes.append(satpass)
observer.date = ephem.Date( observer.date = ephem.Date(ts).datetime() + timedelta(minutes=1)
ts).datetime() + timedelta(minutes=1)
else: else:
keep_digging = False keep_digging = False
@ -283,9 +271,7 @@ def get_groundstation_info(ground_station_id):
# Loop # Loop
found = False found = False
r = client.get("{}/api/stations/?id={:d}".format( r = client.get("{}/api/stations/?id={:d}".format(settings.NETWORK_BASE_URL, ground_station_id))
settings.NETWORK_BASE_URL,
ground_station_id))
for o in r.json(): for o in r.json():
if o['id'] == ground_station_id: if o['id'] == ground_station_id:
if o['status'] == 'Online' or o['status'] == 'Testing': if o['status'] == 'Online' or o['status'] == 'Testing':
@ -312,13 +298,7 @@ def get_last_update(fname):
return None return None
def schedule_observation( def schedule_observation(session, norad_cat_id, uuid, ground_station_id, starttime, endtime):
session,
norad_cat_id,
uuid,
ground_station_id,
starttime,
endtime):
obsURL = '{}/observations/new/'.format(settings.NETWORK_BASE_URL) # Observation URL obsURL = '{}/observations/new/'.format(settings.NETWORK_BASE_URL) # Observation URL
# Get the observation/new/ page to get the CSFR token # Get the observation/new/ page to get the CSFR token