Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -219,4 +219,9 @@ PrefSystemImporter --base-path c:/EB/ACG-8_8_8_WIN32X86/workspace/simple_demo_rt
2. Parse the OsAppCounterRef List of OsApplication
3. Parse the OsAppScheduleTableRef Lis of OsApplication
4. Add the **read_eb_origin_value** method to read the optional EB extended configuration
5. Fix the OsIsrPriority and OsIsrVector issue.
5. Fix the OsIsrPriority and OsIsrVector issue.

**Version 1.2.0**

1. Fix the AbstractEbModelParser::_convert_value error.
2. Add the structure for Ecuc.xdm and BswM.xdm.
Binary file added dist/py_eb_model-1.2.0-py3-none-any.whl
Binary file not shown.
3 changes: 2 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

setup(
name='py_eb_model',
version='1.1.9',
version='1.2.0',
license='proprietary',
description="The parser for EB XDM file",
long_description=long_description,
Expand Down Expand Up @@ -40,6 +40,7 @@
'os-xdm-xlsx = eb_model.cli.os_xdm_2_xls_cli:main',
'rte-xdm-xlsx = eb_model.cli.rte_xdm_2_xls_cli:main',
'nvm-xdm-xlsx = eb_model.cli.nvm_xdm_2_xls_cli:main',
'ecuc-xdm-xlsx = eb_model.cli.ecuc_xdm_2_xls_cli:main',
'PrefSystemImporter = eb_model.cli.pref_system_importer_cli:main',
]
}
Expand Down
2 changes: 1 addition & 1 deletion src/eb_model/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from .models import *
from .parser import *
from .reporter import *
from .writer import *
from .writer import *
65 changes: 65 additions & 0 deletions src/eb_model/cli/bswm_xdm_2_xls_cli.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import argparse
import pkg_resources
import logging
import sys
import os.path

from ..parser.bswm_xdm_parser import BswMXdmParser
from ..models import EBModel
from ..reporter.excel_reporter.bswm_xdm import BswMXdmXlsWriter


def main():
version = pkg_resources.require("py_eb_model")[0].version

ap = argparse.ArgumentParser()
ap.description = "Version: %s" % version
ap.add_argument("-v", "--verbose", required=False, help="Print debug information.", action="store_true")
ap.add_argument("INPUT", help="The path of Os.xdm.")
ap.add_argument("OUTPUT", help="The path of excel file.")

args = ap.parse_args()

logger = logging.getLogger()

formatter = logging.Formatter('[%(levelname)s] : %(message)s')

stdout_handler = logging.StreamHandler(sys.stderr)
stdout_handler.setFormatter(formatter)

base_path = os.path.dirname(args.OUTPUT)
log_file = os.path.join(base_path, 'os_xdm_2_xls.log')

if os.path.exists(log_file):
os.remove(log_file)

if args.verbose:
file_handler = logging.FileHandler(log_file)
file_handler.setFormatter(formatter)
file_handler.setLevel(logging.DEBUG)

logger.setLevel(logging.DEBUG)

if args.verbose:
stdout_handler.setLevel(logging.DEBUG)
else:
stdout_handler.setLevel(logging.INFO)

if args.verbose:
logger.addHandler(file_handler)
logger.addHandler(stdout_handler)

try:
doc = EBModel.getInstance()

parser = BswMXdmParser()
parser.parse_xdm(args.INPUT, doc)

options = {}

writer = BswMXdmXlsWriter()
writer.write(args.OUTPUT, doc, options)

except Exception as e:
logger.error(e)
raise e
64 changes: 64 additions & 0 deletions src/eb_model/cli/ecuc_xdm_2_xls_cli.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import argparse
import pkg_resources
import logging
import sys
import os.path

from eb_model.parser.eb_parser_factory import EbParserFactory

from ..reporter.excel_reporter.rte_xdm import RteRunnableEntityXlsWriter, RteXdmXlsWriter
from ..parser.ecuc_xdm_parser import EcucXdmXlsWriter
from ..models import EBModel


def process_logger(args):
logger = logging.getLogger()
formatter = logging.Formatter('[%(levelname)s] : %(message)s')
logger.setLevel(logging.DEBUG)

if args.verbose:
log_level = logging.DEBUG
else:
log_level = logging.INFO

stdout_handler = logging.StreamHandler(sys.stderr)
stdout_handler.setFormatter(formatter)
stdout_handler.setLevel(log_level)
logger.addHandler(stdout_handler)

if args.log:
if os.path.exists(args.log):
os.remove(args.log)

file_handler = logging.FileHandler(args.log)
file_handler.setFormatter(formatter)
file_handler.setLevel(log_level)
logger.addHandler(file_handler)
return logger


