armodel 1.7.5__py3-none-any.whl → 1.7.7__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.
Files changed (48) hide show
  1. armodel/models/M2/AUTOSARTemplates/AutosarTopLevelStructure.py +41 -2
  2. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +47 -6
  3. armodel/models/M2/AUTOSARTemplates/CommonStructure/Filter.py +17 -7
  4. armodel/models/M2/AUTOSARTemplates/CommonStructure/ImplementationDataTypes.py +2 -2
  5. armodel/models/M2/AUTOSARTemplates/CommonStructure/ResourceConsumption/MemorySectionUsage.py +4 -0
  6. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +8 -2
  7. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +9 -3
  8. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +30 -1
  9. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Communication.py +19 -5
  10. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Components/__init__.py +53 -0
  11. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Composition/__init__.py +2 -2
  12. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Datatype/DataPrototypes.py +41 -16
  13. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Datatype/Datatypes.py +10 -3
  14. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/RTEEvents.py +26 -8
  15. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +19 -5
  16. armodel/models/M2/AUTOSARTemplates/SystemTemplate/DoIp.py +29 -0
  17. armodel/models/M2/AUTOSARTemplates/SystemTemplate/ECUResourceMapping.py +44 -0
  18. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Can/CanTopology.py +165 -4
  19. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetTopology.py +409 -17
  20. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/ServiceInstances.py +356 -8
  21. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Lin/LinTopology.py +2 -4
  22. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Multiplatform.py +76 -10
  23. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreCommunication.py +483 -54
  24. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreTopology.py +45 -23
  25. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +10 -0
  26. armodel/models/M2/AUTOSARTemplates/SystemTemplate/NetworkManagement.py +245 -130
  27. armodel/models/M2/AUTOSARTemplates/SystemTemplate/SWmapping.py +27 -0
  28. armodel/models/M2/AUTOSARTemplates/SystemTemplate/TransportProtocols.py +633 -5
  29. armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +22 -11
  30. armodel/models/M2/MSR/AsamHdo/AdminData.py +1 -2
  31. armodel/models/M2/MSR/AsamHdo/ComputationMethod.py +3 -1
  32. armodel/models/M2/MSR/AsamHdo/SpecialData.py +35 -8
  33. armodel/models/M2/MSR/DataDictionary/RecordLayout.py +0 -3
  34. armodel/models/__init__.py +4 -0
  35. armodel/parser/abstract_arxml_parser.py +8 -5
  36. armodel/parser/arxml_parser.py +1229 -572
  37. armodel/tests/test_armodel/models/test_bsw_module_template.py +5 -3
  38. armodel/tests/test_armodel/models/test_datatype.py +1 -1
  39. armodel/tests/test_armodel/parser/test_bsw_module_descriiption.py +218 -0
  40. armodel/tests/test_armodel/parser/test_sw_components.py +22 -1
  41. armodel/writer/abstract_arxml_writer.py +7 -6
  42. armodel/writer/arxml_writer.py +1037 -187
  43. {armodel-1.7.5.dist-info → armodel-1.7.7.dist-info}/METADATA +62 -3
  44. {armodel-1.7.5.dist-info → armodel-1.7.7.dist-info}/RECORD +48 -44
  45. {armodel-1.7.5.dist-info → armodel-1.7.7.dist-info}/LICENSE +0 -0
  46. {armodel-1.7.5.dist-info → armodel-1.7.7.dist-info}/WHEEL +0 -0
  47. {armodel-1.7.5.dist-info → armodel-1.7.7.dist-info}/entry_points.txt +0 -0
  48. {armodel-1.7.5.dist-info → armodel-1.7.7.dist-info}/top_level.txt +0 -0
@@ -1,52 +1,431 @@
1
+ from abc import ABCMeta
1
2
  from typing import List
2
3
 
3
- from ......M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable
4
- from ......M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import Boolean, Integer, PositiveInteger, PositiveUnlimitedInteger, RefType, TimeValue
4
+ from ......M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable, Referrable
5
+ from ......M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import Boolean, Integer, MacAddressString, PositiveInteger, RefType, TimeValue
5
6
  from ......M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
6
- from ......M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import CommunicationCluster, CommunicationConnector, CommunicationController, PhysicalChannel
7
+ from ......M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import CommunicationCluster, CommunicationConnector, CommunicationController
7
8
 
9
+ class MacMulticastGroup(Identifiable):
10
+ def __init__(self, parent, short_name):
11
+ super().__init__(parent, short_name)
12
+
13
+ self.macMulticastAddress = None # type: MacAddressString
14
+
15
+ def getMacMulticastAddress(self):
16
+ return self.macMulticastAddress
17
+
18
+ def setMacMulticastAddress(self, value):
19
+ if value is not None:
20
+ self.macMulticastAddress = value
21
+ return self
8
22
  class EthernetCluster(CommunicationCluster):
