annet 1.0.3__py3-none-any.whl → 1.1.0__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 annet might be problematic. Click here for more details.

@@ -1,73 +1,122 @@
1
1
  import re
2
2
  from collections import OrderedDict as odict
3
- from functools import wraps
3
+ import functools
4
4
 
5
5
  from annet.annlib.lib import jun_activate, jun_is_inactive, merge_dicts
6
6
  from annet.annlib.types import Op
7
-
7
+ from annet.tabparser import JuniperFormatter
8
8
  from annet.rulebook import common
9
9
 
10
10
 
11
- def _inactive_blocks(diff_foo):
12
- @wraps(diff_foo)
13
- def wrapper(old, new, diff_pre, *args, **kwargs):
11
+ def comment_processor(item: common.DiffItem):
12
+ if item.op in (Op.REMOVED, Op.ADDED) and item.row.startswith(JuniperFormatter.Comment.begin):
13
+ comment = JuniperFormatter.Comment.loads(item.row)
14
+
15
+ item.diff_pre["attrs"]["context"]["row"] = comment.row
16
+ item.diff_pre["attrs"]["context"]["comment"] = comment.comment
17
+ item.diff_pre["key"] = item.diff_pre["raw_rule"] = (
18
+ f"{JuniperFormatter.Comment.begin} {comment.row} {JuniperFormatter.Comment.end}"
19
+ )
20
+
21
+ return common.DiffItem(
22
+ item.op,
23
+ f"{JuniperFormatter.Comment.begin} {comment.comment} {JuniperFormatter.Comment.end}",
24
+ item.children,
25
+ item.diff_pre,
26
+ )
27
+ else:
28
+ return item
29
+
30
+
31
+ def inactive_blocks(diff_foo):
32
+ @functools.wraps(diff_foo)
33
+ def wrapper(old: odict, new: odict, diff_pre, *args, **kwargs):
14
34
  old_inactives = list(map(jun_activate, filter(jun_is_inactive, old)))
15
35
  new_inactives = list(map(jun_activate, filter(jun_is_inactive, new)))
36
+
37
+ diff: list[common.DiffItem]
38
+
16
39
  if len(old_inactives) == 0 and len(new_inactives) == 0:
17
- return diff_foo(old, new, diff_pre, *args, **kwargs)
18
-
19
- inactive_pre = odict([(jun_activate(k), v) for k, v in diff_pre.items() if jun_is_inactive(k)])
20
- merged_pre = merge_dicts(diff_pre, inactive_pre)
21
- diff = diff_foo(_strip_toplevel_inactives(old),
22
- _strip_toplevel_inactives(new),
23
- merged_pre,
24
- *args, **kwargs)
25
-
26
- for activated in [k for k in old_inactives if k in new]:
27
- diff += [(Op.ADDED, _activate_cmd(activated, merged_pre), {}, diff_pre[activated]["match"])]
28
-
29
- for deactivated in [k for k in new_inactives if k not in old_inactives]:
30
- # если деактивуруемого блока не существует - ставим один deactivate, глубже не идем
31
- if deactivated not in diff_pre:
32
- diff = [(Op.ADDED, _deactivate_cmd(deactivated, merged_pre), {}, inactive_pre[deactivated]["match"])]
33
- else:
34
- diff += [(Op.ADDED, _deactivate_cmd(deactivated, merged_pre), {}, diff_pre[deactivated]["match"])]
35
- return diff
40
+ diff = diff_foo(old, new, diff_pre, *args, **kwargs)
41
+ else:
42
+ inactive_pre = odict([(jun_activate(k), v) for k, v in diff_pre.items() if jun_is_inactive(k)])
43
+ merged_pre = merge_dicts(diff_pre, inactive_pre)
44
+
45
+ diff = diff_foo(
46
+ strip_toplevel_inactives(old),
47
+ strip_toplevel_inactives(new),
48
+ merged_pre,
49
+ *args, **kwargs
50
+ )
51
+
52
+ for activated in [k for k in old_inactives if k in new]:
53
+ diff.append(
54
+ common.DiffItem(
55
+ Op.ADDED,
56
+ activate_cmd(activated, merged_pre),
57
+ [],
58
+ diff_pre[activated]["match"]
59
+ )
60
+ )
61
+
62
+ for deactivated in [k for k in new_inactives if k not in old_inactives]:
63
+ # если деактивуруемого блока не существует - ставим один deactivate, глубже не идем
64
+ if deactivated not in diff_pre:
65
+ diff = [
66
+ common.DiffItem(
67
+ Op.ADDED,
68
+ deactivate_cmd(deactivated, merged_pre),
69
+ [],
70
+ inactive_pre[deactivated]["match"]
71
+ )
72
+ ]
73
+ else:
74
+ diff.append(
75
+ common.DiffItem(
76
+ Op.ADDED,
77
+ deactivate_cmd(deactivated, merged_pre),
78
+ [],
79
+ diff_pre[deactivated]["match"]
80
+ )
81
+ )
82
+
83
+ return list(map(comment_processor, diff))
84
+
36
85
  return wrapper
