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

Files changed (28) hide show
  1. bmcgo/__init__.py +1 -1
  2. bmcgo/codegen/lua/codegen.py +23 -0
  3. bmcgo/codegen/lua/script/model_consistency_check.py +242 -0
  4. bmcgo/codegen/lua/script/render_utils/__init__.py +7 -4
  5. bmcgo/codegen/lua/script/render_utils/client_lua.py +1 -1
  6. bmcgo/codegen/lua/script/render_utils/message_lua.py +2 -1
  7. bmcgo/codegen/lua/script/render_utils/service_lua.py +1 -1
  8. bmcgo/codegen/lua/script/utils.py +30 -3
  9. bmcgo/codegen/lua/templates/apps/Makefile +70 -2
  10. bmcgo/codegen/lua/v1/script/render_utils/client_lua.py +108 -0
  11. bmcgo/codegen/lua/v1/script/render_utils/db_lua.py +223 -0
  12. bmcgo/codegen/lua/v1/script/render_utils/model_lua.py +29 -0
  13. bmcgo/codegen/lua/v1/templates/apps/client.lua.mako +244 -0
  14. bmcgo/codegen/lua/v1/templates/apps/db.lua.mako +62 -0
  15. bmcgo/codegen/lua/v1/templates/apps/local_db.lua.mako +184 -0
  16. bmcgo/codegen/lua/v1/templates/apps/message.lua.mako +35 -0
  17. bmcgo/codegen/lua/v1/templates/apps/model.lua.mako +3 -0
  18. bmcgo/codegen/lua/v1/templates/apps/service.lua.mako +8 -47
  19. bmcgo/codegen/lua/v1/templates/apps/utils/mdb_intf.lua.mako +27 -0
  20. bmcgo/codegen/lua/v1/templates/apps/utils/mdb_obj.lua.mako +14 -0
  21. bmcgo/component/coverage/incremental_cov.py +4 -4
  22. bmcgo/tasks/task_build_rootfs_img.py +2 -2
  23. {openubmc_bingo-0.5.254.dist-info → openubmc_bingo-0.5.261.dist-info}/METADATA +1 -1
  24. {openubmc_bingo-0.5.254.dist-info → openubmc_bingo-0.5.261.dist-info}/RECORD +28 -19
  25. /bmcgo/codegen/lua/script/{render_utils/mdb_register.py → mdb_register.py} +0 -0
  26. {openubmc_bingo-0.5.254.dist-info → openubmc_bingo-0.5.261.dist-info}/WHEEL +0 -0
  27. {openubmc_bingo-0.5.254.dist-info → openubmc_bingo-0.5.261.dist-info}/entry_points.txt +0 -0
  28. {openubmc_bingo-0.5.254.dist-info → openubmc_bingo-0.5.261.dist-info}/top_level.txt +0 -0
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.254'
12
+ __version__ = '0.5.261'
@@ -15,6 +15,7 @@ import os
15
15
  import re
16
16
  import subprocess
17
17
  import shutil
18
+ from pathlib import Path
18
19
  from bmcgo.codegen.c.helper import Helper
19
20
  from bmcgo import misc
20
21
  from bmcgo.utils.tools import Tools
@@ -98,6 +99,27 @@ class CodeGen(object):
98
99
  shutil.copytree(os.path.join(temp_dir, "mdb_interface/opt/bmc/apps/mdb_interface"), target_dir)
99
100
  shutil.rmtree(temp_dir, ignore_errors=True)
100
101
 
102
+ def setup_latest_mdb_interface(self):
103
+ target_dir = os.path.join(self.project_dir, 'temp/opt/bmc/apps/latest_mdb_interface')
104
+ shutil.rmtree(target_dir, ignore_errors=True)
105
+ temp_dir = os.path.join(self.project_dir, 'temp/.latest_mdb_interface_temp')
106
+ shutil.rmtree(temp_dir, ignore_errors=True)
107
+ os.makedirs(temp_dir, exist_ok=True)
108
+
109
+ conan_home = Path(os.environ.get("CONAN_HOME", Path.home() / ".conan/data"))
110
+ mdb_interface_tmp_dir = os.path.join(conan_home, "latest_mdb_interface")
111
+ env = dict(os.environ, CONAN_STORAGE_PATH=mdb_interface_tmp_dir)
112
+
113
+ package = self.get_mdb_interface_package()
114
+ cmd = ["conan", "install", package, f"-if={temp_dir}", "--update", "--build=missing", "-g", "deploy"]
115
+ cmd += ["-pr=profile.dt.ini", "-s", "build_type=Dt"]
116
+ if self.remote:
117
+ cmd += ["-r", self.remote]
118
+
119
+ subprocess.run(cmd, env=env)
120
+ shutil.copytree(os.path.join(temp_dir, "mdb_interface/opt/bmc/apps/mdb_interface"), target_dir)
121
+ shutil.rmtree(temp_dir, ignore_errors=True)
122
+
101
123
  def is_valid_date(self, date_str):
102
124
  pattern = r'^-- Create: \d{4}-\d{1,2}-\d{1,2}$'
103
125
  return bool(re.match(pattern, date_str))
@@ -141,6 +163,7 @@ class CodeGen(object):
141
163
  shutil.rmtree(self.gen_tool_dir, ignore_errors=True)
142
164
  shutil.copytree(cwd, self.gen_tool_dir)
