annet 3.18.0__py3-none-any.whl → 3.19.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.
- annet/adapters/netbox/common/storage_base.py +31 -2
- annet/adapters/netbox/common/storage_opts.py +21 -0
- annet/adapters/netbox/provider.py +2 -1
- annet/adapters/netbox/v37/storage.py +7 -2
- annet/adapters/netbox/v41/storage.py +8 -2
- annet/adapters/netbox/v42/storage.py +7 -3
- annet/cli_args.py +7 -0
- {annet-3.18.0.dist-info → annet-3.19.0.dist-info}/METADATA +3 -2
- {annet-3.18.0.dist-info → annet-3.19.0.dist-info}/RECORD +14 -14
- {annet-3.18.0.dist-info → annet-3.19.0.dist-info}/WHEEL +0 -0
- {annet-3.18.0.dist-info → annet-3.19.0.dist-info}/entry_points.txt +0 -0
- {annet-3.18.0.dist-info → annet-3.19.0.dist-info}/licenses/AUTHORS +0 -0
- {annet-3.18.0.dist-info → annet-3.19.0.dist-info}/licenses/LICENSE +0 -0
- {annet-3.18.0.dist-info → annet-3.19.0.dist-info}/top_level.txt +0 -0
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import ssl
|
|
2
2
|
from ipaddress import ip_interface
|
|
3
3
|
from logging import getLogger
|
|
4
|
-
from typing import Any, Optional, List, Union, Dict, cast, Generic, TypeVar
|
|
4
|
+
from typing import Any, Callable, Optional, List, Union, Dict, cast, Generic, TypeVar
|
|
5
|
+
|
|
6
|
+
from requests import Session
|
|
7
|
+
|
|
8
|
+
from requests_cache import CachedSession, SQLiteCache
|
|
5
9
|
|
|
6
10
|
from annetbox.v37 import models as api_models
|
|
7
11
|
|
|
@@ -45,6 +49,7 @@ class BaseNetboxStorage(
|
|
|
45
49
|
token = ""
|
|
46
50
|
self.exact_host_filter = False
|
|
47
51
|
threads = 1
|
|
52
|
+
session_factory = None
|
|
48
53
|
if opts:
|
|
49
54
|
if opts.insecure:
|
|
50
55
|
ctx = ssl.create_default_context()
|
|
@@ -55,7 +60,17 @@ class BaseNetboxStorage(
|
|
|
55
60
|
threads = opts.threads
|
|
56
61
|
self.exact_host_filter = opts.exact_host_filter
|
|
57
62
|
self.all_hosts_filter = opts.all_hosts_filter
|
|
58
|
-
|
|
63
|
+
|
|
64
|
+
if opts.cache_path:
|
|
65
|
+
session_factory = cached_requests_session(opts)
|
|
66
|
+
|
|
67
|
+
self.netbox = self._init_adapter(
|
|
68
|
+
url=url,
|
|
69
|
+
token=token,
|
|
70
|
+
ssl_context=ctx,
|
|
71
|
+
threads=threads,
|
|
72
|
+
session_factory=session_factory,
|
|
73
|
+
)
|
|
59
74
|
self._all_fqdns: Optional[list[str]] = None
|
|
60
75
|
self._id_devices: dict[int, NetboxDeviceT] = {}
|
|
61
76
|
self._name_devices: dict[str, NetboxDeviceT] = {}
|
|
@@ -67,6 +82,7 @@ class BaseNetboxStorage(
|
|
|
67
82
|
token: str,
|
|
68
83
|
ssl_context: Optional[ssl.SSLContext],
|
|
69
84
|
threads: int,
|
|
85
|
+
session_factory: Callable[[Session], Session] | None = None,
|
|
70
86
|
) -> NetboxAdapter[NetboxDeviceT, InterfaceT, IpAddressT, PrefixT, FHRPGroupT, FHRPGroupAssignmentT]:
|
|
71
87
|
raise NotImplementedError()
|
|
72
88
|
|
|
@@ -259,3 +275,16 @@ def parse_glob(exact_host_filter: bool, query: NetboxQuery) -> dict[str, list[st
|
|
|
259
275
|
else:
|
|
260
276
|
query_groups["name__ic"] = [_hostname_dot_hack(name) for name in names]
|
|
261
277
|
return query_groups
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
def cached_requests_session(opts: NetboxStorageOpts) -> Callable[[Session], Session]:
|
|
281
|
+
def session_factory(session: Session) -> Session:
|
|
282
|
+
backend = SQLiteCache(db_path=opts.cache_path)
|
|
283
|
+
if opts.recache:
|
|
284
|
+
backend.clear()
|
|
285
|
+
return CachedSession.wrap(
|
|
286
|
+
session,
|
|
287
|
+
backend=backend,
|
|
288
|
+
expire_after=opts.cache_ttl,
|
|
289
|
+
)
|
|
290
|
+
return session_factory
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import os
|
|
2
2
|
from typing import Any, Optional
|
|
3
|
+
from datetime import timedelta
|
|
3
4
|
from .query import parse_query
|
|
4
5
|
|
|
5
6
|
DEFAULT_URL = "http://localhost"
|
|
@@ -14,6 +15,9 @@ class NetboxStorageOpts:
|
|
|
14
15
|
exact_host_filter: bool = False,
|
|
15
16
|
threads: int = 1,
|
|
16
17
|
all_hosts_filter: dict[str, list[str]] | None = None,
|
|
18
|
+
cache_path: str = "",
|
|
19
|
+
cache_ttl: timedelta = timedelta(0),
|
|
20
|
+
recache: bool = False,
|
|
17
21
|
):
|
|
18
22
|
self.url = url
|
|
19
23
|
self.token = token
|
|
@@ -21,6 +25,9 @@ class NetboxStorageOpts:
|
|
|
21
25
|
self.exact_host_filter = exact_host_filter
|
|
22
26
|
self.threads = threads
|
|
23
27
|
self.all_hosts_filter: dict[str, list[str]] = all_hosts_filter or {}
|
|
28
|
+
self.cache_path = cache_path
|
|
29
|
+
self.cache_ttl = cache_ttl
|
|
30
|
+
self.recache = recache
|
|
24
31
|
|
|
25
32
|
@classmethod
|
|
26
33
|
def parse_params(cls, conf_params: Optional[dict[str, str]], cli_opts: Any):
|
|
@@ -41,6 +48,17 @@ class NetboxStorageOpts:
|
|
|
41
48
|
exact_host_filter = exact_host_filter_env in ("true", "1", "t")
|
|
42
49
|
else:
|
|
43
50
|
exact_host_filter = bool(conf_params.get("exact_host_filter") or False)
|
|
51
|
+
|
|
52
|
+
if cache_path := os.getenv("NETBOX_CACHE_PATH"):
|
|
53
|
+
cache_path = cache_path
|
|
54
|
+
else:
|
|
55
|
+
cache_path = str(conf_params.get("cache_path", ""))
|
|
56
|
+
|
|
57
|
+
if cache_ttl := os.getenv("NETBOX_CACHE_TTL"):
|
|
58
|
+
cache_ttl = timedelta(seconds=int(cache_ttl))
|
|
59
|
+
else:
|
|
60
|
+
cache_ttl = timedelta(seconds=conf_params.get("cache_ttl", 0))
|
|
61
|
+
|
|
44
62
|
return cls(
|
|
45
63
|
url=url,
|
|
46
64
|
token=token,
|
|
@@ -48,4 +66,7 @@ class NetboxStorageOpts:
|
|
|
48
66
|
exact_host_filter=exact_host_filter,
|
|
49
67
|
threads=int(threads),
|
|
50
68
|
all_hosts_filter=all_hosts_filter,
|
|
69
|
+
cache_path=cache_path,
|
|
70
|
+
cache_ttl=cache_ttl,
|
|
71
|
+
recache=cli_opts.recache,
|
|
51
72
|
)
|
|
@@ -46,7 +46,8 @@ def storage_factory(opts: NetboxStorageOpts) -> Storage:
|
|
|
46
46
|
|
|
47
47
|
class NetboxProvider(StorageProvider, AdapterWithName, AdapterWithConfig):
|
|
48
48
|
def __init__(self, url: Optional[str] = None, token: Optional[str] = None, insecure: bool = False,
|
|
49
|
-
exact_host_filter: bool = False, threads: int = 1, all_hosts_filter: dict[str, list[str]] | None = None
|
|
49
|
+
exact_host_filter: bool = False, threads: int = 1, all_hosts_filter: dict[str, list[str]] | None = None,
|
|
50
|
+
cache_path: str = "", cache_ttl: int = 0):
|
|
50
51
|
self.url = url
|
|
51
52
|
self.token = token
|
|
52
53
|
self.insecure = insecure
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import ssl
|
|
2
|
+
from typing import Callable
|
|
3
|
+
|
|
4
|
+
from requests import Session
|
|
2
5
|
|
|
3
6
|
from adaptix import P
|
|
4
7
|
from adaptix.conversion import get_converter, link_function, link_constant, link
|
|
@@ -23,8 +26,9 @@ class NetboxV37Adapter(NetboxAdapter[
|
|
|
23
26
|
token: str,
|
|
24
27
|
ssl_context: ssl.SSLContext | None,
|
|
25
28
|
threads: int,
|
|
29
|
+
session_factory: Callable[[Session], Session] | None,
|
|
26
30
|
):
|
|
27
|
-
self.netbox = client_sync.NetboxV37(url=url, token=token, ssl_context=ssl_context, threads=threads)
|
|
31
|
+
self.netbox = client_sync.NetboxV37(url=url, token=token, ssl_context=ssl_context, threads=threads, session_factory=session_factory)
|
|
28
32
|
self.convert_device = get_converter(
|
|
29
33
|
api_models.Device,
|
|
30
34
|
NetboxDeviceV37,
|
|
@@ -120,5 +124,6 @@ class NetboxStorageV37(BaseNetboxStorage[
|
|
|
120
124
|
token: str,
|
|
121
125
|
ssl_context: ssl.SSLContext | None,
|
|
122
126
|
threads: int,
|
|
127
|
+
session_factory: Callable[[Session], Session] | None = None,
|
|
123
128
|
) -> NetboxAdapter[NetboxDeviceV37, InterfaceV37, IpAddressV37, PrefixV37, FHRPGroupV37, FHRPGroupAssignmentV37]:
|
|
124
|
-
return NetboxV37Adapter(self, url, token, ssl_context, threads)
|
|
129
|
+
return NetboxV37Adapter(self, url, token, ssl_context, threads, session_factory)
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import ssl
|
|
2
|
+
from typing import Callable
|
|
3
|
+
|
|
4
|
+
from requests import Session
|
|
5
|
+
|
|
2
6
|
from adaptix import P
|
|
3
7
|
from adaptix.conversion import get_converter, link, link_constant, link_function
|
|
4
8
|
from annetbox.v41 import client_sync
|
|
@@ -24,8 +28,9 @@ class NetboxV41Adapter(NetboxAdapter[
|
|
|
24
28
|
token: str,
|
|
25
29
|
ssl_context: ssl.SSLContext | None,
|
|
26
30
|
threads: int,
|
|
31
|
+
session_factory: Callable[[Session], Session] | None,
|
|
27
32
|
):
|
|
28
|
-
self.netbox = client_sync.NetboxV41(url=url, token=token, ssl_context=ssl_context, threads=threads)
|
|
33
|
+
self.netbox = client_sync.NetboxV41(url=url, token=token, ssl_context=ssl_context, threads=threads, session_factory=session_factory)
|
|
29
34
|
self.convert_device = get_converter(
|
|
30
35
|
api_models.Device,
|
|
31
36
|
NetboxDeviceV41,
|
|
@@ -122,5 +127,6 @@ class NetboxStorageV41(BaseNetboxStorage[
|
|
|
122
127
|
token: str,
|
|
123
128
|
ssl_context: ssl.SSLContext | None,
|
|
124
129
|
threads: int,
|
|
130
|
+
session_factory: Callable[[Session], Session] | None = None,
|
|
125
131
|
) -> NetboxAdapter[NetboxDeviceV41, InterfaceV41, IpAddressV41, PrefixV41, FHRPGroupV41, FHRPGroupAssignmentV41]:
|
|
126
|
-
return NetboxV41Adapter(self, url, token, ssl_context, threads)
|
|
132
|
+
return NetboxV41Adapter(self, url, token, ssl_context, threads, session_factory)
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import ssl
|
|
2
|
-
from typing import Optional
|
|
2
|
+
from typing import Callable, Optional
|
|
3
|
+
|
|
4
|
+
from requests import Session
|
|
3
5
|
|
|
4
6
|
from adaptix import P
|
|
5
7
|
from adaptix.conversion import get_converter, link, link_constant, link_function
|
|
@@ -25,8 +27,9 @@ class NetboxV42Adapter(NetboxAdapter[
|
|
|
25
27
|
token: str,
|
|
26
28
|
ssl_context: ssl.SSLContext | None,
|
|
27
29
|
threads: int,
|
|
30
|
+
session_factory: Callable[[Session], Session] | None,
|
|
28
31
|
):
|
|
29
|
-
self.netbox = client_sync.NetboxV42(url=url, token=token, ssl_context=ssl_context, threads=threads)
|
|
32
|
+
self.netbox = client_sync.NetboxV42(url=url, token=token, ssl_context=ssl_context, threads=threads, session_factory=session_factory)
|
|
30
33
|
self.convert_device = get_converter(
|
|
31
34
|
api_models.Device,
|
|
32
35
|
NetboxDeviceV42,
|
|
@@ -136,11 +139,12 @@ class NetboxStorageV42(BaseNetboxStorage[
|
|
|
136
139
|
token: str,
|
|
137
140
|
ssl_context: ssl.SSLContext | None,
|
|
138
141
|
threads: int,
|
|
142
|
+
session_factory: Callable[[Session], Session] | None = None,
|
|
139
143
|
) -> NetboxAdapter[
|
|
140
144
|
NetboxDeviceV42, InterfaceV42, IpAddressV42, PrefixV42,
|
|
141
145
|
FHRPGroupV41, FHRPGroupAssignmentV41,
|
|
142
146
|
]:
|
|
143
|
-
return NetboxV42Adapter(self, url, token, ssl_context, threads)
|
|
147
|
+
return NetboxV42Adapter(self, url, token, ssl_context, threads, session_factory)
|
|
144
148
|
|
|
145
149
|
def resolve_all_vlans(self) -> list[Vlan]:
|
|
146
150
|
if self._all_vlans is None:
|
annet/cli_args.py
CHANGED
|
@@ -140,6 +140,12 @@ opt_tolerate_fails = Arg(
|
|
|
140
140
|
help="Show errors without interrupting the generation"
|
|
141
141
|
)
|
|
142
142
|
|
|
143
|
+
opt_recache = Arg(
|
|
144
|
+
"--recache", default=False,
|
|
145
|
+
help="Force expiration of storage's local cache if it is supported"
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
|
|
143
149
|
# При параллельном запуске и включённом --tolerate-fails код возврата
|
|
144
150
|
# всегда нулевой. Это не позволяет нам легко понять, прошла ли генерация
|
|
145
151
|
# успешно для всех устройств. С этим флажком код будет ненулевой, если
|
|
@@ -353,6 +359,7 @@ opt_selected_context_name = Arg(
|
|
|
353
359
|
|
|
354
360
|
# ====
|
|
355
361
|
class CacheOptions(ArgGroup):
|
|
362
|
+
recache = opt_recache
|
|
356
363
|
no_mesh = False
|
|
357
364
|
|
|
358
365
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: annet
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.19.0
|
|
4
4
|
Summary: annet
|
|
5
5
|
Home-page: https://github.com/annetutil/annet
|
|
6
6
|
License: MIT
|
|
@@ -22,7 +22,8 @@ Requires-Dist: adaptix==3.0.0b7
|
|
|
22
22
|
Requires-Dist: dataclass-rest==0.4
|
|
23
23
|
Requires-Dist: ordered-set>=4.1.0
|
|
24
24
|
Provides-Extra: netbox
|
|
25
|
-
Requires-Dist: annetbox[sync]>=0.
|
|
25
|
+
Requires-Dist: annetbox[sync]>=0.9.0; extra == "netbox"
|
|
26
|
+
Requires-Dist: requests-cache>=1.2.1; extra == "netbox"
|
|
26
27
|
Dynamic: home-page
|
|
27
28
|
Dynamic: license
|
|
28
29
|
Dynamic: license-file
|
|
@@ -3,7 +3,7 @@ annet/annet.py,sha256=vyQ__n5hkjub3aWO8tksHPoUSbTeK97MyMcR_U8_BSU,1016
|
|
|
3
3
|
annet/argparse.py,sha256=v1MfhjR0B8qahza0WinmXClpR8UiDFhmwDDWtNroJPA,12855
|
|
4
4
|
annet/bgp_models.py,sha256=roSDKhxzcg9N8iEh9zI4Jww1vOObWcwRVzMl9FJnh1M,14046
|
|
5
5
|
annet/cli.py,sha256=shq3hHzrTxFL3x1_zTOR43QHo0JYs8QSwyOvGtL86Co,12733
|
|
6
|
-
annet/cli_args.py,sha256=
|
|
6
|
+
annet/cli_args.py,sha256=GwFSEJDUZMzUtXo6NBs_1B7tlyFhaaKRfcgmRUpAkfI,13881
|
|
7
7
|
annet/connectors.py,sha256=aoiDVLPizx8CW2p8SAwGCzyO_WW8H9xc2aujbGC4bDg,4882
|
|
8
8
|
annet/deploy.py,sha256=toIaR2QLvLJxpdeXoJhZzKdXfhn784ciTNZlMGT9huo,7709
|
|
9
9
|
annet/deploy_ui.py,sha256=XsN1i7E9cNp1SAf1YBwhEBuwN91MvlNMSrLhnQrumA8,28672
|
|
@@ -28,7 +28,7 @@ annet/adapters/fetchers/stub/fetcher.py,sha256=FzpkIzPJBQVuNNSdXKoGzkALmIGMgo2gm
|
|
|
28
28
|
annet/adapters/file/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
29
|
annet/adapters/file/provider.py,sha256=Raw5DzsGS8I9XcKNeMuk5O3dPxqeRSCNmuB5JwClRqY,7687
|
|
30
30
|
annet/adapters/netbox/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
31
|
-
annet/adapters/netbox/provider.py,sha256=
|
|
31
|
+
annet/adapters/netbox/provider.py,sha256=UY9_5cRWQaieNkzerCmm67a4Nnokg1kilAoP314GU14,2467
|
|
32
32
|
annet/adapters/netbox/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
33
|
annet/adapters/netbox/common/adapter.py,sha256=1rR9PZAU72hIreozWFVb9CKpFVjfUH_i9kQEbaNiEUI,2639
|
|
34
34
|
annet/adapters/netbox/common/client.py,sha256=PaxHG4W9H8_uunIwMBNYkLq4eQJYoO6p6gY-ciQs7Nc,2563
|
|
@@ -36,20 +36,20 @@ annet/adapters/netbox/common/manufacturer.py,sha256=9jTfzwx5XmETrjSbIJu_FhNaByaU
|
|
|
36
36
|
annet/adapters/netbox/common/models.py,sha256=nMruBugAKNY8D63rqUnPYyMYGMIU-haxX0vnfxLGNWc,8990
|
|
37
37
|
annet/adapters/netbox/common/query.py,sha256=mz5oOn5vjU-lCV48TedvtXZ14GtBXU3jpcXa_cNawWg,1949
|
|
38
38
|
annet/adapters/netbox/common/status_client.py,sha256=POaqiQJ0jPcqUQH-X_fWHVnKB7TBYveNriaT0eNTlfI,769
|
|
39
|
-
annet/adapters/netbox/common/storage_base.py,sha256=
|
|
40
|
-
annet/adapters/netbox/common/storage_opts.py,sha256=
|
|
39
|
+
annet/adapters/netbox/common/storage_base.py,sha256=mdteEWxZAlw6re5FPciB5FoV2nAGnqozQdx-iNX-T80,10601
|
|
40
|
+
annet/adapters/netbox/common/storage_opts.py,sha256=pDtkFpfVIoRLBruMYNuIC34XpZe9aRrAygy2cOVpqyU,2800
|
|
41
41
|
annet/adapters/netbox/v24/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
42
42
|
annet/adapters/netbox/v24/models.py,sha256=RH2ooUPHOtHT0q1ZQE7v23FgmcsGenzzSgJyft13o1k,7605
|
|
43
43
|
annet/adapters/netbox/v24/storage.py,sha256=zptzrW4aZUv_exuGw0DqQPm_kXZR3DwL4zRHYL6twTk,6219
|
|
44
44
|
annet/adapters/netbox/v37/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
45
45
|
annet/adapters/netbox/v37/models.py,sha256=LTjotRcTYWUR3KFvdg3LjBhek4OQblOvJr5yvP9AAPg,1940
|
|
46
|
-
annet/adapters/netbox/v37/storage.py,sha256=
|
|
46
|
+
annet/adapters/netbox/v37/storage.py,sha256=DKPCIucpND8M7ebhfhm6lWCcVYif0vtcaJ0mZu22YCU,5362
|
|
47
47
|
annet/adapters/netbox/v41/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
48
48
|
annet/adapters/netbox/v41/models.py,sha256=RI8QHpNIcrXNubis1rUFJ1j9bL881fz4meLXvAY8Yi0,2197
|
|
49
|
-
annet/adapters/netbox/v41/storage.py,sha256=
|
|
49
|
+
annet/adapters/netbox/v41/storage.py,sha256=ZMvNJbXb1XN8WKcAY2cTL_Ybyjk_QOwbxzD93do9DXM,5417
|
|
50
50
|
annet/adapters/netbox/v42/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
51
|
annet/adapters/netbox/v42/models.py,sha256=JNrBMeZ1SznjRzaqKNBP5jtHEKHN40X1V-BlgrMpKwE,2054
|
|
52
|
-
annet/adapters/netbox/v42/storage.py,sha256=
|
|
52
|
+
annet/adapters/netbox/v42/storage.py,sha256=Dg6kiSOVXO2ApXXgQGRdrE4GLd8EkeeRhE6aGxHGvMU,6325
|
|
53
53
|
annet/annlib/__init__.py,sha256=fT1l4xV5fqqg8HPw9HqmZVN2qwS8i6X1aIm2zGDjxKY,252
|
|
54
54
|
annet/annlib/command.py,sha256=GsgzQ8oFiHFan1Tfyo340rWgfhyU4_sCKJGhBm2jG6Y,1258
|
|
55
55
|
annet/annlib/diff.py,sha256=MZ6eQAU3cadQp8KaSE6uAYFtcfMDCIe_eNuVROnYkCk,4496
|
|
@@ -208,8 +208,8 @@ annet/vendors/library/optixtrans.py,sha256=VdME69Ca4HAEgoaKN21fZxnmmsqqaxOe_HZja
|
|
|
208
208
|
annet/vendors/library/pc.py,sha256=vfv31_NPi7M-4AUDL89UcpawK2E6xvCpELA209cd1ho,1086
|
|
209
209
|
annet/vendors/library/ribbon.py,sha256=DDOBq-_-FL9dCxqXs2inEWZ-pvw-dJ-A-prA7cKMhec,1216
|
|
210
210
|
annet/vendors/library/routeros.py,sha256=iQa7m_4wjuvcgBOI9gyZwlw1BvzJfOkvUbyoEk-NI9I,1254
|
|
211
|
-
annet-3.
|
|
212
|
-
annet-3.
|
|
211
|
+
annet-3.19.0.dist-info/licenses/AUTHORS,sha256=rh3w5P6gEgqmuC-bw-HB68vBCr-yIBFhVL0PG4hguLs,878
|
|
212
|
+
annet-3.19.0.dist-info/licenses/LICENSE,sha256=yPxl7dno02Pw7gAcFPIFONzx_gapwDoPXsIsh6Y7lC0,1079
|
|
213
213
|
annet_generators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
214
214
|
annet_generators/example/__init__.py,sha256=OJ77uj8axc-FIyIu_Xdcnzmde3oQW5mk5qbODkhuVc8,355
|
|
215
215
|
annet_generators/example/hostname.py,sha256=RloLzNVetEoWPLITzfJ13Nk3CC0yi-cZB1RTd6dnuhI,2541
|
|
@@ -222,8 +222,8 @@ annet_generators/rpl_example/generator.py,sha256=EWah19gOH8G-QyNyWqxCqdRi0BK7GbM
|
|
|
222
222
|
annet_generators/rpl_example/items.py,sha256=HPgxScDvSqJPdz0c2SppDrH82DZYC4zUaniQwcWmh4A,1176
|
|
223
223
|
annet_generators/rpl_example/mesh.py,sha256=z_WgfDZZ4xnyh3cSf75igyH09hGvtexEVwy1gCD_DzA,288
|
|
224
224
|
annet_generators/rpl_example/route_policy.py,sha256=z6nPb0VDeQtKD1NIg9sFvmUxBD5tVs2frfNIuKdM-5c,2318
|
|
225
|
-
annet-3.
|
|
226
|
-
annet-3.
|
|
227
|
-
annet-3.
|
|
228
|
-
annet-3.
|
|
229
|
-
annet-3.
|
|
225
|
+
annet-3.19.0.dist-info/METADATA,sha256=X7dXwFQ2P044gFKaIKKs-nFXyE-QNGwhPGQvcP1OBJ8,906
|
|
226
|
+
annet-3.19.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
227
|
+
annet-3.19.0.dist-info/entry_points.txt,sha256=5lIaDGlGi3l6QQ2ry2jZaqViP5Lvt8AmsegdD0Uznck,192
|
|
228
|
+
annet-3.19.0.dist-info/top_level.txt,sha256=QsoTZBsUtwp_FEcmRwuN8QITBmLOZFqjssRfKilGbP8,23
|
|
229
|
+
annet-3.19.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|