37
86
 
38
87
 
39
- @_inactive_blocks
88
+ @inactive_blocks
40
89
  def default_diff(old, new, diff_pre, _pops=(Op.AFFECTED,)):
41
90
  diff = common.default_diff(old, new, diff_pre, _pops)
42
- diff = _ignore_quotes(diff)
43
- diff = _strip_inactive_removed(diff)
91
+ diff = ignore_quotes(diff)
92
+ diff = strip_inactive_removed(diff)
44
93
  return diff
45
94
 
46
95
 
47
- @_inactive_blocks
96
+ @inactive_blocks
48
97
  def ordered_diff(old, new, diff_pre, _pops=(Op.AFFECTED,)):
49
98
  diff = common.ordered_diff(old, new, diff_pre, _pops)
50
- diff = _ignore_quotes(diff)
51
- diff = _strip_inactive_removed(diff)
99
+ diff = ignore_quotes(diff)
100
+ diff = strip_inactive_removed(diff)
52
101
  return diff
53
102
 
54
103
 
55
104
  # =====
56
- def _strip_toplevel_inactives(tree):
105
+ def strip_toplevel_inactives(tree):
57
106
  for inactive in filter(jun_is_inactive, tree):
58
107
  assert jun_activate(inactive) not in tree
59
108
  return odict([(k, v) if not jun_is_inactive(k) else (jun_activate(k), v) for k, v in tree.items()])
60
109
 
61
110
 
62
- def _activate_cmd(active_key, diff_pre):
63
- return _cmd(active_key, diff_pre, "activate")
111
+ def activate_cmd(active_key, diff_pre):
112
+ return cmd(active_key, diff_pre, "activate")
64
113
 
65
114
 
66
- def _deactivate_cmd(active_key, diff_pre):
67
- return _cmd(active_key, diff_pre, "deactivate")
115
+ def deactivate_cmd(active_key, diff_pre):
116
+ return cmd(active_key, diff_pre, "deactivate")
68
117
 
69
118
 
70
- def _cmd(active_key, diff_pre, cmd):
119
+ def cmd(active_key, diff_pre, cmd):
71
120
  assert not jun_is_inactive(active_key)
72
121
  if not diff_pre[active_key]["subtree"]:
73
122
  # Если конанда не имеет подблоков И имеет агрументы то надо их отбросить
@@ -75,7 +124,7 @@ def _cmd(active_key, diff_pre, cmd):
75
124
  return " ".join([cmd, active_key])
76
125
 
77
126
 
78
- def _ignore_quotes(diff):
127
+ def ignore_quotes(diff):
79
128
  """
80
129
  Фильтрует из diff строки которые различаются
81
130
  только наличием/отсутсвием кавычек
@@ -86,19 +135,19 @@ def _ignore_quotes(diff):
86
135
  """