9
23
  def __init__(self, parent: ARObject, short_name: str):
10
24
  super().__init__(parent, short_name)
11
25
 
12
- self.couplingPorts = [] # type: List[CouplingPortConnection]
13
- self.couplingPortStartupActiveTime = None # type: TimeValue
14
- self.couplingPortSwitchoffDelay = None # type: TimeValue
15
- self.macMulticastGroups = [] # type: MacMulticastGroup
26
+ self.couplingPorts = [] # type: List[CouplingPortConnection]
27
+ self.couplingPortStartupActiveTime = None # type: TimeValue
28
+ self.couplingPortSwitchoffDelay = None # type: TimeValue
29
+ self.macMulticastGroups = [] # type: List[MacMulticastGroup]
16
30
 
17
31
  def getCouplingPorts(self):
18
32
  return self.couplingPorts
19
33
 
20
- def setCouplingPorts(self, value):
21
- self.couplingPorts = value
34
+ def addCouplingPort(self, value):
35
+ if value is not None:
36
+ self.couplingPorts.append(value)
22
37
  return self
23
38
 
24
39
  def getCouplingPortStartupActiveTime(self):
25
40
  return self.couplingPortStartupActiveTime
26
41
 
27
42
  def setCouplingPortStartupActiveTime(self, value):
28
- self.couplingPortStartupActiveTime = value
43
+ if value is not None:
44
+ self.couplingPortStartupActiveTime = value
29
45
  return self
30
46
 
31
47
  def getCouplingPortSwitchoffDelay(self):
32
48
  return self.couplingPortSwitchoffDelay
33
49
 
34
50
  def setCouplingPortSwitchoffDelay(self, value):
35
- self.couplingPortSwitchoffDelay = value
51
+ if value is not None:
52
+ self.couplingPortSwitchoffDelay = value
36
53
  return self
37
54
 
38
55
  def getMacMulticastGroups(self):
39
56
  return self.macMulticastGroups
40
57
 
41
- def setMacMulticastGroups(self, value):
42
- self.macMulticastGroups = value
58
+ def createMacMulticastGroup(self, short_name: str) -> MacMulticastGroup:
59
+ if (short_name not in self.elements):
60
+ group = MacMulticastGroup(self, short_name)
61
+ self.addElement(group)
62
+ self.macMulticastGroups.append(group)
63
+ return self.getElement(short_name)
64
+
65
+ class CouplingPortStructuralElement(Identifiable, metaclass = ABCMeta):
66
+ def __init__(self, parent: ARObject, short_name: str):
67
+ if type(self) == CouplingPortStructuralElement:
68
+ raise NotImplementedError("CouplingPortStructuralElement is an abstract class.")
69
+
70
+ super().__init__(parent, short_name)
71
+
72
+ class CouplingPortFifo(CouplingPortStructuralElement):
73
+ def __init__(self, parent: ARObject, short_name: str):
74
+ super().__init__(parent, short_name)
75
+
76
+ self.assignedTrafficClasses = [] # type: List[PositiveInteger]
77
+ self.minimumFifoLength = None # type: PositiveInteger
78
+ self.shaper = None # type: CouplingPortAbstractShaper
79
+ self.trafficClassPreemptionSupport = None # type: EthernetCouplingPortPreemptionEnum
80
+
81
+ def getAssignedTrafficClasses(self):
82
+ return self.assignedTrafficClasses
83
+
84
+ def addAssignedTrafficClass(self, value):
85
+ if value is not None:
86
+ self.assignedTrafficClasses.append(value)
87
+ return self
88
+
89
+ def getMinimumFifoLength(self):
90
+ return self.minimumFifoLength
91
+
92
+ def setMinimumFifoLength(self, value):
93
+ if value is not None:
94
+ self.minimumFifoLength = value
95
+ return self
96
+
97
+ def getShaper(self):
98
+ return self.shaper
99
+
100
+ def setShaper(self, value):
101
+ if value is not None:
102
+ self.shaper = value
103
+ return self
104
+
105
+ def getTrafficClassPreemptionSupport(self):
106
+ return self.trafficClassPreemptionSupport
107
+
108
+ def setTrafficClassPreemptionSupport(self, value):
109
+ if value is not None:
110
+ self.trafficClassPreemptionSupport = value
111
+ return self
112
+
113
+ class CouplingPortScheduler(CouplingPortStructuralElement):
114
+ def __init__(self, parent, short_name):
115
+ super().__init__(parent, short_name)
116
+
117
+ self.portScheduler = None # type: EthernetCouplingPortSchedulerEnum
118
+ self.predecessorRefs = [] # type: List[RefType]
119
+
120
+ def getPortScheduler(self):
121
+ return self.portScheduler
122
+
123
+ def setPortScheduler(self, value):
124
+ if value is not None:
125
+ self.portScheduler = value
126
+ return self
127
+
128
+ def getPredecessorRefs(self):
129
+ return self.predecessorRefs
130
+
131
+ def addPredecessorRef(self, value):
132
+ if value is not None:
133
+ self.predecessorRefs.append(value)
134
+ return self
135
+
136
+ class EthernetPriorityRegeneration(Referrable):
137
+ def __init__(self, parent, short_name):
138
+ super().__init__(parent, short_name)
139
+
140
+ self.ingressPriority = None # type: PositiveInteger
141
+ self.regeneratedPriority = None # type: PositiveInteger
142
+
143
+ def getIngressPriority(self):
144
+ return self.ingressPriority
145
+
146
+ def setIngressPriority(self, value):
147
+ if value is not None:
148
+ self.ingressPriority = value
149
+ return self
150
+
151
+ def getRegeneratedPriority(self):
152
+ return self.regeneratedPriority
153
+
154
+ def setRegeneratedPriority(self, value):
155
+ if value is not None:
156
+ self.regeneratedPriority = value
43
157
  return self