def main():
# version = pkg_resources.require("py_eb_model")[0].version

ap = argparse.ArgumentParser()
ap.add_argument("-v", "--verbose", required=False, help="Print debug information", action="store_true")
ap.add_argument("--log", required=False, help="The Log file name.")
ap.add_argument("INPUT", help="The path of xdm file.", nargs='+')
ap.add_argument("OUTPUT", help="The path of excel file.")

args = ap.parse_args()
logger = process_logger(args)

try:
doc = EBModel.getInstance()

for input_file in args.INPUT:
parser = EbParserFactory.create(input_file)
parser.parse_xdm(input_file, doc)

writer = EcucXdmXlsWriter()
writer.write(args.OUTPUT, doc)

except Exception as e:
logger.error(e)
raise e
9 changes: 9 additions & 0 deletions src/eb_model/models/bswm_xdm.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import logging
from .abstract import Module


class BswM(Module):
def __init__(self, parent) -> None:
super().__init__(parent, "BswM")

self.logger = logging.getLogger()
24 changes: 24 additions & 0 deletions src/eb_model/models/eb_doc.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from ..models.bswm_xdm import BswM
from ..models.ecuc_xdm import EcuC
from ..models.nvm_xdm import NvM
from ..models.importer_xdm import SystemDescriptionImporter
from ..models.rte_xdm import Rte
Expand Down Expand Up @@ -61,6 +63,28 @@ def getNvM(self) -> NvM:
container = EcucParamConfContainerDef(self, "NvM")
NvM(container)
return self.find("/NvM/NvM")

def getEcuC(self) -> EcuC:
container = EcucParamConfContainerDef(self, "EcuC")
EcuC(container)
return self.find("/EcuC/EcuC")

def getBswM(self) -> BswM:
container = EcucParamConfContainerDef(self, "BswM")
BswM(container)
return self.find("/BswM/BswM")

def addContainer(self, container: EcucParamConfContainerDef):
if (container is None):
raise ValueError("The container to be added cannot be None.")
self.elements[container.name] = container
container.parent = self
return container

def getContainer(self, name: str) -> EcucParamConfContainerDef:
if (name not in self.elements):
raise KeyError("The container <%s> does not exist." % name)
return self.elements[name]


class PreferenceModel(AbstractModel):
Expand Down
77 changes: 77 additions & 0 deletions src/eb_model/models/ecuc_xdm.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@

from typing import List
from ..models.abstract import EcucParamConfContainerDef, EcucRefType, Module


class EcucPartition(EcucParamConfContainerDef):
def __init__(self, parent, name):
super().__init__(parent, name)

self.EcucPartitionId: int = None
self.EcucPartitionRef: EcucRefType = None
self.EcucPartitionBswModuleDistinguishedPartitions: List[EcucRefType] = []
self.EcucPartitionCoreRef: EcucRefType = None
self.EcucPartitionSoftwareComponentInstanceRefs: List[EcucRefType] = []

def getEcucPartitionId(self) -> int:
return self.EcucPartitionId

def setEcuPartitionId(self, partitionId: int):
self.EcucPartitionId = partitionId
return self

def getEcucPartitionRef(self) -> EcucRefType:
return self.EcucPartitionRef

def setEcucPartitionRef(self, ref: EcucRefType):
self.EcucPartitionRef = ref
return self

def getEcucPartitionBswModuleDistinguishedPartition(self) -> List[EcucRefType]:
return self.EcucPartitionBswModuleDistinguishedPartitions

def addEcucPartitionBswModuleDistinguishedPartition(self, partition: EcucRefType):
self.EcucPartitionBswModuleDistinguishedPartitions.append(partition)
return self

def getEcucPartitionCoreRef(self) -> EcucRefType:
return self.EcucPartitionCoreRef

def setEcucPartitionCoreRef(self, core_ref: EcucRefType):
self.EcucPartitionCoreRef = core_ref
return self

def getEcucPartitionSoftwareComponentInstanceRefs(self) -> List[EcucRefType]:
return self.EcucPartitionSoftwareComponentInstanceRefs

def addEcucPartitionSoftwareComponentInstanceRef(self, ref: EcucRefType):
self.EcucPartitionSoftwareComponentInstanceRefs.append(ref)
return self


class EcucPartitionCollection(EcucParamConfContainerDef):
def __init__(self, parent, name):
super().__init__(parent, name)

self.EcucPartitions: List[EcucPartition] = []

def getEcucPartitions(self) -> List[EcucPartition]:
return self.EcucPartitions

def addEcucPartition(self, partition: EcucPartition):
self.EcucPartitions.append(partition)
return self