87
136
  equivs = {}
88
137
  for elem in diff:
89
- key = _strip_quotes(elem[1])
138
+ key = strip_quotes(elem[1])
90
139
  if key not in equivs:
91
140
  equivs[key] = 0
92
141
  equivs[key] += 1
93
- filtered_diff = [elem for elem in diff if equivs[_strip_quotes(elem[1])] == 1]
142
+ filtered_diff = [elem for elem in diff if equivs[strip_quotes(elem[1])] == 1]
94
143
  return filtered_diff
95
144
 
96
145
 
97
- def _strip_quotes(key):
146
+ def strip_quotes(key):
98
147
  return re.sub(r"\"(?P<quoted_text>[^\"]+)\"$", r"\g<quoted_text>", key)
99
148
 
100
149
 
101
- def _strip_inactive_removed(diff):
150
+ def strip_inactive_removed(diff):
102
151
  for elem in diff:
103
152
  if elem[0] == Op.REMOVED and elem[3]["key"]:
104
153
  key = elem[3]["key"][0]
@@ -1,3 +1,4 @@
1
+ # vim: set syntax=annrulebook:
1
2
  # В этом файле определяется порядок команд, в котором их следует подавать на устройство.
2
3
  # - Если порядок команды не важен - ее можно не писать сюда совсем.
3
4
  # - Если команда начинается с undo и прописан параметр %order_reverse - команда считается
@@ -29,7 +30,7 @@ ntp
29
30
 
30
31
 
31
32
  qos profile *
32
- ~ %global
33
+ ~
33
34
 
34
35
 
35
36
  snmp-server
@@ -49,7 +50,7 @@ tacacs-server
49
50
 
50
51
 
51
52
  aaa group
52
- ~ %global
53
+ ~
53
54
 
54
55
 
55
56
  aaa
@@ -59,7 +60,7 @@ username
59
60
 
60
61
 
61
62
  role
62
- ~ %global
63
+ ~
63
64
 
64
65
 
65
66
  vlan
@@ -73,14 +74,14 @@ mpls ip
73
74
  mpls ldp
74
75
 
75
76
  router isis
76
- ~ %global
77
+ ~
77
78
 
78
79
  interface
79
- ~ %global
80
+ ~
80
81
 
81
82
 
82
83
  (?:ip|ipv6) access-list
83
- ~ %global
84
+ ~
84
85
 
85
86
 
86
87
  (?:ip|ipv6) route
@@ -101,15 +102,15 @@ qos map
101
102
 
102
103
 
103
104
  route-map * (?:permit|deny) *
104
- ~ %global
105
+ ~
105
106
 
106
107
 
107
108
  router bfd
108
- ~ %global
109
+ ~
109
110
 
110
111
 
111
112
  router bgp
112
- ~ %global
113
+ ~
113
114
 
114
115
 
115
116
  router multicast
@@ -119,8 +120,7 @@ ip tacacs
119
120
 
120
121
 
121
122
  management
122
- ~ %global
123
+ ~
123
124
 
124
125
 
125
- # vim: set syntax=annrulebook:
126
- ~ %global
126
+ ~
@@ -5,7 +5,7 @@ qos profile *
5
5
  ~ %global
6
6
 
7
7
  username * ssh-key
8
- username *
8
+ username * %logic=arista.aaa.user
9
9
 
10
10
  aaa group ~
11
11
  ~ %global
@@ -1,3 +1,4 @@
1
+ # vim: set syntax=annrulebook:
1
2
  # В этом файле определяется порядок команд, в котором их следует подавать на устройство.
2
3
  # - Если порядок команды не важен - ее можно не писать сюда совсем.
3
4
  # - Если команда начинается с undo и прописан параметр %order_reverse - команда считается
@@ -384,5 +385,4 @@ undo sflow %order_reverse
384
385
  # индекс референсится в логике патчинга префикс-листа huawei.misc.prefix_list
