annet 1.1.0__tar.gz → 1.1.1__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 (195) hide show
  1. {annet-1.1.0/annet.egg-info → annet-1.1.1}/PKG-INFO +2 -2
  2. {annet-1.1.0 → annet-1.1.1}/annet/adapters/netbox/common/query.py +3 -1
  3. {annet-1.1.0 → annet-1.1.1}/annet/annlib/patching.py +9 -3
  4. {annet-1.1.0 → annet-1.1.1}/annet/annlib/rbparser/ordering.py +6 -1
  5. {annet-1.1.0 → annet-1.1.1}/annet/annlib/tabparser.py +8 -1
  6. {annet-1.1.0 → annet-1.1.1}/annet/executor.py +1 -23
  7. annet-1.1.1/annet/rulebook/texts/juniper.order +4 -0
  8. {annet-1.1.0 → annet-1.1.1/annet.egg-info}/PKG-INFO +2 -2
  9. {annet-1.1.0 → annet-1.1.1}/annet.egg-info/requires.txt +1 -1
  10. {annet-1.1.0 → annet-1.1.1}/setup.py +1 -1
  11. annet-1.1.0/annet/rulebook/texts/juniper.order +0 -4
  12. {annet-1.1.0 → annet-1.1.1}/AUTHORS +0 -0
  13. {annet-1.1.0 → annet-1.1.1}/LICENSE +0 -0
  14. {annet-1.1.0 → annet-1.1.1}/MANIFEST.in +0 -0
  15. {annet-1.1.0 → annet-1.1.1}/README.md +0 -0
  16. {annet-1.1.0 → annet-1.1.1}/annet/__init__.py +0 -0
  17. {annet-1.1.0 → annet-1.1.1}/annet/adapters/__init__.py +0 -0
  18. {annet-1.1.0 → annet-1.1.1}/annet/adapters/fetchers/__init__.py +0 -0
  19. {annet-1.1.0 → annet-1.1.1}/annet/adapters/fetchers/stub/__init__.py +0 -0
  20. {annet-1.1.0 → annet-1.1.1}/annet/adapters/fetchers/stub/fetcher.py +0 -0
  21. {annet-1.1.0 → annet-1.1.1}/annet/adapters/file/__init__.py +0 -0
  22. {annet-1.1.0 → annet-1.1.1}/annet/adapters/file/provider.py +0 -0
  23. {annet-1.1.0 → annet-1.1.1}/annet/adapters/netbox/__init__.py +0 -0
  24. {annet-1.1.0 → annet-1.1.1}/annet/adapters/netbox/common/__init__.py +0 -0
  25. {annet-1.1.0 → annet-1.1.1}/annet/adapters/netbox/common/client.py +0 -0
  26. {annet-1.1.0 → annet-1.1.1}/annet/adapters/netbox/common/manufacturer.py +0 -0
  27. {annet-1.1.0 → annet-1.1.1}/annet/adapters/netbox/common/models.py +0 -0
  28. {annet-1.1.0 → annet-1.1.1}/annet/adapters/netbox/common/status_client.py +0 -0
  29. {annet-1.1.0 → annet-1.1.1}/annet/adapters/netbox/common/storage_opts.py +0 -0
  30. {annet-1.1.0 → annet-1.1.1}/annet/adapters/netbox/provider.py +0 -0
  31. {annet-1.1.0 → annet-1.1.1}/annet/adapters/netbox/v24/__init__.py +0 -0
  32. {annet-1.1.0 → annet-1.1.1}/annet/adapters/netbox/v24/storage.py +0 -0
  33. {annet-1.1.0 → annet-1.1.1}/annet/adapters/netbox/v37/__init__.py +0 -0
  34. {annet-1.1.0 → annet-1.1.1}/annet/adapters/netbox/v37/storage.py +0 -0
  35. {annet-1.1.0 → annet-1.1.1}/annet/annet.py +0 -0
  36. {annet-1.1.0 → annet-1.1.1}/annet/annlib/__init__.py +0 -0
  37. {annet-1.1.0 → annet-1.1.1}/annet/annlib/command.py +0 -0
  38. {annet-1.1.0 → annet-1.1.1}/annet/annlib/diff.py +0 -0
  39. {annet-1.1.0 → annet-1.1.1}/annet/annlib/errors.py +0 -0
  40. {annet-1.1.0 → annet-1.1.1}/annet/annlib/filter_acl.py +0 -0
  41. {annet-1.1.0 → annet-1.1.1}/annet/annlib/jsontools.py +0 -0
  42. {annet-1.1.0 → annet-1.1.1}/annet/annlib/lib.py +0 -0
  43. {annet-1.1.0 → annet-1.1.1}/annet/annlib/netdev/__init__.py +0 -0
  44. {annet-1.1.0 → annet-1.1.1}/annet/annlib/netdev/db.py +0 -0
  45. {annet-1.1.0 → annet-1.1.1}/annet/annlib/netdev/devdb/__init__.py +0 -0
  46. {annet-1.1.0 → annet-1.1.1}/annet/annlib/netdev/devdb/data/devdb.json +0 -0
  47. {annet-1.1.0 → annet-1.1.1}/annet/annlib/netdev/views/__init__.py +0 -0
  48. {annet-1.1.0 → annet-1.1.1}/annet/annlib/netdev/views/dump.py +0 -0
  49. {annet-1.1.0 → annet-1.1.1}/annet/annlib/netdev/views/hardware.py +0 -0
  50. {annet-1.1.0 → annet-1.1.1}/annet/annlib/output.py +0 -0
  51. {annet-1.1.0 → annet-1.1.1}/annet/annlib/rbparser/__init__.py +0 -0
  52. {annet-1.1.0 → annet-1.1.1}/annet/annlib/rbparser/acl.py +0 -0
  53. {annet-1.1.0 → annet-1.1.1}/annet/annlib/rbparser/deploying.py +0 -0
  54. {annet-1.1.0 → annet-1.1.1}/annet/annlib/rbparser/platform.py +0 -0
  55. {annet-1.1.0 → annet-1.1.1}/annet/annlib/rbparser/syntax.py +0 -0
  56. {annet-1.1.0 → annet-1.1.1}/annet/annlib/rulebook/__init__.py +0 -0
  57. {annet-1.1.0 → annet-1.1.1}/annet/annlib/rulebook/common.py +0 -0
  58. {annet-1.1.0 → annet-1.1.1}/annet/annlib/types.py +0 -0
  59. {annet-1.1.0 → annet-1.1.1}/annet/api/__init__.py +0 -0
  60. {annet-1.1.0 → annet-1.1.1}/annet/argparse.py +0 -0
  61. {annet-1.1.0 → annet-1.1.1}/annet/bgp_models.py +0 -0
  62. {annet-1.1.0 → annet-1.1.1}/annet/cli.py +0 -0
  63. {annet-1.1.0 → annet-1.1.1}/annet/cli_args.py +0 -0
  64. {annet-1.1.0 → annet-1.1.1}/annet/configs/context.yml +0 -0
  65. {annet-1.1.0 → annet-1.1.1}/annet/configs/logging.yaml +0 -0
  66. {annet-1.1.0 → annet-1.1.1}/annet/connectors.py +0 -0
  67. {annet-1.1.0 → annet-1.1.1}/annet/deploy.py +0 -0
  68. {annet-1.1.0 → annet-1.1.1}/annet/deploy_ui.py +0 -0
  69. {annet-1.1.0 → annet-1.1.1}/annet/diff.py +0 -0
  70. {annet-1.1.0 → annet-1.1.1}/annet/filtering.py +0 -0
  71. {annet-1.1.0 → annet-1.1.1}/annet/gen.py +0 -0
  72. {annet-1.1.0 → annet-1.1.1}/annet/generators/__init__.py +0 -0
  73. {annet-1.1.0 → annet-1.1.1}/annet/generators/base.py +0 -0
  74. {annet-1.1.0 → annet-1.1.1}/annet/generators/common/__init__.py +0 -0
  75. {annet-1.1.0 → annet-1.1.1}/annet/generators/common/initial.py +0 -0
  76. {annet-1.1.0 → annet-1.1.1}/annet/generators/entire.py +0 -0
  77. {annet-1.1.0 → annet-1.1.1}/annet/generators/exceptions.py +0 -0
  78. {annet-1.1.0 → annet-1.1.1}/annet/generators/jsonfragment.py +0 -0
  79. {annet-1.1.0 → annet-1.1.1}/annet/generators/partial.py +0 -0
  80. {annet-1.1.0 → annet-1.1.1}/annet/generators/perf.py +0 -0
  81. {annet-1.1.0 → annet-1.1.1}/annet/generators/ref.py +0 -0
  82. {annet-1.1.0 → annet-1.1.1}/annet/generators/result.py +0 -0
  83. {annet-1.1.0 → annet-1.1.1}/annet/hardware.py +0 -0
  84. {annet-1.1.0 → annet-1.1.1}/annet/implicit.py +0 -0
  85. {annet-1.1.0 → annet-1.1.1}/annet/lib.py +0 -0
  86. {annet-1.1.0 → annet-1.1.1}/annet/mesh/__init__.py +0 -0
  87. {annet-1.1.0 → annet-1.1.1}/annet/mesh/basemodel.py +0 -0
  88. {annet-1.1.0 → annet-1.1.1}/annet/mesh/device_models.py +0 -0
  89. {annet-1.1.0 → annet-1.1.1}/annet/mesh/executor.py +0 -0
  90. {annet-1.1.0 → annet-1.1.1}/annet/mesh/match_args.py +0 -0
  91. {annet-1.1.0 → annet-1.1.1}/annet/mesh/models_converter.py +0 -0
  92. {annet-1.1.0 → annet-1.1.1}/annet/mesh/peer_models.py +0 -0
  93. {annet-1.1.0 → annet-1.1.1}/annet/mesh/port_processor.py +0 -0
  94. {annet-1.1.0 → annet-1.1.1}/annet/mesh/registry.py +0 -0
  95. {annet-1.1.0 → annet-1.1.1}/annet/output.py +0 -0
  96. {annet-1.1.0 → annet-1.1.1}/annet/parallel.py +0 -0
  97. {annet-1.1.0 → annet-1.1.1}/annet/patching.py +0 -0
  98. {annet-1.1.0 → annet-1.1.1}/annet/reference.py +0 -0
  99. {annet-1.1.0 → annet-1.1.1}/annet/rpl/__init__.py +0 -0
  100. {annet-1.1.0 → annet-1.1.1}/annet/rpl/action.py +0 -0
  101. {annet-1.1.0 → annet-1.1.1}/annet/rpl/condition.py +0 -0
  102. {annet-1.1.0 → annet-1.1.1}/annet/rpl/match_builder.py +0 -0
  103. {annet-1.1.0 → annet-1.1.1}/annet/rpl/policy.py +0 -0
  104. {annet-1.1.0 → annet-1.1.1}/annet/rpl/result.py +0 -0
  105. {annet-1.1.0 → annet-1.1.1}/annet/rpl/routemap.py +0 -0
  106. {annet-1.1.0 → annet-1.1.1}/annet/rpl/statement_builder.py +0 -0
  107. {annet-1.1.0 → annet-1.1.1}/annet/rpl_generators/__init__.py +0 -0
  108. {annet-1.1.0 → annet-1.1.1}/annet/rpl_generators/aspath.py +0 -0
  109. {annet-1.1.0 → annet-1.1.1}/annet/rpl_generators/community.py +0 -0
  110. {annet-1.1.0 → annet-1.1.1}/annet/rpl_generators/cumulus_frr.py +0 -0
  111. {annet-1.1.0 → annet-1.1.1}/annet/rpl_generators/entities.py +0 -0
  112. {annet-1.1.0 → annet-1.1.1}/annet/rpl_generators/execute.py +0 -0
  113. {annet-1.1.0 → annet-1.1.1}/annet/rpl_generators/policy.py +0 -0
  114. {annet-1.1.0 → annet-1.1.1}/annet/rpl_generators/prefix_lists.py +0 -0
  115. {annet-1.1.0 → annet-1.1.1}/annet/rpl_generators/rd.py +0 -0
  116. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/__init__.py +0 -0
  117. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/arista/__init__.py +0 -0
  118. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/arista/aaa.py +0 -0
  119. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/arista/iface.py +0 -0
  120. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/aruba/__init__.py +0 -0
  121. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/aruba/ap_env.py +0 -0
  122. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/aruba/misc.py +0 -0
  123. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/b4com/__init__.py +0 -0
  124. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/b4com/file.py +0 -0
  125. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/b4com/iface.py +0 -0
  126. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/cisco/__init__.py +0 -0
  127. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/cisco/iface.py +0 -0
  128. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/cisco/misc.py +0 -0
  129. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/cisco/vlandb.py +0 -0
  130. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/common.py +0 -0
  131. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/deploying.py +0 -0
  132. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/huawei/__init__.py +0 -0
  133. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/huawei/aaa.py +0 -0
  134. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/huawei/bgp.py +0 -0
  135. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/huawei/iface.py +0 -0
  136. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/huawei/misc.py +0 -0
  137. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/huawei/vlandb.py +0 -0
  138. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/juniper/__init__.py +0 -0
  139. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/nexus/__init__.py +0 -0
  140. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/nexus/iface.py +0 -0
  141. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/patching.py +0 -0
  142. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/routeros/__init__.py +0 -0
  143. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/routeros/file.py +0 -0
  144. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/arista.deploy +0 -0
  145. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/arista.order +0 -0
  146. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/arista.rul +0 -0
  147. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/aruba.deploy +0 -0
  148. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/aruba.order +0 -0
  149. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/aruba.rul +0 -0
  150. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/b4com.deploy +0 -0
  151. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/b4com.order +0 -0
  152. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/b4com.rul +0 -0
  153. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/cisco.deploy +0 -0
  154. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/cisco.order +0 -0
  155. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/cisco.rul +0 -0
  156. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/huawei.deploy +0 -0
  157. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/huawei.order +0 -0
  158. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/huawei.rul +0 -0
  159. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/juniper.rul +0 -0
  160. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/nexus.deploy +0 -0
  161. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/nexus.order +0 -0
  162. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/nexus.rul +0 -0
  163. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/nokia.rul +0 -0
  164. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/optixtrans.deploy +0 -0
  165. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/optixtrans.order +0 -0
  166. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/optixtrans.rul +0 -0
  167. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/pc.deploy +0 -0
  168. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/pc.order +0 -0
  169. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/pc.rul +0 -0
  170. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/ribbon.deploy +0 -0
  171. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/ribbon.rul +0 -0
  172. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/routeros.order +0 -0
  173. {annet-1.1.0 → annet-1.1.1}/annet/rulebook/texts/routeros.rul +0 -0
  174. {annet-1.1.0 → annet-1.1.1}/annet/storage.py +0 -0
  175. {annet-1.1.0 → annet-1.1.1}/annet/tabparser.py +0 -0
  176. {annet-1.1.0 → annet-1.1.1}/annet/text_term_format.py +0 -0
  177. {annet-1.1.0 → annet-1.1.1}/annet/tracing.py +0 -0
  178. {annet-1.1.0 → annet-1.1.1}/annet/types.py +0 -0
  179. {annet-1.1.0 → annet-1.1.1}/annet.egg-info/SOURCES.txt +0 -0
  180. {annet-1.1.0 → annet-1.1.1}/annet.egg-info/dependency_links.txt +0 -0
  181. {annet-1.1.0 → annet-1.1.1}/annet.egg-info/entry_points.txt +0 -0
  182. {annet-1.1.0 → annet-1.1.1}/annet.egg-info/top_level.txt +0 -0
  183. {annet-1.1.0 → annet-1.1.1}/annet_generators/__init__.py +0 -0
  184. {annet-1.1.0 → annet-1.1.1}/annet_generators/example/__init__.py +0 -0
  185. {annet-1.1.0 → annet-1.1.1}/annet_generators/example/lldp.py +0 -0
  186. {annet-1.1.0 → annet-1.1.1}/annet_generators/mesh_example/__init__.py +0 -0
  187. {annet-1.1.0 → annet-1.1.1}/annet_generators/mesh_example/bgp.py +0 -0
  188. {annet-1.1.0 → annet-1.1.1}/annet_generators/mesh_example/mesh_logic.py +0 -0
  189. {annet-1.1.0 → annet-1.1.1}/annet_generators/rpl_example/__init__.py +0 -0
  190. {annet-1.1.0 → annet-1.1.1}/annet_generators/rpl_example/generator.py +0 -0
  191. {annet-1.1.0 → annet-1.1.1}/annet_generators/rpl_example/items.py +0 -0
  192. {annet-1.1.0 → annet-1.1.1}/annet_generators/rpl_example/mesh.py +0 -0
  193. {annet-1.1.0 → annet-1.1.1}/annet_generators/rpl_example/route_policy.py +0 -0
  194. {annet-1.1.0 → annet-1.1.1}/requirements.txt +0 -0
  195. {annet-1.1.0 → annet-1.1.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: annet
3
- Version: 1.1.0
3
+ Version: 1.1.1
4
4
  Summary: annet
5
5
  Home-page: https://github.com/annetutil/annet
6
6
  License: MIT
@@ -22,7 +22,7 @@ Requires-Dist: yarl>=1.8.2
22
22
  Requires-Dist: adaptix==3.0.0b7
23
23
  Requires-Dist: dataclass-rest==0.4
24
24
  Provides-Extra: netbox
25
- Requires-Dist: annetbox[sync]>=0.2.0; extra == "netbox"
25
+ Requires-Dist: annetbox[sync]>=0.2.1; extra == "netbox"
26
26
  Dynamic: home-page
27
27
  Dynamic: license
28
28
  Dynamic: provides-extra
@@ -5,7 +5,7 @@ from typing import cast, List, Union, Iterable, Optional, TypedDict
5
5
  from annet.storage import Query
6
6
 
7
7
  FIELD_VALUE_SEPARATOR = ":"
8
- ALLOWED_GLOB_GROUPS = ["site", "tag", "role", "device_type"]
8
+ ALLOWED_GLOB_GROUPS = ["site", "tag", "role", "device_type", "status", "tenant"]
9
9
 
10
10
 
11
11
  class Filter(TypedDict, total=False):
@@ -14,6 +14,8 @@ class Filter(TypedDict, total=False):
14
14
  role: list[str]
15
15
  name: list[str]
16
16
  device_type: list[str]
17
+ status: list[str]
18
+ tenant: list[str]
17
19
 
18
20
 
19
21
  @dataclass
@@ -2,7 +2,7 @@ import copy
2
2
  import operator
3
3
  import textwrap
4
4
  from collections import OrderedDict as odict
5
- from typing import ( # pylint: disable=unused-import
5
+ from typing import (
6
6
  Any,
7
7
  Dict,
8
8
  Iterator,
@@ -177,7 +177,7 @@ class Orderer:
177
177
  def rule_weight(self, row, rule, regexp_key):
178
178
  return len(set(row).intersection(set(rule["attrs"][regexp_key].pattern))) / len(row)
179
179
 
180
- def get_order(self, row, cmd_direct):
180
+ def get_order(self, row, cmd_direct, scope: str | None = None):
181
181
  f_order = None
182
182
  f_weight = 0
183
183
  f_rule = ""
@@ -186,6 +186,12 @@ class Orderer:
186
186
  block_exit = platform.VENDOR_EXIT[self.vendor]
187
187
 
188
188
  for (order, (raw_rule, rule)) in enumerate(ordering.items()):
189
+ if (
190
+ (rule_scope := rule["attrs"]["scope"]) is not None
191
+ and scope not in rule_scope
192
+ ):
193
+ continue
194
+
189
195
  if rule["attrs"]["global"]:
190
196
  children.append((raw_rule, rule))
191
197
 
@@ -419,7 +425,7 @@ def make_patch(pre, rb, hw, add_comments, orderer=None, _root_pre=None, do_commi
419
425
  patch_row = "%s %s" % (row, comments)
420
426
 
421
427
  # pylint: disable=unused-variable
422
- (order, order_direct, ordering, order_rule) = orderer.get_order(row, direct)
428
+ (order, order_direct, ordering, order_rule) = orderer.get_order(row, direct, scope="patch")
423
429
  fmt_row = patch_row
424
430
  # fmt_row += " # %s" % str(order_rule) # uncomment to debug ordering
425
431
 
@@ -2,7 +2,7 @@ import functools
2
2
  import re
3
3
  from collections import OrderedDict as odict
4
4
 
5
- from valkit.common import valid_bool
5
+ from valkit.common import valid_bool, valid_string_list
6
6
 
7
7
  from . import platform, syntax
8
8
 
@@ -19,6 +19,10 @@ def compile_ordering_text(text, vendor):
19
19
  "global": {
20
20
  "validator": valid_bool,
21
21
  "default": False,
22
+ },
23
+ "scope": {
24
+ "validator": valid_string_list,
25
+ "default": None,
22
26
  }
23
27
  }),
24
28
  reverse_prefix=platform.VENDOR_REVERSES[vendor],
@@ -49,6 +53,7 @@ def _compile_ordering(tree, reverse_prefix):
49
53
  ),
50
54
  "order_reverse": attrs["params"]["order_reverse"],
51
55
  "global": attrs["params"]["global"],
56
+ "scope": attrs["params"]["scope"],
52
57
  "raw_rule": attrs["raw_rule"],
53
58
  "context": attrs["context"],
54
59
  },