143
165
  self.setup_mdb_interface()
166
+ self.setup_latest_mdb_interface()
144
167
  lua_format = self.get_lua_format()
145
168
  cmd = [
146
169
  "/usr/bin/make", "-j12", f"PROJECT_NAME={self.project_name}", f"TPL_DIR={self.gen_tool_dir}",
@@ -0,0 +1,242 @@
1
+ #!/usr/bin/env python3
2
+ # coding=utf-8
3
+ # Copyright (c) 2025 Huawei Technologies Co., Ltd.
4
+ # openUBMC is licensed under Mulan PSL v2.
5
+ # You can use this software according to the terms and conditions of the Mulan PSL v2.
6
+ # You may obtain a copy of Mulan PSL v2 at:
7
+ # http://license.coscl.org.cn/MulanPSL2
8
+ # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
9
+ # EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
10
+ # MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
11
+ # See the Mulan PSL v2 for more details.
12
+
13
+ import json
14
+ import logging
15
+ import getopt
16
+ import sys
17
+ import os
18
+ import stat
19
+ from collections import OrderedDict
20
+ import mds_util as utils
21
+
22
+
23
+ MDB_INTF_ITEM = ["properties", "methods", "signals"]
24
+ MDB_METHOD_KEY = ["baseType", "items", "minimum", "maximum", "minLength", "maxLength", "pattern", "enum"]
25
+ MDB_PROPERTY_KEY = MDB_METHOD_KEY + ["readOnly", "deprecated", "constrait"]
26
+ OBJECT_PROPERTIES_INTERFACE = "bmc.kepler.Object.Properties"
27
+ BASETYPE = "baseType"
28
+ REQ = "req"
29
+ RSP = "rsp"
30
+
31
+
32
+ class MethodCheckArgs:
33
+ def __init__(self, mdb_data, complete_data, class_name, intf_name, method, param_type):
34
+ self.mdb_data = mdb_data
35
+ self.complete_data = complete_data
36
+ self.class_name = class_name
37
+ self.intf_name = intf_name
38
+ self.method = method
39
+ self.param_type = param_type
40
+
41
+
42
+ def get_parent_path(origin_model, class_data):
43
+ if "parent" in class_data and class_data["parent"] in origin_model and \
44
+ "path" in origin_model[class_data["parent"]]:
45
+ return get_parent_path(origin_model, origin_model[class_data["parent"]]) \
46
+ + "/" + utils.cut_ids(class_data["path"])
47
+ else:
48
+ return utils.cut_ids(class_data["path"])
49
+
50
+
51
+ def check_prop_consistency(mdb_item, complete_item, class_name, intf_name, prop_keys):
52
+ for prop in prop_keys:
53
+ if BASETYPE in mdb_item[prop] and BASETYPE in complete_item[prop]:
54
+ if mdb_item[prop][BASETYPE] != complete_item[prop][BASETYPE]:
55
+ raise RuntimeError(f"组件模型中类{class_name}接口{intf_name}的属性{prop}的类型{complete_item[prop][BASETYPE]}"
56
+ f"与mdb_interface对应类型{mdb_item[prop][BASETYPE]}不一致"
57
+ )
58
+
59
+
60
+ def check_method_params(args):
61
+ mdb_keys = set(args.mdb_data.keys())
62
+ complete_keys = set(args.complete_data.keys())
63
+ label = "请求" if args.param_type == REQ else "响应"
64
+ if mdb_keys != complete_keys:
65
+ only_in_mdb = mdb_keys - complete_keys
66
+ if only_in_mdb:
67
+ raise RuntimeError(f"组件模型中类{args.class_name}接口{args.intf_name}的方法{args.method}中的{label}参数{only_in_mdb}"
68
+ f"未实现,请检查model.json与mdb_interface定义"
69
+ )
70
+ only_in_complete = complete_keys - mdb_keys
71
+ if only_in_complete:
72
+ raise RuntimeError(f"组件模型中类{args.class_name}接口{args.intf_name}的方法{args.method}中的{label}参数{only_in_complete}"
73
+ f"未在mdb_interface中定义,请检查model.json与mdb_interface定义"
74
+ )
75
+
76
+ for param in mdb_keys:
77
+ if BASETYPE in args.mdb_data[param] and BASETYPE in args.complete_data[param]:
78
+ if args.mdb_data[param][BASETYPE] != args.complete_data[param][BASETYPE]:
79
+ raise RuntimeError(f"组件模型中类{args.class_name}接口{args.intf_name}的方法{args.method}中的{label}参数{param}的类型"
80
+ f"{args.complete_data[param][BASETYPE]}与mdb_interface对应类型{args.mdb_data[param][BASETYPE]}不一致"
81
+ )
82
+
83
+
84
+ def check_method_consistency(mdb_item, complete_item, class_name, intf_name, method_keys):
85
+ for method in method_keys:
86
+ has_req_mdb = REQ in mdb_item[method]
87
+ has_req_complete = REQ in complete_item[method]
88
+ if has_req_mdb != has_req_complete:
89
+ if has_req_mdb:
90
+ raise RuntimeError(f"组件模型中类{class_name}的接口{intf_name}的方法{method}中未实现req,请检查model.json与mdb_interface定义")
91
+ else:
92
+ raise RuntimeError(f"组件模型中类{class_name}的接口{intf_name}的方法{method}中req未在mdb_interface中定义"
93
+ f",请检查model.json与mdb_interface定义"
94
+ )
95
+ else:
96
+ if has_req_mdb:
97
+ method_req_params = MethodCheckArgs(mdb_item[method][REQ], complete_item[method][REQ], \
98
+ class_name, intf_name, method, REQ)
99
+ check_method_params(method_req_params)
100
+
101
+ has_rsp_mdb = RSP in mdb_item[method]
102
+ has_rsp_complete = RSP in complete_item[method]
103
+ if has_rsp_mdb != has_rsp_complete:
104
+ if has_rsp_mdb:
105
+ raise RuntimeError(f"组件模型中类{class_name}的接口{intf_name}的方法{method}中未实现rsp参数"
106
+ f",请检查model.json与mdb_interface定义"
107
+ )
108
+ else:
109
+ raise RuntimeError(f"组件模型中类{class_name}的接口{intf_name}的方法{method}中rsp未在mdb_interface中定义"
110
+ f",请检查model.json与mdb_interface定义"
111
+ )
112
+ else:
113
+ if has_rsp_mdb:
114
+ method_rsp_params = MethodCheckArgs(mdb_item[method][RSP], complete_item[method][RSP], \
115
+ class_name, intf_name, method, RSP)
116
+ check_method_params(method_rsp_params)
117
+
118
+
119
+ def check_intf_item_consistency(mdb_item, complete_item, class_name, intf_name, item_type):
120
+ mdb_keys = set(mdb_item.keys())
121
+ complete_keys = set(complete_item.keys())
122
+ diff_keys = mdb_keys.symmetric_difference(complete_keys)
123
+ if diff_keys:
124
+ only_in_mdb = diff_keys - complete_keys
125
+ only_in_complete = diff_keys - mdb_keys
126
+ if only_in_mdb:
127
+ raise RuntimeError(f"组件模型中类{class_name}的接口{intf_name}的{item_type}未实现{only_in_mdb}"
128
+ f",请检查model.json与mdb_interface定义"
129
+ )
130
+ if only_in_complete:
131
+ raise RuntimeError(f"组件模型中类{class_name}的接口{intf_name}的{item_type}中的{only_in_complete}"
132
+ f"未在mdb_interface中定义,请检查model.json与mdb_interface定义"
133
+ )
134
+
135
+ if item_type == "properties":
136
+ check_prop_consistency(mdb_item, complete_item, class_name, intf_name, mdb_keys)
137
+ elif item_type == "methods":
138
+ check_method_consistency(mdb_item, complete_item, class_name, intf_name, mdb_keys)
139
+
140
+
141
+ def check_intf_consistency(mdb_intf, complete_intf, class_name, intf_name):
142
+ for item in MDB_INTF_ITEM:
143
+ if item in mdb_intf and item not in complete_intf:
144
+ if mdb_intf[item]:
145
+ raise RuntimeError(f"组件模型中类{class_name}的接口{intf_name}未实现{item},请检查model.json与mdb_interface定义")
146
+ elif item not in mdb_intf and item in complete_intf:
147
+ if complete_intf[item]:
148
+ raise RuntimeError(f"组件模型中类{class_name}的接口{intf_name}的{item}未在mdb_interface中定义"
149
+ f",请检查model.json与mdb_interface定义"
150
+ )
151
+ elif item in mdb_intf and item in complete_intf:
152
+ check_intf_item_consistency(mdb_intf[item], complete_intf[item], class_name, intf_name, item)
153
+
154
+
155
+ def check_model_consistency(class_name, complete_model, mdb_obj, mdb_path):
156
+ intf_complete = set(complete_model["interfaces"].keys())
157
+ intf_mdb = set(mdb_obj[class_name]["interfaces"])
158
+ if intf_complete != intf_mdb:
159
+ intf_only_in_mds = intf_complete - intf_mdb
160
+ intf_only_in_mds.discard(OBJECT_PROPERTIES_INTERFACE)
161
+ if intf_only_in_mds:
162
+ raise RuntimeError(f"组件模型中类{class_name}的接口{intf_only_in_mds}未在mdb_interface中定义"
163
+ f",请检查model.json与mdb_interface定义"
164
+ )
165
+ intf_only_in_mdb = intf_mdb - intf_complete
166
+ if intf_only_in_mdb:
167
+ raise RuntimeError(f"组件模型中类{class_name}未实现{intf_only_in_mdb}接口,请检查model.json与mdb_interface定义")
168
+
169
+ for intf_name in intf_complete:
170
+ mdb_intf_json = utils.get_intf(intf_name, mdb_path)
171
+ check_intf_consistency(mdb_intf_json[intf_name], complete_model["interfaces"][intf_name], class_name, intf_name)
172
+
173
+
174
+ def check(if_name, mdb_path):
175
+ load_dict = {}
176
+ if os.path.exists(if_name):
177
+ load_f = os.fdopen(os.open(if_name, os.O_RDONLY, stat.S_IRUSR), "r")
178
+ load_dict = OrderedDict(json.load(load_f))
179
+ load_f.close()
180
+
181
+ for class_name, class_data in load_dict.items():
182
+ if "path" in class_data and class_name != "defs":
183
+ class_path = get_parent_path(load_dict, class_data)
184
+ mdb_obj = utils.get_path(class_name, mdb_path, class_path)
185
+ check_model_consistency(class_name, class_data, mdb_obj, mdb_path)
186
+
187
+
188
+ def get_all_modelx_json(mds_dir):
189
+ load_dict = {}
190
+ for root, _, files in os.walk(mds_dir):
191
+ for file in files:
192
+ if file == 'modelx.json':
193
+ file_path = os.path.join(root, file)
194
+ load_f = os.fdopen(os.open(file_path, os.O_RDONLY, stat.S_IRUSR), "r")
195
+ load_modelx_dict = OrderedDict(json.load(load_f))
196
+ load_dict.update(load_modelx_dict)
197
+
198
+ return load_dict
199
+
200
+
201
+ def access_check(mds_dir, mdb_path):
202
+ load_dict = get_all_modelx_json(mds_dir)
203
+
204
+ for class_name, class_data in load_dict.items():
205
+ if "path" in class_data and class_name != "defs":
206
+ class_path = get_parent_path(load_dict, class_data)
207
+ mdb_obj = utils.get_path(class_name, mdb_path, class_path)
208
+ check_model_consistency(class_name, class_data, mdb_obj, mdb_path)
209
+
210
+ return True
211
+
212
+
213
+ def usage():
214
+ logging.info("model_consistency_check.py -i <inputfile> -d <MdbInterfaceDir>")
215
+
216
+
217
+ def main(argv):
218
+ m_input = ""
219
+ mdb_path = ""
220
+ try:
221
+ opts, _ = getopt.getopt(argv, "hi:d:", ["help", "input=", "mdb_interface_path="])
222
+ except getopt.GetoptError:
223
+ help()
224
+ return
225
+ for opt, arg in opts:
226
+ if opt in ("-h", "--help"):
227
+ usage()
228
+ return
229
+ elif opt in ("-i", "--input"):
230
+ m_input = arg
231
+ elif opt in ("-d", "--dir"):
232
+ mdb_path = arg
233
+ else:
234
+ raise RuntimeError("不支持的选项: {}".format(opt))
235
+ if not m_input:
236
+ usage()
237
+ return
238
+ check(m_input, mdb_path)
239
+
240
+
241
+ if __name__ == "__main__":
242
+ main(sys.argv[1:])
@@ -12,9 +12,10 @@
12
12
 
13
13
  __all__ = [
14
14
  'Base', 'Factory', 'RequestLuaUtils', 'ControllerLuaUtils', 'IpmiMessageUtils', 'MessageUtils',
15
- 'UtilsMessageLua', 'ErrorLuaUtils', 'ClientLuaUtils', "ConsistencyModelLuaUtils",
15
+ 'UtilsMessageLua', 'ErrorLuaUtils', 'ClientLuaUtils', "ConsistencyModelLuaUtils", "ConsistencyDbLuaUtils",
16
16
  'DbLuaUtils', 'IpmiLuaUtils', 'RedfishProtoUtils', 'ServicesUtils',
17
- 'MdbLuaUtils', 'OldModelLuaUtils', 'ModelLuaUtils', "MdbRegister", 'MessagesLuaUtils', 'PluginLuaUtils'
17
+ 'MdbLuaUtils', 'OldModelLuaUtils', 'ModelLuaUtils', "MdbRegister", 'MessagesLuaUtils', 'PluginLuaUtils',
18
+ 'ConsistencyClientLuaUtils'
18
19
  ]
19
20
 
20
21
  from render_utils.client_lua import ClientLuaUtils
@@ -31,9 +32,11 @@ from render_utils.service_lua import ServicesUtils
31
32
  from render_utils.utils_message_lua import UtilsMessageLua
32
33
  from render_utils.old_model_lua import OldModelLuaUtils
33
34
  from render_utils.model_lua import ModelLuaUtils
34
- from render_utils.mdb_register import MdbRegister
35
35
  from render_utils.messages_lua import MessagesLuaUtils
36
36
  from render_utils.plugin_lua import PluginLuaUtils
37
+ from bmcgo.codegen.lua.script.mdb_register import MdbRegister
37
38
  from bmcgo.codegen.lua.script.base import Base
38
39
  from bmcgo.codegen.lua.script.factory import Factory
39
- from bmcgo.codegen.lua.v1.script.render_utils.model_lua import ConsistencyModelLuaUtils
40
+ from bmcgo.codegen.lua.v1.script.render_utils.model_lua import ConsistencyModelLuaUtils
41
+ from bmcgo.codegen.lua.v1.script.render_utils.db_lua import ConsistencyDbLuaUtils
42
+ from bmcgo.codegen.lua.v1.script.render_utils.client_lua import ConsistencyClientLuaUtils
@@ -12,7 +12,7 @@
12
12
 
13
13
  from utils import Utils
14
14
  from dto.options import Options
15
- from render_utils.mdb_register import MdbRegister
15
+ from bmcgo.codegen.lua.script.mdb_register import MdbRegister
16
16
  from bmcgo.codegen.lua.script.base import Base
17
17
  from bmcgo.codegen.lua.script.factory import Factory
18
18
 
@@ -13,7 +13,7 @@
13
13
  from dto.options import Options
14
14
  from render_utils.utils_message_lua import UtilsMessageLua
15
15
  from render_utils.validate_lua import ValidateLua
16
- from render_utils.mdb_register import MdbRegister
16
+ from bmcgo.codegen.lua.script.mdb_register import MdbRegister
17
17
  from bmcgo.codegen.lua.script.base import Base
18
18
  from bmcgo.codegen.lua.script.factory import Factory
19
19
 
@@ -24,3 +24,4 @@ class MessageUtils(Base, ValidateLua, UtilsMessageLua, MdbRegister):
24
24
 
25
25
 
26
26
  Factory().register("message.lua.mako", MessageUtils)
27
+ Factory().register("v1/templates/apps/message.lua.mako", MessageUtils)
@@ -15,7 +15,7 @@ import re
15
15
  from utils import Utils
16
16
  from dto.options import Options
17
17
  from render_utils.validate_lua import ValidateLua
18
- from render_utils.mdb_register import MdbRegister
18
+ from bmcgo.codegen.lua.script.mdb_register import MdbRegister
19
19
  from bmcgo.codegen.lua.script.base import Base
20
20
  from bmcgo.codegen.lua.script.factory import Factory
21
21
 
@@ -267,7 +267,9 @@ class Utils:
267
267
 
268
268
  @staticmethod
269
269
  def force_to_colon(path):
270
- return path.replace("${", ":").replace("}", "")
270
+ if isinstance(path, str):
271
+ return path.replace("${", ":").replace("}", "")
272
+ return [p.replace("${", ":").replace("}", "") for p in path]
271
273
 
272
274
  @staticmethod
273
275
  def check_db_open(name):
@@ -279,6 +281,24 @@ class Utils:
279
281
  if "tableName" in class_data and class_data.get("tableLocation") != "Local":
280
282
  return True
281
283
  return False
284
+
285
+ @staticmethod
286
+ def has_db(root: dict):
287
+ return Utils.check_need_mem_db(root) or Utils.check_local_poweroff_db(root) or \
288
+ Utils.check_local_reset_db(root) or Utils.check_local_temporary_db(root)
289
+
290
+ @staticmethod
291
+ def get_db_types(root: dict):
292
+ db_types = '{'
293
+ if Utils.check_need_mem_db(root):
294
+ db_types += "'memory', "
295
+ if Utils.check_local_poweroff_db(root):
296
+ db_types += "'local_poweroff', "
297
+ if Utils.check_local_reset_db(root):
298
+ db_types += "'local_reset', "
299
+ if Utils.check_local_temporary_db(root):
300
+ db_types += "'local_temporary', "
301
+ return db_types + '}'
282
302
 
283
303
  @staticmethod
284
304
  def check_need_mem_db(root: dict):
@@ -646,8 +666,15 @@ class Utils:
646
666
 
647
667
  def get_path_params(self, path):
648
668
  path = self.force_to_colon(path)
649
- params = re.compile(
650
- r':([a-zA-Z_][0-9a-zA-Z_]+)').findall(path)
669
+
670
+ pattern = r':([a-zA-Z_][0-9a-zA-Z_]+)'
671
+ if isinstance(path, str):
672
+ params = re.compile(pattern).findall(path)
673
+ else:
674
+ params = []
675
+ for p in path:
676
+ params.extend(re.compile(pattern).findall(p))
677
+
651
678
  return self.remove_duplicate(params)
652
679
 
653
680
  def deduplicate_path(self, path):
@@ -3,6 +3,7 @@ TEMPLATE_BIN = ${SCRIPT_DIR}/template.py
3
3
  SEP_IPMI_MESSAGE_CMDS_BIN = ${SCRIPT_DIR}/sep_ipmi_message_cmds.py
4
4
  LUA_FORMATER = ${SCRIPT_DIR}/lua_format.py
5
5
  MDB_INTF_DIR = ${TEMP_DIR}/opt/bmc/apps/mdb_interface/
6
+ LATEST_MDB_INTF_DIR = ${TEMP_DIR}/opt/bmc/apps/latest_mdb_interface/
6
7
  YAML_TO_JSON_BIN = ${SCRIPT_DIR}/yaml_to_json.py
7
8
  BAK_LOCAL_DB_DIR = ${GEN_BAK_DIR}/${PROJECT_NAME}
8
9
  MAJOR_VERSION_EQ_1 := $(shell [ $(MAJOR_VERSION) -eq 1 ] && echo true)
@@ -63,9 +64,15 @@ $(strip $(subst .proto.json,,$(1)))
63
64
  endef
64
65
 
65
66
  define MAKE_MESSAGE
67
+ ifeq ($(MAJOR_VERSION_EQ_1), true)
68
+ $$(GEN_OUT_DIR)/$(1).lua: ${PROTO_OUT_DIR}/$(1).proto.json $${TEMPLATE_BIN} ${MAJOR_VERIONS_DIR}/v1/templates/apps/message.lua.mako utils/message.mako utils/enum.mako
69
+ @mkdir -p $$(dir $$@)
70
+ python3 $${TEMPLATE_BIN} -d ${PROTO_DIR} -j ${PROTO_OUT_DIR} -n ${PROJECT_NAME} -i ${PROTO_OUT_DIR}/$(1).proto.json -f ${LUA_FORMATER} -t v1/templates/apps/message.lua.mako -o $$@
71
+ else
66
72
  $$(GEN_OUT_DIR)/$(1).lua: ${PROTO_OUT_DIR}/$(1).proto.json $${TEMPLATE_BIN} message.lua.mako utils/message.mako utils/enum.mako
67
73
  @mkdir -p $$(dir $$@)
68
74
  python3 $${TEMPLATE_BIN} -d ${PROTO_DIR} -j ${PROTO_OUT_DIR} -n ${PROJECT_NAME} -i ${PROTO_OUT_DIR}/$(1).proto.json -f ${LUA_FORMATER} -t message.lua.mako -o $$@
75
+ endif
69
76
  endef
70
77
  $(foreach v, $(MESSAGE_FILES), $(eval $(call MAKE_MESSAGE,$(v))))
71
78
  message: $(foreach v, $(MESSAGE_FILES), $(GEN_OUT_DIR)/$(v).lua)
@@ -131,6 +138,13 @@ endif
131
138
  ${PROTO_OUT_DIR}/_model.json: ${SCRIPT_DIR}/merge_model.py
132
139
  python3 ${SCRIPT_DIR}/merge_model.py -i ${MDS_DIR}/model.json -o $@ -d ${MDB_INTF_DIR} -c ${SCRIPT_DIR}/../temp/check_cmd.json
133
140
 
141
+ ifeq ($(MAJOR_VERSION_EQ_1), true)
142
+ model_consistency_check: ${PROTO_OUT_DIR}/_model.json ${SCRIPT_DIR}/model_consistency_check.py
143
+ python3 ${SCRIPT_DIR}/model_consistency_check.py -i ${PROTO_OUT_DIR}/_model.json -d ${LATEST_MDB_INTF_DIR}
144
+ else
145
+ model_consistency_check:
146
+ endif
147
+
134
148
  ifeq ($(MAJOR_VERSION_EQ_1), true)
135
149
  $(MDS_DIR)/modelx.json: ${PROTO_OUT_DIR}/_model.json
136
150
  mkdir -p $(@D)
@@ -164,11 +178,19 @@ ${MDS_DIR}/schema.json: ${PROTO_OUT_DIR}/_model.json ${SCRIPT_DIR}/gen_schema.py
164
178
  python3 ${SCRIPT_DIR}/gen_schema.py -i ${PROTO_OUT_DIR}/_model.json -n ${PROJECT_NAME} -o $@
165
179
  endif
166
180
 
181
+ ifeq ($(MAJOR_VERSION_EQ_1), true)
182
+ ${PROTO_OUT_DIR}/db_json.json: ${PROTO_OUT_DIR}/_model.json ${SCRIPT_DIR}/gen_db_json.py
183
+ python3 ${SCRIPT_DIR}/gen_historical_local_db_json.py -i ${BAK_LOCAL_DB_DIR}/local_db.lua -o ${PROTO_OUT_DIR}/historical_local_db.json
184
+ python3 ${SCRIPT_DIR}/gen_db_json.py -i ${PROTO_OUT_DIR}/_model.json -m ${PROTO_OUT_DIR}/historical_local_db.json -o $@
185
+ python3 ${TEMPLATE_BIN} -d ${PROTO_DIR} -j ${PROTO_OUT_DIR}/ -n ${PROJECT_NAME} -i ${PROTO_OUT_DIR}/db_json.json -f ${LUA_FORMATER} -t v1/templates/apps/db.lua.mako -o ${GEN_OUT_DIR}/db.lua
186
+ python3 ${TEMPLATE_BIN} -d ${PROTO_DIR} -j ${PROTO_OUT_DIR}/ -n ${PROJECT_NAME} -i ${PROTO_OUT_DIR}/local_db_json.json -f ${LUA_FORMATER} -t v1/templates/apps/local_db.lua.mako -o ${GEN_OUT_DIR}/local_db.lua
187
+ else
167
188
  ${PROTO_OUT_DIR}/db_json.json: ${PROTO_OUT_DIR}/_model.json ${SCRIPT_DIR}/gen_db_json.py
168
189
  python3 ${SCRIPT_DIR}/gen_historical_local_db_json.py -i ${BAK_LOCAL_DB_DIR}/local_db.lua -o ${PROTO_OUT_DIR}/historical_local_db.json
169
190
  python3 ${SCRIPT_DIR}/gen_db_json.py -i ${PROTO_OUT_DIR}/_model.json -m ${PROTO_OUT_DIR}/historical_local_db.json -o $@
170
191
  python3 ${TEMPLATE_BIN} -d ${PROTO_DIR} -j ${PROTO_OUT_DIR}/ -n ${PROJECT_NAME} -i ${PROTO_OUT_DIR}/db_json.json -f ${LUA_FORMATER} -t db.lua.mako -o ${GEN_OUT_DIR}/db.lua
171
192
  python3 ${TEMPLATE_BIN} -d ${PROTO_DIR} -j ${PROTO_OUT_DIR}/ -n ${PROJECT_NAME} -i ${PROTO_OUT_DIR}/local_db_json.json -f ${LUA_FORMATER} -t local_db.lua.mako -o ${GEN_OUT_DIR}/local_db.lua
193
+ endif
172
194
 
173
195
  ifneq ($(wildcard ${MDS_DIR}/types.json),)
174
196
  # types代码生成
@@ -176,10 +198,17 @@ types_message_json: ${TYPES_JSON_PATH} ${SCRIPT_DIR}/gen_rpc_msg_json.py
176
198
  mkdir -p ${PROTO_OUT_DIR}/model_types/
177
199
  python3 ${SCRIPT_DIR}/gen_rpc_msg_json.py -i ${TYPES_JSON_PATH} -o ${PROTO_OUT_DIR}/model_types/ -d ${MDB_INTF_DIR} -t
178
200
 
201
+ ifeq ($(MAJOR_VERSION_EQ_1), true)
202
+ types_message: types_message_json
203
+ python3 ${TEMPLATE_BIN} -d ${PROTO_DIR} -j ${PROTO_OUT_DIR}/model_types/ -n ${PROJECT_NAME} \
204
+ -i ${PROTO_OUT_DIR}/model_types/def_types.proto.json -f ${LUA_FORMATER} -t v1/templates/apps/message.lua.mako \
205
+ -o $(call proto_json_to_lua, ${GENERATE_OUT_DIR}/class/types/types.lua);
206
+ else
179
207
  types_message: types_message_json
180
208
  python3 ${TEMPLATE_BIN} -d ${PROTO_DIR} -j ${PROTO_OUT_DIR}/model_types/ -n ${PROJECT_NAME} \
181
209
  -i ${PROTO_OUT_DIR}/model_types/def_types.proto.json -f ${LUA_FORMATER} -t message.lua.mako \
182
210
  -o $(call proto_json_to_lua, ${GENERATE_OUT_DIR}/class/types/types.lua);
211
+ endif
183
212
 
184
213
  endif
185
214
 
@@ -188,17 +217,36 @@ model_message_json: ${PROTO_OUT_DIR}/_model.json ${SCRIPT_DIR}/gen_rpc_msg_json.
188
217
  mkdir -p ${PROTO_OUT_DIR}/model_types/
189
218
  python3 ${SCRIPT_DIR}/gen_rpc_msg_json.py -i ${PROTO_OUT_DIR}/_model.json -o ${PROTO_OUT_DIR}/model_types/ -d ${MDB_INTF_DIR} -p
190
219
 
220
+ ifeq ($(MAJOR_VERSION_EQ_1), true)
221
+ model_message: model_message_json
222
+ @$(foreach x,$(shell ls $(PROTO_OUT_DIR)/model_types/ -I def_types.proto.json), \
223
+ python3 ${TEMPLATE_BIN} -d ${PROTO_DIR} -j ${PROTO_OUT_DIR}/model_types/ -n ${PROJECT_NAME} \
224
+ -i ${PROTO_OUT_DIR}/model_types/$x -f ${LUA_FORMATER} -t v1/templates/apps/message.lua.mako \
225
+ -o $(call proto_json_to_lua, ${GENERATE_OUT_DIR}/class/types/$x);)
226
+ else
191
227
  model_message: model_message_json
192
228
  @$(foreach x,$(shell ls $(PROTO_OUT_DIR)/model_types/ -I def_types.proto.json), \
193
229
  python3 ${TEMPLATE_BIN} -d ${PROTO_DIR} -j ${PROTO_OUT_DIR}/model_types/ -n ${PROJECT_NAME} \
194
230
  -i ${PROTO_OUT_DIR}/model_types/$x -f ${LUA_FORMATER} -t message.lua.mako \
195
231
  -o $(call proto_json_to_lua, ${GENERATE_OUT_DIR}/class/types/$x);)
232
+ endif
196
233
 
197
234
  # 服务端代码生成
198
235
  service_message_json: ${PROTO_OUT_DIR}/_model.json ${SCRIPT_DIR}/gen_rpc_msg_json.py
199
236
  @mkdir -p ${PROTO_OUT_DIR}/json_types/
200
237
  python3 ${SCRIPT_DIR}/gen_rpc_msg_json.py -i ${PROTO_OUT_DIR}/_model.json -o ${PROTO_OUT_DIR}/json_types/ -d ${MDB_INTF_DIR} -n ${PROJECT_NAME} -m
201
238
 
239
+ ifeq ($(MAJOR_VERSION_EQ_1), true)
240
+ service_message: service_message_json
241
+ @$(foreach x,$(shell ls $(PROTO_OUT_DIR)/json_types/),\
242
+ python3 ${TEMPLATE_BIN} -v ${VERSION} -d ${PROTO_DIR} -j ${PROTO_OUT_DIR}/json_types/ -n ${PROJECT_NAME} \
243
+ -i ${PROTO_OUT_DIR}/json_types/$x -f ${LUA_FORMATER} -t v1/templates/apps/message.lua.mako \
244
+ -o $(call proto_json_to_lua, ${GEN_OUT_DIR}/json_types/$x);)
245
+ @$(foreach x,$(shell ls $(PROTO_OUT_DIR)/device_types/),\
246
+ python3 ${TEMPLATE_BIN} -d ${PROTO_DIR} -j ${PROTO_OUT_DIR}/device_types/ -n ${PROJECT_NAME} \
247
+ -i ${PROTO_OUT_DIR}/device_types/$x -f ${LUA_FORMATER} -t v1/templates/apps/message.lua.mako \
248
+ -o $(call proto_json_to_lua, ${GEN_OUT_DIR}/device_types/$x);)
249
+ else
202
250
  service_message: service_message_json
203
251
  @$(foreach x,$(shell ls $(PROTO_OUT_DIR)/json_types/),\
204
252
  python3 ${TEMPLATE_BIN} -v ${VERSION} -d ${PROTO_DIR} -j ${PROTO_OUT_DIR}/json_types/ -n ${PROJECT_NAME} \
@@ -208,6 +256,7 @@ service_message: service_message_json
208
256
  python3 ${TEMPLATE_BIN} -d ${PROTO_DIR} -j ${PROTO_OUT_DIR}/device_types/ -n ${PROJECT_NAME} \
209
257
  -i ${PROTO_OUT_DIR}/device_types/$x -f ${LUA_FORMATER} -t message.lua.mako \
210
258
  -o $(call proto_json_to_lua, ${GEN_OUT_DIR}/device_types/$x);)
259
+ endif
211
260
 
212
261
  schema: ${MDS_DIR}/schema.json
213
262
  database: ${PROTO_OUT_DIR}/db_json.json
@@ -248,8 +297,13 @@ feature:
248
297
  impl_feature:
249
298
  endif
250
299
 
300
+ ifeq ($(MAJOR_VERSION_EQ_1), true)
301
+ orm_classes:
302
+ else
251
303
  orm_classes: ${PROTO_OUT_DIR}/db_json.json
252
304
  python3 ${TEMPLATE_BIN} -d ${PROTO_DIR} -j ${PROTO_OUT_DIR}/ -n ${PROJECT_NAME} -i ${PROTO_OUT_DIR}/db_json.json -f ${LUA_FORMATER} -t orm_classes.lua.mako -o ${GEN_OUT_DIR}/orm_classes.lua
305
+ endif
306
+
253
307
  else
254
308
  schema:
255
309
  model:
@@ -270,18 +324,32 @@ client_messages_json: ${MDS_DIR}/service.json ${SCRIPT_DIR}/gen_rpc_msg_json.py
270
324
  @mkdir -p ${PROTO_OUT_DIR}/json_types/
271
325
  python3 ${SCRIPT_DIR}/gen_rpc_msg_json.py -i ${MDS_DIR}/service.json -o ${PROTO_OUT_DIR}/json_types/ -d ${MDB_INTF_DIR} -n ${PROJECT_NAME} -x
272
326
 
327
+ ifeq ($(MAJOR_VERSION_EQ_1), true)
328
+ client_messages: client_messages_json
329
+ @$(foreach x,$(shell ls $(PROTO_OUT_DIR)/json_types/),\
330
+ python3 ${TEMPLATE_BIN} -v ${VERSION} -d ${PROTO_DIR} -j ${PROTO_OUT_DIR}/json_types/ -n ${PROJECT_NAME} \
331
+ -i ${PROTO_OUT_DIR}/json_types/$x -f ${LUA_FORMATER} -t v1/templates/apps/message.lua.mako \
332
+ -o $(call proto_json_to_lua, ${GEN_OUT_DIR}/json_types/$x);)
333
+ else
273
334
  client_messages: client_messages_json
274
335
  @$(foreach x,$(shell ls $(PROTO_OUT_DIR)/json_types/),\
275
336
  python3 ${TEMPLATE_BIN} -v ${VERSION} -d ${PROTO_DIR} -j ${PROTO_OUT_DIR}/json_types/ -n ${PROJECT_NAME} \
276
337
  -i ${PROTO_OUT_DIR}/json_types/$x -f ${LUA_FORMATER} -t message.lua.mako \
277
- -o $(call proto_json_to_lua, ${GEN_OUT_DIR}/json_types/$x);) \
338
+ -o $(call proto_json_to_lua, ${GEN_OUT_DIR}/json_types/$x);)
339
+ endif
278
340
 