385
386
  undo ip */(ip|ipv6)/-prefix * index 99999999 %order_reverse
386
387
 
387
- # vim: set syntax=annrulebook:
388
- ~ %global
388
+ ~
@@ -0,0 +1,4 @@
1
+ # Правило на все команды
2
+ * %global
3
+ # Добавляем веса комментам, чтобы они катились всегда после команд
4
+ */\/\*(?:(?!\*\/).)*\*\// %global
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: annet
3
- Version: 1.0.3
3
+ Version: 1.1.0
4
4
  Summary: annet
5
5
  Home-page: https://github.com/annetutil/annet
6
6
  License: MIT
@@ -15,7 +15,6 @@ Requires-Dist: PyYAML>=6.0.1
15
15
  Requires-Dist: Pygments>=2.14.0
16
16
  Requires-Dist: Mako>=1.2.4
17
17
  Requires-Dist: Jinja2>=3.1.2
18
- Requires-Dist: psutil>=5.8.0
19
18
  Requires-Dist: packaging>=23.2
20
19
  Requires-Dist: contextlog>=1.1
21
20
  Requires-Dist: valkit>=0.1.4
@@ -1,14 +1,14 @@
1
1
  annet/__init__.py,sha256=0OKkFkqog8As7B6ApdpKQkrEAcEELUREWp82D8WvGA8,1846
2
2
  annet/annet.py,sha256=TMdEuM7GJQ4TjRVmuK3bCTZN-21lxjQ9sXqEdILUuBk,725
3
3
  annet/argparse.py,sha256=v1MfhjR0B8qahza0WinmXClpR8UiDFhmwDDWtNroJPA,12855
4
- annet/bgp_models.py,sha256=NBPbMWwzo4uWFslrpE4blQO1k4CxJqeleRBDhDg9Rd0,9665
4
+ annet/bgp_models.py,sha256=oibTSdipNkGL4t8Xn94bhyKHMOtwbPBqmYaAy4FmTxQ,12361
5
5
  annet/cli.py,sha256=hDpjIr3w47lgQ_CvCQS1SXFDK-SJrf5slbT__5u6GIA,12342
6
6
  annet/cli_args.py,sha256=KQlihxSl-Phhq1-9oJDdNSbIllEX55LlPfH6viEKOuw,13483
7
7
  annet/connectors.py,sha256=aoiDVLPizx8CW2p8SAwGCzyO_WW8H9xc2aujbGC4bDg,4882
8
8
  annet/deploy.py,sha256=3O96k17FbVt8KCvxF4gujXAB81U2-XRJyHLpbc9ekSQ,7529
9
9
  annet/deploy_ui.py,sha256=SDTJ-CF6puW0KHQ0g_NDp61Tqh6xkTBMxv8PrBhGyNI,27977
10
10
  annet/diff.py,sha256=zLcaCnb4lZRUb7frpH1CstQ3kacRcCblZs1uLG8J5lk,3391
11
- annet/executor.py,sha256=Jny-hm0otZA1naPpFWR-R16SbaZioSQ8pkx-Yd2PYlM,19004
11
+ annet/executor.py,sha256=ZOuexyr2k7CtUttaP1mAZMRoSA-ja_AHaH6inQji24A,5575
12
12
  annet/filtering.py,sha256=ZtqxPsKdV9reZoRxtQyBg22BqyMqd-2SotYcxZ-68AQ,903
13
13
  annet/gen.py,sha256=A718tYqIcxAa8tQEdjR6PjQ2ovWBnwPH7STKh38lmFY,33567
14
14
  annet/hardware.py,sha256=_iR28dWiPtt6ZYdk-qg1sxazkSRJE3ukqKB-fFFfQak,1141
@@ -50,21 +50,21 @@ annet/annlib/filter_acl.py,sha256=0w1VF6WcONiTYTQh0yWi6_j9rCTc_kMLAUMr0hbdkNU,72
50
50
  annet/annlib/jsontools.py,sha256=BS7s4rI8R9c_y3zz0zYl1l6con65oQ0MvfsC1dsXZts,5535