@@ -458,6 +458,13 @@ class JuniperFormatter(CommonFormatter):
458
458
  def patch_plain(self, patch):
459
459
  return list(self.cmd_paths(patch).keys())
460
460
 
461
+ def _blocks(self, tree: "PatchTree", is_patch: bool):
462
+ for row in super()._blocks(tree, is_patch):
463
+ if isinstance(row, str) and row.startswith(self.Comment.begin):
464
+ yield f"{self.Comment.begin} {self.Comment.loads(row).comment} {self.Comment.end}"
465
+ else:
466
+ yield row
467
+
461
468
  def _formatted_blocks(self, blocks):
462
469
  level = 0
463
470
  line = None
@@ -469,7 +476,7 @@ class JuniperFormatter(CommonFormatter):
469
476
  elif new_line is BlockEnd:
470
477
  level -= 1
471
478
  if isinstance(line, str):
472
- yield line + self._statement_end
479
+ yield line + ("" if line.endswith(self.Comment.end) else self._statement_end)
473
480
  yield self._indent * level + self._block_end
474
481
  elif isinstance(line, str):
475
482
  yield line + ("" if line.endswith(self.Comment.end) else self._statement_end)
@@ -4,7 +4,7 @@ import statistics
4
4
  from abc import ABC, abstractmethod
