Skip to content

Commit c1ceceb

Browse files
authored
add diff level to meta changes (#425)
* add diff level to meta changes
1 parent 8a07397 commit c1ceceb

7 files changed

Lines changed: 139 additions & 63 deletions

File tree

azure-cli-diff-tool/HISTORY.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
33
Release History
44
===============
5+
0.0.5
6+
++++++
7+
* Add `DiffLevel` to meta comparison
8+
* Downgrade change level according to warn list
9+
510
0.0.4
611
++++++
712
* Add meta change parameter update warn list

azure-cli-diff-tool/azure_cli_diff_tool/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
extract_module_name_from_meta_file, export_meta_changes_to_csv, export_meta_changes_to_json, \
1919
export_meta_changes_to_dict
2020

21-
__VERSION__ = '0.0.4'
21+
__VERSION__ = '0.0.5'
2222

2323
logger = logging.getLogger(__name__)
2424

azure-cli-diff-tool/azure_cli_diff_tool/_const.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,35 @@
1717
BREAKING_CHANE_RULE_LINK_URL_PREFIX = "https://github.com/Azure/azure-cli/blob/dev/doc/breaking_change_rules/"
1818
BREAKING_CHANE_RULE_LINK_URL_SUFFIX = ".md"
1919

20+
CMD_REMOVE_SUFFIX_WARN_LIST = ["wait"]
21+
2022
CMD_PROPERTY_REMOVE_BREAK_LIST = []
23+
CMD_PROPERTY_REMOVE_WARN_LIST = []
24+
2125
CMD_PROPERTY_ADD_BREAK_LIST = ["confirmation"]
26+
CMD_PROPERTY_ADD_WARN_LIST = []
27+
2228
CMD_PROPERTY_UPDATE_BREAK_LIST = []
29+
CMD_PROPERTY_UPDATE_WARN_LIST = []
30+
2331
CMD_PROPERTY_IGNORED_LIST = ["is_aaz", "supports_no_wait"]
2432

25-
PARA_PROPERTY_REMOVE_BREAK_LIST = ["options", "id_part", "nargs"]
26-
PARA_PROPERTY_ADD_BREAK_LIST = ["required", "choices"]
27-
PARA_PROPERTY_UPDATE_BREAK_LIST = ["default", "aaz_default", "type", "aaz_type"]
28-
PARA_PROPERTY_UPDATE_WARN_LIST = ["type", "aaz_type"]
33+
PARA_PROPERTY_REMOVE_BREAK_LIST = ["options"]
34+
PARA_PROPERTY_REMOVE_WARN_LIST = ["id_part", "nargs"]
35+
36+
PARA_PROPERTY_ADD_BREAK_LIST = ["required"]
37+
PARA_PROPERTY_ADD_WARN_LIST = ["choices"]
38+
39+
PARA_PROPERTY_UPDATE_BREAK_LIST = ["default", "aaz_default"]
40+
PARA_PROPERTY_UPDATE_WARN_LIST = ["type", "aaz_type", "choices", "nargs"]
41+
2942
PARA_NAME_IGNORED_LIST = ["force_string"]
3043
PARA_PROPERTY_IGNORED_LIST = []
3144
PARA_VALUE_IGNORED_LIST = ["generic_update_set", "generic_update_add", "generic_update_remove",
3245
"generic_update_force_string"]
3346

34-
EXPORTED_CSV_META_HEADER = ["module", "cmd_name", "rule_id", "rule_name", "is_break", "rule_link_url",
35-
"rule_message", "suggest_message"]
47+
EXPORTED_CSV_META_HEADER = ["module", "cmd_name", "rule_id", "rule_name", "is_break", "diff_level",
48+
"rule_link_url", "rule_message", "suggest_message"]
3649

3750
CHANGE_RULE_MESSAGE_MAPPING = {
3851
"1000": "default Message",

azure-cli-diff-tool/azure_cli_diff_tool/meta_change.py

Lines changed: 42 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,128 +4,137 @@
44
# license information.
55
# -----------------------------------------------------------------------------
66

7-
from .utils import get_change_rule_template, get_change_suggest_template
7+
from .utils import get_change_rule_template, get_change_suggest_template, DiffLevel
88
from ._const import BREAKING_CHANE_RULE_LINK_URL_PREFIX, BREAKING_CHANE_RULE_LINK_URL_SUFFIX, \
99
CMD_PROPERTY_IGNORED_LIST, PARA_NAME_IGNORED_LIST, PARA_PROPERTY_IGNORED_LIST, PARA_VALUE_IGNORED_LIST
1010

1111

1212
class MetaChange:
1313

14-
def __init__(self, rule_id="1000", is_break=False, rule_message="", suggest_message="",
14+
def __init__(self, rule_id="1000", is_break=False, diff_level=DiffLevel.INFO, rule_message="", suggest_message="",
1515
is_ignore=False, filter_key=None):
1616
self.rule_id = rule_id
1717
self.is_break = is_break
18+
self.diff_level = diff_level
1819
self.rule_message = rule_message
1920
self.suggest_message = suggest_message
2021
self.rule_link_url = BREAKING_CHANE_RULE_LINK_URL_PREFIX + self.rule_id + BREAKING_CHANE_RULE_LINK_URL_SUFFIX
2122
self.is_ignore = is_ignore
2223
self.filter_key = filter_key
2324

2425
def __str__(self):
25-
res = [self.rule_message]
26+
res = [self.rule_message, "diff_level: " + str(self.diff_level.value)]
2627
if self.is_break:
2728
res.append("is_break: {0}".format(self.is_break))
2829
res.append(self.suggest_message)
2930
return " | ".join([str(a) for a in res])
3031

3132

3233
class SubgroupAdd(MetaChange):
33-
def __init__(self, subgroup_name, is_break=False):
34+
def __init__(self, subgroup_name, is_break=False, diff_level=DiffLevel.INFO):
3435
if not subgroup_name:
3536
raise Exception("sub group name needed")
3637
self.rule_id = "1011"
3738
self.subgroup_name = subgroup_name
3839
self.is_break = is_break
40+
self.diff_level = diff_level
3941
self.rule_message = get_change_rule_template(self.rule_id).format(self.subgroup_name)
4042
self.suggest_message = get_change_suggest_template(self.rule_id).format(self.subgroup_name) \
4143
if self.is_break else ""
42-
super().__init__(self.rule_id, is_break, self.rule_message, self.suggest_message)
44+
super().__init__(self.rule_id, is_break, diff_level, self.rule_message, self.suggest_message)
4345

4446

4547
class SubgroupRemove(MetaChange):
46-
def __init__(self, subgroup_name, is_break=True):
48+
def __init__(self, subgroup_name, is_break=True, diff_level=DiffLevel.BREAK):
4749
if not subgroup_name:
4850
raise Exception("sub group name needed")
4951
self.rule_id = "1012"
5052
self.subgroup_name = subgroup_name
5153
self.is_break = is_break
54+
self.diff_level = diff_level
5255
self.rule_message = get_change_rule_template(self.rule_id).format(self.subgroup_name)
5356
self.suggest_message = get_change_suggest_template(self.rule_id).format(self.subgroup_name) \
5457
if self.is_break else ""
55-
super().__init__(self.rule_id, is_break, self.rule_message, self.suggest_message)
58+
super().__init__(self.rule_id, is_break, diff_level, self.rule_message, self.suggest_message)
5659

5760

5861
class CmdAdd(MetaChange):
59-
def __init__(self, cmd_name, is_break=False):
62+
def __init__(self, cmd_name, is_break=False, diff_level=DiffLevel.INFO):
6063
if not cmd_name:
6164
raise Exception("cmd name needed")
6265
self.rule_id = "1001"
6366
self.cmd_name = cmd_name
6467
self.is_break = is_break
68+
self.diff_level = diff_level
6569
self.rule_message = get_change_rule_template(self.rule_id).format(self.cmd_name)
6670
self.suggest_message = get_change_suggest_template(self.rule_id).format(self.cmd_name) if self.is_break else ""
67-
super().__init__(self.rule_id, is_break, self.rule_message, self.suggest_message)
71+
super().__init__(self.rule_id, is_break, diff_level, self.rule_message, self.suggest_message)
6872

6973

7074
class CmdRemove(MetaChange):
71-
def __init__(self, cmd_name, is_break=True):
75+
def __init__(self, cmd_name, is_break=True, diff_level=DiffLevel.BREAK):
7276
if not cmd_name:
7377
raise Exception("cmd name needed")
7478
self.cmd_name = cmd_name
7579
self.rule_id = "1002"
7680
self.is_break = is_break
81+
self.diff_level = diff_level
7782
self.rule_message = get_change_rule_template(self.rule_id).format(self.cmd_name)
7883
self.suggest_message = get_change_suggest_template(self.rule_id).format(self.cmd_name) if self.is_break else ""
79-
super().__init__(self.rule_id, is_break, self.rule_message, self.suggest_message)
84+
super().__init__(self.rule_id, is_break, diff_level, self.rule_message, self.suggest_message)
8085

8186

8287
class CmdPropAdd(MetaChange):
83-
def __init__(self, cmd_name, cmd_property, is_break=False):
88+
def __init__(self, cmd_name, cmd_property, is_break=False, diff_level=DiffLevel.INFO):
8489
if not cmd_name or not cmd_property:
8590
raise Exception("cmd name needed")
8691
self.rule_id = "1003"
8792
self.is_ignore = False
8893
self.cmd_name = cmd_name
8994
self.cmd_property = cmd_property
9095
self.is_break = is_break
96+
self.diff_level = diff_level
9197
self.rule_message = get_change_rule_template(self.rule_id).format(self.cmd_name, self.cmd_property)
9298
self.suggest_message = get_change_suggest_template(self.rule_id).format(self.cmd_property, self.cmd_name) \
9399
if self.is_break else ""
94100
if cmd_property in CMD_PROPERTY_IGNORED_LIST:
95101
self.is_ignore = True
96102
self.filter_key = [self.rule_id, self.cmd_name, self.cmd_property]
97-
super().__init__(self.rule_id, is_break, self.rule_message, self.suggest_message, self.is_ignore,
103+
super().__init__(self.rule_id, is_break, diff_level, self.rule_message, self.suggest_message, self.is_ignore,
98104
self.filter_key)
99105

100106

101107
class CmdPropRemove(MetaChange):
102-
def __init__(self, cmd_name, cmd_property, is_break=False):
108+
def __init__(self, cmd_name, cmd_property, is_break=False, diff_level=DiffLevel.BREAK):
103109
if not cmd_name or not cmd_property:
104110
raise Exception("cmd name needed")
105111
self.rule_id = "1004"
106112
self.is_ignore = False
107113
self.cmd_name = cmd_name
108114
self.cmd_property = cmd_property
109115
self.is_break = is_break
116+
self.diff_level = diff_level
110117
self.rule_message = get_change_rule_template(self.rule_id).format(self.cmd_name, self.cmd_property)
111118
self.suggest_message = get_change_suggest_template(self.rule_id).format(self.cmd_property, self.cmd_name) \
112119
if self.is_break else ""
113120
if cmd_property in CMD_PROPERTY_IGNORED_LIST:
114121
self.is_ignore = True
115122
self.filter_key = [self.rule_id, self.cmd_name, self.cmd_property]
116-
super().__init__(self.rule_id, is_break, self.rule_message, self.suggest_message,
123+
super().__init__(self.rule_id, is_break, diff_level, self.rule_message, self.suggest_message,
117124
self.is_ignore, self.filter_key)
118125

119126

120127
class CmdPropUpdate(MetaChange):
121128

122-
def __init__(self, cmd_name, cmd_property, is_break=False, old_value=None, new_value=None):
129+
def __init__(self, cmd_name, cmd_property, is_break=False, diff_level=DiffLevel.INFO,
130+
old_value=None, new_value=None):
123131
if not cmd_name or not cmd_property:
124132
raise Exception("cmd name and cmd prop needed")
125133
self.rule_id = "1005"
126134
self.is_ignore = False
127135
self.cmd_name = cmd_name
128136
self.is_break = is_break
137+
self.diff_level = diff_level
129138
self.cmd_prop_updated = cmd_property
130139
self.old_value = ""
131140
self.new_value = ""
@@ -142,43 +151,45 @@ def __init__(self, cmd_name, cmd_property, is_break=False, old_value=None, new_v
142151
if cmd_property in CMD_PROPERTY_IGNORED_LIST:
143152
self.is_ignore = True
144153
self.filter_key = [self.rule_id, self.cmd_name, self.cmd_prop_updated]
145-
super().__init__(self.rule_id, is_break, self.rule_message, self.suggest_message,
154+
super().__init__(self.rule_id, is_break, diff_level, self.rule_message, self.suggest_message,
146155
self.is_ignore, self.filter_key)
147156

148157

149158
class ParaAdd(MetaChange):
150159

151-
def __init__(self, cmd_name, para_name, is_break=False):
160+
def __init__(self, cmd_name, para_name, is_break=False, diff_level=DiffLevel.INFO):
152161
if not cmd_name or not para_name:
153162
raise Exception("cmd name, parameter name needed")
154163
self.rule_id = "1006"
155164
self.cmd_name = cmd_name
156165
self.para_name = para_name
157166
self.is_break = is_break
167+
self.diff_level = diff_level
158168
self.rule_message = get_change_rule_template(self.rule_id).format(self.cmd_name, self.para_name)
159169
self.suggest_message = get_change_suggest_template(self.rule_id).format(self.para_name,
160170
self.cmd_name) if self.is_break else ""
161-
super().__init__(self.rule_id, is_break, self.rule_message, self.suggest_message)
171+
super().__init__(self.rule_id, is_break, diff_level, self.rule_message, self.suggest_message)
162172

163173

164174
class ParaRemove(MetaChange):
165175

166-
def __init__(self, cmd_name, para_name, is_break=False):
176+
def __init__(self, cmd_name, para_name, is_break=False, diff_level=DiffLevel.BREAK):
167177
if not cmd_name or not para_name:
168178
raise Exception("cmd name, parameter name needed")
169179
self.rule_id = "1007"
170180
self.cmd_name = cmd_name
171181
self.para_name = para_name
172182
self.is_break = is_break
183+
self.diff_level = diff_level
173184
self.rule_message = get_change_rule_template(self.rule_id).format(self.cmd_name, self.para_name)
174185
self.suggest_message = get_change_suggest_template(self.rule_id).format(self.para_name,
175186
self.cmd_name) if self.is_break else ""
176-
super().__init__(self.rule_id, is_break, self.rule_message, self.suggest_message)
187+
super().__init__(self.rule_id, is_break, diff_level, self.rule_message, self.suggest_message)
177188

178189

179190
class ParaPropAdd(MetaChange):
180191

181-
def __init__(self, cmd_name, para_name, para_property, para_prop_value, is_break=False):
192+
def __init__(self, cmd_name, para_name, para_property, para_prop_value, is_break=False, diff_level=DiffLevel.INFO):
182193
if not cmd_name or not para_name or not para_property:
183194
raise Exception("cmd name, parameter name and parameter property needed")
184195
self.rule_id = "1008"
@@ -188,6 +199,7 @@ def __init__(self, cmd_name, para_name, para_property, para_prop_value, is_break
188199
self.para_prop = para_property
189200
self.para_prop_value = para_prop_value
190201
self.is_break = is_break
202+
self.diff_level = diff_level
191203

192204
self.rule_message = get_change_rule_template(self.rule_id).format(self.cmd_name, self.para_name,
193205
self.para_prop, self.para_prop_value)
@@ -197,12 +209,12 @@ def __init__(self, cmd_name, para_name, para_property, para_prop_value, is_break
197209
self.cmd_name) if self.is_break else ""
198210
if para_property in PARA_PROPERTY_IGNORED_LIST or para_name in PARA_NAME_IGNORED_LIST:
199211
self.is_ignore = True
200-
super().__init__(self.rule_id, is_break, self.rule_message, self.suggest_message, self.is_ignore)
212+
super().__init__(self.rule_id, is_break, diff_level, self.rule_message, self.suggest_message, self.is_ignore)
201213

202214

203215
class ParaPropRemove(MetaChange):
204216

205-
def __init__(self, cmd_name, para_name, para_property, para_prop_value, is_break=False):
217+
def __init__(self, cmd_name, para_name, para_property, para_prop_value, is_break=False, diff_level=DiffLevel.BREAK):
206218
if not cmd_name or not para_name or not para_property:
207219
raise Exception("cmd name, parameter name and parameter property needed")
208220
self.rule_id = "1009"
@@ -212,6 +224,7 @@ def __init__(self, cmd_name, para_name, para_property, para_prop_value, is_break
212224
self.para_prop = para_property
213225
self.para_prop_value = para_prop_value
214226
self.is_break = is_break
227+
self.diff_level = diff_level
215228

216229
self.rule_message = get_change_rule_template(self.rule_id).format(self.cmd_name, self.para_name,
217230
self.para_prop, self.para_prop_value)
@@ -221,12 +234,13 @@ def __init__(self, cmd_name, para_name, para_property, para_prop_value, is_break
221234
self.cmd_name) if self.is_break else ""
222235
if para_property in PARA_PROPERTY_IGNORED_LIST or para_name in PARA_NAME_IGNORED_LIST:
223236
self.is_ignore = True
224-
super().__init__(self.rule_id, is_break, self.rule_message, self.suggest_message, self.is_ignore)
237+
super().__init__(self.rule_id, is_break, diff_level, self.rule_message, self.suggest_message, self.is_ignore)
225238

226239

227240
class ParaPropUpdate(MetaChange):
228241

229-
def __init__(self, cmd_name, para_name, para_property, is_break=False, old_value=None, new_value=None):
242+
def __init__(self, cmd_name, para_name, para_property, is_break=False, diff_level=DiffLevel.INFO,
243+
old_value=None, new_value=None):
230244
if not cmd_name or not para_name or not para_property:
231245
raise Exception("cmd name, parameter name and parameter property needed")
232246
self.rule_id = "1010"
@@ -235,6 +249,7 @@ def __init__(self, cmd_name, para_name, para_property, is_break=False, old_value
235249
self.para_name = para_name
236250
self.para_prop_updated = para_property
237251
self.is_break = is_break
252+
self.diff_level = diff_level
238253
self.old_value = None
239254
self.new_value = None
240255
if old_value is not None:
@@ -254,5 +269,5 @@ def __init__(self, cmd_name, para_name, para_property, is_break=False, old_value
254269
if self.new_value in PARA_VALUE_IGNORED_LIST or self.old_value in PARA_VALUE_IGNORED_LIST:
255270
self.is_ignore = True
256271
self.filter_key = [self.rule_id, self.cmd_name, self.para_name, self.para_prop_updated]
257-
super().__init__(self.rule_id, is_break, self.rule_message, self.suggest_message,
272+
super().__init__(self.rule_id, is_break, diff_level, self.rule_message, self.suggest_message,
258273
self.is_ignore, self.filter_key)

0 commit comments

Comments
 (0)