class EcuC(Module):
def __init__(self, parent, name):
super().__init__(parent, name)

self.EcucPartitionCollection = None

def getEcucPartitionCollection(self):
return self.EcucPartitionCollection

def setEcucPartitionCollection(self, partition_collection: EcucPartitionCollection):
self.EcucPartitionCollection = partition_collection
return self
6 changes: 4 additions & 2 deletions src/eb_model/models/importer_xdm.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,12 @@ def getParsedInputFiles(self, params={}) -> List[str]:
m = re.match(r'(.+)\\(\*\.\w+)', input_file)
if m:
for file_name in self.parseWildcard(os.path.realpath(os.path.join(params['base_path'], input_file))):
# self.logger.info("Add the file <%s>." % file_name)
self.logger.debug("Add the file <%s>." % file_name)
file_list.append(file_name)
else:
file_list.append(os.path.realpath(os.path.join(params['base_path'], input_file)))
name = os.path.realpath(os.path.join(params['base_path'], input_file))
# self.logger.debug("Add the file <%s>." % name)
file_list.append(name)
else:
file_list.append(os.path.realpath(os.path.join(params['base_path'], input_file)))
else:
Expand Down
14 changes: 14 additions & 0 deletions src/eb_model/parser/bswm_xdm_parser.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from ..parser.eb_parser import AbstractEbModelParser
import xml.etree.cElementTree as ET
from ..models.eb_doc import EBModel


class BswMXdmParser(AbstractEbModelParser):
def __init__(self):
super().__init__()

self.bswm = None

def parse(self, element: ET.Element, doc: EBModel):
if self.get_component_name(element) != "BswM":
raise ValueError("Invalid <%s> xdm file" % "BswM")
4 changes: 3 additions & 1 deletion src/eb_model/parser/eb_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,9 @@ def _convert_value(self, tag: ET.Element):
return True
else:
return False
return tag.attrib['value']
if 'value' in tag.attrib:
return tag.attrib['value']
return None

def read_value(self, parent: ET.Element, name: str) -> str:
tag = parent.find(".//d:var[@name='%s']" % name, self.nsmap)
Expand Down
30 changes: 30 additions & 0 deletions src/eb_model/parser/ecuc_xdm_parser.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import xml.etree.cElementTree as ET

from ..models.eb_doc import EBModel
from ..parser.eb_parser import AbstractEbModelParser


class EcucXdmParser(AbstractEbModelParser):
def __init__(self):
super().__init__()

self.ecuc = None

def parse(self, element: ET.Element, doc: EBModel):
if self.get_component_name(element) != "NvM":
raise ValueError("Invalid <%s> xdm file" % "EcuC")

ecuc = doc.getEcuC()

self.read_version(element, ecuc)

self.logger.info("Parse Ecuc ARVersion:<%s> SwVersion:<%s>" % (ecuc.getArVersion().getVersion(), ecuc.getSwVersion().getVersion()))

self.ecuc = ecuc

self.read_ecuc_partition_collection(element, ecuc)

def read_nvm_common(self, element: ET.Element, nvm: NvM):
ctr_tag = self.find_ctr_tag(element, "NvMCommon")
if ctr_tag is not None:
nvm_common = NvMCommon(nvm, "NvMCommon")
11 changes: 6 additions & 5 deletions src/eb_model/parser/pref_xdm_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from ..models.importer_xdm import SystemDescriptionImporter
from . import AbstractEbModelParser


class PerfXdmParser(AbstractEbModelParser):
def __init__(self, ) -> None:
super().__init__()
Expand All @@ -23,14 +24,14 @@ def parse_preference(self, element: ET.Element, doc: PreferenceModel):
for ctr_tag in self.find_ctr_tag_list(element, "SystemDescriptionImporters"):
self.logger.info("Parse SystemDescriptionImporters: <%s>" % ctr_tag.attrib["name"])
self.parse_input_files(ctr_tag, importer)
#importer.addInputFile()
# importer.addInputFile()

def add_ecu_extract(self, doc: PreferenceModel, params = {'base_path': None, 'wildcard': None, "project": None}):
def add_ecu_extract(self, doc: PreferenceModel, params={'base_path': None, 'wildcard': None, "project": None}):
importer = doc.getSystemDescriptionImporter()

#if params['base_path'] is None:
# if params['base_path'] is None:
# raise ValueError("Please specify the base path")

#ecu_extract_path = os.path.join(params['base_path'], '')
# ecu_extract_path = os.path.join(params['base_path'], '')

importer.addInputFile('systemmod/EcuExtract.arxml')
importer.addInputFile('systemmod/EcuExtract.arxml')
Loading
Loading