5
5
  from functools import partial
6
6
  from operator import itemgetter
7
- from typing import Any, Dict, List, Optional, Union
7
+ from typing import Any, List, Optional
8
8
 
9
9
  import colorama
10
10
  from annet.annlib.command import Command, CommandList, Question # noqa: F401
@@ -16,28 +16,6 @@ class CommandResult(ABC):
16
16
  pass
17
17
 
18
18
 
19
- class Connector(ABC):
20
- @abstractmethod
21
- async def cmd(self, cmd: Union[Command, str]) -> CommandResult:
22
- pass
23
-
24
- @abstractmethod
25
- async def download(self, files: List[str]) -> Dict[str, str]:
26
- pass
27
-
28
- @abstractmethod
29
- async def upload(self, files: Dict[str, str]):
30
- pass
31
-
32
- @abstractmethod
33
- def get_conn_trace(self) -> str:
34
- pass
35
-
36
- @abstractmethod
37
- async def aclose(self) -> str:
38
- pass
39
-
40
-
41
19
  class ExecutorException(Exception):
42
20
  def __init__(self, *args: List[Any], auxiliary: Optional[Any] = None, **kwargs: object):
43
21
  self.auxiliary = auxiliary
@@ -0,0 +1,4 @@
1
+ # Правило на все команды
2
+ * %global
3
+ # Добавляем веса комментам, чтобы они катились всегда после команд, но только в патче
4
+ */\/\*(?:(?!\*\/).)*\*\// %global %scope=patch
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: annet
3
- Version: 1.1.0
3
+ Version: 1.1.1
4
4
  Summary: annet
