annet 0.16.4__tar.gz → 0.16.6__tar.gz

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.

Files changed (149) hide show
  1. {annet-0.16.4/annet.egg-info → annet-0.16.6}/PKG-INFO +1 -1
  2. {annet-0.16.4 → annet-0.16.6}/annet/annlib/patching.py +3 -0
  3. {annet-0.16.4 → annet-0.16.6}/annet/api/__init__.py +7 -1
  4. {annet-0.16.4 → annet-0.16.6}/annet/gen.py +1 -3
  5. {annet-0.16.4 → annet-0.16.6}/annet/generators/__init__.py +7 -0
  6. {annet-0.16.4 → annet-0.16.6}/annet/lib.py +1 -1
  7. {annet-0.16.4 → annet-0.16.6/annet.egg-info}/PKG-INFO +1 -1
  8. {annet-0.16.4 → annet-0.16.6}/AUTHORS +0 -0
  9. {annet-0.16.4 → annet-0.16.6}/LICENSE +0 -0
  10. {annet-0.16.4 → annet-0.16.6}/MANIFEST.in +0 -0
  11. {annet-0.16.4 → annet-0.16.6}/README.md +0 -0
  12. {annet-0.16.4 → annet-0.16.6}/annet/__init__.py +0 -0
  13. {annet-0.16.4 → annet-0.16.6}/annet/adapters/__init__.py +0 -0
  14. {annet-0.16.4 → annet-0.16.6}/annet/adapters/netbox/__init__.py +0 -0
  15. {annet-0.16.4 → annet-0.16.6}/annet/adapters/netbox/common/__init__.py +0 -0
  16. {annet-0.16.4 → annet-0.16.6}/annet/adapters/netbox/common/client.py +0 -0
  17. {annet-0.16.4 → annet-0.16.6}/annet/adapters/netbox/common/manufacturer.py +0 -0
  18. {annet-0.16.4 → annet-0.16.6}/annet/adapters/netbox/common/models.py +0 -0
  19. {annet-0.16.4 → annet-0.16.6}/annet/adapters/netbox/common/query.py +0 -0
  20. {annet-0.16.4 → annet-0.16.6}/annet/adapters/netbox/common/status_client.py +0 -0
  21. {annet-0.16.4 → annet-0.16.6}/annet/adapters/netbox/common/storage_opts.py +0 -0
  22. {annet-0.16.4 → annet-0.16.6}/annet/adapters/netbox/provider.py +0 -0
  23. {annet-0.16.4 → annet-0.16.6}/annet/adapters/netbox/v24/__init__.py +0 -0
  24. {annet-0.16.4 → annet-0.16.6}/annet/adapters/netbox/v24/storage.py +0 -0
  25. {annet-0.16.4 → annet-0.16.6}/annet/adapters/netbox/v37/__init__.py +0 -0
  26. {annet-0.16.4 → annet-0.16.6}/annet/adapters/netbox/v37/storage.py +0 -0
  27. {annet-0.16.4 → annet-0.16.6}/annet/annet.py +0 -0
  28. {annet-0.16.4 → annet-0.16.6}/annet/annlib/__init__.py +0 -0
  29. {annet-0.16.4 → annet-0.16.6}/annet/annlib/command.py +0 -0
  30. {annet-0.16.4 → annet-0.16.6}/annet/annlib/diff.py +0 -0
  31. {annet-0.16.4 → annet-0.16.6}/annet/annlib/errors.py +0 -0
  32. {annet-0.16.4 → annet-0.16.6}/annet/annlib/filter_acl.py +0 -0
  33. {annet-0.16.4 → annet-0.16.6}/annet/annlib/jsontools.py +0 -0
  34. {annet-0.16.4 → annet-0.16.6}/annet/annlib/lib.py +0 -0
  35. {annet-0.16.4 → annet-0.16.6}/annet/annlib/netdev/__init__.py +0 -0
  36. {annet-0.16.4 → annet-0.16.6}/annet/annlib/netdev/db.py +0 -0
  37. {annet-0.16.4 → annet-0.16.6}/annet/annlib/netdev/devdb/__init__.py +0 -0
  38. {annet-0.16.4 → annet-0.16.6}/annet/annlib/netdev/devdb/data/devdb.json +0 -0
  39. {annet-0.16.4 → annet-0.16.6}/annet/annlib/netdev/views/__init__.py +0 -0
  40. {annet-0.16.4 → annet-0.16.6}/annet/annlib/netdev/views/dump.py +0 -0
  41. {annet-0.16.4 → annet-0.16.6}/annet/annlib/netdev/views/hardware.py +0 -0
  42. {annet-0.16.4 → annet-0.16.6}/annet/annlib/output.py +0 -0
  43. {annet-0.16.4 → annet-0.16.6}/annet/annlib/rbparser/__init__.py +0 -0
  44. {annet-0.16.4 → annet-0.16.6}/annet/annlib/rbparser/acl.py +0 -0
  45. {annet-0.16.4 → annet-0.16.6}/annet/annlib/rbparser/deploying.py +0 -0
  46. {annet-0.16.4 → annet-0.16.6}/annet/annlib/rbparser/ordering.py +0 -0
  47. {annet-0.16.4 → annet-0.16.6}/annet/annlib/rbparser/platform.py +0 -0
  48. {annet-0.16.4 → annet-0.16.6}/annet/annlib/rbparser/syntax.py +0 -0
  49. {annet-0.16.4 → annet-0.16.6}/annet/annlib/rulebook/__init__.py +0 -0
  50. {annet-0.16.4 → annet-0.16.6}/annet/annlib/rulebook/common.py +0 -0
  51. {annet-0.16.4 → annet-0.16.6}/annet/annlib/tabparser.py +0 -0
  52. {annet-0.16.4 → annet-0.16.6}/annet/annlib/types.py +0 -0
  53. {annet-0.16.4 → annet-0.16.6}/annet/argparse.py +0 -0
  54. {annet-0.16.4 → annet-0.16.6}/annet/cli.py +0 -0
  55. {annet-0.16.4 → annet-0.16.6}/annet/cli_args.py +0 -0
  56. {annet-0.16.4 → annet-0.16.6}/annet/configs/context.yml +0 -0
  57. {annet-0.16.4 → annet-0.16.6}/annet/configs/logging.yaml +0 -0
  58. {annet-0.16.4 → annet-0.16.6}/annet/connectors.py +0 -0
  59. {annet-0.16.4 → annet-0.16.6}/annet/deploy.py +0 -0
  60. {annet-0.16.4 → annet-0.16.6}/annet/diff.py +0 -0
  61. {annet-0.16.4 → annet-0.16.6}/annet/executor.py +0 -0
  62. {annet-0.16.4 → annet-0.16.6}/annet/filtering.py +0 -0
  63. {annet-0.16.4 → annet-0.16.6}/annet/generators/base.py +0 -0
  64. {annet-0.16.4 → annet-0.16.6}/annet/generators/common/__init__.py +0 -0
  65. {annet-0.16.4 → annet-0.16.6}/annet/generators/common/initial.py +0 -0
  66. {annet-0.16.4 → annet-0.16.6}/annet/generators/entire.py +0 -0
  67. {annet-0.16.4 → annet-0.16.6}/annet/generators/exceptions.py +0 -0
  68. {annet-0.16.4 → annet-0.16.6}/annet/generators/jsonfragment.py +0 -0
  69. {annet-0.16.4 → annet-0.16.6}/annet/generators/partial.py +0 -0
  70. {annet-0.16.4 → annet-0.16.6}/annet/generators/perf.py +0 -0
  71. {annet-0.16.4 → annet-0.16.6}/annet/generators/ref.py +0 -0
  72. {annet-0.16.4 → annet-0.16.6}/annet/generators/result.py +0 -0
  73. {annet-0.16.4 → annet-0.16.6}/annet/hardware.py +0 -0
  74. {annet-0.16.4 → annet-0.16.6}/annet/implicit.py +0 -0
  75. {annet-0.16.4 → annet-0.16.6}/annet/output.py +0 -0
  76. {annet-0.16.4 → annet-0.16.6}/annet/parallel.py +0 -0
  77. {annet-0.16.4 → annet-0.16.6}/annet/patching.py +0 -0
  78. {annet-0.16.4 → annet-0.16.6}/annet/reference.py +0 -0
  79. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/__init__.py +0 -0
  80. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/arista/__init__.py +0 -0
  81. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/arista/iface.py +0 -0
  82. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/aruba/__init__.py +0 -0
  83. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/aruba/ap_env.py +0 -0
  84. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/aruba/misc.py +0 -0
  85. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/b4com/__init__.py +0 -0
  86. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/b4com/file.py +0 -0
  87. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/cisco/__init__.py +0 -0
  88. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/cisco/iface.py +0 -0
  89. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/cisco/misc.py +0 -0
  90. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/cisco/vlandb.py +0 -0
  91. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/common.py +0 -0
  92. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/deploying.py +0 -0
  93. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/huawei/__init__.py +0 -0
  94. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/huawei/aaa.py +0 -0
  95. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/huawei/bgp.py +0 -0
  96. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/huawei/iface.py +0 -0
  97. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/huawei/misc.py +0 -0
  98. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/huawei/vlandb.py +0 -0
  99. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/juniper/__init__.py +0 -0
  100. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/nexus/__init__.py +0 -0
  101. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/nexus/iface.py +0 -0
  102. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/patching.py +0 -0
  103. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/ribbon/__init__.py +0 -0
  104. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/arista.deploy +0 -0
  105. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/arista.order +0 -0
  106. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/arista.rul +0 -0
  107. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/aruba.deploy +0 -0
  108. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/aruba.order +0 -0
  109. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/aruba.rul +0 -0
  110. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/b4com.deploy +0 -0
  111. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/b4com.order +0 -0
  112. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/b4com.rul +0 -0
  113. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/cisco.deploy +0 -0
  114. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/cisco.order +0 -0
  115. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/cisco.rul +0 -0
  116. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/huawei.deploy +0 -0
  117. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/huawei.order +0 -0
  118. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/huawei.rul +0 -0
  119. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/juniper.rul +0 -0
  120. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/nexus.deploy +0 -0
  121. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/nexus.order +0 -0
  122. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/nexus.rul +0 -0
  123. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/nokia.rul +0 -0
  124. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/optixtrans.deploy +0 -0
  125. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/optixtrans.order +0 -0
  126. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/optixtrans.rul +0 -0
  127. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/pc.deploy +0 -0
  128. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/pc.order +0 -0
  129. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/pc.rul +0 -0
  130. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/ribbon.deploy +0 -0
  131. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/ribbon.rul +0 -0
  132. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/routeros.order +0 -0
  133. {annet-0.16.4 → annet-0.16.6}/annet/rulebook/texts/routeros.rul +0 -0
  134. {annet-0.16.4 → annet-0.16.6}/annet/storage.py +0 -0
  135. {annet-0.16.4 → annet-0.16.6}/annet/tabparser.py +0 -0
  136. {annet-0.16.4 → annet-0.16.6}/annet/text_term_format.py +0 -0
  137. {annet-0.16.4 → annet-0.16.6}/annet/tracing.py +0 -0
  138. {annet-0.16.4 → annet-0.16.6}/annet/types.py +0 -0
  139. {annet-0.16.4 → annet-0.16.6}/annet.egg-info/SOURCES.txt +0 -0
  140. {annet-0.16.4 → annet-0.16.6}/annet.egg-info/dependency_links.txt +0 -0
  141. {annet-0.16.4 → annet-0.16.6}/annet.egg-info/entry_points.txt +0 -0
  142. {annet-0.16.4 → annet-0.16.6}/annet.egg-info/requires.txt +0 -0
  143. {annet-0.16.4 → annet-0.16.6}/annet.egg-info/top_level.txt +0 -0
  144. {annet-0.16.4 → annet-0.16.6}/annet_generators/__init__.py +0 -0
  145. {annet-0.16.4 → annet-0.16.6}/annet_generators/example/__init__.py +0 -0
  146. {annet-0.16.4 → annet-0.16.6}/annet_generators/example/lldp.py +0 -0
  147. {annet-0.16.4 → annet-0.16.6}/requirements.txt +0 -0
  148. {annet-0.16.4 → annet-0.16.6}/setup.cfg +0 -0
  149. {annet-0.16.4 → annet-0.16.6}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: annet