158
+
159
+
160
+ class CouplingPortDetails(ARObject):
161
+ def __init__(self):
162
+ super().__init__()
163
+
164
+ self.couplingPortStructuralElements = [] # type: List[CouplingPortStructuralElement]
165
+ self.defaultTrafficClass = None # type: PositiveInteger
166
+ self.ethernetPriorityRegenerations = [] # type: List[EthernetPriorityRegeneration]
167
+ self.ethernetTrafficClassAssignments = [] # type: List[CouplingPortTrafficClassAssignment]
168
+ self.framePreemptionSupport = None # type: Boolean
169
+ self.globalTimeProps = None # type: GlobalTimeCouplingPortProps
170
+ self.lastEgressSchedulerRef = None # type: RefType
171
+ self.ratePolicies = [] # type: List[CouplingPortRatePolicy]
172
+ self.vlanTranslationTables = [] # type: List[EthernetVlanTranslationTable]
173
+
174
+ def getCouplingPortStructuralElements(self):
175
+ return self.couplingPortStructuralElements
176
+
177
+ def createCouplingPortFifo(self, short_name: str) -> CouplingPortFifo:
178
+ fifo = CouplingPortFifo(self, short_name)
179
+ self.couplingPortStructuralElements.append(fifo)
180
+ return fifo
181
+
182
+ def createCouplingPortScheduler(self, short_name: str) -> CouplingPortScheduler:
183
+ scheduler = CouplingPortScheduler(self, short_name)
184
+ self.couplingPortStructuralElements.append(scheduler)
185
+ return scheduler
44
186
 
