Skip to content

Commit 5e9270a

Browse files
committed
FEATURE: annotate_params.py allow selecting firmware version
refractor to reduce duplication and increase reuse
1 parent 26287b9 commit 5e9270a

File tree

2 files changed

+60
-33
lines changed

2 files changed

+60
-33
lines changed

MethodicConfigurator/annotate_params.py

Lines changed: 52 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ def arg_parser():
5656
action='store_true',
5757
help='Delete parameter documentation annotations (comments above parameters). Defaults to %(default)s',
5858
)
59+
parser.add_argument('-f', '--firmware-version',
60+
default='latest',
61+
help='Flight controller firmware version. Defaults to %(default)s.',
62+
)
5963
parser.add_argument('-s', '--sort',
6064
choices=['none', 'missionplanner', 'mavproxy'],
6165
default='none',
@@ -646,24 +650,61 @@ def print_read_only_params(doc):
646650
logging.info(param_name)
647651

648652

653+
def get_xml_dir(target: str) -> str:
654+
return target if os_path.isdir(target) else os_path.dirname(os_path.realpath(target))
655+
656+
657+
def get_xml_url(vehicle_type: str, firmware_version: str) -> str:
658+
vehicle_parm_subdir = {
659+
"ArduCopter": "versioned/Copter/stable-",
660+
"ArduPlane": "versioned/Plane/stable-",
661+
"Rover": "versioned/Rover/stable-",
662+
"ArduSub": "versioned/Sub/stable-",
663+
"AntennaTracker": "versioned/Tracker/stable-",
664+
# Not yet versioned in the https://autotest.ardupilot.org/Parameters server
665+
'AP_Periph': 'versioned/Periph/stable-',
666+
'Blimp': 'versioned/Blimp/stable-',
667+
'Heli': 'versioned/Heli/stable-',
668+
'SITL': 'versioned/SITL/stable-'
669+
}
670+
if firmware_version:
671+
xml_url = BASE_URL + vehicle_parm_subdir[vehicle_type] + firmware_version + "/"
672+
else:
673+
xml_url = BASE_URL + vehicle_type + "/"
674+
return xml_url
675+
676+
def parse_parameter_metadata(xml_url: str, xml_dir: str, xml_file: str,
677+
vehicle_type: str, max_line_length: int) -> Dict[str, Any]:
678+
xml_root, param_default_dict = get_xml_data(xml_url, xml_dir, xml_file)
679+
doc_dict = create_doc_dict(xml_root, vehicle_type, max_line_length)
680+
return doc_dict, param_default_dict
681+
682+
649683
def main():
650684
args = arg_parser()
651685
try:
652-
xml_dir = args.target if os_path.isdir(args.target) else os_path.dirname(os_path.realpath(args.target))
653-
xml_root, param_default_dict = get_xml_data(BASE_URL + args.vehicle_type + "/", xml_dir, PARAM_DEFINITION_XML_FILE)
654-
doc_dict = create_doc_dict(xml_root, args.vehicle_type, args.max_line_length)
686+
xml_url = get_xml_url(args.vehicle_type, args.firmware_version)
687+
xml_dir = get_xml_dir(args.target)
688+
689+
[doc_dict, param_default_dict] = parse_parameter_metadata(xml_url, xml_dir, PARAM_DEFINITION_XML_FILE,
690+
args.vehicle_type, args.max_line_length)
655691
update_parameter_documentation(doc_dict, args.target, args.sort, param_default_dict,
656692
args.delete_documentation_annotations)
657693
if args.verbose:
658694
print_read_only_params(doc_dict)
659-
if os_path.isfile(os_path.join(os_path.dirname(args.target), LUA_PARAM_DEFINITION_XML_FILE)):
660-
xml_root, param_default_dict = get_xml_data(BASE_URL + args.vehicle_type + "/",
661-
xml_dir, LUA_PARAM_DEFINITION_XML_FILE)
662-
doc_dict = create_doc_dict(xml_root, args.vehicle_type, args.max_line_length)
663-
update_parameter_documentation(doc_dict, os_path.join(os_path.dirname(args.target),
664-
"24_inflight_magnetometer_fit_setup.param"),
665-
args.sort, param_default_dict, args.delete_documentation_annotations)
666-
except Exception as exp: # pylint: disable=W0718
695+
696+
# Annotate lua MAGfit XML documentation into the respective parameter file
697+
xml_file = LUA_PARAM_DEFINITION_XML_FILE
698+
if os_path.isfile(os_path.join(os_path.dirname(args.target), xml_file)):
699+
[doc_dict, param_default_dict] = parse_parameter_metadata(xml_url, xml_dir, xml_file,
700+
args.vehicle_type, args.max_line_length)
701+
target = os_path.join(os_path.dirname(args.target), "24_inflight_magnetometer_fit_setup.param")
702+
update_parameter_documentation(doc_dict, target, args.sort, param_default_dict,
703+
args.delete_documentation_annotations)
704+
else:
705+
logging.warning("No LUA MAGfit XML documentation found, skipping annotation of %s", target)
706+
707+
except (IOError, OSError, SystemExit) as exp:
667708
logging.fatal(exp)
668709
sys_exit(1)
669710

MethodicConfigurator/backend_filesystem.py

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,10 @@
3030

3131
from zipfile import ZipFile
3232

33-
from MethodicConfigurator.annotate_params import BASE_URL, PARAM_DEFINITION_XML_FILE, Par
34-
from MethodicConfigurator.annotate_params import get_xml_data
35-
from MethodicConfigurator.annotate_params import create_doc_dict
33+
from MethodicConfigurator.annotate_params import PARAM_DEFINITION_XML_FILE, Par
34+
from MethodicConfigurator.annotate_params import get_xml_url
35+
from MethodicConfigurator.annotate_params import get_xml_dir
36+
from MethodicConfigurator.annotate_params import parse_parameter_metadata
3637
from MethodicConfigurator.annotate_params import format_columns
3738
from MethodicConfigurator.annotate_params import split_into_lines
3839
from MethodicConfigurator.annotate_params import update_parameter_documentation
@@ -110,25 +111,10 @@ def re_init(self, vehicle_dir: str, vehicle_type: str):
110111
self.fw_version = self.get_fc_fw_version_from_vehicle_components_json()
111112

112113
# Read ArduPilot parameter documentation
113-
xml_dir = vehicle_dir if os_path.isdir(vehicle_dir) else os_path.dirname(os_path.realpath(vehicle_dir))
114-
vehicle_parm_subdir = {
115-
"ArduCopter": "versioned/Copter/stable-",
116-
"ArduPlane": "versioned/Plane/stable-",
117-
"Rover": "versioned/Rover/stable-",
118-
"ArduSub": "versioned/Sub/stable-",
119-
"AntennaTracker": "versioned/Tracker/stable-",
120-
# Not yet versioned in the https://autotest.ardupilot.org/Parameters server
121-
'AP_Periph': 'versioned/Periph/stable-',
122-
'Blimp': 'versioned/Blimp/stable-',
123-
'Heli': 'versioned/Heli/stable-',
124-
'SITL': 'versioned/SITL/stable-'
125-
}
126-
if self.fw_version:
127-
xml_url = BASE_URL + vehicle_parm_subdir[vehicle_type] + self.fw_version + "/"
128-
else:
129-
xml_url = BASE_URL + vehicle_type + "/"
130-
xml_root, self.param_default_dict = get_xml_data(xml_url, xml_dir, PARAM_DEFINITION_XML_FILE)
131-
self.doc_dict = create_doc_dict(xml_root, vehicle_type, TOOLTIP_MAX_LENGTH)
114+
xml_url = get_xml_url(vehicle_type, self.fw_version)
115+
xml_dir = get_xml_dir(vehicle_dir)
116+
[self.doc_dict, self.param_default_dict] = parse_parameter_metadata(xml_url, xml_dir, PARAM_DEFINITION_XML_FILE,
117+
vehicle_type, TOOLTIP_MAX_LENGTH)
132118

133119
self.__extend_and_reformat_parameter_documentation_metadata()
134120

0 commit comments

Comments
 (0)