3
- Version: 0.16.4
3
+ Version: 0.16.6
4
4
  Summary: annet
5
5
  Home-page: https://github.com/annetutil/annet
6
6
  License: MIT
@@ -180,6 +180,9 @@ class Orderer:
180
180
  return (f_order or 0), cmd_direct, odict(children), f_rule
181
181
 
182
182
  def order_config(self, config):
183
+ if self.vendor not in platform.VENDOR_REVERSES:
184
+ return config
185
+
183
186
  ordered = []
184
187
  reverse_prefix = platform.VENDOR_REVERSES[self.vendor]
185
188
  if not config:
@@ -359,8 +359,14 @@ def diff(
359
359
  pc_diff_files.sort(key=lambda f: f.label)
360
360
  ret[device] = PCDiff(hostname=device.hostname, diff_files=pc_diff_files)
361
361
  elif old is not None:
362
+ orderer = patching.Orderer.from_hw(device.hw)
362
363
  rb = rulebook.get_rulebook(device.hw)
363
- diff_tree = patching.make_diff(old, new, rb, [acl_rules, res.filter_acl_rules])
364
+ diff_tree = patching.make_diff(
365
+ old,
366
+ orderer.order_config(new),
367
+ rb,
368
+ [acl_rules, res.filter_acl_rules],
369
+ )
364
370
  diff_tree = patching.strip_unchanged(diff_tree)
365
371
  ret[device] = diff_tree
366
372
 
@@ -27,7 +27,6 @@ from contextlog import get_logger
27
27
 
28
28
  from annet import generators, implicit, patching, tabparser, tracing
29
29
  from annet.annlib import jsontools
30
- from annet.annlib.rbparser import platform
31
30
  from annet.annlib.rbparser.acl import compile_acl_text
32
31
  from annet.cli_args import DeployOptions, GenOptions, ShowGenOptions
33
32
  from annet.deploy import scrub_config, get_fetcher
@@ -512,12 +511,11 @@ def worker(device_id, args: ShowGenOptions, stdin, loader: "Loader", filterer: F
512
511
  for (path, (data, _)) in sorted(new_file_fragments.items(), key=itemgetter(0)):
513
512
  dumped_data = json.dumps(data, indent=4, sort_keys=True, ensure_ascii=False)
514
513
  yield (output_driver.entire_config_dest_path(device, path), dumped_data, False)
515
-
516
514
  # Consider result of partial run empty and create an empty dest file
517
515
  # only if there are some acl rules that has been matched.
518
516
  # Otherwise treat it as if no supported generators have been found.
519
517
  acl_rules = res.get_acl_rules(args.acl_safe)
520
- if device.hw.vendor in platform.VENDOR_REVERSES and acl_rules:
518
+ if acl_rules:
521
519
  orderer = patching.Orderer.from_hw(device.hw)
522
520
  yield (output_driver.cfg_file_names(device)[0],
523
521
  format_config_blocks(
@@ -383,8 +383,15 @@ def _get_generators(module_paths: Union[List[str], dict], storage, device=None):
383
383
  else:
384
384
  modules = []
385
385
  seen = set()
386
+ matched_property = None
386
387
  for prop, prop_modules in module_paths.get("per_device_property", {}).items():
387
388
  if getattr(device, prop, False) is True:
389
+ if matched_property is not None:
390
+ raise RuntimeError(
391
+ f"Device {device.hostname} is matched by more than one "
392
+ f"per_device_property: {matched_property} and {prop}"
393
+ )
394
+ matched_property = prop
388
395
  for module in prop_modules:
389
396
  if module not in seen:
390
397
  modules.append(module)
@@ -44,7 +44,7 @@ _DEFAULT_CONTEXT_PATH: Optional[str] = None # defaults to ~/.annet/context.yml
44
44
 
45
45
  def get_homedir_path() -> str:
46
46
  if _HOMEDIR_PATH is None:
47
- set_homedir_path("~/.annet/")
47
+ set_homedir_path(os.path.expanduser("~/.annet/"))
48
48
  return _HOMEDIR_PATH
49
49
 
50
50
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: annet
3
- Version: 0.16.4
3
+ Version: 0.16.6
4
4
  Summary: annet
5
5
  Home-page: https://github.com/annetutil/annet
6
6
  License: MIT
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes