annet 1.1.2__py3-none-any.whl → 2.0.1__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.

@@ -8,26 +8,6 @@ from annet.rpl import PrefixMatchValue, MatchField, SingleCondition, RoutingPoli
8
8
  from .entities import IpPrefixList, PrefixListNameGenerator
9
9
 
10
10
 
11
- def get_used_prefix_lists(
12
- prefix_lists: Sequence[IpPrefixList], name_generator: PrefixListNameGenerator,
13
- ) -> list[IpPrefixList]:
14
- return [c for c in prefix_lists if name_generator.is_used(c.name)]
15
-
16
-
17
- def new_prefix_list_name_generator(policies: list[RoutingPolicy]) -> PrefixListNameGenerator:
18
- name_gen = PrefixListNameGenerator()
19
- for policy in policies:
20
- for statement in policy.statements:
21
- condition: SingleCondition[PrefixMatchValue]
22
- for condition in statement.match.find_all(MatchField.ipv6_prefix):
23
- for name in condition.value.names:
24
- name_gen.add_prefix(name, condition.value.greater_equal, condition.value.less_equal)
25
- for condition in statement.match.find_all(MatchField.ip_prefix):
26
- for name in condition.value.names:
27
- name_gen.add_prefix(name, condition.value.greater_equal, condition.value.less_equal)
28
- return name_gen
29
-
30
-
31
11
  class PrefixListFilterGenerator(PartialGenerator, ABC):
32
12
  TAGS = ["policy", "rpl", "routing"]
33
13
 
@@ -39,12 +19,6 @@ class PrefixListFilterGenerator(PartialGenerator, ABC):
39
19
  def get_prefix_lists(self, device: Any) -> Sequence[IpPrefixList]:
40
20
  raise NotImplementedError()
41
21
 
42
- def get_used_prefix_lists(self, device: Any, name_generator: PrefixListNameGenerator) -> Sequence[IpPrefixList]:
43
- return get_used_prefix_lists(
44
- prefix_lists=self.get_prefix_lists(device),
45
- name_generator=name_generator,
46
- )
47
-
48
22
  # huawei
49
23
  def acl_huawei(self, _):
