py-eb-model 1.0.1__py3-none-any.whl → 1.0.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
eb_model/__init__.py CHANGED
@@ -1,3 +1,4 @@
1
1
  from .models import *
2
2
  from .parser import *
3
- from .reporter import *
3
+ from .reporter import *
4
+ from .writer import *
@@ -0,0 +1,75 @@
1
+ import argparse
2
+ import pkg_resources
3
+ import logging
4
+ import sys
5
+ import os.path
6
+
7
+ from ..writer import TextPreferenceModelWriter
8
+ from ..parser import PerfXdmParser
9
+ from ..models import PreferenceModel
10
+
11
+ def main():
12
+ version = pkg_resources.require("py_eb_model")[0].version
13
+
14
+ ap = argparse.ArgumentParser()
15
+ ap.add_argument("-v", "--verbose", required= False, help = "Print debug information", action = "store_true")
16
+ ap.add_argument("--file-list", required=False, help = "Generate the file list (Default)", action = "store_true")
17
+ ap.add_argument("--ab-project", required=False, help = "Generate the AUTOSAR builder project", action = "store_true")
18
+ ap.add_argument("--base-path", required=False, help="Base Path for EB tresos")
19
+ ap.add_argument("INPUTS", nargs='+', help = "The path of perf_imp_xxx.xdm.")
20
+ ap.add_argument("OUTPUT", help = "The path of output file.")
21
+
22
+ args = ap.parse_args()
23
+
24
+ logger = logging.getLogger()
25
+
26
+ formatter = logging.Formatter('[%(levelname)s] : %(message)s')
27
+
28
+ stdout_handler = logging.StreamHandler(sys.stderr)
29
+ stdout_handler.setFormatter(formatter)
30
+
31
+ base_path = os.path.dirname(args.OUTPUT)
32
+ log_file = os.path.join(base_path, 'pref_system_importer.log')
33
+
34
+ if os.path.exists(log_file):
35
+ os.remove(log_file)
36
+
37
+ file_handler = logging.FileHandler(log_file)
38
+ file_handler.setFormatter(formatter)
39
+
40
+ logger.setLevel(logging.DEBUG)
41
+ file_handler.setLevel(logging.DEBUG)
42
+
43
+ if args.verbose:
44
+ stdout_handler.setLevel(logging.DEBUG)
45
+ else:
46
+ stdout_handler.setLevel(logging.INFO)
47
+
48
+ logger.addHandler(file_handler)
49
+ logger.addHandler(stdout_handler)
50
+
51
+ format = "file_list"
52
+ if args.ab_project:
53
+ format = "ab_project"
54
+
55
+ try:
56
+ doc = PreferenceModel.getInstance()
57
+
58
+ parser = PerfXdmParser()
59
+ for file in args.INPUTS:
60
+ if args.base_path is not None:
61
+ file_name = os.path.realpath(os.path.join(args.base_path, file))
62
+ else:
63
+ file_name = file
64
+ parser.parse_preference_xdm(file_name, doc)
65
+
66
+ if format == "file_list":
67
+ writer = TextPreferenceModelWriter()
68
+ writer.writer_import_files(args.OUTPUT, doc.getSystemDescriptionImporter(), {
69
+ 'base_path': args.base_path,
70
+ 'wildcard': True,
71
+ })
72
+
73
+ except Exception as e:
74
+ logger.error(e)
75
+ raise e
@@ -1,3 +1,5 @@
1
1
  from .abstract import *
2
2
  from .os_xdm import *
3
+ from .rte_xdm import *
3
4
  from .eb_doc import *
5
+ from .importer_xdm import *
eb_model/models/eb_doc.py CHANGED
@@ -1,9 +1,29 @@
1
+ from .importer_xdm import SystemDescriptionImporter
1
2
  from .rte_xdm import Rte
2
3
  from .os_xdm import Os
3
4
  from .abstract import EcucContainer, EcucObject
4
5
 
6
+ class AbstractModel(EcucContainer):
7
+ def getFullName(self):
8
+ return self.name
9
+
10
+ def clear(self):
11
+ self.elements = {}
12
+
13
+ def find_object(self, referred_name:str, element:EcucContainer) -> EcucObject:
14
+ name_list = referred_name.split("/")
15
+ #element = EBModel.getInstance()
16
+ for name in name_list:
17
+ if (name == ""):
18
+ continue
19
+ element = element.getElement(name)
20
+ if (element == None):
21
+ return element
22
+ # raise ValueError("The %s of reference <%s> does not exist." % (short_name, referred_name))
23
+ return element
5
24
 
6
- class EBModel(EcucContainer):
25
+
26
+ class EBModel(AbstractModel):
7
27
  __instance = None
8
28
 
9
29
  @staticmethod
@@ -19,24 +39,9 @@ class EBModel(EcucContainer):
19
39
  EcucContainer.__init__(self, None, "")
20
40
  EBModel.__instance = self
21
41
 
22
- def getFullName(self):
23
- return self.name
24
-
25
- def clear(self):
26
- self.elements = {}
27
-
28
42
  def find(self, referred_name: str) -> EcucObject:
29
- name_list = referred_name.split("/")
30
- element = EBModel.getInstance()
31
- for name in name_list:
32
- if (name == ""):
33
- continue
34
- element = element.getElement(name)
35
- if (element == None):
36
- return element
37
- # raise ValueError("The %s of reference <%s> does not exist." % (short_name, referred_name))
38
- return element
39
-
43
+ return self.find_object(referred_name, EBModel.getInstance())
44
+
40
45
  def getOs(self) -> Os:
41
46
  container = EcucContainer(self, "Os")
42
47
  os = Os(container)
@@ -46,5 +51,28 @@ class EBModel(EcucContainer):
46
51
  container = EcucContainer(self, "Rte")
47
52
  rte = Rte(container)
48
53
  return self.find("/Rte/Rte")
49
-
50
-
54
+
55
+ class PreferenceModel(AbstractModel):
56
+ __instance = None
57
+
58
+ @staticmethod
59
+ def getInstance():
60
+ if (PreferenceModel.__instance == None):
61
+ PreferenceModel()
62
+ return PreferenceModel.__instance
63
+
64
+ def __init__(self):
65
+ if (PreferenceModel.__instance != None):
66
+ raise Exception("The PreferenceModel is singleton!")
67
+
68
+ EcucContainer.__init__(self, None, "")
69
+ PreferenceModel.__instance = self
70
+
71
+ container = EcucContainer(self, "ImporterExporterAdditions")
72
+ SystemDescriptionImporter(container, "SystemDescriptionImporters")
73
+
74
+ def find(self, referred_name: str) -> EcucObject:
75
+ return self.find_object(referred_name, PreferenceModel.getInstance())
76
+
77
+ def getSystemDescriptionImporter(self) -> SystemDescriptionImporter:
78
+ return self.find("/ImporterExporterAdditions/SystemDescriptionImporters")
@@ -0,0 +1,45 @@
1
+ import glob
2
+ from typing import List
3
+ from .abstract import EcucObject
4
+ import os
5
+ import re
6
+
7
+ class SystemDescriptionImporter(EcucObject):
8
+ def __init__(self, parent, name):
9
+ super().__init__(parent, name)
10
+
11
+ self.inputFiles = [] # type: List[str]
12
+
13
+ def getInputFiles(self):
14
+ return self.inputFiles
15
+
16
+ def addInputFile(self, value):
17
+ self.inputFiles.append(value)
18
+ return self
19
+
20
+ def parseWildcard(self, filename: str) -> List[str]:
21
+ #path: str, file_pattern: str
22
+ file_list = []
23
+ for file in glob.iglob(filename):
24
+ print(file)
25
+ file_list.append(file)
26
+ return file_list
27
+
28
+ def getParsedInputFiles(self, base_path: str, wildcard: bool) -> List[str]:
29
+ file_list = []
30
+ for input_file in self.inputFiles:
31
+ if base_path is not None:
32
+ if wildcard:
33
+ m = re.match(r'(.+)\\(\*\.\w+)', input_file)
34
+ if m:
35
+ path, file_pattern = m.group(1), m.group(2)
36
+ #for file_name in self.parseWildcard(os.path.realpath(os.path.join(base_path, path)), file_pattern):
37
+ for file_name in self.parseWildcard(os.path.realpath(os.path.join(base_path, input_file))):
38
+ file_list.append(file_name)
39
+ else:
40
+ file_list.append(os.path.realpath(os.path.join(base_path, input_file)))
41
+ else:
42
+ file_list.append(os.path.realpath(os.path.join(base_path, input_file)))
43
+ else:
44
+ file_list.append(input_file)
45
+ return file_list
eb_model/models/os_xdm.py CHANGED
@@ -159,11 +159,179 @@ class OsAlarm(EcucContainer):
159
159
 
160
160
  return "\n".join(result)
161
161
 
162
+ class OsApplicationHooks(EcucContainer):
163
+ def __init__(self, parent, name):
164
+ super().__init__(parent, name)
165
+
166
+ self.OsAppErrorHook = False # type: bool
167
+ self.OsAppShutdownHook = False # type: bool
168
+ self.OsAppStartupHook = False # type: bool
169
+ self.OsMemoryMappingCodeLocationRef = None # type: EcucRefType
170
+
171
+ def getOsAppErrorHook(self):
172
+ return self.OsAppErrorHook
173
+
174
+ def setOsAppErrorHook(self, value):
175
+ self.OsAppErrorHook = value
176
+ return self
177
+
178
+ def getOsAppShutdownHook(self):
179
+ return self.OsAppShutdownHook
180
+
181
+ def setOsAppShutdownHook(self, value):
182
+ self.OsAppShutdownHook = value
183
+ return self
184
+
185
+ def getOsAppStartupHook(self):
186
+ return self.OsAppStartupHook
187
+
188
+ def setOsAppStartupHook(self, value):
189
+ self.OsAppStartupHook = value
190
+ return self
191
+
192
+ def getOsMemoryMappingCodeLocationRef(self):
193
+ return self.OsMemoryMappingCodeLocationRef
194
+
195
+ def setOsMemoryMappingCodeLocationRef(self, value):
196
+ self.OsMemoryMappingCodeLocationRef = value
197
+ return self
198
+
199
+ class OsApplicationTrustedFunction(EcucContainer):
200
+ def __init__(self, parent, name):
201
+ super().__init__(parent, name)
202
+
203
+ self.OsTrustedFunctionName = None # type: str
204
+ self.OsMemoryMappingCodeLocationRef = None # type: EcucRefType
205
+
206
+ def getOsTrustedFunctionName(self):
207
+ return self.OsTrustedFunctionName
208
+
209
+ def setOsTrustedFunctionName(self, value):
210
+ self.OsTrustedFunctionName = value
211
+ return self
212
+
213
+ def getOsMemoryMappingCodeLocationRef(self):
214
+ return self.OsMemoryMappingCodeLocationRef
162
215
 
216
+ def setOsMemoryMappingCodeLocationRef(self, value):
217
+ self.OsMemoryMappingCodeLocationRef = value
218
+ return self
219
+ class OsAppMode(EcucContainer):
220
+ def __init__(self, parent, name):
221
+ super().__init__(parent, name)
163
222
  class OsApplication(EcucContainer):
164
223
  def __init__(self, parent, name) -> None:
165
224
  super().__init__(parent, name)
166
225
 
226
+ self.OsTrusted = False # type: bool
227
+ self.OsTrustedApplicationDelayTimingViolationCall = False # type: bool
228
+ self.OsTrustedApplicationWithProtection = False # type: bool
229
+ self.OsAppAlarmRefs = [] # type: List[EcucRefType]
230
+ self.OsAppCounterRefs = [] # type: List[EcucRefType]
231
+ self.OsAppEcucPartitionRefs = [] # type: List[EcucRefType]
232
+ self.OsAppIsrRefs = [] # type: List[EcucRefType]
233
+ self.OsApplicationCoreRefs = [] # type: List[EcucRefType]
234
+ self.OsAppScheduleTableRefs = [] # type: List[EcucRefType]
235
+ self.OsAppTaskRefs = [] # type: List[EcucRefType]
236
+ self.OsMemoryMappingCodeLocationRef = None # type: EcucRefType
237
+ self.OsRestartTask = None # type: EcucRefType
238
+
239
+ '''
240
+ EB Tresos
241
+ '''
242
+ self.OsAppResourceRefs = [] # type: List[EcucRefType]
243
+
244
+ def getOsTrusted(self):
245
+ return self.OsTrusted
246
+
247
+ def setOsTrusted(self, value):
248
+ self.OsTrusted = value
249
+ return self
250
+
251
+ def getOsTrustedApplicationDelayTimingViolationCall(self):
252
+ return self.OsTrustedApplicationDelayTimingViolationCall
253
+
254
+ def setOsTrustedApplicationDelayTimingViolationCall(self, value):
255
+ self.OsTrustedApplicationDelayTimingViolationCall = value
256
+ return self
257
+
258
+ def getOsTrustedApplicationWithProtection(self):
259
+ return self.OsTrustedApplicationWithProtection
260
+
261
+ def setOsTrustedApplicationWithProtection(self, value):
262
+ self.OsTrustedApplicationWithProtection = value
263
+ return self
264
+
265
+ def getOsAppAlarmRefs(self):
266
+ return self.OsAppAlarmRefs
267
+
268
+ def addOsAppAlarmRef(self, value):
269
+ self.OsAppAlarmRefs.append(value)
270
+ return self
271
+
272
+ def getOsAppCounterRefs(self):
273
+ return self.OsAppCounterRefs
274
+
275
+ def addOsAppCounterRefs(self, value):
276
+ self.OsAppCounterRefs.append(value)
277
+ return self
278
+
279
+ def getOsAppEcucPartitionRefs(self):
280
+ return self.OsAppEcucPartitionRefs
281
+
282
+ def addOsAppEcucPartitionRefs(self, value):
283
+ self.OsAppEcucPartitionRefs.append(value)
284
+ return self
285
+
286
+ def getOsAppIsrRefs(self):
287
+ return self.OsAppIsrRefs
288
+
289
+ def addOsAppIsrRefs(self, value):
290
+ self.OsAppIsrRefs.append(value)
291
+ return self
292
+
293
+ def getOsApplicationCoreRefs(self):
294
+ return self.OsApplicationCoreRefs
295
+
296
+ def addOsApplicationCoreRefs(self, value):
297
+ self.OsApplicationCoreRefs.append(value)
298
+ return self
299
+
300
+ def getOsAppScheduleTableRefs(self):
301
+ return self.OsAppScheduleTableRefs
302
+
303
+ def addOsAppScheduleTableRef(self, value):
304
+ self.OsAppScheduleTableRefs.append(value)
305
+ return self
306
+
307
+ def getOsAppTaskRefs(self):
308
+ return self.OsAppTaskRefs
309
+
310
+ def addOsAppTaskRefs(self, value):
311
+ self.OsAppTaskRefs.append(value)
312
+ return self
313
+
314
+ def getOsMemoryMappingCodeLocationRef(self):
315
+ return self.OsMemoryMappingCodeLocationRef
316
+
317
+ def setOsMemoryMappingCodeLocationRef(self, value):
318
+ self.OsMemoryMappingCodeLocationRef = value
319
+ return self
320
+
321
+ def getOsRestartTask(self):
322
+ return self.OsRestartTask
323
+
324
+ def setOsRestartTask(self, value):
325
+ self.OsRestartTask = value
326
+ return self
327
+
328
+ def getOsAppResourceRefs(self):
329
+ return self.OsAppResourceRefs
330
+
331
+ def addOsAppResourceRef(self, value):
332
+ self.OsAppResourceRefs.append(value)
333
+ return self
334
+
167
335
 
168
336
  class OsDriver(EcucContainer):
169
337
  def __init__(self, parent, name) -> None:
@@ -397,8 +565,14 @@ class OsTaskAutostart(EcucObject):
397
565
  def __init__(self, parent, name) -> None:
398
566
  super().__init__(parent, name)
399
567
 
400
- self.osTaskAppModeRef = None
568
+ self.osTaskAppModeRefs = [] # type: List[EcucRefType]
401
569
 
570
+ def getOsTaskAppModeRefList(self):
571
+ return self.osTaskAppModeRefs
572
+
573
+ def addOsTaskAppModeRef(self, value):
574
+ self.osTaskAppModeRefs.append(value)
575
+ return self
402
576
 
403
577
  class OsTaskResourceLock(EcucObject):
404
578
  def __init__(self, parent, name) -> None:
@@ -434,11 +608,13 @@ class OsTask(EcucObject):
434
608
  self.osTaskPeriod = 0.0 # type: float
435
609
  self.osTaskPriority = None # type: int
436
610
  self.osTaskSchedule = ""
611
+ self.OsTaskType = None # type: str
437
612
  self.osStacksize = 0 # type: int
