openubmc-bingo 0.5.269__py3-none-any.whl → 0.5.272__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.

Potentially problematic release.


This version of openubmc-bingo might be problematic. Click here for more details.

bmcgo/__init__.py CHANGED
@@ -9,4 +9,4 @@
9
9
  # MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
10
10
  # See the Mulan PSL v2 for more details.
11
11
 
12
- __version__ = '0.5.269'
12
+ __version__ = '0.5.272'
@@ -46,7 +46,7 @@ ${ClassName}.${ipmi['name']} = {
46
46
  encode = ${utils_py.format_value(render_utils.get_option(ipmi, 'encode'), '')},
47
47
  req = msg.${ipmi['name']}Req,
48
48
  rsp = msg.${ipmi['name']}Rsp,
49
- % if version >= 6:
49
+ % if version >= 3:
50
50
  manufacturer = ${utils_py.format_value(render_utils.get_manufacturer(ipmi), '')},
51
51
  % endif
52
52
  sysLockedPolicy = '${render_utils.get_sys_locked_policy(ipmi)}'
@@ -1,11 +1,12 @@
1
1
  [
2
2
  {
3
- "UID": "00000001020302031825",
4
- "Scanners": [
5
- {
6
- "SmcAddress": 96,
7
- "ScannerOffset": 1006636292
8
- }
9
- ]
3
+ "ChipType": "Smc",
4
+ "ChipAddress": 96,
5
+ "ScannerOffset": 1006636292
6
+ },
7
+ {
8
+ "ChipType": "Chip",
9
+ "ChipAddress": 212,
10
+ "ScannerOffset": 39
10
11
  }
11
12
  ]
@@ -16,7 +16,7 @@ import stat
16
16
  import re
17
17
  from collections import defaultdict
18
18
  from pathlib import Path
19
- from typing import Dict, List
19
+ from typing import Dict, List, Set, Tuple
20
20
  from colorama import Fore, Style
21
21
  from bmcgo.logger import Logger
22
22
 
@@ -193,7 +193,7 @@ class SrValidate(SrParser):
193
193
  self.is_sr_repo = False
194
194
  self.is_product_sr_repo = False
195
195
  self.check_repo_type()
196
- self.smc_dfx_whitelist: Dict[str, List[Dict[str, int]]] = defaultdict(list)
196
+ self.smc_dfx_whitelist: Dict[str, Set[Tuple[int, int]]] = defaultdict(set)
197
197
  self.load_smc_dfx_whitelist()
198
198
 
199
199
  @staticmethod
@@ -207,25 +207,6 @@ class SrValidate(SrParser):
207
207
  continue
208
208
  hardware_sr_objects[obj_name][prop_name] = prop_data
209
209
 
210
- @staticmethod
211
- def get_uid(sr_objects: Dict[str, Dict]):
212
- tianchi_uid = ""
213
- for obj_name, obj_data in sr_objects.items():
214
- class_name = SrParser.get_class_name(obj_name)
215
- uid = obj_data.get("UID")
216
- if class_name == 'SRUpgrade' and uid:
217
- # 优先返回SRUpgrade对象下配置的UID
218
- return uid
219
- tianchi_data = obj_data.get("bmc.dev.Board.TianChi")
220
- if isinstance(tianchi_data, dict) and not tianchi_uid:
221
- inner_uid = tianchi_data.get("UID")
222
- if inner_uid:
223
- tianchi_uid = inner_uid
224
- elif uid:
225
- tianchi_uid = uid
226
- # 找不到SRUpgrade对象下配置的UID后,再返回按设备树方案查找的UID
227
- return tianchi_uid
228
-
229
210
  @staticmethod
230
211
  def get_chip_ref(obj_data: Dict):
231
212
  value = obj_data.get(CHIP_KEY)
@@ -253,7 +234,11 @@ class SrValidate(SrParser):
253
234
  with open(whitelist_file, 'r') as file_descriptor:
254
235
  content = json.load(file_descriptor)
255
236
  for item in content:
256
- self.smc_dfx_whitelist[item.get("UID")] = item.get("Scanners")
237
+ chip_type = item.get("ChipType")
238
+ chip_address = item.get("ChipAddress")
239
+ scanner_offset = item.get("ScannerOffset")
240
+ if isinstance(chip_type, str) and isinstance(chip_address, int) and isinstance(scanner_offset, int):
241
+ self.smc_dfx_whitelist[chip_type].add((chip_address, scanner_offset))
257
242
  except Exception as e:
258
243
  log.error('smc_dfx_whitelist.json 文件解析失败: %s', e)
259
244
 
@@ -354,18 +339,15 @@ class SrValidate(SrParser):
354
339
  self.issues_report[relpath].add(("error", f"器件'{obj}'有多条上行总线"))
355
340
  chips.add(obj)
356
341
 
357
- def match_smc_dfx_whitelist(self, file_objs: Dict[str, Dict], uid: str, chip: str, scanner_data: Dict):
358
- if chip not in file_objs or uid not in self.smc_dfx_whitelist:
342
+ def match_smc_dfx_whitelist(self, file_objs: Dict[str, Dict], chip: str, scanner_data: Dict):
343
+ if chip not in file_objs:
359
344
  return False
360
345
  chip_data = file_objs.get(chip)
361
- smc_address = chip_data.get("Address")
346
+ chip_address = chip_data.get("Address")
362
347
  scanner_offset = scanner_data.get("Offset")
363
- if not smc_address or not scanner_offset:
348
+ if not chip_address or not scanner_offset:
364
349
  return False
365
- for item in self.smc_dfx_whitelist.get(uid):
366
- if item.get("SmcAddress") == smc_address and item.get("ScannerOffset") == scanner_offset:
367
- return True
368
- return False
350
+ return (chip_address, scanner_offset) in self.smc_dfx_whitelist[SrParser.get_class_name(chip)]
369
351
 
370
352
  def check_smc_dfx_info(self, relpath: str):
371
353
  smc_dfx_info_objs = {}
@@ -376,12 +358,11 @@ class SrValidate(SrParser):
376
358
  if not smc_dfx_info_objs:
377
359
  return
378
360
 
379
- uid = self.get_uid(self.sr_objs[relpath])
380
361
  for obj_name, obj_data in self.sr_objs[relpath].items():
381
362
  chip = self.get_chip_ref(obj_data)
382
363
  condition = self.get_class_name(obj_name) == "Scanner" and obj_name != "Scanner_PowerGood" \
383
364
  and chip and chip in smc_dfx_info_objs
384
- condition = condition and not self.match_smc_dfx_whitelist(self.sr_objs[relpath], uid, chip, obj_data)
365
+ condition = condition and not self.match_smc_dfx_whitelist(self.sr_objs[relpath], chip, obj_data)
385
366
  if not condition:
386
367
  continue
387
368
  smc_dfx_info_obj_name, smc_dfx_info_obj_data = smc_dfx_info_objs.get(chip)
@@ -351,7 +351,7 @@ static void ${cmd.name}_start(void)
351
351
  % if version >= 3:
352
352
  IpmiCmdInfo_set_Sensitive(obj, ${"TRUE" if cmd.sensitive else "FALSE"});
353
353
  % endif
354
- % if version >= 6:
354
+ % if version >= 3:
355
355
  gint32 value[2] = ${cmd.manufacturer};
356
356
  IpmiCmdInfo_set_Manufacturer(obj, 2, value);
357
357
  % endif
@@ -66,7 +66,8 @@ class TaskClass(Task):
66
66
  self.rtos_datafs = f"{self.rtos_rootfs}/data"
67
67
  # 镜像挂载点
68
68
  self.mnt_datafs = f"{self.buildimg_dir}/mnt_datafs"
69
- self.tools.check_path(self.mnt_datafs)
69
+ self.run_command(f"rm -rf {self.mnt_datafs}", sudo=True)
70
+ self.run_command(f"mkdir {self.mnt_datafs}", sudo=True)
70
71
  self.tools.check_path(self.rtos_rootfs)
71
72
 
72
73
  def component_cust_conf(self):
@@ -482,6 +483,7 @@ class TaskClass(Task):
482
483
 
483
484
  # ! 制作datafs img镜像,供work_buildpkg_ext4.py使用
484
485
  datafs_mount_path = f"{self.config.build_path}/mnt_datafs/"
486
+ self.run_command(f"rm -rf {datafs_mount_path}", sudo=True)
485
487
  self.run_command(f"mkdir -p {datafs_mount_path}", sudo=True)
486
488
 
487
489
  # 复制所有文件到挂载目录
bmcgo/worker.py CHANGED
@@ -253,56 +253,61 @@ class WorkerScheduler(Process):
253
253
  if not ret:
254
254
  log.debug(f"等待任务 {self.work_name} 类 {self.klass} 发生错误")
255
255
  return -1
256
- target_config = self.work.get("target_config")
257
- config.deal_conf(target_config)
258
- # bmcgo的任务类名固定为TaskClass
259
- work_class = self.load_class()
260
- # 如果未指定类时,不需要执行
261
- if work_class is not None:
262
- work_x = work_class(config, work_name)
263
- # work配置项和target配置项
264
- work_config = self.work.get("work_config")
265
- work_x.deal_conf(work_config)
266
- ret = ws_client.set_if_not_exist(self.target_name, work_name, "Running")
267
- self.perf.add_data(work_name, "running")
268
- if not args.debug_frame and ret:
269
- # 创建进程并且等待完成或超时
270
- ret = work_x.run()
271
- if ret is not None and ret != 0:
272
- return -1
273
- elif not args.debug_frame and not ret:
274
- # 不需要创建进程,等待任务执行完成即可
275
- wait_list = []
276
- wait_list.append(work_name)
277
- ret = wait_finish(self.target_name, wait_list, work_name)
278
- if not ret:
279
- log.debug(f"等待任务 {self.work_name} {self.klass} 发生错误")
280
- return -1
281
-
282
- log.debug(f"任务 {work_name} 开始安装步骤")
283
- if not args.debug_frame:
284
- ret = work_x.install()
285
- if ret is not None and ret != 0:
286
- return -1
287
- self.perf.add_data(work_name, "finish")
288
-
289
- # 创建子任务
290
- ret = exec_works(self.target_name, self.work.get("subworks"), work_name, self.perf, self.config, self.args)
291
- if not ret:
292
- ws_client.set(self.target_name, self.work_name, TASK_STATUS_FAILED, ignore_error=True)
293
- log.error(f"运行子任务 {self.work_name} 类 {self.klass}失败")
294
- return -1
295
- # 创建include_target子任务
296
- target_include = self.work.get("target_include")
297
- if target_include:
298
- ret = create_target_scheduler(work_name, target_include, self.perf, self.config, self.args)
256
+ try:
257
+ log.success(f"任务 {work_name} 开始")
258
+ target_config = self.work.get("target_config")
259
+ config.deal_conf(target_config)
260
+ # bmcgo的任务类名固定为TaskClass
261
+ work_class = self.load_class()
262
+ # 如果未指定类时,不需要执行
263
+ if work_class is not None:
264
+ work_x = work_class(config, work_name)
265
+ # work配置项和target配置项
266
+ work_config = self.work.get("work_config")
267
+ work_x.deal_conf(work_config)
268
+ ret = ws_client.set_if_not_exist(self.target_name, work_name, "Running")
269
+ self.perf.add_data(work_name, "running")
270
+ if not args.debug_frame and ret:
271
+ # 创建进程并且等待完成或超时
272
+ ret = work_x.run()
273
+ if ret is not None and ret != 0:
274
+ return -1
275
+ elif not args.debug_frame and not ret:
276
+ # 不需要创建进程,等待任务执行完成即可
277
+ wait_list = []
278
+ wait_list.append(work_name)
279
+ ret = wait_finish(self.target_name, wait_list, work_name)
280
+ if not ret:
281
+ log.debug(f"等待任务 {self.work_name} 类 {self.klass} 发生错误")
282
+ return -1
283
+
284
+ log.debug(f"任务 {work_name} 开始安装步骤")
285
+ if not args.debug_frame:
286
+ ret = work_x.install()
287
+ if ret is not None and ret != 0:
288
+ return -1
289
+ self.perf.add_data(work_name, "finish")
290
+
291
+ # 创建子任务
292
+ ret = exec_works(self.target_name, self.work.get("subworks"), work_name, self.perf, self.config, self.args)
299
293
  if not ret:
300
294
  ws_client.set(self.target_name, self.work_name, TASK_STATUS_FAILED, ignore_error=True)
301
- log.error(f"创建计划表 {target_include} 失败")
295
+ log.error(f"运行子任务 {self.work_name} 类 {self.klass}失败")
302
296
  return -1
303
- log.success(f"任务 {work_name} 完成")
304
- ws_client.set(self.target_name, self.work_name, "Done")
305
- return 0
297
+ # 创建include_target子任务
298
+ target_include = self.work.get("target_include")
299
+ if target_include:
300
+ ret = create_target_scheduler(work_name, target_include, self.perf, self.config, self.args)
301
+ if not ret:
302
+ ws_client.set(self.target_name, self.work_name, TASK_STATUS_FAILED, ignore_error=True)
303
+ log.error(f"创建计划表 {target_include} 失败")
304
+ return -1
305
+ log.success(f"任务 {work_name} 完成")
306
+ ws_client.set(self.target_name, self.work_name, "Done")
307
+ return 0
308
+ except Exception as exc:
309
+ log.error(f"任务 {work_name} 执行失败, {str(exc)}")
310
+ raise errors.BmcGoException(f"任务 {work_name} 执行失败") from exc
306
311
 
307
312
 
308
313
  class Worker():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: openubmc-bingo
3
- Version: 0.5.269
3
+ Version: 0.5.272
4
4
  Summary: Tools provided by openubmc
5
5
  Home-page: https://openubmc.cn
6
6
  Classifier: Programming Language :: Python :: 3
@@ -1,11 +1,11 @@
1
- bmcgo/__init__.py,sha256=2GL1TNEiSzmnaRRvVISSo2edYxaiqizlM8XEtha_GIg,563
1
+ bmcgo/__init__.py,sha256=DlfF7Ejd_JSfShXVP-6tqxiwWr3mLrm5BaoI26J5HBY,563
2
2
  bmcgo/bmcgo.py,sha256=uD4TsfjrFB5aQPIS6WRUVc9ShXX-dSImY9ezkB13g1w,685
3
3
  bmcgo/bmcgo_config.py,sha256=zPghH-W8vNK1bAc5PjfwnWzkHYT499PlGbhUWhPKT5U,10888
4
4
  bmcgo/errors.py,sha256=QW1ndrJcJ2Ws7riOznPKVvZsNlrYk73eZol7w8gJTPU,3076
5
5
  bmcgo/frame.py,sha256=iUZSd3Pj7T4yDZYX7A4DeaV9dnmJqOTjMIiJMmL9zfM,10427
6
6
  bmcgo/logger.py,sha256=4TPOkBA80Z00rSCOdEv_WkwE5Kr3HCDt-HuVe9waXck,6645
7
7
  bmcgo/misc.py,sha256=KNO1PX54UnxBpvT-4Y5BKHSSeJrmDJaWnUwVhfGquu0,4259
8
- bmcgo/worker.py,sha256=-KxZIW4dziej5wCY-v5XEmtY-CDCL2-FO3VHFovlFbM,15228
8
+ bmcgo/worker.py,sha256=hEzgS9_dZczjkWylxraqo6fvWde1aKndRiINNzq6xBM,15675
9
9
  bmcgo/cli/__init__.py,sha256=BDXz8BcSlCkfo5UYt6j2rm89-HiYA1ZzfpFhy99MH-0,538
10
10
  bmcgo/cli/cli.py,sha256=pqAkvjrk4F7x58-fYeGn0TydT3szZ2pM7guYwDoU2Ew,21520
11
11
  bmcgo/cli/config.yaml,sha256=tbnFhz2TTrl2-ALpHHujbXB1ymZpjGC4f0zTfqfUZfM,194
@@ -113,7 +113,7 @@ bmcgo/codegen/lua/templates/apps/entry.lua.mako,sha256=vedgTAr6Y9AIn69C_1qb5kzKf
113
113
  bmcgo/codegen/lua/templates/apps/feature.lua.mako,sha256=c6gZ4fc62GG2Eg15UitkHVHE9bEq7qceOIwIsZ6AOtk,1105
114
114
  bmcgo/codegen/lua/templates/apps/generate_route.mako,sha256=1T0ViRtA-m4MaXyv4vyGj-okc3tPsChdL205FIwTgoI,716
115
115
  bmcgo/codegen/lua/templates/apps/impl_feature.lua.mako,sha256=lmb99UUocc7lKUMMl70RjfOjhkQCl7EZBGgqw-F6pBE,3255
116
- bmcgo/codegen/lua/templates/apps/ipmi.lua.mako,sha256=ctADHdoyu1h1Oeceh4W8OC837zYiLsc-jRNSPn-A8GI,3834
116
+ bmcgo/codegen/lua/templates/apps/ipmi.lua.mako,sha256=xzsmOvc1XHILCNSW6NyV5OPdbUzsW4focMR3Hf9I2D8,3834
117
117
  bmcgo/codegen/lua/templates/apps/ipmi_cmd.lua.mako,sha256=om0Iw87ZunwFq_WZM_IyDVaj-7S7wTW9KZdowzQeRrw,408
118
118
  bmcgo/codegen/lua/templates/apps/ipmi_message.lua.mako,sha256=nNwKm3SI_5fFFlfA92KlWCq5LgI4CQChmAH3Y2YTd5A,957
119
119
  bmcgo/codegen/lua/templates/apps/local_db.lua.mako,sha256=CxyeW41Oo8G7PsRpO-k5a0ios1Y5m-DSRWKjfhNvI98,8408
@@ -182,8 +182,8 @@ bmcgo/component/analysis/dep_node.py,sha256=DSB30uim1Qrjs0zuphz0JXetP0ECBC7rzCEl
182
182
  bmcgo/component/analysis/intf_deps.py,sha256=IlcPixdaBpXpb6U4M-I1hRRGHCg5SCUg07V6kAosacE,7382
183
183
  bmcgo/component/analysis/intf_validation.py,sha256=zp_LiiJYYP8Y0lsFISX1KLY172q-qEOz0nFuQ--uPFQ,11131
184
184
  bmcgo/component/analysis/rule.py,sha256=xvntmvFdGa0J8WBlrHDdJ5bcl3jr4pXezR3KKvOg4Ag,7549
185
- bmcgo/component/analysis/smc_dfx_whitelist.json,sha256=dy_6-FddhG6UY7D1KUCW3Vme27eEmxpOLHefsCM0-rQ,192
186
- bmcgo/component/analysis/sr_validation.py,sha256=i1mlJb_D7RqE510LSAcCW81K1VUmZ7oSmLiMfUgdSJI,15598
185
+ bmcgo/component/analysis/smc_dfx_whitelist.json,sha256=ur8WLSSDM696_PtbSOYciMV50TzbUgP2voVt_QbTCw0,202
186
+ bmcgo/component/analysis/sr_validation.py,sha256=OrgPPjlOoLgRQyD_J6VZXAY0I6gtqGVOAhpGj0IY11Q,14876
187
187
  bmcgo/component/coverage/__init__.py,sha256=ZgUEyI86FTlOdBzcuTzz7UqTtfWcz416Gx4BCqcQlhA,557
188
188
  bmcgo/component/coverage/c_incremental_cov_report.template,sha256=FPhK1DZtmWsjDxa32R1ViH3IGCtNHcx0zFfgRo0s2nI,1576
189
189
  bmcgo/component/coverage/incremental_cov.py,sha256=tkeGpWfXXkipeDTEB9bS_p2S60rL_Eh0AWQbnSwHlK0,16803
@@ -209,7 +209,7 @@ bmcgo/functional/upgrade.py,sha256=HgTtUYtntuRcsO9qb1ciBvZ2gwyHrd0snyH7gjPKA6o,3
209
209
  bmcgo/ipmigen/__init__.py,sha256=xrppKUuQkt1jTqnr6gHWiWeEyUMFJeiZxcA7Hx9XXUo,789
210
210
  bmcgo/ipmigen/ctype_defination.py,sha256=PmkKRWTvmVQsZ-njio16ayXpsyFhC6le9Tu0baWU-xw,3179
211
211
  bmcgo/ipmigen/ipmigen.py,sha256=SZWoylTM-Tp4KSOQyfHidMjhhIzp4WIa40oxcrFfKB8,14506
212
- bmcgo/ipmigen/template/cmd.c.mako,sha256=5avKDLnEw0PscXZpj0Da0y7GcwQ2Q4lBy-yofw1BJIk,13955
212
+ bmcgo/ipmigen/template/cmd.c.mako,sha256=wqfIFXnmRIQ_UtlJjAVMOjjjIXz8E5xEJMFyw7ompIU,13955
213
213
  bmcgo/ipmigen/template/ipmi.c.mako,sha256=LNrJmXQut4923aQkkkuHFp9tTR9ExrBi0WYfxVLTykU,696
214
214
  bmcgo/ipmigen/template/ipmi.h.mako,sha256=veZ42lJq4hljyNH5uL_yesHpoANF3pprTL1VwTlflqs,2006
215
215
  bmcgo/target/app.yml,sha256=OaCk1YntS6h_cKUt8rvJ7fkqXMFjK5v4Iu2Nhx66ZFY,469
@@ -221,7 +221,7 @@ bmcgo/tasks/download_buildtools_hm.py,sha256=f4UxStARc8Z8DnT_5O6ONajQ7P0sKyJ8bri
221
221
  bmcgo/tasks/misc.py,sha256=GK_bSDLGZW0FxywB2ICG1iIEz2y2QoCb1YQQk8SYOIA,711
222
222
  bmcgo/tasks/task.py,sha256=n7EhquD3FQeT8LHk0tREKOG9t1BcbMge_TY6ekGFydk,17064
223
223
  bmcgo/tasks/task_build_conan.py,sha256=nQt4VyK4QHh2u4JbM8kfK9WBVIMGKI18S2NPg9orlvQ,32962
224
- bmcgo/tasks/task_build_rootfs_img.py,sha256=PzaW_CyhJFnoWqFUtApvWYvyg4GBeQAlCaAb-RGWlYI,29060
224
+ bmcgo/tasks/task_build_rootfs_img.py,sha256=JKEvldJnLWu2IdVSntuVowocQwdVtBQUpxzhplYauPI,29209
225
225
  bmcgo/tasks/task_build_wbd_up.py,sha256=X9-0Qqad-s3mGfJBMeBQvfZ99KlWcgaMluDr_zv6Z-o,3122
226
226
  bmcgo/tasks/task_buildgppbin.py,sha256=Xjfw6j8OsyS_XRiOt4vqIK1rDQ4sNKG__eurDu-M9bo,6341
227
227
  bmcgo/tasks/task_buildhpm_ext4.py,sha256=DBZnmU_eb14J0CW_wVoCc9VKnssFF1vXmRhLJQ6kR28,3482
@@ -254,8 +254,8 @@ bmcgo/utils/installations/version_util.py,sha256=dOwvLZ7iOmnzSeyD6_pRm7NS7I13Um5
254
254
  bmcgo/utils/installations/install_plans/bingo.yml,sha256=Zw1HnAyNJdEwkE3fnd-_GCe9bwv1m6bmMlaQTJXaFa8,210
255
255
  bmcgo/utils/installations/installers/apt_installer.py,sha256=nPaCb4cobSi9InN_aHsEPtQ0k4FgsCUWE5_VgBPvcRE,3769
256
256
  bmcgo/utils/installations/installers/pip_installer.py,sha256=dDdios1EQ7fzt90r02pZeoM3jCmjslLzkSvzd2hgRVM,3241
257
- openubmc_bingo-0.5.269.dist-info/METADATA,sha256=uTQ1K2KRlGKXgygeh-E1vpUs5QK45ySqEbQ4854KMoo,925
258
- openubmc_bingo-0.5.269.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
259
- openubmc_bingo-0.5.269.dist-info/entry_points.txt,sha256=UUoUP-vAWTgg9vEYbRwYqOBHgpRtkngdzMPb-ocz90g,42
260
- openubmc_bingo-0.5.269.dist-info/top_level.txt,sha256=9AcvCAt1nZcOgMsGt6T07mg2Bgtdet-3mHTwg91axgI,6
261
- openubmc_bingo-0.5.269.dist-info/RECORD,,
257
+ openubmc_bingo-0.5.272.dist-info/METADATA,sha256=IpWk_uqNBVhPkTRiZqbogAdFspHNvwzfIlxap7vWcH8,925
258
+ openubmc_bingo-0.5.272.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
259
+ openubmc_bingo-0.5.272.dist-info/entry_points.txt,sha256=UUoUP-vAWTgg9vEYbRwYqOBHgpRtkngdzMPb-ocz90g,42
260
+ openubmc_bingo-0.5.272.dist-info/top_level.txt,sha256=9AcvCAt1nZcOgMsGt6T07mg2Bgtdet-3mHTwg91axgI,6
261
+ openubmc_bingo-0.5.272.dist-info/RECORD,,