50
24
  return r"""
@@ -54,57 +28,48 @@ class PrefixListFilterGenerator(PartialGenerator, ABC):
54
28
 
55
29
  def _huawei_prefix_list(
56
30
  self,
57
- name: str,
58
31
  prefix_type: Literal["ipv6-prefix", "ip-prefix"],
59
- match: PrefixMatchValue,
60
32
  plist: IpPrefixList,
61
33
  ) -> Iterable[Sequence[str]]:
62
- for i, prefix in enumerate(plist.members):
63
- addr_mask = ip_interface(prefix)
34
+ for i, m in enumerate(plist.members):
35
+ ge, le = m.or_longer
64
36
  yield (
65
37
  "ip",
66
38
  prefix_type,
67
- name,
39
+ plist.name,
68
40
  f"index {i * 5 + 5}",
69
41
  "permit",
70
- str(addr_mask.ip).upper(),
71
- str(addr_mask.network.prefixlen),
42
+ str(m.prefix.network_address).upper(),
43
+ str(m.prefix.prefixlen),
72
44
  ) + (
73
- ("greater-equal", str(match.greater_equal)) if match.greater_equal is not None else ()
45
+ ("greater-equal", str(ge)) if ge is not None else ()
74
46
  ) + (
75
- ("less-equal", str(match.less_equal)) if match.less_equal is not None else ()
47
+ ("less-equal", str(le)) if le is not None else ()
76
48
  )
77
49
 
78
50
  def run_huawei(self, device: Any):
51
+ prefix_lists = self.get_prefix_lists(device)
79
52
  policies = self.get_policies(device)
80
- name_generator = new_prefix_list_name_generator(policies)
81
- plists = {p.name: p for p in self.get_used_prefix_lists(device, name_generator)}
82
- precessed_names = set()
53
+
54
+ name_generator = PrefixListNameGenerator(prefix_lists, policies)
55
+ processed_names = set()
83
56
  for policy in policies:
84
57
  for statement in policy.statements:
85
58
  cond: SingleCondition[PrefixMatchValue]
86
59
  for cond in statement.match.find_all(MatchField.ip_prefix):
87
60
  for name in cond.value.names:
88
- mangled_name = name_generator.get_prefix_name(
89
- name=name,
90
- greater_equal=cond.value.greater_equal,
91
- less_equal=cond.value.less_equal,
92
- )
93
- if mangled_name in precessed_names:
61
+ plist = name_generator.get_prefix(name, cond.value)
62
+ if plist.name in processed_names:
94
63
  continue
95
- yield from self._huawei_prefix_list(mangled_name, "ip-prefix", cond.value, plists[name])
96
- precessed_names.add(mangled_name)
64
+ yield from self._huawei_prefix_list("ip-prefix", plist)
65
+ processed_names.add(plist.name)
97
66
  for cond in statement.match.find_all(MatchField.ipv6_prefix):
98
67
  for name in cond.value.names:
99
- mangled_name = name_generator.get_prefix_name(
100
- name=name,
101
- greater_equal=cond.value.greater_equal,
102
- less_equal=cond.value.less_equal,
103
- )
104
- if mangled_name in precessed_names:
68
+ plist = name_generator.get_prefix(name, cond.value)
69
+ if plist.name in processed_names:
105
70
  continue
106
- yield from self._huawei_prefix_list(mangled_name, "ipv6-prefix", cond.value, plists[name])
107
- precessed_names.add(mangled_name)
71
+ yield from self._huawei_prefix_list("ipv6-prefix", plist)
72
+ processed_names.add(plist.name)
108
73
 
109
74
  # arista
110
75
  def acl_arista(self, _):
@@ -117,51 +82,41 @@ class PrefixListFilterGenerator(PartialGenerator, ABC):
117
82
 
118
83
  def _arista_prefix_list(
119
84
  self,
120
- name: str,
121
85
  prefix_type: Literal["ipv6", "ip"],
122
- match: PrefixMatchValue,
123
86
  plist: IpPrefixList,
124
87
  ) -> Iterable[Sequence[str]]:
125
- with self.block(prefix_type, "prefix-list", name):
126
- for i, prefix in enumerate(plist.members):
127
- addr_mask = ip_interface(prefix)
88
+ with self.block(prefix_type, "prefix-list", plist.name):
89
+ for i, m in enumerate(plist.members):
90
+ ge, le = m.or_longer
128
91
  yield (
129
92
  f"seq {i * 10 + 10}",
130
93
  "permit",
131
- addr_mask.with_prefixlen,
94
+ str(m.prefix),
132
95
  ) + (
133
- ("ge", str(match.greater_equal)) if match.greater_equal is not None else ()
96
+ ("ge", str(ge)) if ge is not None else ()
134
97
  ) + (
135
- ("le", str(match.less_equal)) if match.less_equal is not None else ()
98
+ ("le", str(le)) if le is not None else ()
136
99
  )
137
100
 
138
101
  def run_arista(self, device: Any):
102
+ prefix_lists = self.get_prefix_lists(device)
139
103
  policies = self.get_policies(device)
140
- name_generator = new_prefix_list_name_generator(policies)
141
- plists = {p.name: p for p in self.get_used_prefix_lists(device, name_generator)}
142
- precessed_names = set()
104
+ name_generator = PrefixListNameGenerator(prefix_lists, policies)
105
+ processed_names = set()
143
106
  for policy in policies:
144
107
  for statement in policy.statements:
145
108
  cond: SingleCondition[PrefixMatchValue]
146
109
  for cond in statement.match.find_all(MatchField.ip_prefix):
147
110
  for name in cond.value.names:
148
- mangled_name = name_generator.get_prefix_name(
149
- name=name,
150
- greater_equal=cond.value.greater_equal,
151
- less_equal=cond.value.less_equal,
152
- )
153
- if mangled_name in precessed_names:
111
+ plist = name_generator.get_prefix(name, cond.value)
112
+ if plist.name in processed_names:
154
113
  continue
155
- yield from self._arista_prefix_list(mangled_name, "ip", cond.value, plists[name])
156
- precessed_names.add(mangled_name)
114
+ yield from self._arista_prefix_list("ip", plist)
115
+ processed_names.add(plist.name)
157
116
  for cond in statement.match.find_all(MatchField.ipv6_prefix):
158
117
  for name in cond.value.names:
159
- mangled_name = name_generator.get_prefix_name(
160
- name=name,
161
- greater_equal=cond.value.greater_equal,
162
- less_equal=cond.value.less_equal,
163
- )
164
- if mangled_name in precessed_names:
118
+ plist = name_generator.get_prefix(name, cond.value)
119
+ if plist.name in processed_names:
165
120
  continue
166
- yield from self._arista_prefix_list(mangled_name, "ipv6", cond.value, plists[name])
167
- precessed_names.add(mangled_name)
121
+ yield from self._arista_prefix_list("ipv6", plist)
122
+ processed_names.add(plist.name)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: annet
3
- Version: 1.1.2
3
+ Version: 2.0.1
4
4
  Summary: annet
5
5
  Home-page: https://github.com/annetutil/annet
6
6
  License: MIT
@@ -1,5 +1,5 @@
1
1
  annet/__init__.py,sha256=0OKkFkqog8As7B6ApdpKQkrEAcEELUREWp82D8WvGA8,1846
2
- annet/annet.py,sha256=TMdEuM7GJQ4TjRVmuK3bCTZN-21lxjQ9sXqEdILUuBk,725
2
+ annet/annet.py,sha256=8Hc-n0S6d-YhcMpMiMET_SsYKfHFJeCA_E2gKgzK-2Y,790
3
3
  annet/argparse.py,sha256=v1MfhjR0B8qahza0WinmXClpR8UiDFhmwDDWtNroJPA,12855
4
4
  annet/bgp_models.py,sha256=oibTSdipNkGL4t8Xn94bhyKHMOtwbPBqmYaAy4FmTxQ,12361
5
5
  annet/cli.py,sha256=hDpjIr3w47lgQ_CvCQS1SXFDK-SJrf5slbT__5u6GIA,12342
@@ -7,14 +7,14 @@ 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
- annet/diff.py,sha256=zLcaCnb4lZRUb7frpH1CstQ3kacRcCblZs1uLG8J5lk,3391
10
+ annet/diff.py,sha256=SOhl706lpXdbrAwElgZqIzsTZEJRyDxOQ51fi910H0M,6088
11
11
  annet/executor.py,sha256=lcKI-EbYqeCiBNpL729kSltduzxbAzOkQ1L_QK7tNv8,5112
12
12
  annet/filtering.py,sha256=ZtqxPsKdV9reZoRxtQyBg22BqyMqd-2SotYcxZ-68AQ,903
13
- annet/gen.py,sha256=A718tYqIcxAa8tQEdjR6PjQ2ovWBnwPH7STKh38lmFY,33567
13
+ annet/gen.py,sha256=m76bL6rVbusNV_uVHrHnA3D7TUvvLtckXx7hlr5HGA0,31897
14
14
  annet/hardware.py,sha256=_iR28dWiPtt6ZYdk-qg1sxazkSRJE3ukqKB-fFFfQak,1141
15
15
  annet/implicit.py,sha256=G6EwZbrtUp089qRAwh96hminp236-1pJbeKAedoEafg,6056
16
16
  annet/lib.py,sha256=4N4X6jCCrig5rk7Ua4AofrV9zK9jhzkBq57fLsfBJjw,4812
17
- annet/output.py,sha256=FYMcWCc43-b51KsCiKnXPZHawhgWNoVtY9gRqw__Ce0,7473
17
+ annet/output.py,sha256=se8EpyNS9f9kPOlOaAV0ht4DjzDoBr8F2UafiezLPYw,7743
18
18
  annet/parallel.py,sha256=hLkzEht0KhzmzUWDdO4QFYQHzhxs3wPlTA8DxbB2ziw,17160
19
19
  annet/patching.py,sha256=nILbY5oJajN0b1j3f0HEJm05H3HVThnWvB7vDVh7UQw,559
20
20
  annet/reference.py,sha256=B8mH8VUMcecPnzULiTVb_kTQ7jQrCL7zp4pfIZQa5fk,4035
@@ -30,7 +30,7 @@ annet/adapters/fetchers/stub/fetcher.py,sha256=FzpkIzPJBQVuNNSdXKoGzkALmIGMgo2gm
30
30
  annet/adapters/file/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
31
  annet/adapters/file/provider.py,sha256=KyHuA5w9E4T3Lxeko8b5M7jRmu7yhTJVLqLkas4ue1A,6654
32
32
  annet/adapters/netbox/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- annet/adapters/netbox/provider.py,sha256=3IrfZ6CfCxf-lTnJlIC2TQ8M_rDxOB_B7HGXZ92vAgA,1643
33
+ annet/adapters/netbox/provider.py,sha256=Y1WahJLNMIi_an3dY_m8h480CjyRTzKP5rqqDjFW_nc,1692
34
34
  annet/adapters/netbox/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
35
  annet/adapters/netbox/common/client.py,sha256=PaxHG4W9H8_uunIwMBNYkLq4eQJYoO6p6gY-ciQs7Nc,2563
36
36
  annet/adapters/netbox/common/manufacturer.py,sha256=Y9kqU13q6fwYu0_HiotUKAy7OHFZngkC2s3s4IDAbDg,1745
@@ -46,7 +46,7 @@ annet/annlib/__init__.py,sha256=fT1l4xV5fqqg8HPw9HqmZVN2qwS8i6X1aIm2zGDjxKY,252
46
46
  annet/annlib/command.py,sha256=uuBddMQphtn8P5MO5kzIa8_QrtMns-k05VeKv1bcAuA,1043
47
47
  annet/annlib/diff.py,sha256=MZ6eQAU3cadQp8KaSE6uAYFtcfMDCIe_eNuVROnYkCk,4496
48
48
  annet/annlib/errors.py,sha256=jBcSFzY6Vj-FxR__vqjFm-87AwYQ0xHuAopTirii5AU,287
49
- annet/annlib/filter_acl.py,sha256=0w1VF6WcONiTYTQh0yWi6_j9rCTc_kMLAUMr0hbdkNU,7203
49
+ annet/annlib/filter_acl.py,sha256=mxDga-3SXqpPEsdQypTq0ScqUqP625lxX-DmJalEc3s,7170
50
50
  annet/annlib/jsontools.py,sha256=BS7s4rI8R9c_y3zz0zYl1l6con65oQ0MvfsC1dsXZts,5535
51
51
  annet/annlib/lib.py,sha256=lxmYrbeablFMhFtvFmADVpVShSFi9TN4gNWaBs_Ygm0,14952
52
52
  annet/annlib/output.py,sha256=_SjJ6G6bejvnTKqNHw6xeio0FT9oO3OIkLaOC3cEga4,7569
@@ -68,7 +68,7 @@ annet/annlib/rbparser/platform.py,sha256=65-r9mboRA3gaz9DRkSwPCdCRQneItqxppdMB6z
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
71
- annet/api/__init__.py,sha256=oj6n0hwdxEbv7EoqAQUA56413BddSlIXNR_pUDTb8fY,35054
71
+ annet/api/__init__.py,sha256=YHhYDXAJVUijhjFaha_WxwpOMuc39zuy2e3PWt0yMCE,35106
72
72
  annet/configs/context.yml,sha256=RVLrKLIHpCty7AGwOnmqf7Uu0iZQCn-AjYhophDJer8,259
73
73
  annet/configs/logging.yaml,sha256=EUagfir99QqA73Scc3k7sfQccbU3E1SvEQdyhLFtCl4,997
74
74
  annet/generators/__init__.py,sha256=rVHHDTPKHPZsml1eNEAj3o-8RweFTN8J7LX3tKMXdIY,16402
@@ -91,22 +91,22 @@ annet/mesh/models_converter.py,sha256=itfrxDd5zdTQpFNmo-YXIFQDpYyBuQ6g7xpcjxvK6u
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
94
- annet/rpl/__init__.py,sha256=0kcIktE3AmS0rlm9xzVDf53xk08OeZXgD-6ZLCt_KCs,731
94
+ annet/rpl/__init__.py,sha256=8nSiFpXH4OhzRGKr-013nHwwKk5Y50uh2gL7d_IoV8U,757
95
95
  annet/rpl/action.py,sha256=PY6W66j908RuqQ1_ioxayqVN-70rxDk5Z59EGHtxI98,1246
96
96
  annet/rpl/condition.py,sha256=MJri4MbWtPkLHIsLMAtsIEF7e8IAS9dIImjmJs5vS5U,3418
97
- annet/rpl/match_builder.py,sha256=vK0faYyg3vJGOp6LSKscLCno3Fc2PfznOmVCEUEhZfk,4774
97
+ annet/rpl/match_builder.py,sha256=8hvkNWF29yIAt8cpS7P797ePm3ikZBZwrVQj7QcCsP8,4749
98
98
  annet/rpl/policy.py,sha256=P1Kt-8fHFxEczeP-RwkK_wrGN0p7IR-hOApEd2vC55E,448
99
99
  annet/rpl/result.py,sha256=PHFn1zhDeqLBn07nkYw5vsoXew4nTwkklOwqvFWzBLg,141
100
100
  annet/rpl/routemap.py,sha256=SIyk73OzPp2oH_XwrDv2xczuY2Zt1VsJmB0TT5r7F5g,2593
101
- annet/rpl/statement_builder.py,sha256=sVGOYsCV0s_SFQUy2WtUyQqKy5H4MOfmRCJWGj-UOJ4,9403
102
- annet/rpl_generators/__init__.py,sha256=ZLWs-flcpyIbdhxSDfNt-ORDrLe8ins25sWdXTWeUoA,748
101
+ annet/rpl/statement_builder.py,sha256=qKhLS34lygbhtbEIY-6jzs0Aisc6qmNc_iyk9iKPyHE,10076
102
+ annet/rpl_generators/__init__.py,sha256=V4rAZlBaOUSjeQ5eCNmWeD7BSJLIwy0lKU_01grebpc,832
103
103
  annet/rpl_generators/aspath.py,sha256=kZakwPLfGGiXu9fC6I1z-pvy7Fe-4dy93_-lYcx39_4,2038
104
104
  annet/rpl_generators/community.py,sha256=SWpaOvoQUNISuRm41-IvGPFmntvgFv9ee4zegsMyeo0,11496
105
- annet/rpl_generators/cumulus_frr.py,sha256=F-LRT-UPnztUqinp3KYKqh796L9dqkzPKBUxMkiFjF8,21111
106
- annet/rpl_generators/entities.py,sha256=DIpgAQ8Tslo2hq6iFBaYkJX12BFBiccN8GOaRVxR1Uk,1985
105
+ annet/rpl_generators/cumulus_frr.py,sha256=hCUK3o3ndgKhpL92cE0CWpL--0OJYtDad6b7YfCAUyQ,21530
106
+ annet/rpl_generators/entities.py,sha256=uO78iG2zHAGra5DqzpfnBgoc6slHEc6wDLvlnoySvJc,3750
107
107
  annet/rpl_generators/execute.py,sha256=wS6e6fwcPWywsHB0gBMqZ17eF0s4YOBgDgwPB_cr5Rw,431
108
- annet/rpl_generators/policy.py,sha256=NeqB0reRN_KuY8LYkeGT3dRPe2HFDT9RfmVy5fcA3zw,32570
109
- annet/rpl_generators/prefix_lists.py,sha256=D4WXeISevf62EmDu1GYdldjz2gmONFFlmgMyGAOa_m8,7248
108
+ annet/rpl_generators/policy.py,sha256=j_2EtAsaxldhZZT4kRXKZacuAsGnHr3JSc2BMxr_Pow,37174
109
+ annet/rpl_generators/prefix_lists.py,sha256=5jM5Xj0dtx5xF9ap-TgExs0ofRAzm0LN2j3aL5Ub_yc,4778
110
110
  annet/rpl_generators/rd.py,sha256=YGXgx1D2D0-pixgspXJzA6NvW8lx3AmHMxIY2l5rraI,1457
111
111
  annet/rulebook/__init__.py,sha256=oafL5HC8QHdkO9CH2q_fxohPMxOgjn-dNQa5kPjuqsA,3942
112
112
  annet/rulebook/common.py,sha256=zK1s2c5lc5HQbIlMUQ4HARQudXSgOYiZ_Sxc2I_tHqg,721
@@ -175,13 +175,13 @@ annet_generators/mesh_example/bgp.py,sha256=jzyDndSSGYyYBquDnLlR-7P5lzmUKcSyYCml
175
175
  annet_generators/mesh_example/mesh_logic.py,sha256=DJS5JMCTs0rs0LN__0LulNgo2ekUcWiOMe02BlOeFas,1454
176
176
  annet_generators/rpl_example/__init__.py,sha256=A7DTn-SVSlUpeO7mKT_obqimp29p9zWfVRPBSxmENQY,209
177
177
  annet_generators/rpl_example/generator.py,sha256=zndIGfV4ZlTxPgAGYs7bMQvTc_tYScODqJz3fuyermY,3871
178
- annet_generators/rpl_example/items.py,sha256=Ez1RF5YhcXNCusBmeApIjRL3rBlMazNZd29Gpw1_IsA,766
178
+ annet_generators/rpl_example/items.py,sha256=d99HSXDHFjZq511EvGhIqRTWK3F4ZsCWfdUqFYQcyhE,772
179
179
  annet_generators/rpl_example/mesh.py,sha256=z_WgfDZZ4xnyh3cSf75igyH09hGvtexEVwy1gCD_DzA,288
180
180
  annet_generators/rpl_example/route_policy.py,sha256=z6nPb0VDeQtKD1NIg9sFvmUxBD5tVs2frfNIuKdM-5c,2318
181
- annet-1.1.2.dist-info/AUTHORS,sha256=rh3w5P6gEgqmuC-bw-HB68vBCr-yIBFhVL0PG4hguLs,878
182
- annet-1.1.2.dist-info/LICENSE,sha256=yPxl7dno02Pw7gAcFPIFONzx_gapwDoPXsIsh6Y7lC0,1079
183
- annet-1.1.2.dist-info/METADATA,sha256=Ngyf7Hi193Mgaifi37xaep8v7fjSM9-KWlIveKaXiEg,793
184
- annet-1.1.2.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
185
- annet-1.1.2.dist-info/entry_points.txt,sha256=5lIaDGlGi3l6QQ2ry2jZaqViP5Lvt8AmsegdD0Uznck,192
186
- annet-1.1.2.dist-info/top_level.txt,sha256=QsoTZBsUtwp_FEcmRwuN8QITBmLOZFqjssRfKilGbP8,23
187
- annet-1.1.2.dist-info/RECORD,,
181
+ annet-2.0.1.dist-info/AUTHORS,sha256=rh3w5P6gEgqmuC-bw-HB68vBCr-yIBFhVL0PG4hguLs,878
182
+ annet-2.0.1.dist-info/LICENSE,sha256=yPxl7dno02Pw7gAcFPIFONzx_gapwDoPXsIsh6Y7lC0,1079
183
+ annet-2.0.1.dist-info/METADATA,sha256=x3cpmknanwf6tSpC5mM7i_dBbYAQZwc0f7Sn5zHNfZ0,793
184
+ annet-2.0.1.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
185
+ annet-2.0.1.dist-info/entry_points.txt,sha256=5lIaDGlGi3l6QQ2ry2jZaqViP5Lvt8AmsegdD0Uznck,192
186
+ annet-2.0.1.dist-info/top_level.txt,sha256=QsoTZBsUtwp_FEcmRwuN8QITBmLOZFqjssRfKilGbP8,23
187
+ annet-2.0.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.2)
2
+ Generator: setuptools (76.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,4 +1,4 @@
1
- from annet.rpl_generators import AsPathFilter, CommunityList, CommunityType, RDFilter, IpPrefixList
1
+ from annet.rpl_generators import AsPathFilter, CommunityList, CommunityType, RDFilter, ip_prefix_list
2
2
 
3
3
  AS_PATH_FILTERS = [
4
4
  AsPathFilter("ASP_EXAMPLE", [".*123456.*"]),
@@ -16,6 +16,6 @@ RD_FILTERS = [
16
16
  ]
17
17
 
18
18
  PREFIX_LISTS = [
19
- IpPrefixList("IPV6_LIST_EXAMPLE", ["2a13:5941::/32"]),
20
- IpPrefixList("IPV4_LIST_EXAMPLE", ["0.0.0.0/8", "10.0.0.0/8"]),
19
+ ip_prefix_list("IPV6_LIST_EXAMPLE", ["2a13:5941::/32"]),
20
+ ip_prefix_list("IPV4_LIST_EXAMPLE", ["0.0.0.0/8", "10.0.0.0/8"]),
21
21
  ]
File without changes
File without changes