51
51
  annet/annlib/lib.py,sha256=eJ4hcVuQ6pdYBzLs4YKCHFtq45idOfZCYp92XfF7_QI,15317
52
52
  annet/annlib/output.py,sha256=_SjJ6G6bejvnTKqNHw6xeio0FT9oO3OIkLaOC3cEga4,7569
53
- annet/annlib/patching.py,sha256=p5u3jl3_Iod0CGcnfZsfFR3Izo_roorny_v0stjDCWs,21142
54
- annet/annlib/tabparser.py,sha256=Xsje7t2bEZqZ8hhgnEYgjQGaDZ5mBWgNxwE2wpCkwXQ,28961
53
+ annet/annlib/patching.py,sha256=5CZOT5RZsOgOPm-NhzJe3YwpbYlw6DLKsOhvZil6pdc,21258
54
+ annet/annlib/tabparser.py,sha256=oGQyf_w6y4mnms0Lybjw1LDf3vD1DuucV00SHYWrpKI,30833
55
55
  annet/annlib/types.py,sha256=VHU0CBADfYmO0xzB_c5f-mcuU3dUumuJczQnqGlib9M,852
56
56
  annet/annlib/netdev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
57
  annet/annlib/netdev/db.py,sha256=fI_u5aya4l61mbYSjj4JwlVfi3s7obt2jqERSuXGRUI,1634
58
58
  annet/annlib/netdev/devdb/__init__.py,sha256=aKYjjLbJebdKBjnGDpVLQdSqrV2JL24spGm58tmMWVU,892
59
- annet/annlib/netdev/devdb/data/devdb.json,sha256=4zTtgZw0SagYZuyItYiwoFxUAsQ1NTXfn2MjRSh-b4U,6387
59
+ annet/annlib/netdev/devdb/data/devdb.json,sha256=E9dnmAbAJpg_-F82ZZIjUaKFL02vDC7W7yfMyjaah2Q,6561
60
60
  annet/annlib/netdev/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
61
  annet/annlib/netdev/views/dump.py,sha256=rIlyvnA3uM8bB_7oq1nS2KDxTp6dQh2hz-FbNhYIpOU,4630
62
62
  annet/annlib/netdev/views/hardware.py,sha256=3JCZLH7deIHhCguwPJTUX-WDvWjG_xt6BdSEZSO6zkQ,4226
63
63
  annet/annlib/rbparser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
64
  annet/annlib/rbparser/acl.py,sha256=RR8yPt6t96_IiyuKVbeZ-3x32cyhBAT2wC1y99oWBO8,3931
65
65
  annet/annlib/rbparser/deploying.py,sha256=ACT8QNhDAhJx3ZKuGh2nYBOrpdka2qEKuLDxvQAGKLk,1649
66
- annet/annlib/rbparser/ordering.py,sha256=DiKqyY8Khz-5MTxNF1GSNtZgtyKwT3YYCXpahIPB6Ps,1779
67
- annet/annlib/rbparser/platform.py,sha256=hnxznTfV9txXi1PkR1hZrprTrQJvlwgqXVL8vXkYmv4,1558
66
+ annet/annlib/rbparser/ordering.py,sha256=Ux_uIOywzSbYcALK_k_bdzhC9pyYerqETsI63hsutJI,1949
67
+ annet/annlib/rbparser/platform.py,sha256=Q9HtqmhyzV3JK_236_4LjC2wgp5fgxY6seDfWYl1oHU,1558
68
68
  annet/annlib/rbparser/syntax.py,sha256=iZ7Y-4QQBw4L3UtjEh54qisiRDhobl7HZxFNdP8mi54,3577
69
69
  annet/annlib/rulebook/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
70
  annet/annlib/rulebook/common.py,sha256=hqwmmNofm5q2f-hV2usMY-IPMeiANLth28tZcRBYJTw,16640
