annet 0.12.8__tar.gz → 0.12.10__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 (144) hide show
  1. {annet-0.12.8/annet.egg-info → annet-0.12.10}/PKG-INFO +1 -1
  2. {annet-0.12.8 → annet-0.12.10}/annet/api/__init__.py +10 -9
  3. {annet-0.12.8 → annet-0.12.10}/annet/gen.py +21 -8
  4. {annet-0.12.8 → annet-0.12.10}/annet/lib.py +1 -0
  5. {annet-0.12.8 → annet-0.12.10/annet.egg-info}/PKG-INFO +1 -1
  6. {annet-0.12.8 → annet-0.12.10}/AUTHORS +0 -0
  7. {annet-0.12.8 → annet-0.12.10}/LICENSE +0 -0
  8. {annet-0.12.8 → annet-0.12.10}/MANIFEST.in +0 -0
  9. {annet-0.12.8 → annet-0.12.10}/README.md +0 -0
  10. {annet-0.12.8 → annet-0.12.10}/annet/__init__.py +0 -0
  11. {annet-0.12.8 → annet-0.12.10}/annet/adapters/__init__.py +0 -0
  12. {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/__init__.py +0 -0
  13. {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/common/__init__.py +0 -0
  14. {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/common/client.py +0 -0
  15. {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/common/manufacturer.py +0 -0
  16. {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/common/models.py +0 -0
  17. {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/common/query.py +0 -0
  18. {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/common/status_client.py +0 -0
  19. {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/common/storage_opts.py +0 -0
  20. {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/provider.py +0 -0
  21. {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/v24/__init__.py +0 -0
  22. {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/v24/api_models.py +0 -0
  23. {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/v24/client.py +0 -0
  24. {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/v24/storage.py +0 -0
  25. {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/v37/__init__.py +0 -0
  26. {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/v37/api_models.py +0 -0
  27. {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/v37/client.py +0 -0
  28. {annet-0.12.8 → annet-0.12.10}/annet/adapters/netbox/v37/storage.py +0 -0
  29. {annet-0.12.8 → annet-0.12.10}/annet/annet.py +0 -0
  30. {annet-0.12.8 → annet-0.12.10}/annet/annlib/__init__.py +0 -0
  31. {annet-0.12.8 → annet-0.12.10}/annet/annlib/command.py +0 -0
  32. {annet-0.12.8 → annet-0.12.10}/annet/annlib/diff.py +0 -0
  33. {annet-0.12.8 → annet-0.12.10}/annet/annlib/errors.py +0 -0
  34. {annet-0.12.8 → annet-0.12.10}/annet/annlib/filter_acl.py +0 -0
  35. {annet-0.12.8 → annet-0.12.10}/annet/annlib/jsontools.py +0 -0
  36. {annet-0.12.8 → annet-0.12.10}/annet/annlib/lib.py +0 -0
  37. {annet-0.12.8 → annet-0.12.10}/annet/annlib/netdev/__init__.py +0 -0
  38. {annet-0.12.8 → annet-0.12.10}/annet/annlib/netdev/db.py +0 -0
  39. {annet-0.12.8 → annet-0.12.10}/annet/annlib/netdev/devdb/__init__.py +0 -0
  40. {annet-0.12.8 → annet-0.12.10}/annet/annlib/netdev/devdb/data/devdb.json +0 -0
  41. {annet-0.12.8 → annet-0.12.10}/annet/annlib/netdev/views/__init__.py +0 -0
  42. {annet-0.12.8 → annet-0.12.10}/annet/annlib/netdev/views/dump.py +0 -0
  43. {annet-0.12.8 → annet-0.12.10}/annet/annlib/netdev/views/hardware.py +0 -0
  44. {annet-0.12.8 → annet-0.12.10}/annet/annlib/output.py +0 -0
  45. {annet-0.12.8 → annet-0.12.10}/annet/annlib/patching.py +0 -0
  46. {annet-0.12.8 → annet-0.12.10}/annet/annlib/rbparser/__init__.py +0 -0
  47. {annet-0.12.8 → annet-0.12.10}/annet/annlib/rbparser/acl.py +0 -0
  48. {annet-0.12.8 → annet-0.12.10}/annet/annlib/rbparser/deploying.py +0 -0
  49. {annet-0.12.8 → annet-0.12.10}/annet/annlib/rbparser/ordering.py +0 -0
  50. {annet-0.12.8 → annet-0.12.10}/annet/annlib/rbparser/platform.py +0 -0
  51. {annet-0.12.8 → annet-0.12.10}/annet/annlib/rbparser/syntax.py +0 -0
  52. {annet-0.12.8 → annet-0.12.10}/annet/annlib/rulebook/__init__.py +0 -0
  53. {annet-0.12.8 → annet-0.12.10}/annet/annlib/rulebook/common.py +0 -0
  54. {annet-0.12.8 → annet-0.12.10}/annet/annlib/tabparser.py +0 -0
  55. {annet-0.12.8 → annet-0.12.10}/annet/annlib/types.py +0 -0
  56. {annet-0.12.8 → annet-0.12.10}/annet/argparse.py +0 -0
  57. {annet-0.12.8 → annet-0.12.10}/annet/cli.py +0 -0
  58. {annet-0.12.8 → annet-0.12.10}/annet/cli_args.py +0 -0
  59. {annet-0.12.8 → annet-0.12.10}/annet/configs/context.yml +0 -0
  60. {annet-0.12.8 → annet-0.12.10}/annet/configs/logging.yaml +0 -0
  61. {annet-0.12.8 → annet-0.12.10}/annet/connectors.py +0 -0
  62. {annet-0.12.8 → annet-0.12.10}/annet/deploy.py +0 -0
  63. {annet-0.12.8 → annet-0.12.10}/annet/diff.py +0 -0
  64. {annet-0.12.8 → annet-0.12.10}/annet/executor.py +0 -0
  65. {annet-0.12.8 → annet-0.12.10}/annet/filtering.py +0 -0
  66. {annet-0.12.8 → annet-0.12.10}/annet/generators/__init__.py +0 -0
  67. {annet-0.12.8 → annet-0.12.10}/annet/generators/base.py +0 -0
  68. {annet-0.12.8 → annet-0.12.10}/annet/generators/common/__init__.py +0 -0
  69. {annet-0.12.8 → annet-0.12.10}/annet/generators/common/initial.py +0 -0
  70. {annet-0.12.8 → annet-0.12.10}/annet/generators/entire.py +0 -0
  71. {annet-0.12.8 → annet-0.12.10}/annet/generators/exceptions.py +0 -0
  72. {annet-0.12.8 → annet-0.12.10}/annet/generators/jsonfragment.py +0 -0
  73. {annet-0.12.8 → annet-0.12.10}/annet/generators/partial.py +0 -0
  74. {annet-0.12.8 → annet-0.12.10}/annet/generators/perf.py +0 -0
  75. {annet-0.12.8 → annet-0.12.10}/annet/generators/ref.py +0 -0
  76. {annet-0.12.8 → annet-0.12.10}/annet/generators/result.py +0 -0
  77. {annet-0.12.8 → annet-0.12.10}/annet/hardware.py +0 -0
  78. {annet-0.12.8 → annet-0.12.10}/annet/implicit.py +0 -0
  79. {annet-0.12.8 → annet-0.12.10}/annet/output.py +0 -0
  80. {annet-0.12.8 → annet-0.12.10}/annet/parallel.py +0 -0
  81. {annet-0.12.8 → annet-0.12.10}/annet/patching.py +0 -0
  82. {annet-0.12.8 → annet-0.12.10}/annet/reference.py +0 -0
  83. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/__init__.py +0 -0
  84. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/arista/__init__.py +0 -0
  85. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/arista/iface.py +0 -0
  86. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/aruba/__init__.py +0 -0
  87. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/aruba/ap_env.py +0 -0
  88. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/aruba/misc.py +0 -0
  89. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/cisco/__init__.py +0 -0
  90. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/cisco/iface.py +0 -0
  91. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/cisco/misc.py +0 -0
  92. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/cisco/vlandb.py +0 -0
  93. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/common.py +0 -0
  94. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/deploying.py +0 -0
  95. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/huawei/__init__.py +0 -0
  96. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/huawei/aaa.py +0 -0
  97. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/huawei/bgp.py +0 -0
  98. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/huawei/iface.py +0 -0
  99. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/huawei/misc.py +0 -0
  100. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/huawei/vlandb.py +0 -0
  101. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/juniper/__init__.py +0 -0
  102. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/nexus/__init__.py +0 -0
  103. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/nexus/iface.py +0 -0
  104. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/patching.py +0 -0
  105. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/ribbon/__init__.py +0 -0
  106. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/arista.deploy +0 -0
  107. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/arista.order +0 -0
  108. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/arista.rul +0 -0
  109. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/aruba.deploy +0 -0
  110. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/aruba.order +0 -0
  111. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/aruba.rul +0 -0
  112. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/cisco.deploy +0 -0
  113. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/cisco.order +0 -0
  114. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/cisco.rul +0 -0
  115. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/huawei.deploy +0 -0
  116. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/huawei.order +0 -0
  117. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/huawei.rul +0 -0
  118. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/juniper.rul +0 -0
  119. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/nexus.deploy +0 -0
  120. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/nexus.order +0 -0
  121. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/nexus.rul +0 -0
  122. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/nokia.rul +0 -0
  123. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/pc.order +0 -0
  124. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/pc.rul +0 -0
  125. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/ribbon.deploy +0 -0
  126. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/ribbon.rul +0 -0
  127. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/routeros.order +0 -0
  128. {annet-0.12.8 → annet-0.12.10}/annet/rulebook/texts/routeros.rul +0 -0
  129. {annet-0.12.8 → annet-0.12.10}/annet/storage.py +0 -0
  130. {annet-0.12.8 → annet-0.12.10}/annet/tabparser.py +0 -0
  131. {annet-0.12.8 → annet-0.12.10}/annet/text_term_format.py +0 -0
  132. {annet-0.12.8 → annet-0.12.10}/annet/tracing.py +0 -0
  133. {annet-0.12.8 → annet-0.12.10}/annet/types.py +0 -0
  134. {annet-0.12.8 → annet-0.12.10}/annet.egg-info/SOURCES.txt +0 -0
  135. {annet-0.12.8 → annet-0.12.10}/annet.egg-info/dependency_links.txt +0 -0
  136. {annet-0.12.8 → annet-0.12.10}/annet.egg-info/entry_points.txt +0 -0
  137. {annet-0.12.8 → annet-0.12.10}/annet.egg-info/requires.txt +0 -0
  138. {annet-0.12.8 → annet-0.12.10}/annet.egg-info/top_level.txt +0 -0
  139. {annet-0.12.8 → annet-0.12.10}/annet_generators/__init__.py +0 -0
  140. {annet-0.12.8 → annet-0.12.10}/annet_generators/example/__init__.py +0 -0
  141. {annet-0.12.8 → annet-0.12.10}/annet_generators/example/lldp.py +0 -0
  142. {annet-0.12.8 → annet-0.12.10}/requirements.txt +0 -0
  143. {annet-0.12.8 → annet-0.12.10}/setup.cfg +0 -0
  144. {annet-0.12.8 → annet-0.12.10}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: annet
3
- Version: 0.12.8
3
+ Version: 0.12.10
4
4
  Summary: annet
5
5
  Home-page: https://github.com/annetutil/annet
6
6
  License: MIT
@@ -347,21 +347,22 @@ def diff(
347
347
  acl_rules = res.get_acl_rules(args.acl_safe)
348
348
  new_files = res.get_new_files(args.acl_safe)
349
349
  new_json_fragment_files = res.get_new_file_fragments()
350
+
351
+ pc_diff_files = []
350
352
  if res.old_files or new_files:
351
- ret[device] = PCDiff(
352
- hostname=device.hostname,
353
- diff_files=list(_pc_diff(device.hostname, res.old_files, new_files)),
354
- )
355
- elif res.old_json_fragment_files or new_json_fragment_files:
356
- ret[device] = PCDiff(
357
- hostname=device.hostname,
358
- diff_files=list(_json_fragment_diff(device.hostname, res.old_json_fragment_files, new_json_fragment_files)),
359
- )
353
+ pc_diff_files.extend(_pc_diff(device.hostname, res.old_files, new_files))
354
+ if res.old_json_fragment_files or new_json_fragment_files:
355
+ pc_diff_files.extend(_json_fragment_diff(device.hostname, res.old_json_fragment_files, new_json_fragment_files))
356
+
357
+ if pc_diff_files:
358
+ pc_diff_files.sort(key=lambda f: f.label)
359
+ ret[device] = PCDiff(hostname=device.hostname, diff_files=pc_diff_files)
360
360
  elif old is not None:
361
361
  rb = rulebook.get_rulebook(device.hw)
362
362
  diff_tree = patching.make_diff(old, new, rb, [acl_rules, res.filter_acl_rules])
363
363
  diff_tree = patching.strip_unchanged(diff_tree)
364
364
  ret[device] = diff_tree
365
+
365
366
  return ret
366
367
 
367
368
 
@@ -79,6 +79,19 @@ class DeviceGenerators:
79
79
  for gen in gen_list:
80
80
  yield gen
81
81
 
82
+ def for_devices(self, devices: Iterable[Device]) -> "DeviceGenerators":
83
+ result = DeviceGenerators()
84
+ for device in devices:
85
+ if device in self.partial:
86
+ result.partial[device] = self.partial[device]
87
+ if device in self.ref:
88
+ result.ref[device] = self.ref[device]
89
+ if device in self.entire:
90
+ result.entire[device] = self.entire[device]
91
+ if device in self.json_fragment:
92
+ result.json_fragment[device] = self.json_fragment[device]
93
+ return result
94
+
82
95
  def file_gens(self, device: Any) -> Iterator[Union[Entire, JSONFragment]]:
83
96
  """Iterate over generators that generate files or file parts."""
84
97
  yield from itertools.chain(
@@ -514,7 +527,7 @@ def worker(device_id, args: ShowGenOptions, stdin, loader: "Loader", filterer: F
514
527
 
515
528
 
516
529
  def old_new_worker(device_id, args: DeployOptions, config, stdin, loader: "Loader", filterer: Filterer):
517
- yield from old_new(
530
+ for res in old_new(
518
531
  args,
519
532
  config=config,
520
533
  loader=loader,
@@ -523,7 +536,10 @@ def old_new_worker(device_id, args: DeployOptions, config, stdin, loader: "Loade
523
536
  device_ids=[device_id],
524
537
  no_new=args.clear,
525
538
  do_files_download=True,
526
- )
539
+ ):
540
+ if res.err is not None and not args.tolerate_fails:
541
+ raise res.err
542
+ yield res
527
543
 
528
544
 
529
545
  class OldNewParallel(Parallel):
@@ -538,12 +554,13 @@ class OldNewParallel(Parallel):
538
554
  filterer=filterer,
539
555
  )
540
556
  self.tune_args(args)
557
+ self.tolerate_fails = args.tolerate_fails
541
558
 
542
559
  def generated_configs(self, devices: List[Device]) -> Generator[OldNewResult, None, None]:
543
560
  devices_by_id = {device.id: device for device in devices}
544
561
  device_ids = list(devices_by_id)
545
562
 
546
- for task_result in self.irun(device_ids):
563
+ for task_result in self.irun(device_ids, self.tolerate_fails):
547
564
  if task_result.exc is not None:
548
565
  device = devices_by_id.pop(task_result.device_id)
549
566
  yield OldNewResult(device=device, err=task_result.exc)
@@ -868,8 +885,4 @@ class Loader:
868
885
  return []
869
886
 
870
887
  def resolve_gens(self, devices: Iterable[Device]) -> DeviceGenerators:
871
- if self._gens is not None:
872
- return self._gens
873
-
874
- with tracing_connector.get().start_as_current_span("Resolve gens"):
875
- return _old_resolve_gens(self._args, self._storage, devices)
888
+ return self._gens.for_devices(devices)
@@ -84,6 +84,7 @@ def get_context_path(touch: Optional[bool] = False) -> str:
84
84
  return str(path)
85
85
 
86
86
 
87
+ @lru_cache(maxsize=1)
87
88
  def get_context() -> dict:
88
89
  with open(get_context_path()) as f:
89
90
  raw = yaml.safe_load(f)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: annet
3
- Version: 0.12.8
3
+ Version: 0.12.10
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