438
- self.osMemoryMappingCodeLocationRef = None
613
+ self.osMemoryMappingCodeLocationRef = None # type: EcucRefType
439
614
  self.osTaskAccessingApplication = None
440
- self.osTaskEventRef = None
615
+ self.osTaskEventRef = None # type: EcucRefType
441
616
  self.osTaskResourceRefs = [] # type: List[EcucRefType]
617
+ self.osTaskAutostart = None # type: OsTaskAutostart
442
618
 
443
619
  def getOsTaskActivation(self):
444
620
  return self.osTaskActivation
@@ -467,6 +643,14 @@ class OsTask(EcucObject):
467
643
  def setOsTaskSchedule(self, value):
468
644
  self.osTaskSchedule = value
469
645
  return self
646
+
647
+ def getOsTaskType(self):
648
+ return self.OsTaskType
649
+
650
+ def setOsTaskType(self, value):
651
+ self.OsTaskType = value
652
+ return self
653
+
470
654
 
471
655
  def getOsStacksize(self) -> int:
472
656
  return self.osStacksize
@@ -507,6 +691,14 @@ class OsTask(EcucObject):
507
691
  if self.osTaskSchedule == OsTask.FULL:
508
692
  return True
509
693
  return False
694
+
695
+ def getOsTaskAutostart(self):
696
+ return self.osTaskAutostart
697
+
698
+ def setOsTaskAutostart(self, value):
699
+ self.osTaskAutostart = value
700
+ return self
701
+
510
702
 
511
703
 
512
704
  class OsScheduleTableAutostart(EcucContainer):
@@ -750,6 +942,7 @@ class Os(EcucContainer):
750
942
  self.osAlarms = [] # type: List[OsAlarm]
751
943
  self.osScheduleTables = [] # type: List[OsScheduleTable]
752
944
  self.osCounters = [] # type: List[OsCounter]
945
+ self.osApplications = [] # type: List[OsApplication]
753
946
 
754
947
  def getOsTaskList(self) -> List[OsTask]:
755
948
  return list(sorted(filter(lambda a: isinstance(a, OsTask), self.elements.values()), key=lambda o: o.name))
@@ -789,4 +982,12 @@ class Os(EcucContainer):
789
982
  def addOsCounter(self, os_counter: OsCounter):
790
983
  self.addElement(os_counter)
791
984
  self.osCounters.append(os_counter)
792
- return self
985
+ return self
986
+
987
+ def getOsApplicationList(self) -> List[OsApplication]:
988
+ return list(sorted(filter(lambda a: isinstance(a, OsApplication), self.elements.values()), key=lambda o: o.name))
989
+
990
+ def addOsApplication(self, value):
991
+ self.addElement(value)
992
+ self.osApplications.append(value)
993
+ return self
@@ -321,7 +321,7 @@ class RteSwComponentInstance(AbstractRteInstance):
321
321
  def __init__(self, parent, name) -> None:
322
322
  super().__init__(parent, name)
323
323
 
324
- self.nappedToOsApplicationRef = None
324
+ self.mappedToOsApplicationRef = None # type: EcucRefType
325
325
  self.rteSoftwareComponentInstanceRef = None
326
326
 
327
327
  self.rteEventToIsrMappings = []
@@ -333,10 +333,10 @@ class RteSwComponentInstance(AbstractRteInstance):
333
333
  self.rteNvRamAllocations = []
334
334
 
335
335
  def getMappedToOsApplicationRef(self):
336
- return self.nappedToOsApplicationRef
336
+ return self.mappedToOsApplicationRef
337
337
 
338
338
  def setMappedToOsApplicationRef(self, value):
339
- self.nappedToOsApplicationRef = value
339
+ self.mappedToOsApplicationRef = value
340
340
  return self
341
341
 
342
342
  def getRteSoftwareComponentInstanceRef(self) -> EcucRefType:
@@ -402,11 +402,11 @@ class RteBswModuleInstance(AbstractRteInstance):
402
402
  self.rteBswImplementationRef = None
403
403
  self.rteBswModuleConfigurationRefs = []
404
404
  self.rteBswEventToIsrMappings = []
405
- self.rteBswEventToTaskMappings = [] # List[RteBswEventToTaskMapping]
405
+ self.rteBswEventToTaskMappings = [] # type: List[RteBswEventToTaskMapping]
406
406
  self.rteBswExclusiveAreaImpls = []
407
407
  self.rteBswExternalTriggerConfigs = []
408
408
  self.rteBswInternalTriggerConfigs = []
409
- self.rteMappedToOsApplicationRef = None
409
+ self.rteMappedToOsApplicationRef = None # type: EcucRefType
410
410
  self.rteBswModeMachineInstanceConfigs = []
411
411
  self.rteBswRequiredClientServerConnections = []
412
412
  self.rteBswRequiredModeGroupConnections = []
@@ -515,7 +515,7 @@ class Rte(EcucContainer):
515
515
  self.elements[value.getName()] = value
516
516
 
517
517
  def getRteSwComponentInstanceList(self) -> List[RteSwComponentInstance]:
518
- return list(sorted(filter(lambda a: isinstance(a, RteBswModuleInstance), self.elements.values()), key= lambda o:o.name))
518
+ return list(sorted(filter(lambda a: isinstance(a, RteSwComponentInstance), self.elements.values()), key= lambda o:o.name))
519
519
 
520
520
  def addRteSwComponentInstance(self, value: RteSwComponentInstance):
521
521
  self.elements[value.getName()] = value
@@ -1 +1,4 @@
1
1
  from .os_xdm_parser import OsXdmParser
2
+ from .rte_xdm_parser import RteXdmParser
3
+ from .eb_parser import AbstractEbModelParser
4
+ from .pref_xdm_parser import PerfXdmParser
@@ -5,7 +5,7 @@ import re
5
5
  from abc import ABCMeta