@@ -84,10 +84,10 @@ annet/generators/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
84
84
  annet/generators/common/initial.py,sha256=qYBxXFhyOPy34cxc6hsIXseod-lYCmmbuNHpM0uteY0,1244
85
85
  annet/mesh/__init__.py,sha256=lcgdnBIxc2MAN7Er1bcErEKPqrjWO4uIp_1FldMXTYg,557
86
86
  annet/mesh/basemodel.py,sha256=E6NTOneiMDwB1NCpjDRECoaeQ0f3n_fmTLnKTrSHTU4,4917
87
- annet/mesh/device_models.py,sha256=aFbwVWNSDBcph_Kvv6qZT-uUz0Tbg3z45EvP4i1z2ao,3600
87
+ annet/mesh/device_models.py,sha256=q_E4E_glVZRVUjVbWhvbAt4Qv8wx7IcY689EBx-OKuo,4216
88
88
  annet/mesh/executor.py,sha256=z_3e2neRR4GoEQfJlvfbalelKzOz5yb78zm9lIcLYw4,17578
89
89
  annet/mesh/match_args.py,sha256=CR3kdIV9NGtyk9E2JbcOQ3TRuYEryTWP3m2yCo2VCWg,5751
90
- annet/mesh/models_converter.py,sha256=3q2zs7K8S3pfYSUKKRdtl5CJGbeg4TtYxofAVs_MBsk,3085
90
+ annet/mesh/models_converter.py,sha256=itfrxDd5zdTQpFNmo-YXIFQDpYyBuQ6g7xpcjxvK6uA,3221
91
91
  annet/mesh/peer_models.py,sha256=Div4o1t6Z0TWvy-8WKg4-n9WOd2PKCmIpfbkILDlDtk,2791
92
92
  annet/mesh/port_processor.py,sha256=RHiMS5W8qoDkTKiarQ748bcr8bNx4g_R4Y4vZg2k4TU,478
93
93
  annet/mesh/registry.py,sha256=xmWF7yxWXmwqX2_jyMAKrbGd2G9sjb4rYDx4Xk61QKc,9607
@@ -113,6 +113,7 @@ annet/rulebook/common.py,sha256=zK1s2c5lc5HQbIlMUQ4HARQudXSgOYiZ_Sxc2I_tHqg,721
113
113
  annet/rulebook/deploying.py,sha256=XV0XQvc3YvwM8SOgOQlc-fCW4bnjQg_1CTZkTwMp14A,2972
114
114
  annet/rulebook/patching.py,sha256=ve_D-9lnWs6Qb_NwqOLUWX-b_tI_L3pwQ7cgUPnqndY,4970
115
115
  annet/rulebook/arista/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
116
+ annet/rulebook/arista/aaa.py,sha256=7fBTwBnz9SOqYbwG8GBeEQTJG0e4uC4HkuZJeMG-kAY,2250
116
117
  annet/rulebook/arista/iface.py,sha256=bgj6a3r__-OE6VyYbSfnD6ps2QJKyX028W7IFJww-UY,720
117
118
  annet/rulebook/aruba/__init__.py,sha256=ILggeID6kNWcDBGzhXm_mebcfkuLSq5prBFU5DyPFs4,500
118
119
  annet/rulebook/aruba/ap_env.py,sha256=5fUVLhXH4-0DAtv8t0yoqJUibaRMuzF8Q7mGFzNsEN8,4692
@@ -130,15 +131,14 @@ annet/rulebook/huawei/bgp.py,sha256=dN8T3-44ggGEapt4u4sT3bTn_dsoCbS5qdNeSQ8LSTs,
130
131
  annet/rulebook/huawei/iface.py,sha256=DvLtQ7tfbDQWFmIYV4lxfih13Tdrt24L4-ZS29mCkuc,1126
131
132
  annet/rulebook/huawei/misc.py,sha256=Rpwhtm42IgcueDq4K6VOzN2qORoIDYh42Jb7iWL8AII,14424