341
+ ifeq ($(MAJOR_VERSION_EQ_1), true)
342
+ ${GEN_OUT_DIR}/client.lua : ${PROTO_OUT_DIR}/client.json ${TEMPLATE_BIN} \
343
+ ${MAJOR_VERIONS_DIR}/v1/templates/apps/client.lua.mako utils/validate.mako utils/imports.mako client_messages message
344
+ python3 ${TEMPLATE_BIN} -d ${PROTO_DIR} -v ${VERSION} -j ${PROTO_OUT_DIR}/json_types/ -n ${PROJECT_NAME} -i ${PROTO_OUT_DIR}/client.json -f ${LUA_FORMATER} -t v1/templates/apps/client.lua.mako -o $@
345
+ else
279
346
  ${GEN_OUT_DIR}/client.lua : ${PROTO_OUT_DIR}/client.json ${TEMPLATE_BIN} \
280
347
  client.lua.mako utils/validate.mako utils/imports.mako client_messages message
281
348
  python3 ${TEMPLATE_BIN} -d ${PROTO_DIR} -v ${VERSION} -j ${PROTO_OUT_DIR}/json_types/ -n ${PROJECT_NAME} -i ${PROTO_OUT_DIR}/client.json -f ${LUA_FORMATER} -t client.lua.mako -o $@
349
+ endif
282
350
 
283
351
  client: ${GEN_OUT_DIR}/client.lua
284
352
 
285
353
  endif
286
354
 
287
- all: client service modelx message datas datas_conf restapi restapi_resource schema model types_message model_message database ipmi orm_classes feature impl_feature
355
+ all: client service modelx message datas datas_conf restapi restapi_resource schema model types_message model_message database ipmi orm_classes feature impl_feature model_consistency_check