6
6
  from typing import List
7
7
 
8
- from ..models.eb_doc import EBModel
8
+ from ..models.eb_doc import EBModel, PreferenceModel
9
9
  from ..models.abstract import EcucRefType
10
10
 
11
11
  class AbstractEbModelParser(metaclass = ABCMeta):
@@ -33,17 +33,17 @@ class AbstractEbModelParser(metaclass = ABCMeta):
33
33
  return value
34
34
 
35
35
  def _convert_value(self, tag):
36
- if (tag.attrib['type'] == 'INTEGER'):
37
- return int(tag.attrib['value'])
38
- elif (tag.attrib['type'] == "FLOAT"):
39
- return float(tag.attrib['value'])
40
- elif (tag.attrib['type'] == 'BOOLEAN'):
41
- if (tag.attrib['value'] == 'true'):
42
- return True
43
- else:
44
- return False
45
- else:
46
- return tag.attrib['value']
36
+ if 'type' in tag.attrib:
37
+ if (tag.attrib['type'] == 'INTEGER'):
38
+ return int(tag.attrib['value'])
39
+ elif (tag.attrib['type'] == "FLOAT"):
40
+ return float(tag.attrib['value'])
41
+ elif (tag.attrib['type'] == 'BOOLEAN'):
42
+ if (tag.attrib['value'] == 'true'):
43
+ return True
44
+ else:
45
+ return False
46
+ return tag.attrib['value']
47
47
 
48
48
  def read_value(self, parent: ET.Element, name: str) -> str:
49
49
  tag = parent.find(".//d:var[@name='%s']" % name, self.nsmap)
@@ -165,6 +165,9 @@ class AbstractEbModelParser(metaclass = ABCMeta):
165
165
  def parse(self, element: ET.Element, doc: EBModel):
166
166
  pass
167
167
 
168
+ def parse_preference(self, element: ET.Element, doc: PreferenceModel):
169
+ pass
170
+
168
171
  def load_xdm(self, filename: str) -> ET.Element:
169
172
  self.logger.info("Loading <%s>" % filename)
170
173
 
@@ -177,4 +180,8 @@ class AbstractEbModelParser(metaclass = ABCMeta):
177
180
 
178
181
  def parse_xdm(self, filename: str, doc: EBModel):
179
182
  root_tag = self.load_xdm(filename)
180
- self.parse(root_tag, doc)
183
+ self.parse(root_tag, doc)
184
+
185
+ def parse_preference_xdm(self, filename: str, doc: EBModel):
186
+ root_tag = self.load_xdm(filename)
187
+ self.parse_preference(root_tag, doc)
@@ -1,10 +1,9 @@
1
1
  import xml.etree.ElementTree as ET
2
-
3
2
  from ..models.eb_doc import EBModel
4
- from ..models.os_xdm import Os, OsAlarm, OsAlarmActivateTask, OsAlarmCallback, OsAlarmIncrementCounter, OsAlarmSetEvent, OsCounter, OsScheduleTable, OsScheduleTableEventSetting, OsScheduleTableExpiryPoint, OsScheduleTableTaskActivation, OsScheduleTblAdjustableExpPoint, OsTask, OsIsr
3
+ from ..models.os_xdm import Os, OsAlarm, OsAlarmActivateTask, OsAlarmCallback, OsAlarmIncrementCounter, OsAlarmSetEvent, OsCounter, OsScheduleTable, OsScheduleTableEventSetting, OsScheduleTableExpiryPoint, OsScheduleTableTaskActivation, OsScheduleTblAdjustableExpPoint, OsTaskAutostart
4
+ from ..models.os_xdm import OsTask, OsIsr, OsApplication
5
5
  from .eb_parser import AbstractEbModelParser
6
6
 
7
-
8
7
  class OsXdmParser(AbstractEbModelParser):
9
8
  def __init__(self, ) -> None:
10
9
  super().__init__()
@@ -20,6 +19,15 @@ class OsXdmParser(AbstractEbModelParser):
20
19
  self.read_os_alarms(element, os)
21
20
  self.read_os_schedule_tables(element, os)
22
21
  self.read_os_counters(element, os)
22
+ self.read_os_applications(element, os)
23
+
24
+ def read_os_task_autostart(self, element: ET.Element, os_task: OsTask):
25
+ ctr_tag = self.find_ctr_tag(element, "OsTaskAutostart")
26
+ if ctr_tag is not None:
27
+ autostart = OsTaskAutostart(os_task, ctr_tag.attrib["name"])
28
+ for app_mode_ref in self.read_ref_value_list(ctr_tag, "OsTaskAppModeRef"):
29
+ autostart.addOsTaskAppModeRef(app_mode_ref)
30
+ os_task.setOsTaskAutostart(autostart)
23
31
 
24
32
  def read_os_tasks(self, element: ET.Element, os: Os):
25
33
  for ctr_tag in self.find_ctr_tag_list(element, "OsTask"):
@@ -27,11 +35,14 @@ class OsXdmParser(AbstractEbModelParser):
27
35
  os_task.setOsTaskPriority(int(self.read_value(ctr_tag, "OsTaskPriority"))) \
28
36
  .setOsTaskActivation(self.read_value(ctr_tag, "OsTaskActivation")) \
29
37
  .setOsTaskSchedule(self.read_value(ctr_tag, "OsTaskSchedule")) \
38
+ .setOsTaskType(self.read_value(ctr_tag, "OsTaskType")) \
30
39
  .setOsStacksize(int(self.read_optional_value(ctr_tag, "OsStacksize", 0)))
31
40
 
32
41
  for resource_ref in self.read_ref_value_list(ctr_tag, "OsTaskResourceRef"):
