Kea2-python 1.0.5__tar.gz → 1.0.6b0__tar.gz
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.
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/Kea2_python.egg-info/PKG-INFO +1 -1
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/Kea2_python.egg-info/SOURCES.txt +6 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/PKG-INFO +1 -1
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/cli.py +105 -1
- kea2_python-1.0.6b0/kea2/fastbotx/ActivityTimes.py +52 -0
- kea2_python-1.0.6b0/kea2/fastbotx/ReuseEntry.py +74 -0
- kea2_python-1.0.6b0/kea2/fastbotx/ReuseModel.py +63 -0
- kea2_python-1.0.6b0/kea2/fastbotx/__init__.py +7 -0
- kea2_python-1.0.6b0/kea2/fbm_parser.py +871 -0
- kea2_python-1.0.6b0/kea2/fs_lock.py +131 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/keaUtils.py +131 -12
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/kea_launcher.py +21 -1
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/pyproject.toml +1 -1
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/Kea2_python.egg-info/dependency_links.txt +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/Kea2_python.egg-info/entry_points.txt +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/Kea2_python.egg-info/requires.txt +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/Kea2_python.egg-info/top_level.txt +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/LICENSE +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/README.md +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/__init__.py +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/absDriver.py +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/adbUtils.py +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/assets/config_version.json +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/assets/fastbot-thirdpart.jar +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/assets/fastbot_configs/abl.strings +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/assets/fastbot_configs/awl.strings +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/assets/fastbot_configs/max.config +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/assets/fastbot_configs/max.fuzzing.strings +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/assets/fastbot_configs/max.schema.strings +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/assets/fastbot_configs/max.strings +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/assets/fastbot_configs/max.tree.pruning +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/assets/fastbot_configs/teardown.py +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/assets/fastbot_configs/widget.block.py +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/assets/fastbot_libs/arm64-v8a/libfastbot_native.so +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/assets/fastbot_libs/armeabi-v7a/libfastbot_native.so +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/assets/fastbot_libs/x86/libfastbot_native.so +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/assets/fastbot_libs/x86_64/libfastbot_native.so +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/assets/framework.jar +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/assets/kea2-thirdpart.jar +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/assets/monkeyq.jar +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/assets/quicktest.py +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/fastbotManager.py +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/kea2_api.py +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/logWatcher.py +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/mixin.py +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/report/__init__.py +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/report/bug_report_generator.py +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/report/mixin.py +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/report/report_merger.py +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/report/templates/bug_report_template.html +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/report/templates/merged_bug_report_template.html +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/report/utils.py +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/resultSyncer.py +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/u2Driver.py +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/utils.py +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/kea2/version_manager.py +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/setup.cfg +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/tests/test_u2Selector.py +0 -0
- {kea2_python-1.0.5 → kea2_python-1.0.6b0}/tests/test_xpath.py +0 -0
|
@@ -12,6 +12,8 @@ kea2/absDriver.py
|
|
|
12
12
|
kea2/adbUtils.py
|
|
13
13
|
kea2/cli.py
|
|
14
14
|
kea2/fastbotManager.py
|
|
15
|
+
kea2/fbm_parser.py
|
|
16
|
+
kea2/fs_lock.py
|
|
15
17
|
kea2/kea2_api.py
|
|
16
18
|
kea2/keaUtils.py
|
|
17
19
|
kea2/kea_launcher.py
|
|
@@ -40,6 +42,10 @@ kea2/assets/fastbot_libs/arm64-v8a/libfastbot_native.so
|
|
|
40
42
|
kea2/assets/fastbot_libs/armeabi-v7a/libfastbot_native.so
|
|
41
43
|
kea2/assets/fastbot_libs/x86/libfastbot_native.so
|
|
42
44
|
kea2/assets/fastbot_libs/x86_64/libfastbot_native.so
|
|
45
|
+
kea2/fastbotx/ActivityTimes.py
|
|
46
|
+
kea2/fastbotx/ReuseEntry.py
|
|
47
|
+
kea2/fastbotx/ReuseModel.py
|
|
48
|
+
kea2/fastbotx/__init__.py
|
|
43
49
|
kea2/report/__init__.py
|
|
44
50
|
kea2/report/bug_report_generator.py
|
|
45
51
|
kea2/report/mixin.py
|
|
@@ -103,7 +103,90 @@ def cmd_merge(args):
|
|
|
103
103
|
print(f"📈 Merged {merge_summary.get('merged_directories', 0)} directories", flush=True)
|
|
104
104
|
|
|
105
105
|
except Exception as e:
|
|
106
|
-
logger.error(f"Error during merge operation: {e}")
|
|
106
|
+
logger.error(f"Error during merge operation: {e}")
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def cmd_mergefbm(args):
|
|
110
|
+
"""Merge all FBM files in the specified folder and its subfolders using sum mode"""
|
|
111
|
+
from .fbm_parser import FBMMerger
|
|
112
|
+
import glob
|
|
113
|
+
import shutil
|
|
114
|
+
|
|
115
|
+
try:
|
|
116
|
+
# Validate input path
|
|
117
|
+
input_path = Path(args.path).resolve()
|
|
118
|
+
if not input_path.exists():
|
|
119
|
+
logger.error(f"Input directory does not exist: {input_path}")
|
|
120
|
+
return
|
|
121
|
+
if not input_path.is_dir():
|
|
122
|
+
logger.error(f"Input path is not a directory: {input_path}")
|
|
123
|
+
return
|
|
124
|
+
|
|
125
|
+
# Find all FBM files in the directory and its subdirectories
|
|
126
|
+
fbm_files = glob.glob(str(input_path / "**" / "*.fbm"), recursive=True)
|
|
127
|
+
|
|
128
|
+
if not fbm_files:
|
|
129
|
+
logger.error(f"No FBM files found in {input_path} or its subdirectories")
|
|
130
|
+
return
|
|
131
|
+
|
|
132
|
+
logger.debug(f"Found {len(fbm_files)} FBM files to merge:")
|
|
133
|
+
for fbm_file in fbm_files:
|
|
134
|
+
logger.debug(f" - {fbm_file}")
|
|
135
|
+
|
|
136
|
+
# Set default output file if not provided
|
|
137
|
+
if not args.output:
|
|
138
|
+
output_file = input_path / "merged.fbm"
|
|
139
|
+
else:
|
|
140
|
+
output_file = Path(args.output).resolve()
|
|
141
|
+
|
|
142
|
+
# Initialize merger
|
|
143
|
+
merger = FBMMerger()
|
|
144
|
+
|
|
145
|
+
# Handle different cases
|
|
146
|
+
if len(fbm_files) == 1:
|
|
147
|
+
# Only one file, just copy it to output
|
|
148
|
+
shutil.copyfile(fbm_files[0], output_file)
|
|
149
|
+
logger.info(f"Only one FBM file found, copied to {output_file}")
|
|
150
|
+
else:
|
|
151
|
+
# Merge files iteratively: start with the first file and merge with each subsequent file
|
|
152
|
+
# Create a temporary file for the intermediate merged result
|
|
153
|
+
temp_output = input_path / f".tmp_merged.fbm"
|
|
154
|
+
|
|
155
|
+
# Start with the first file as the initial merged result
|
|
156
|
+
shutil.copyfile(fbm_files[0], temp_output)
|
|
157
|
+
|
|
158
|
+
# Iterate through the remaining files and merge them one by one
|
|
159
|
+
for i in range(1, len(fbm_files)):
|
|
160
|
+
current_file = fbm_files[i]
|
|
161
|
+
next_temp = input_path / f".tmp_merged_{i}.fbm"
|
|
162
|
+
|
|
163
|
+
logger.debug(f"Merging {temp_output} and {current_file} into {next_temp}")
|
|
164
|
+
success = merger.merge(str(temp_output), str(current_file), str(next_temp), merge_mode='sum')
|
|
165
|
+
|
|
166
|
+
if not success:
|
|
167
|
+
logger.error(f"Failed to merge {temp_output} and {current_file}")
|
|
168
|
+
# Clean up temporary files
|
|
169
|
+
for f in [temp_output, next_temp]:
|
|
170
|
+
if f.exists() and f.name.startswith(".tmp_"):
|
|
171
|
+
f.unlink()
|
|
172
|
+
return
|
|
173
|
+
|
|
174
|
+
# Remove the previous temporary file and update to the new one
|
|
175
|
+
temp_output.unlink()
|
|
176
|
+
temp_output = next_temp
|
|
177
|
+
|
|
178
|
+
# Move the final merged file to the output location
|
|
179
|
+
if temp_output != output_file:
|
|
180
|
+
temp_output.replace(output_file)
|
|
181
|
+
|
|
182
|
+
print(f"✅ All FBM files merged successfully!", flush=True)
|
|
183
|
+
print(f"📊 Merged FBM file: {output_file}", flush=True)
|
|
184
|
+
print(f"📈 Merged {len(fbm_files)} FBM files", flush=True)
|
|
185
|
+
|
|
186
|
+
except Exception as e:
|
|
187
|
+
logger.error(f"Error during FBM merge operation: {e}")
|
|
188
|
+
import traceback
|
|
189
|
+
logger.debug(traceback.format_exc())
|
|
107
190
|
|
|
108
191
|
|
|
109
192
|
def cmd_run(args):
|
|
@@ -160,6 +243,27 @@ _commands = [
|
|
|
160
243
|
help="Output directory for merged report (optional)"
|
|
161
244
|
)
|
|
162
245
|
]
|
|
246
|
+
),
|
|
247
|
+
dict(
|
|
248
|
+
action=cmd_mergefbm,
|
|
249
|
+
command="mergefbm",
|
|
250
|
+
help="merge all FBM files in the specified folder and its subfolders using sum mode",
|
|
251
|
+
flags=[
|
|
252
|
+
dict(
|
|
253
|
+
name=["path"],
|
|
254
|
+
args=["-p", "--path"],
|
|
255
|
+
type=str,
|
|
256
|
+
required=True,
|
|
257
|
+
help="Path to the folder containing FBM files to merge"
|
|
258
|
+
),
|
|
259
|
+
dict(
|
|
260
|
+
name=["output"],
|
|
261
|
+
args=["-o", "--output"],
|
|
262
|
+
type=str,
|
|
263
|
+
required=False,
|
|
264
|
+
help="Output file path for merged FBM file (optional, default: merged.fbm in the input folder)"
|
|
265
|
+
)
|
|
266
|
+
]
|
|
163
267
|
)
|
|
164
268
|
]
|
|
165
269
|
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import flatbuffers
|
|
2
|
+
from flatbuffers.compat import import_numpy
|
|
3
|
+
np = import_numpy()
|
|
4
|
+
|
|
5
|
+
class ActivityTimes(object):
|
|
6
|
+
__slots__ = ['_tab']
|
|
7
|
+
|
|
8
|
+
@classmethod
|
|
9
|
+
def GetRootAs(cls, buf, offset=0):
|
|
10
|
+
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
|
|
11
|
+
x = ActivityTimes()
|
|
12
|
+
x.Init(buf, n + offset)
|
|
13
|
+
return x
|
|
14
|
+
|
|
15
|
+
@classmethod
|
|
16
|
+
def GetRootAsActivityTimes(cls, buf, offset=0):
|
|
17
|
+
"""This method is deprecated. Please switch to GetRootAs."""
|
|
18
|
+
return cls.GetRootAs(buf, offset)
|
|
19
|
+
# ActivityTimes
|
|
20
|
+
def Init(self, buf, pos):
|
|
21
|
+
self._tab = flatbuffers.table.Table(buf, pos)
|
|
22
|
+
|
|
23
|
+
# ActivityTimes
|
|
24
|
+
def Activity(self):
|
|
25
|
+
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
|
|
26
|
+
if o != 0:
|
|
27
|
+
return self._tab.String(o + self._tab.Pos)
|
|
28
|
+
return None
|
|
29
|
+
|
|
30
|
+
# ActivityTimes
|
|
31
|
+
def Times(self):
|
|
32
|
+
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
|
|
33
|
+
if o != 0:
|
|
34
|
+
return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos)
|
|
35
|
+
return 0
|
|
36
|
+
|
|
37
|
+
def Start(builder): builder.StartObject(2)
|
|
38
|
+
def ActivityTimesStart(builder):
|
|
39
|
+
"""This method is deprecated. Please switch to Start."""
|
|
40
|
+
return Start(builder)
|
|
41
|
+
def AddActivity(builder, activity): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(activity), 0)
|
|
42
|
+
def ActivityTimesAddActivity(builder, activity):
|
|
43
|
+
"""This method is deprecated. Please switch to AddActivity."""
|
|
44
|
+
return AddActivity(builder, activity)
|
|
45
|
+
def AddTimes(builder, times): builder.PrependInt32Slot(1, times, 0)
|
|
46
|
+
def ActivityTimesAddTimes(builder, times):
|
|
47
|
+
"""This method is deprecated. Please switch to AddTimes."""
|
|
48
|
+
return AddTimes(builder, times)
|
|
49
|
+
def End(builder): return builder.EndObject()
|
|
50
|
+
def ActivityTimesEnd(builder):
|
|
51
|
+
"""This method is deprecated. Please switch to End."""
|
|
52
|
+
return End(builder)
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import flatbuffers
|
|
2
|
+
from flatbuffers.compat import import_numpy
|
|
3
|
+
np = import_numpy()
|
|
4
|
+
|
|
5
|
+
class ReuseEntry(object):
|
|
6
|
+
__slots__ = ['_tab']
|
|
7
|
+
|
|
8
|
+
@classmethod
|
|
9
|
+
def GetRootAs(cls, buf, offset=0):
|
|
10
|
+
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
|
|
11
|
+
x = ReuseEntry()
|
|
12
|
+
x.Init(buf, n + offset)
|
|
13
|
+
return x
|
|
14
|
+
|
|
15
|
+
@classmethod
|
|
16
|
+
def GetRootAsReuseEntry(cls, buf, offset=0):
|
|
17
|
+
"""This method is deprecated. Please switch to GetRootAs."""
|
|
18
|
+
return cls.GetRootAs(buf, offset)
|
|
19
|
+
# ReuseEntry
|
|
20
|
+
def Init(self, buf, pos):
|
|
21
|
+
self._tab = flatbuffers.table.Table(buf, pos)
|
|
22
|
+
|
|
23
|
+
# ReuseEntry
|
|
24
|
+
def Action(self):
|
|
25
|
+
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
|
|
26
|
+
if o != 0:
|
|
27
|
+
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
|
|
28
|
+
return 0
|
|
29
|
+
|
|
30
|
+
# ReuseEntry
|
|
31
|
+
def Targets(self, j):
|
|
32
|
+
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
|
|
33
|
+
if o != 0:
|
|
34
|
+
x = self._tab.Vector(o)
|
|
35
|
+
x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4
|
|
36
|
+
x = self._tab.Indirect(x)
|
|
37
|
+
from .ActivityTimes import ActivityTimes
|
|
38
|
+
obj = ActivityTimes()
|
|
39
|
+
obj.Init(self._tab.Bytes, x)
|
|
40
|
+
return obj
|
|
41
|
+
return None
|
|
42
|
+
|
|
43
|
+
# ReuseEntry
|
|
44
|
+
def TargetsLength(self):
|
|
45
|
+
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
|
|
46
|
+
if o != 0:
|
|
47
|
+
return self._tab.VectorLen(o)
|
|
48
|
+
return 0
|
|
49
|
+
|
|
50
|
+
# ReuseEntry
|
|
51
|
+
def TargetsIsNone(self):
|
|
52
|
+
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
|
|
53
|
+
return o == 0
|
|
54
|
+
|
|
55
|
+
def Start(builder): builder.StartObject(2)
|
|
56
|
+
def ReuseEntryStart(builder):
|
|
57
|
+
"""This method is deprecated. Please switch to Start."""
|
|
58
|
+
return Start(builder)
|
|
59
|
+
def AddAction(builder, action): builder.PrependUint64Slot(0, action, 0)
|
|
60
|
+
def ReuseEntryAddAction(builder, action):
|
|
61
|
+
"""This method is deprecated. Please switch to AddAction."""
|
|
62
|
+
return AddAction(builder, action)
|
|
63
|
+
def AddTargets(builder, targets): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(targets), 0)
|
|
64
|
+
def ReuseEntryAddTargets(builder, targets):
|
|
65
|
+
"""This method is deprecated. Please switch to AddTargets."""
|
|
66
|
+
return AddTargets(builder, targets)
|
|
67
|
+
def StartTargetsVector(builder, numElems): return builder.StartVector(4, numElems, 4)
|
|
68
|
+
def ReuseEntryStartTargetsVector(builder, numElems):
|
|
69
|
+
"""This method is deprecated. Please switch to Start."""
|
|
70
|
+
return StartTargetsVector(builder, numElems)
|
|
71
|
+
def End(builder): return builder.EndObject()
|
|
72
|
+
def ReuseEntryEnd(builder):
|
|
73
|
+
"""This method is deprecated. Please switch to End."""
|
|
74
|
+
return End(builder)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import flatbuffers
|
|
2
|
+
from flatbuffers.compat import import_numpy
|
|
3
|
+
np = import_numpy()
|
|
4
|
+
|
|
5
|
+
class ReuseModel(object):
|
|
6
|
+
__slots__ = ['_tab']
|
|
7
|
+
|
|
8
|
+
@classmethod
|
|
9
|
+
def GetRootAs(cls, buf, offset=0):
|
|
10
|
+
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
|
|
11
|
+
x = ReuseModel()
|
|
12
|
+
x.Init(buf, n + offset)
|
|
13
|
+
return x
|
|
14
|
+
|
|
15
|
+
@classmethod
|
|
16
|
+
def GetRootAsReuseModel(cls, buf, offset=0):
|
|
17
|
+
"""This method is deprecated. Please switch to GetRootAs."""
|
|
18
|
+
return cls.GetRootAs(buf, offset)
|
|
19
|
+
# ReuseModel
|
|
20
|
+
def Init(self, buf, pos):
|
|
21
|
+
self._tab = flatbuffers.table.Table(buf, pos)
|
|
22
|
+
|
|
23
|
+
# ReuseModel
|
|
24
|
+
def Model(self, j):
|
|
25
|
+
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
|
|
26
|
+
if o != 0:
|
|
27
|
+
x = self._tab.Vector(o)
|
|
28
|
+
x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 4
|
|
29
|
+
x = self._tab.Indirect(x)
|
|
30
|
+
from .ReuseEntry import ReuseEntry
|
|
31
|
+
obj = ReuseEntry()
|
|
32
|
+
obj.Init(self._tab.Bytes, x)
|
|
33
|
+
return obj
|
|
34
|
+
return None
|
|
35
|
+
|
|
36
|
+
# ReuseModel
|
|
37
|
+
def ModelLength(self):
|
|
38
|
+
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
|
|
39
|
+
if o != 0:
|
|
40
|
+
return self._tab.VectorLen(o)
|
|
41
|
+
return 0
|
|
42
|
+
|
|
43
|
+
# ReuseModel
|
|
44
|
+
def ModelIsNone(self):
|
|
45
|
+
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
|
|
46
|
+
return o == 0
|
|
47
|
+
|
|
48
|
+
def Start(builder): builder.StartObject(1)
|
|
49
|
+
def ReuseModelStart(builder):
|
|
50
|
+
"""This method is deprecated. Please switch to Start."""
|
|
51
|
+
return Start(builder)
|
|
52
|
+
def AddModel(builder, model): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(model), 0)
|
|
53
|
+
def ReuseModelAddModel(builder, model):
|
|
54
|
+
"""This method is deprecated. Please switch to AddModel."""
|
|
55
|
+
return AddModel(builder, model)
|
|
56
|
+
def StartModelVector(builder, numElems): return builder.StartVector(4, numElems, 4)
|
|
57
|
+
def ReuseModelStartModelVector(builder, numElems):
|
|
58
|
+
"""This method is deprecated. Please switch to Start."""
|
|
59
|
+
return StartModelVector(builder, numElems)
|
|
60
|
+
def End(builder): return builder.EndObject()
|
|
61
|
+
def ReuseModelEnd(builder):
|
|
62
|
+
"""This method is deprecated. Please switch to End."""
|
|
63
|
+
return End(builder)
|