Package: autosar-data
autosar-data-pyPython bindings forautosar-dataFeaturesThis crate implements Python bindings for autosar-data usingPyO3. This allows all the features ofautosar-datato be used from python code:read and write arxml filesfully validate all data when it is loaded in strict modenon-strict mode so that invalid but structurally sound data can be loadedvarious element operations to modify and create sub-elements, data and attributessupport for Autosar paths and cross referencessupports Autosar version 4.0.1 and up.API documentationAPI documentation is located here:https://danielt.github.io/autosar-data-py/ExampleLoad data from a filefromautosar_dataimport*# load a filemodel=AutosarModel()(arxmlfile,warnings)=model.load_file("filename.arxml",False)Load data from textfromautosar_dataimport*# alternatively: load a buffermodel=AutosarModel()filebuf="""<?xml version="1.0" encoding="utf-8"?><AUTOSAR xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_00050.xsd" xmlns="http://autosar.org/schema/r4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><AR-PACKAGES><AR-PACKAGE><SHORT-NAME>Pkg</SHORT-NAME></AR-PACKAGE></AR-PACKAGES></AUTOSAR>"""(arxmlfile,warnings)=model.load_buffer(filebuf,"filename.arxml",False)Create data from scratchfromautosar_dataimport*# alternatively: create a new data model from scratchmodel=AutosarModel()# create a file in the modelfile1=model.create_file("filename.arxml",AutosarVersion.Autosar_4_3_0)# a model can consist of multiple files - elements appear in all of them by default, unless restrictions are setfile2=model.create_file("filename2.arxml",AutosarVersion.Autosar_00051)# initially the model only has its root element, <AUTOSAR>. Create some elementsel_elements=model.root_element\.create_sub_element("AR-PACKAGES")\.create_named_sub_element("AR-PACKAGE","Pkg")\.create_sub_element("ELEMENTS")# create some more elementsel_fibex_element_ref=el_elements\.create_named_sub_element("SYSTEM","System")\.create_sub_element("FIBEX-ELEMENTS")\.create_sub_element("FIBEX-ELEMENT-REF-CONDITIONAL")\.create_sub_element("FIBEX-ELEMENT-REF")el_can_cluster=model.root_element\.get_sub_element("AR-PACKAGES")\.create_named_sub_element("AR-PACKAGE","Pkg2")\.create_sub_element("ELEMENTS")\.create_named_sub_element("CAN-CLUSTER","CanCluster")# set a cross referenceel_fibex_element_ref.reference_target=el_can_cluster# check the cross referenceel_fibex_element_ref.character_data# '/Pkg2/CanCluster'el_fibex_element_ref.reference_target==el_can_cluster# True# get an attributeel_fibex_element_ref.attribute_value("DEST")# EnumItem.CanClustermodel.root_element.attribute_value("xmlns")# 'http://autosar.org/schema/r4.0'# set an attribute valueel_fibex_element_ref.set_attribute("DEST","I-SIGNAL")# setting the DEST of the reference to an invalid value has invalidated the# reference, so accessing el_fibex_element_ref.reference_target will now cause an exceptionel_can_cluster.set_attribute("UUID","1234567890abcdefg")# get the current xml text of the model:print(file1.serialize())# this prints "<?xml version="1.0" encoding="utf-8"?>\n<AUTOSAR ..."# write all the files in the model - this will create filename.arxml and filename2.arxml with identical contentmodel.write()# get the autosar paths of all elements in the modelpaths=model.identifiable_elements# paths = ['/Pkg', '/Pkg/System', '/Pkg2', '/Pkg2/CanCluster']# get an element by its pathel_ar_package1=model.get_element_by_path("/Pkg")el_ar_package2=model.get_element_by_path("/Pkg2")el_system=model.get_element_by_path("/Pkg/System")# restrict the packages to only appear in one file eachel_ar_package1.remove_from_file(file2)el_ar_package2.remove_from_file(file1)# write all the files in the model - now the content is differentmodel.write()Working with datafromautosar_dataimport*model=AutosarModel()(arxmlfile,warnings)=model.load_file("somefile.arxml",False)# display all the triggered PDUs in the filefor(depth,element)inmodel.elements_dfs:ifelement.element_name=="PDU-TRIGGERING":pdu=element.get_sub_element("I-PDU-REF").reference_targetprint(str.format("PDU: <{}> ={}",pdu.element_name,pdu.item_name))Developmentmaturin must be installed:pip install maturinif it isn'tcreate a venv in the cloned source:python -m venv .venvbuild the wheel and directly install it in the venv:maturin developactivate the venv in a shell:source .venv/bin/activateor.venv\Scripts\Activate.ps1run python in the shell with the venv