33
42
  os_task.addOsTaskResourceRef(resource_ref)
34
43
 
44
+ self.read_os_task_autostart(ctr_tag, os_task)
45
+
35
46
  self.logger.debug("Read OsTask <%s>" % os_task.getName())
36
47
  os.addOsTask(os_task)
37
48
 
@@ -62,7 +73,7 @@ class OsXdmParser(AbstractEbModelParser):
62
73
  .setOsAlarmSetEventTaskRef(self.read_ref_value(element, "OsAlarmSetEventTaskRef"))
63
74
  elif chc == "OsAlarmCallback":
64
75
  os_alarm_action = OsAlarmCallback(os_alarm, "OsAlarmCallback") \
65
- .setOsAlarmCallbackName(self.read_value(os_alarm, "OsAlarmCallbackName"))
76
+ .setOsAlarmCallbackName(self.read_value(element, "OsAlarmCallbackName"))
66
77
  else:
67
78
  raise ValueError("Unsupported OsAlarmAction <%s>" % chc)
68
79
  os_alarm.setOsAlarmAction(os_alarm_action)
@@ -140,3 +151,14 @@ class OsXdmParser(AbstractEbModelParser):
140
151
 
141
152
  self.logger.debug("Read OsCounter <%s>" % counter.getName())
142
153
  os.addOsScheduleTable(counter)
154
+
155
+ def read_os_applications(self, element: ET.Element, os: Os):
156
+ for ctr_tag in self.find_ctr_tag_list(element, "OsApplication"):
157
+ os_app = OsApplication(os, ctr_tag.attrib["name"]) \
158
+ .setOsTrusted(self.read_value(ctr_tag, "OsTrusted"))
159
+
160
+ for ref in self.read_ref_value_list(ctr_tag, "OsAppResourceRef"):
161
+ os_app.addOsAppResourceRef(ref)
162
+
163
+ self.logger.debug("Read OsApplication <%s>" % os_app.getName())
164
+ os.addOsApplication(os_app)
@@ -0,0 +1,25 @@
1
+ import xml.etree.ElementTree as ET
2
+ import logging
3
+ from ..models.eb_doc import PreferenceModel
4
+ from ..models.importer_xdm import SystemDescriptionImporter
5
+ from . import AbstractEbModelParser
6
+
7
+ class PerfXdmParser(AbstractEbModelParser):
8
+ def __init__(self, ) -> None:
9
+ super().__init__()
10
+
11
+ self.logger = logging.getLogger()
12
+
13
+ def parse_input_files(self, element: ET.Element, importer: SystemDescriptionImporter):
14
+ for ctr_tag in self.find_ctr_tag_list(element, "InputFiles"):
15
+ file_name = self.read_value(ctr_tag, "FileName")
16
+ self.logger.debug("Add the file <%s>" % file_name)
17
+ importer.addInputFile(file_name)
18
+
19
+ def parse_preference(self, element: ET.Element, doc: PreferenceModel):
20
+ importer = doc.getSystemDescriptionImporter()
21
+
22
+ for ctr_tag in self.find_ctr_tag_list(element, "SystemDescriptionImporters"):
23
+ self.logger.info("Parse SystemDescriptionImporters: <%s>" % ctr_tag.attrib["name"])
24
+ self.parse_input_files(ctr_tag, importer)
25
+ #importer.addInputFile()
@@ -4,7 +4,6 @@ from ..models.rte_xdm import Rte, RteBswEventToTaskMapping, RteBswModuleInstance
4
4
  from ..models.eb_doc import EBModel
5
5
  from .eb_parser import AbstractEbModelParser
6
6
 
7
-
8
7
  class RteXdmParser(AbstractEbModelParser):
9
8
  def __init__(self, ) -> None:
10
9
  super().__init__()
@@ -1,5 +1,5 @@
1
1
  import pytest
2
- from ...models.eb_doc import EBModel
2
+ from ...models.eb_doc import EBModel, PreferenceModel
3
3
 
4
4
  class TestEBModel:
5
5
 
@@ -28,3 +28,16 @@ class TestEBModel:
28
28
  document = EBModel.getInstance()
29
29
  rte = document.getRte()
30
30
  assert (rte.getFullName() == "/Rte/Rte")
31
+
32
+ class TestPreferenceModel:
33
+
34
+ def test_mode_get_system_description_importer(self):
35
+ document = PreferenceModel.getInstance()
36
+ importer = document.getSystemDescriptionImporter()
37
+ assert (importer.getFullName() == "/ImporterExporterAdditions/SystemDescriptionImporters")
38
+
39
+ importer = document.find("/ImporterExporterAdditions/SystemDescriptionImporters")
40
+ assert (importer.getFullName() == "/ImporterExporterAdditions/SystemDescriptionImporters")
41
+
42
+ importer = document.getSystemDescriptionImporter()
43
+ assert (importer.getFullName() == "/ImporterExporterAdditions/SystemDescriptionImporters")
@@ -0,0 +1 @@
1
+ from .text_writer import TextPreferenceModelWriter
@@ -0,0 +1,28 @@
1
+ import logging
2
+ from typing import List
3
+
4
+ from ..models.eb_doc import SystemDescriptionImporter
5
+
6
+ class TextWriter:
7
+ def __init__(self):
8
+ self.logger = logging.getLogger()
9
+
10
+ def write(self, filename: str, lines: List[str]):
11
+ with open(filename, "w") as f_out:
12
+ for line in lines:
13
+ f_out.write("%s\n" % line)
14
+
15
+ class TextPreferenceModelWriter(TextWriter):
16
+ def __init__(self):
17
+ super().__init__()
18
+
19
+ def writer_import_files(self, filename: str, importer: SystemDescriptionImporter, param = {'base_path': None}):
20
+ self.logger.info("Generate import files list <%s>" % filename)
21
+ lines = []
22
+ for file in sorted(importer.getParsedInputFiles(param['base_path'], param['wildcard'])):
23
+ if file in lines:
24
+ self.logger.warning("file <%s> is duplicated." % file)
25
+ else:
26
+ lines.append(file)
27
+
28
+ self.write(filename, lines)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: py-eb-model
3
- Version: 1.0.1
3
+ Version: 1.0.3
4
4
  Summary: The parser for EB XDM file
