50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
#!/usr/bin/env python
|
|
'''
|
|
mavlink expression evaluation functions
|
|
|
|
Copyright Andrew Tridgell 2011
|
|
Released under GNU GPL version 3 or later
|
|
'''
|
|
|
|
import os
|
|
|
|
# these imports allow for mavgraph and mavlogdump to use maths expressions more easily
|
|
from math import *
|
|
from .mavextra import *
|
|
|
|
'''
|
|
Support having a $HOME/.pymavlink/mavextra.py for extra graphing functions
|
|
'''
|
|
home = os.getenv('HOME')
|
|
if home is not None:
|
|
extra = os.path.join(home, '.pymavlink', 'mavextra.py')
|
|
if os.path.exists(extra):
|
|
import imp
|
|
mavuser = imp.load_source('pymavlink.mavuser', extra)
|
|
from pymavlink.mavuser import *
|
|
|
|
def evaluate_expression(expression, vars, nocondition=False):
|
|
'''evaluation an expression'''
|
|
# first check for conditions which take the form EXPRESSION{CONDITION}
|
|
if expression[-1] == '}':
|
|
startidx = expression.rfind('{')
|
|
if startidx == -1:
|
|
return None
|
|
condition=expression[startidx+1:-1]
|
|
expression=expression[:startidx]
|
|
try:
|
|
v = eval(condition, globals(), vars)
|
|
except Exception:
|
|
return None
|
|
if not nocondition and not v:
|
|
return None
|
|
try:
|
|
v = eval(expression, globals(), vars)
|
|
except NameError:
|
|
return None
|
|
except ZeroDivisionError:
|
|
return None
|
|
except IndexError:
|
|
return None
|
|
return v
|