132
133
  annet/rulebook/huawei/vlandb.py,sha256=B4BEUhZetjsNNhIJOp9cXtJSAYKMOgQucO8oAxSkRI0,4658
133
- annet/rulebook/juniper/__init__.py,sha256=WByFrqKCdr-ORCme2AURQGnYbN66t3omB3-9dWktT9o,3887
134
+ annet/rulebook/juniper/__init__.py,sha256=FnVaO7FHYz7O1ExRE6igYX7OKMUgx5_siC-aoHOLx1s,5380
134
135
  annet/rulebook/nexus/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
135
136
  annet/rulebook/nexus/iface.py,sha256=aeog9iSGT2zZ78tsGlrRcfgfOv7yW3jLwryXqdeplRw,2923
136
- annet/rulebook/ribbon/__init__.py,sha256=TRbkQVvk0-HxkUQW9-LmiG6XIfTZ-8t3SiaDemNCzK4,347
137
137
  annet/rulebook/routeros/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
138
  annet/rulebook/routeros/file.py,sha256=zK7RwBk1YaVoDSFSg1u7Pt8u0Fk3nhhu27aJRngemwc,137
139
139
  annet/rulebook/texts/arista.deploy,sha256=OS9eFyJpEPztcOHkBwajw_RTJfTT7ivaMHfx4_HXaUg,792
140
- annet/rulebook/texts/arista.order,sha256=e7e5pnzMZAfmXJ0sUaaWmep6JMeErNnd7DkouUVIZsU,1472
141
- annet/rulebook/texts/arista.rul,sha256=QQbro8eFlc7DCHk0-CTHX_rnj5rqumRzXlY60ga72jo,815
140
+ annet/rulebook/texts/arista.order,sha256=1jbKfF0USYi2b8V5qFlp4LjBAr3QGL9OkmoQqEK3PW8,1385
141
+ annet/rulebook/texts/arista.rul,sha256=fGZe1L-x75rKQuRC5oLJMv1gSt1tJ0htOXfKt-tho64,853
142
142
  annet/rulebook/texts/aruba.deploy,sha256=hI432Bq-of_LMXuUflCu7eNSEFpx6qmj0KItEw6sgHI,841
143
143
  annet/rulebook/texts/aruba.order,sha256=ZMakkn0EJ9zomgY6VssoptJImrHrUmYnCqivzLBFTRo,1158
144
144
  annet/rulebook/texts/aruba.rul,sha256=zvGVpoYyJvMoL0fb1NQ8we_GCLZXno8nwWpZIOScLQQ,2584
@@ -149,8 +149,9 @@ annet/rulebook/texts/cisco.deploy,sha256=Hu0NkcGv3f1CWUrnbzI3eQOPXJxtH4NNOPRV68I
149
149
  annet/rulebook/texts/cisco.order,sha256=OvNHMNqkCc-DN2dEjLCTKv_7ZhiaHt4q2X4Y4Z8dvR4,1901
150
150
  annet/rulebook/texts/cisco.rul,sha256=jgL5_xnSwd_H4E8cx4gcneSvJC5W1zz6_BWSb64iuxI,3017
151
151
  annet/rulebook/texts/huawei.deploy,sha256=uUsZCHUrC5Zyb_MePrR5svnE1QyGQlg7UxcKf00sJyg,10451
152
- annet/rulebook/texts/huawei.order,sha256=ENllPX4kO6xNw2mUQcx11yhxo3tKStZ5mUyc0C6s3d0,10657
152
+ annet/rulebook/texts/huawei.order,sha256=_X2LmxD9FGcIcb8ziwc13Imy1tBtQJgafrQGmvHPZLM,10649
153
153
  annet/rulebook/texts/huawei.rul,sha256=02Fi1RG4YYea2clHCluBuJDKNbT0hS9jtsk6_h6GK8k,12958