5
5
  Home-page: UNKNOWN
6
6
  Author: melodypapa
@@ -76,6 +76,13 @@ rte-xdm-xlsx data/Rte.xdm data/Rte.xlsx
76
76
  rte-xdm-xlsx -r data/Rte.xdm data/Os.xdm data/Runnable.xlsx
77
77
  ```
78
78
 
79
+ ## 3.3. pref-system-importer
80
+
81
+ Read the EB preference XDM and generate the file list into text file.
82
+
83
+ ```bash
84
+ pref-system-importer .prefs/pref_imp_exp_Imp_System.xdm data/output.lst --base-path /c/EB/ACG-8_8_8_WIN32X86/workspace/simple_demo_rte
85
+ ```
79
86
 
80
87
  # 4. Change History
81
88
 
@@ -89,6 +96,15 @@ rte-xdm-xlsx -r data/Rte.xdm data/Os.xdm data/Runnable.xlsx
89
96
  1. Change the attribute to start with lowercase
90
97
  2. *read_ref_value* and *read_optional_ref_value* method returns EcucRefType.
91
98
  3. Read the OsScheduleTable and export to excel
92
- 4. REad the OsCounter and export to excel
99
+ 4. Read the OsCounter and export to excel
100
+
101
+ **Version 1.0.2**
102
+
103
+ 1. Fix the setOsAlarmCallbackName bug
104
+
105
+ **Version 1.0.3**
93
106
 
107
+ 1. Generate the System import file list based on EB preference Xdm.
108
+ 2. Add the support to read OsTaskAutostart element.
109
+ 3. Add the support to read OsTaskType element.
94
110
 
@@ -1,17 +1,20 @@
1
- eb_model/__init__.py,sha256=u3VUin2V_1eExLd9NIpw_LGHIAwaG2vEoyhssZurrvM,69
1
+ eb_model/__init__.py,sha256=oMw5xoAS-lHLxufQSlBIXhGZZMcPmwGFA3PYpTwaQTU,92
2
2
  eb_model/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  eb_model/cli/os_xdm_2_xls_cli.py,sha256=lTIYNVDDMIKu6sosjV8I3pLQxD-I11cKjUDXTyKDrLE,1643
4
+ eb_model/cli/pref_system_importer_cli.py,sha256=Disewp4_4Z1xHb_4HqwRj16XVQmAP21MbeVsSuR0uvk,2518
4
5
  eb_model/cli/rte_xdm_2_xls_cli.py,sha256=83uzE2Vk0h267gWxF9mnWN3Bh69RJpYyKULFXpxTByY,2127
5
- eb_model/models/__init__.py,sha256=_WDgFMwl8w3WnI4ZpjHXMdJVdmqPRpwJ8GLMb4_RGk0,71
6
+ eb_model/models/__init__.py,sha256=7_WxCwRdVavLbPzepHWNar3O-rOxhLwmVYWd2pqm2kI,124
6
7
  eb_model/models/abstract.py,sha256=4jy328yy2sedIHNwfxjzW3CnVsnTCoskatT8JXjv-rE,2402
7
- eb_model/models/eb_doc.py,sha256=wWMHdLYpyvmEVlgNLzFLvC8C_uGnlPP4xnx_DlkslY4,1417
8
- eb_model/models/os_xdm.py,sha256=KouM8Gh4ELl7oQUcgeQ-3Sm1gk4GhTOVZUNt25Rvowo,25163
9
- eb_model/models/rte_xdm.py,sha256=8nYX567TgOH6BzsgaNOd2WTPGCxETTYXO9MQICrfCfQ,19328
10
- eb_model/parser/__init__.py,sha256=5qHXKEfEMcE0WvvinJQu_21bNzWFdXTJxUudy-85DEE,40
11
- eb_model/parser/eb_parser.py,sha256=H5NTDdM0DaGiHsZ6VjaA1pKla5mDePmTDp1jjbeFAbE,7057
8
+ eb_model/models/eb_doc.py,sha256=hPsGdNHlm3vl-ys3B3NGrlJRrWAWPhRvFJrN3fLQTW8,2569
9
+ eb_model/models/importer_xdm.py,sha256=Fnrx-TWKVzJ-kJQr_5DHJhPtEVJ7Ztu5oQZS6_y-UnY,1712
10
+ eb_model/models/os_xdm.py,sha256=HrAhFiPkbkE_YBihG2S5lQTTU9IQla7O15E8guKLDXg,32439
11
+ eb_model/models/rte_xdm.py,sha256=73hBsQ7pUePA9ewFI2d50iImI_FA-jzFQFlnp0K6WTs,19407
12
+ eb_model/parser/__init__.py,sha256=7VOmPr4dng_TrOyDZFu2_s3r0BJZQGiOUxALMY8EnqI,170
13
+ eb_model/parser/eb_parser.py,sha256=XAJZ_agd54C5R4UAAlHfwaVWYFQRSXuTjM_ijcpVU4E,7375
12
14
  eb_model/parser/eb_parser_factory.py,sha256=zqsqq52uImU4-WcS5dvHfhM95hiEPAGRtNzVik8i8wc,971
13
- eb_model/parser/os_xdm_parser.py,sha256=rczz4YjDzCqNhOb4xAlGLfmWhIMBT9fQ6tSDmIk9kRs,8405
14
- eb_model/parser/rte_xdm_parser.py,sha256=VbzrowPLpSww8E-Zl--aKTJ9ltHaZ9-wlVGL1nF79FE,4029
15
+ eb_model/parser/os_xdm_parser.py,sha256=xnA1C91Jpd2MGFvdV4Xu03vZLh6IgsUCarEVRmh8_mQ,9635
16
+ eb_model/parser/pref_xdm_parser.py,sha256=khzgD_igMauH7H3OXdFmFc-HspLq8U51wC6CAs6jJHc,1097
17
+ eb_model/parser/rte_xdm_parser.py,sha256=ywAJiBTgI2WifB-rSdoh6PWvRZ4hSSdy4hmdilSTfU0,4027
15
18
  eb_model/reporter/__init__.py,sha256=H8D_23UwJi1Ph6yjBfZhxWVbu9ci5_O4471gqXGiZCM,36
16
19
  eb_model/reporter/markdown.py,sha256=NhcJOFQ_BVbkgGe66uAT7KUPIchWU4kfVMtMLQtbK-w,1647
17
20
  eb_model/reporter/excel_reporter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -20,8 +23,10 @@ eb_model/reporter/excel_reporter/os_xdm.py,sha256=n1e-tU04s0oh3v31OUKgkIju6BUAtC
20
23
  eb_model/reporter/excel_reporter/rte_xdm.py,sha256=JweusBQJSg1_jaFbQV3sJnVMALMj3VuEkVf15Pw-Ir4,3936
21
24
  eb_model/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
25
  eb_model/tests/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
- eb_model/tests/models/test_eb_model.py,sha256=Xk7RAS4m038IhZ0Y1TQqVoJ-dWgJVIfXVJilWvVzXCw,962
26
+ eb_model/tests/models/test_eb_model.py,sha256=3fpIHhzQlf9KZjm4fZxcSTT4Zio6YhTrcn9UBvlhOfo,1632
24
27
  eb_model/tests/models/test_ecuc_container.py,sha256=lZmtXwPMz9T52WFduTgFy16fO2agjSW-Rl2cVypM86s,722
28
+ eb_model/writer/__init__.py,sha256=SE-Kj41HUkVPor7jpNTL3JVPe_9ycmKFWjTFo2VTkTo,50
29
+ eb_model/writer/text_writer.py,sha256=ZSQ6xi-ke41rrchK1474cRNdHRoyj_gucp3GnvZ-ERU,971
25
30
  py_eb_model/__init__.py,sha256=u3VUin2V_1eExLd9NIpw_LGHIAwaG2vEoyhssZurrvM,69
26
31
  py_eb_model/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
32
  py_eb_model/cli/os_xdm_2_xls_cli.py,sha256=BzeFhyWHbG57qieDNESaXYggszHSy17uwCeXvEfrbCQ,1629
@@ -37,9 +42,9 @@ py_eb_model/reporter/markdown.py,sha256=NhcJOFQ_BVbkgGe66uAT7KUPIchWU4kfVMtMLQtb
37
42
  py_eb_model/reporter/excel_reporter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
43
  py_eb_model/reporter/excel_reporter/abstract.py,sha256=BOuLhWwwTwqBzErtmwPrelB1iByMfZP9haFmg9ayFQw,1488
39
44
  py_eb_model/reporter/excel_reporter/os_xdm.py,sha256=WGMxK0PYxi9J5fUZ-EeiiM8NBpIg2WyxRsrN-gK37YE,1589
40
- py_eb_model-1.0.1.dist-info/LICENSE,sha256=I52rGS7W1IwAmYCUfqTpDaSHoFAdt7grcNiBhk-Z3eI,1088
41
- py_eb_model-1.0.1.dist-info/METADATA,sha256=9Z-Evx5Ti6je_cIEhCiwJeYSux4bHJb1ZW5GdCu9wK0,2400
42
- py_eb_model-1.0.1.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
43
- py_eb_model-1.0.1.dist-info/entry_points.txt,sha256=vC-sGaF_j37QgkuYsJooGZBN1jnHYWQC4jehliu37fY,119
44
- py_eb_model-1.0.1.dist-info/top_level.txt,sha256=DGBNh6YW_x4RF_UoLKW3cKqb2SLnmfuEIZlkTewR66A,9
45
- py_eb_model-1.0.1.dist-info/RECORD,,
45
+ py_eb_model-1.0.3.dist-info/LICENSE,sha256=I52rGS7W1IwAmYCUfqTpDaSHoFAdt7grcNiBhk-Z3eI,1088
46
+ py_eb_model-1.0.3.dist-info/METADATA,sha256=P8PNKJ-FPWiO9QHD-XRWDNyhOmA-DfPO-G5uxkFfPrQ,2908
47
+ py_eb_model-1.0.3.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
48
+ py_eb_model-1.0.3.dist-info/entry_points.txt,sha256=Kyh2T53j1CnqayX2ZZa7---hLeXK7LidefeO1hJ_EXg,185
49
+ py_eb_model-1.0.3.dist-info/top_level.txt,sha256=DGBNh6YW_x4RF_UoLKW3cKqb2SLnmfuEIZlkTewR66A,9
50
+ py_eb_model-1.0.3.dist-info/RECORD,,
@@ -1,4 +1,5 @@
1
1
  [console_scripts]
2
2
  os-xdm-xlsx = eb_model.cli.os_xdm_2_xls_cli:main
3
+ pref-system-importer = eb_model.cli.pref_system_importer_cli:main
3
4
  rte-xdm-xlsx = eb_model.cli.rte_xdm_2_xls_cli:main
4
5