mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-04-14 10:07:39 +08:00
The problem with printing the exception was that starting with
Python 3.6 the ImportError is yet another (sub) exception called
ModuleNotFoundError which can't be printed as a string and then triggers
another exception:
```
Traceback (most recent call last):
File "/home/julianoes/src/Firmware/Tools/serial/generate_config.py", line 11, in <module>
import jinja2
ModuleNotFoundError: No module named 'jinja2'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/julianoes/src/Firmware/Tools/serial/generate_config.py", line 13, in <module>
print("Failed to import jinja2: " + e)
TypeError: must be str, not ModuleNotFoundError
```
As per @bkueng's suggestion the easiest is to cast the exception to str
and that way prevent the second exception.
129 lines
4.3 KiB
Python
Executable File
129 lines
4.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
"""
|
|
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
|
|
from six.moves import input
|
|
import subprocess
|
|
import sys
|
|
|
|
try:
|
|
import requests
|
|
except ImportError as e:
|
|
print("Failed to import requests: " + str(e))
|
|
print("")
|
|
print("You may need to install it using:")
|
|
print(" pip3 install --user requests")
|
|
print("")
|
|
sys.exit(1)
|
|
|
|
|
|
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 += ': '
|
|
ret = input(ask_string).strip()
|
|
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()
|
|
|