acex-devkit 2.6.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.6.0 → acex_devkit-2.8.0}/PKG-INFO +2 -1
  2. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/pyproject.toml +1 -1
  3. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/node_response.py +2 -0
  4. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/telemetry_agent.py +31 -0
  5. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/README.md +0 -0
  6. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/__init__.py +0 -0
  7. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/configdiffer/__init__.py +0 -0
  8. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/configdiffer/command.py +0 -0
  9. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/configdiffer/configdiffer.py +0 -0
  10. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/configdiffer/diff.py +0 -0
  11. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/configdiffer/old_configdiffer.py +0 -0
  12. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/configdiffer/old_diff.py +0 -0
  13. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/__init__.py +0 -0
  14. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/__init__.py +0 -0
  15. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/base.py +0 -0
  16. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst2950.py +0 -0
  17. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst2960.py +0 -0
  18. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst3500.py +0 -0
  19. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst3560.py +0 -0
  20. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst3650.py +0 -0
  21. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst3750.py +0 -0
  22. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst3850.py +0 -0
  23. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst4500.py +0 -0
  24. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst6500.py +0 -0
  25. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst6800.py +0 -0
  26. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst9200.py +0 -0
  27. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst9300.py +0 -0
  28. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst9400.py +0 -0
  29. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/catalyst9500.py +0 -0
  30. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/generic.py +0 -0
  31. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/industrial.py +0 -0
  32. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/modules.py +0 -0
  33. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/nexus9000.py +0 -0
  34. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/cisco/routers.py +0 -0
  35. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/fortinet/__init__.py +0 -0
  36. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/fortinet/base.py +0 -0
  37. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/fortinet/fortigate_f.py +0 -0
  38. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/juniper/__init__.py +0 -0
  39. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/juniper/base.py +0 -0
  40. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/juniper/ex2300.py +0 -0
  41. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/juniper/ex3400.py +0 -0
  42. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/juniper/ex4100.py +0 -0
  43. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/juniper/ex4400.py +0 -0
  44. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/juniper/ex4650.py +0 -0
  45. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/device_types/juniper/modules.py +0 -0
  46. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/drivers/__init__.py +0 -0
  47. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/drivers/base.py +0 -0
  48. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/drivers/base_driver.py +0 -0
  49. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/exceptions/__init__.py +0 -0
  50. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/__init__.py +0 -0
  51. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/acl_model.py +0 -0
  52. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/agent_manifest.py +0 -0
  53. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/ai_ops.py +0 -0
  54. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/asset.py +0 -0
  55. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/assignment.py +0 -0
  56. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/attribute_value.py +0 -0
  57. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/augment.py +0 -0
  58. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/auth_config.py +0 -0
  59. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/base.py +0 -0
  60. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/capability.py +0 -0
  61. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/collection_agent.py +0 -0
  62. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/compliance.py +0 -0
  63. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/composed_configuration.py +0 -0
  64. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/config_components.py +0 -0
  65. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/config_snapshot.py +0 -0
  66. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/contact.py +0 -0
  67. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/container_entry.py +0 -0
  68. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/credential.py +0 -0
  69. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/device_type.py +0 -0
  70. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/external_value.py +0 -0
  71. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/lldp_neighbor.py +0 -0
  72. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/lldp_topology.py +0 -0
  73. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/logging.py +0 -0
  74. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/logical_node.py +0 -0
  75. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/management_connection.py +0 -0
  76. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/ned.py +0 -0
  77. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/os_version.py +0 -0
  78. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/pagination.py +0 -0
  79. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/platform.py +0 -0
  80. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/reference.py +0 -0
  81. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/region.py +0 -0
  82. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/site.py +0 -0
  83. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/models/spanning_tree.py +0 -0
  84. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/normalizer/__init__.py +0 -0
  85. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/normalizer/base.py +0 -0
  86. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/normalizer/engine.py +0 -0
  87. {acex_devkit-2.6.0 → acex_devkit-2.8.0}/src/acex_devkit/os_versions.py +0 -0
  88. {acex_devkit-2.6.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.6.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
@@ -11,6 +11,7 @@ Classifier: License :: OSI Approved :: GNU Affero General Public License v3
11
11
  Classifier: Programming Language :: Python :: 3
12
12
  Classifier: Programming Language :: Python :: 3.13
13
13
  Classifier: Programming Language :: Python :: 3.14
14
+ Classifier: Programming Language :: Python :: 3.15
14
15
  Requires-Dist: deepdiff (>=8.6.1)
15
16
  Requires-Dist: ipaddress (>=1.0.23)
16
17
  Requires-Dist: pydantic (>=2.12.5)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "acex-devkit"
3
- version = "2.6.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"
@@ -10,6 +10,7 @@ from acex_devkit.models.asset import (
10
10
  )
11
11
  from acex_devkit.models.base import PersistedResponse
12
12
  from acex_devkit.models.logical_node import LogicalNodeResponse
13
+ from acex_devkit.models.management_connection import ManagementConnectionResponse
13
14
 
14
15
 
15
16
  class AssetRefType(StrEnum):
@@ -39,6 +40,7 @@ class NodeListItem(PersistedResponse, NodeBase):
39
40
  vendor: str | None = None
40
41
  os: str | None = None
41
42
  ned_id: str | None = None
43
+ management_connections: list[ManagementConnectionResponse] = []
42
44
  created_at: datetime | None = None
43
45
  updated_at: datetime | None = None
44
46
 
@@ -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