acex-devkit 2.7.0__tar.gz → 2.8.0__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.
Files changed (88) hide show
  1. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/PKG-INFO +1 -1
  2. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/pyproject.toml +1 -1
  3. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/telemetry_agent.py +31 -0
  4. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/README.md +0 -0
  5. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/__init__.py +0 -0
  6. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/configdiffer/__init__.py +0 -0
  7. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/configdiffer/command.py +0 -0
  8. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/configdiffer/configdiffer.py +0 -0
  9. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/configdiffer/diff.py +0 -0
  10. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/configdiffer/old_configdiffer.py +0 -0
  11. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/configdiffer/old_diff.py +0 -0
  12. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/__init__.py +0 -0
  13. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/__init__.py +0 -0
  14. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/base.py +0 -0
  15. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst2950.py +0 -0
  16. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst2960.py +0 -0
  17. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst3500.py +0 -0
  18. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst3560.py +0 -0
  19. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst3650.py +0 -0
  20. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst3750.py +0 -0
  21. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst3850.py +0 -0
  22. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst4500.py +0 -0
  23. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst6500.py +0 -0
  24. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst6800.py +0 -0
  25. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst9200.py +0 -0
  26. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst9300.py +0 -0
  27. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst9400.py +0 -0
  28. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst9500.py +0 -0
  29. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/generic.py +0 -0
  30. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/industrial.py +0 -0
  31. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/modules.py +0 -0
  32. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/nexus9000.py +0 -0
  33. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/routers.py +0 -0
  34. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/fortinet/__init__.py +0 -0
  35. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/fortinet/base.py +0 -0
  36. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/fortinet/fortigate_f.py +0 -0
  37. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/juniper/__init__.py +0 -0
  38. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/juniper/base.py +0 -0
  39. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/juniper/ex2300.py +0 -0
  40. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/juniper/ex3400.py +0 -0
  41. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/juniper/ex4100.py +0 -0
  42. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/juniper/ex4400.py +0 -0
  43. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/juniper/ex4650.py +0 -0
  44. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/juniper/modules.py +0 -0
  45. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/drivers/__init__.py +0 -0
  46. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/drivers/base.py +0 -0
  47. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/drivers/base_driver.py +0 -0
  48. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/exceptions/__init__.py +0 -0
  49. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/__init__.py +0 -0
  50. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/acl_model.py +0 -0
  51. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/agent_manifest.py +0 -0
  52. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/ai_ops.py +0 -0
  53. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/asset.py +0 -0
  54. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/assignment.py +0 -0
  55. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/attribute_value.py +0 -0
  56. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/augment.py +0 -0
  57. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/auth_config.py +0 -0
  58. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/base.py +0 -0
  59. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/capability.py +0 -0
  60. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/collection_agent.py +0 -0
  61. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/compliance.py +0 -0
  62. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/composed_configuration.py +0 -0
  63. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/config_components.py +0 -0
  64. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/config_snapshot.py +0 -0
  65. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/contact.py +0 -0
  66. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/container_entry.py +0 -0
  67. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/credential.py +0 -0
  68. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/device_type.py +0 -0
  69. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/external_value.py +0 -0
  70. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/lldp_neighbor.py +0 -0
  71. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/lldp_topology.py +0 -0
  72. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/logging.py +0 -0
  73. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/logical_node.py +0 -0
  74. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/management_connection.py +0 -0
  75. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/ned.py +0 -0
  76. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/node_response.py +0 -0
  77. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/os_version.py +0 -0
  78. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/pagination.py +0 -0
  79. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/platform.py +0 -0
  80. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/reference.py +0 -0
  81. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/region.py +0 -0
  82. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/site.py +0 -0
  83. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/models/spanning_tree.py +0 -0
  84. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/normalizer/__init__.py +0 -0
  85. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/normalizer/base.py +0 -0
  86. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/normalizer/engine.py +0 -0
  87. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/os_versions.py +0 -0
  88. {acex_devkit-2.7.0 → acex_devkit-2.8.0}/src/acex_devkit/types/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: acex-devkit
3
- Version: 2.7.0
3
+ Version: 2.8.0
4
4
  Summary: ACE-X DevKit - Development kit for building ACE-X drivers and plugins
5
5
  License: AGPL-3.0
6
6
  Keywords: automation,devkit,sdk,drivers,plugins
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "acex-devkit"
3
- version = "2.7.0"
3
+ version = "2.8.0"
4
4
  description = "ACE-X DevKit - Development kit for building ACE-X drivers and plugins"
5
5
  authors = ["Johan Lahti <johan.lahti@acebit.se>"]
6
6
  readme = "README.md"
@@ -1,4 +1,5 @@
1
1
  from enum import StrEnum
2
+ from typing import Literal
2
3
 
3
4
  from pydantic import BaseModel
4
5
 
@@ -79,6 +80,32 @@ class TelemetryAgentAck(BaseModel):
79
80
  config_revision: int
80
81
 
81
82
 
83
+ class CapabilityCoverage(BaseModel):
84
+ """Whether one node-scoped capability made it into the agent's config.
85
+
86
+ For `skipped`, `reason` is a stable code (e.g. "no_management_ip",
87
+ "no_logical_node", "component_error") and `detail` carries free-text
88
+ context when available.
89
+ """
90
+
91
+ status: Literal["rendered", "skipped"]
92
+ reason: str | None = None
93
+ detail: str | None = None
94
+
95
+
96
+ class NodeCoverage(BaseModel):
97
+ """One node the agent covers, and which capabilities are rendered for it.
98
+
99
+ `capabilities` holds only granted, node-scoped capabilities (e.g. icmp,
100
+ snmp) — agent-level listeners such as snmp_trap/syslog are not per node.
101
+ """
102
+
103
+ node_id: int
104
+ hostname: str | None = None
105
+ source: Literal["explicit", "rule", "both"]
106
+ capabilities: dict[TelemetryCapability, CapabilityCoverage] = {}
107
+
108
+
82
109
  class TelemetryAgentResponse(PersistedResponse, TelemetryAgentBase):
83
110
  config_revision: int = 0
84
111
  last_config_poll: str | None = None
@@ -88,6 +115,8 @@ class TelemetryAgentResponse(PersistedResponse, TelemetryAgentBase):
88
115
  nodes: list[int] = []
89
116
  rules: list[TelemetryAgentMatchRuleResponse] = []
90
117
  resolved_nodes: list[int] = []
118
+ # Only populated on single-agent reads (GET /agents/{id}); empty in listings.
119
+ node_coverage: list[NodeCoverage] = []
91
120
 
92
121
 
93
122
  __all__ = [
@@ -102,4 +131,6 @@ __all__ = [
102
131
  "TelemetryAgentMatchRuleResponse",
103
132
  "TelemetryAgentResponse",
104
133
  "TelemetryAgentUpdate",
134
+ "CapabilityCoverage",
135
+ "NodeCoverage",
105
136
  ]
File without changes