5
5
  Home-page: https://github.com/annetutil/annet
6
6
  License: MIT
@@ -22,7 +22,7 @@ Requires-Dist: yarl>=1.8.2
22
22
  Requires-Dist: adaptix==3.0.0b7
23
23
  Requires-Dist: dataclass-rest==0.4
24
24
  Provides-Extra: netbox
25
- Requires-Dist: annetbox[sync]>=0.2.0; extra == "netbox"
25
+ Requires-Dist: annetbox[sync]>=0.2.1; extra == "netbox"
26
26
  Dynamic: home-page
27
27
  Dynamic: license
28
28
  Dynamic: provides-extra
@@ -14,4 +14,4 @@ adaptix==3.0.0b7
14
14
  dataclass-rest==0.4
15
15
 
16
16
  [netbox]
17
- annetbox[sync]>=0.2.0
17
+ annetbox[sync]>=0.2.1
@@ -44,7 +44,7 @@ if __name__ == "__main__":
44
44
  ],
45
45
  },
46
46
  extras_require={
47
- "netbox": ["annetbox[sync]>=0.2.0"],
47
+ "netbox": ["annetbox[sync]>=0.2.1"],
48
48
  },
49
49
  python_requires=">=3.10",
50
50
  install_requires=requirements(),
@@ -1,4 +0,0 @@
1
- # Правило на все команды
2
- * %global
3
- # Добавляем веса комментам, чтобы они катились всегда после команд
4
- */\/\*(?:(?!\*\/).)*\*\// %global
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
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