187
+ def createEthernetPriorityRegeneration(self, short_name: str) -> EthernetPriorityRegeneration:
188
+ regeneration = EthernetPriorityRegeneration(self, short_name)
189
+ self.ethernetPriorityRegenerations.append(regeneration)
190
+ return regeneration
191
+
192
+ def getDefaultTrafficClass(self):
193
+ return self.defaultTrafficClass
194
+
195
+ def setDefaultTrafficClass(self, value):
196
+ if value is not None:
197
+ self.defaultTrafficClass = value
198
+ return self
199
+
200
+ def getEthernetPriorityRegenerations(self):
201
+ return self.ethernetPriorityRegenerations
202
+
203
+ def setEthernetPriorityRegenerations(self, value):
204
+ if value is not None:
205
+ self.ethernetPriorityRegenerations = value
206
+ return self
207
+
208
+ def getEthernetTrafficClassAssignments(self):
209
+ return self.ethernetTrafficClassAssignments
210
+
211
+ def setEthernetTrafficClassAssignments(self, value):
212
+ if value is not None:
213
+ self.ethernetTrafficClassAssignments = value
214
+ return self
215
+
216
+ def getFramePreemptionSupport(self):
217
+ return self.framePreemptionSupport
218
+
219
+ def setFramePreemptionSupport(self, value):
220
+ if value is not None:
221
+ self.framePreemptionSupport = value
222
+ return self
223
+
224
+ def getGlobalTimeProps(self):
225
+ return self.globalTimeProps
226
+
227
+ def setGlobalTimeProps(self, value):
228
+ if value is not None:
229
+ self.globalTimeProps = value
230
+ return self
231
+
232
+ def getLastEgressSchedulerRef(self):
233
+ return self.lastEgressSchedulerRef
234
+
235
+ def setLastEgressSchedulerRef(self, value):
236
+ if value is not None:
237
+ self.lastEgressSchedulerRef = value
238
+ return self
239
+
240
+ def getRatePolicies(self):
241
+ return self.ratePolicies
242
+
243
+ def setRatePolicies(self, value):
244
+ if value is not None:
245
+ self.ratePolicies = value
246
+ return self
247
+
248
+ def getVlanTranslationTables(self):
249
+ return self.vlanTranslationTables
250
+
251
+ def setVlanTranslationTables(self, value):
252
+ if value is not None:
253
+ self.vlanTranslationTables = value
254
+ return self
255
+
256
+ class VlanMembership(ARObject):
257
+ def __init__(self):
258
+ super().__init__()
259
+
260
+ self.defaultPriority = None # type: PositiveInteger
261
+ self.dhcpAddressAssignment = None # type: DhcpServerConfiguration
262
+ self.sendActivity = None # type: EthernetSwitchVlanEgressTaggingEnum
263
+ self.vlanRef = None # type: RefType
264
+
265
+ def getDefaultPriority(self):
266
+ return self.defaultPriority
267
+
268
+ def setDefaultPriority(self, value):
269
+ if value is not None:
270
+ self.defaultPriority = value
271
+ return self
272
+
273
+ def getDhcpAddressAssignment(self):
274
+ return self.dhcpAddressAssignment
275
+
276
+ def setDhcpAddressAssignment(self, value):
277
+ if value is not None:
278
+ self.dhcpAddressAssignment = value
279
+ return self
280
+
281
+ def getSendActivity(self):
282
+ return self.sendActivity
283
+
284
+ def setSendActivity(self, value):
285
+ if value is not None:
286
+ self.sendActivity = value
287
+ return self
288
+
289
+ def getVlanRef(self):
290
+ return self.vlanRef
291
+
292
+ def setVlanRef(self, value):
293
+ if value is not None:
294
+ self.vlanRef = value
295
+ return self
296
+
297
+
45
298
  class CouplingPort(Identifiable):
46
299
  def __init__(self, parent, short_name):
47
300
  super().__init__(parent, short_name)
48
301
 