154
+ annet/rulebook/texts/juniper.order,sha256=yUid8mNGQtZSq_WUZisuBtKtdWSKu4_MPVRIHS1neN0,210
154
155
  annet/rulebook/texts/juniper.rul,sha256=EmtrEJZesnmc2nXjURRD2G0WOq4zLluI_PNupKhSOJs,2654
155
156
  annet/rulebook/texts/nexus.deploy,sha256=9YNAQEw7aQxtYZJbE-dMD6qJrTzs_G92Ifrx3Ft4Wn4,1120
156
157
  annet/rulebook/texts/nexus.order,sha256=AZMKCD5Zf_mBOlE36aMDvO4w5rdbepTz1Dsyv7xP9Qs,1834
@@ -177,10 +178,10 @@ annet_generators/rpl_example/generator.py,sha256=zndIGfV4ZlTxPgAGYs7bMQvTc_tYScO
177
178
  annet_generators/rpl_example/items.py,sha256=Ez1RF5YhcXNCusBmeApIjRL3rBlMazNZd29Gpw1_IsA,766
178
179
  annet_generators/rpl_example/mesh.py,sha256=z_WgfDZZ4xnyh3cSf75igyH09hGvtexEVwy1gCD_DzA,288
179
180
  annet_generators/rpl_example/route_policy.py,sha256=z6nPb0VDeQtKD1NIg9sFvmUxBD5tVs2frfNIuKdM-5c,2318
180
- annet-1.0.3.dist-info/AUTHORS,sha256=rh3w5P6gEgqmuC-bw-HB68vBCr-yIBFhVL0PG4hguLs,878
181
- annet-1.0.3.dist-info/LICENSE,sha256=yPxl7dno02Pw7gAcFPIFONzx_gapwDoPXsIsh6Y7lC0,1079
182
- annet-1.0.3.dist-info/METADATA,sha256=-u0h5cpMTSZeM6mxBvqvpPQ7hC1gwrza2aeHubezCDs,851
183
- annet-1.0.3.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
184
- annet-1.0.3.dist-info/entry_points.txt,sha256=5lIaDGlGi3l6QQ2ry2jZaqViP5Lvt8AmsegdD0Uznck,192
185
- annet-1.0.3.dist-info/top_level.txt,sha256=QsoTZBsUtwp_FEcmRwuN8QITBmLOZFqjssRfKilGbP8,23
186
- annet-1.0.3.dist-info/RECORD,,
181
+ annet-1.1.0.dist-info/AUTHORS,sha256=rh3w5P6gEgqmuC-bw-HB68vBCr-yIBFhVL0PG4hguLs,878
182
+ annet-1.1.0.dist-info/LICENSE,sha256=yPxl7dno02Pw7gAcFPIFONzx_gapwDoPXsIsh6Y7lC0,1079
183
+ annet-1.1.0.dist-info/METADATA,sha256=sIW7Dw8SLb9IBLPciWoWXTUlq0lx6n_lRsFhTyzOtk0,822
184
+ annet-1.1.0.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
185
+ annet-1.1.0.dist-info/entry_points.txt,sha256=5lIaDGlGi3l6QQ2ry2jZaqViP5Lvt8AmsegdD0Uznck,192
186
+ annet-1.1.0.dist-info/top_level.txt,sha256=QsoTZBsUtwp_FEcmRwuN8QITBmLOZFqjssRfKilGbP8,23
187
+ annet-1.1.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (75.8.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,12 +0,0 @@
1
- from annet.annlib.rulebook import common
2
- from annet.annlib.types import Op
3
-
4
-
5
- def default_diff(old, new, diff_pre, _pops=(Op.AFFECTED,)):
6
- diff = common.default_diff(old, new, diff_pre, _pops)
7
- return diff
8
-
9
-
10
- def ordered_diff(old, new, diff_pre, _pops=(Op.AFFECTED,)):
11
- diff = common.ordered_diff(old, new, diff_pre, _pops)
12
- return diff
File without changes
File without changes