You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
4.3 KiB
131 lines
4.3 KiB
#!/usr/bin/env python |
|
|
|
""" |
|
Upload an ULog file to the logs.px4.io web server. |
|
|
|
@author: Beat Kueng (beat-kueng@gmx.net) |
|
""" |
|
|
|
|
|
from __future__ import print_function |
|
|
|
from argparse import ArgumentParser |
|
import subprocess |
|
import sys |
|
|
|
|
|
try: |
|
import requests |
|
except: |
|
print("Failed to import requests.") |
|
print("You may need to install it with 'pip install requests'") |
|
print("") |
|
raise |
|
|
|
|
|
SERVER = 'https://logs.px4.io' |
|
#SERVER = 'http://localhost:5006' # for testing locally |
|
UPLOAD_URL = SERVER+'/upload' |
|
|
|
quiet = False |
|
|
|
def ask_value(text, default=None): |
|
""" ask the user to provide a certain value """ |
|
if quiet: |
|
return "" |
|
|
|
ask_string = 'Enter ' + text |
|
if default != None: |
|
ask_string += ' (Press ENTER to use ' + default + ')' |
|
ask_string += ': ' |
|
|
|
if sys.version_info[0] < 3: |
|
ret = raw_input(ask_string) |
|
else: |
|
ret = input(ask_string) |
|
|
|
if ret == "" and default != None: |
|
return default |
|
return ret |
|
|
|
def get_git_email(): |
|
""" get (globally) configured git email """ |
|
try: |
|
output = subprocess.check_output(["git", "config", "--global", "user.email"]) |
|
except Exception: |
|
return "" |
|
|
|
return output.decode("utf-8").replace('\n', '') |
|
|
|
|
|
def main(): |
|
global quiet |
|
parser = ArgumentParser(description=__doc__) |
|
parser.add_argument('--quiet', '-q', dest='quiet', action='store_true', default=False, |
|
help='Quiet mode: do not ask for values which were not provided as parameters') |
|
parser.add_argument("--description", dest="description", type=str, |
|
help="Log description", default=None) |
|
parser.add_argument("--feedback", dest="feedback", type=str, |
|
help="Additional feedback", default=None) |
|
parser.add_argument("--source", dest="source", type=str, |
|
help="Log source (Eg. CI)", default="webui") |
|
parser.add_argument("--email", dest="email", type=str, |
|
help="Your e-mail (to send the upload link)", default=None) |
|
parser.add_argument("--type", dest="type", type=str, default='flightreport', |
|
help="The upload type (either flightreport or personal).") |
|
parser.add_argument("--videoUrl", dest="videoUrl", type=str, default='', |
|
help="An Url to a video (only used for type flightreport).") |
|
parser.add_argument("--rating", dest="rating", type=str, default='notset', |
|
help="A rating for the flight (only used for type flightreport).") |
|
parser.add_argument("--windSpeed", dest="windSpeed", type=int, default=-1, |
|
help="A wind speed category for the flight (only used for flightreport).") |
|
parser.add_argument("--public", dest="public", type=bool, default=True, |
|
help="Whether the log is uploaded as public (only used for flightreport).") |
|
parser.add_argument("FILE", help="ULog file(s)", nargs="+") |
|
args = parser.parse_args() |
|
|
|
# arguments |
|
quiet = args.quiet |
|
if args.description == None: |
|
description = ask_value('Log Description') |
|
else: |
|
description = args.description |
|
|
|
if args.feedback == None: |
|
feedback = ask_value('Additional Feedback') |
|
else: |
|
feedback = args.feedback |
|
|
|
if args.email == None: |
|
default_email = get_git_email() |
|
email = ask_value('Your e-mail', default_email) |
|
else: |
|
email = args.email |
|
|
|
payload = {'type': args.type, 'description': description, |
|
'feedback': feedback, 'email': email, 'source': args.source} |
|
|
|
if args.type == 'flightreport': |
|
payload['videoUrl'] = args.videoUrl |
|
payload['rating'] = args.rating |
|
payload['windSpeed'] = args.windSpeed |
|
payload['public'] = str(args.public).lower() |
|
|
|
for file_name in args.FILE: |
|
if not quiet: |
|
print('Uploading '+file_name+'...') |
|
|
|
with open(file_name, 'rb') as f: |
|
r = requests.post(UPLOAD_URL, data=payload, files={'filearg': f}, |
|
allow_redirects=False) |
|
if r.status_code == 302: # redirect |
|
if 'Location' in r.headers: |
|
plot_url = r.headers['Location'] |
|
if len(plot_url) > 0 and plot_url[0] == '/': |
|
plot_url = SERVER + plot_url |
|
print('URL: '+plot_url) |
|
|
|
|
|
if __name__ == '__main__': |
|
main() |
|
|
|
|