49
- self.connectionNegotiationBehavior = None # type: EthernetConnectionNegotiationEnum
302
+ self.connectionNegotiationBehavior = None # type: EthernetConnectionNegotiationEnum
303
+ self.couplingPortDetails = None # type: CouplingPortDetails
304
+ self.couplingPortRole = None # type: CouplingPortRoleEnum
305
+ self.defaultVlanRef = None # type: RefType
306
+ self.macAddressVlanAssignments = [] # type: List[MacAddressVlanMembership]
307
+ self.macLayerType = None # type: EthernetMacLayerTypeEnum
308
+ self.macMulticastAddressRefs = [] # type: List[RefType]
309
+ self.macSecProps = [] # type: List[MacSecProps]
310
+ self.physicalLayerType = None # type: EthernetPhysicalLayerTypeEnum
311
+ self.plcaProps = None # type: PlcaProps
312
+ self.pncMappingRefs = [] # type: List[RefType]
313
+ self.receiveActivity = None # type: EthernetSwitchVlanIngressTagEnum
314
+ self.vlanMemberships = [] # type: List[VlanMembership]
315
+ self.wakeupSleepOnDatalineConfigRef = None # type: RefType
316
+
317
+ def getConnectionNegotiationBehavior(self):
318
+ return self.connectionNegotiationBehavior
319
+
320
+ def setConnectionNegotiationBehavior(self, value):
321
+ if value is not None:
322
+ self.connectionNegotiationBehavior = value
323
+ return self
324
+
325
+ def getCouplingPortDetails(self):
326
+ return self.couplingPortDetails
327
+
328
+ def setCouplingPortDetails(self, value):
329
+ if value is not None:
330
+ self.couplingPortDetails = value
331
+ return self
332
+
333
+ def getCouplingPortRole(self):
334
+ return self.couplingPortRole
335
+
336
+ def setCouplingPortRole(self, value):
337
+ if value is not None:
338
+ self.couplingPortRole = value
339
+ return self
340
+
341
+ def getDefaultVlanRef(self):
342
+ return self.defaultVlanRef
343
+
344
+ def setDefaultVlanRef(self, value):
345
+ if value is not None:
346
+ self.defaultVlanRef = value
347
+ return self
348
+
349
+ def getMacAddressVlanAssignments(self):
350
+ return self.macAddressVlanAssignments
351
+
352
+ def setMacAddressVlanAssignments(self, value):
353
+ if value is not None:
354
+ self.macAddressVlanAssignments = value
355
+ return self
356
+
357
+ def getMacLayerType(self):
358
+ return self.macLayerType
359
+
360
+ def setMacLayerType(self, value):
361
+ if value is not None:
362
+ self.macLayerType = value
363
+ return self
364
+
365
+ def getMacMulticastAddressRefs(self):
366
+ return self.macMulticastAddressRefs
367
+
368
+ def setMacMulticastAddressRefs(self, value):
369
+ if value is not None:
370
+ self.macMulticastAddressRefs = value
371
+ return self
372
+
373
+ def getMacSecProps(self):
374
+ return self.macSecProps
375
+
376
+ def setMacSecProps(self, value):
377
+ if value is not None:
378
+ self.macSecProps = value
379
+ return self
380
+
381
+ def getPhysicalLayerType(self):
382
+ return self.physicalLayerType
383
+
384
+ def setPhysicalLayerType(self, value):
385
+ if value is not None:
386
+ self.physicalLayerType = value
387
+ return self
388
+
389
+ def getPlcaProps(self):
390
+ return self.plcaProps
391
+
392
+ def setPlcaProps(self, value):
393
+ if value is not None:
394
+ self.plcaProps = value
395
+ return self
396
+
397
+ def getPncMappingRefs(self):
398
+ return self.pncMappingRefs
399
+
400
+ def setPncMappingRefs(self, value):
401
+ if value is not None:
402
+ self.pncMappingRefs = value
403
+ return self
404
+
405
+ def getReceiveActivity(self):
406
+ return self.receiveActivity
407
+
408
+ def setReceiveActivity(self, value):
409
+ if value is not None:
410
+ self.receiveActivity = value
411
+ return self
412
+
413
+ def getVlanMemberships(self):
414
+ return self.vlanMemberships
415
+
416
+ def addVlanMembership(self, value):
417
+ if value is not None:
418
+ self.vlanMemberships.append(value)
419
+ return self
420
+
421
+ def getWakeupSleepOnDatalineConfigRef(self):
422
+ return self.wakeupSleepOnDatalineConfigRef
423
+
424
+ def setWakeupSleepOnDatalineConfigRef(self, value):
425
+ if value is not None:
426
+ self.wakeupSleepOnDatalineConfigRef = value
427
+ return self
428
+
50
429
 
51
430
 
52
431
  class EthernetCommunicationController(CommunicationController):
@@ -72,9 +451,12 @@ class EthernetCommunicationController(CommunicationController):
72
451
  def getCouplingPorts(self):
73
452
  return self.couplingPorts
74
453
 
75
- def addCouplingPort(self, value):
76
- self.couplingPorts.append(value)
77
- return self
454
+ def createCouplingPort(self, short_name: str) -> CouplingPort:
455
+ if (short_name not in self.elements):
456
+ group = CouplingPort(self, short_name)
457
+ self.addElement(group)
458
+ self.couplingPorts.append(group)
459
+ return self.getElement(short_name)
78
460
 
79
461
  def getMacLayerType(self):
80
462
  return self.macLayerType
@@ -125,6 +507,7 @@ class EthernetCommunicationConnector(CommunicationConnector):
125
507
  self.ethIpPropsRef = None # type: RefType
126
508
  self.maximumTransmissionUnit = None # type: PositiveInteger
127
509
  self.neighborCacheSize = None # type: PositiveInteger
510
+ self.networkEndpointRefs = [] # type: List[RefType] ## 4.3.1 Version
128
511
  self.pathMtuEnabled = None # type: Boolean
129
512
  self.pathMtuTimeout = None # type: TimeValue
130
513
 
@@ -148,6 +531,14 @@ class EthernetCommunicationConnector(CommunicationConnector):
148
531
  def setNeighborCacheSize(self, value):
149
532
  self.neighborCacheSize = value
150
533
  return self
534
+
535
+ def getNetworkEndpointRefs(self):
536
+ return self.networkEndpointRefs
537
+
538
+ def addNetworkEndpointRef(self, value):
539
+ if value is not None:
540
+ self.networkEndpointRefs.append(value)
541
+ return self
151
542
 
152
543
  def getPathMtuEnabled(self):
153
544
  return self.pathMtuEnabled
@@ -279,3 +670,4 @@ class SdClientConfig(ARObject):
279
670
  self.ttl = value
280
671
  return self
281
672
 
673
+