acex-devkit 1.14.1__tar.gz → 1.16.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 (30) hide show
  1. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/PKG-INFO +1 -1
  2. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/pyproject.toml +1 -1
  3. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/models/acl_model.py +4 -4
  4. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/models/composed_configuration.py +37 -45
  5. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/models/logging.py +7 -3
  6. acex_devkit-1.16.0/src/acex_devkit/models/reference.py +37 -0
  7. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/README.md +0 -0
  8. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/__init__.py +0 -0
  9. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/configdiffer/__init__.py +0 -0
  10. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/configdiffer/command.py +0 -0
  11. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/configdiffer/configdiffer.py +0 -0
  12. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/configdiffer/diff.py +0 -0
  13. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/configdiffer/old_configdiffer.py +0 -0
  14. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/configdiffer/old_diff.py +0 -0
  15. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/drivers/__init__.py +0 -0
  16. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/drivers/base.py +0 -0
  17. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/drivers/base_driver.py +0 -0
  18. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/exceptions/__init__.py +0 -0
  19. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/models/__init__.py +0 -0
  20. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/models/attribute_value.py +0 -0
  21. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/models/container_entry.py +0 -0
  22. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/models/external_value.py +0 -0
  23. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/models/management_connection.py +0 -0
  24. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/models/ned.py +0 -0
  25. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/models/node_response.py +0 -0
  26. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/models/spanning_tree.py +0 -0
  27. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/normalizer/__init__.py +0 -0
  28. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/normalizer/base.py +0 -0
  29. {acex_devkit-1.14.1 → acex_devkit-1.16.0}/src/acex_devkit/normalizer/engine.py +0 -0
  30. {acex_devkit-1.14.1 → acex_devkit-1.16.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: 1.14.1
3
+ Version: 1.16.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 = "1.14.1"
3
+ version = "1.16.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"
@@ -70,14 +70,14 @@ class Ipv4AclAttributes(ContainerEntry, BaseModel):
70
70
  identity_fields: ClassVar[tuple[str, ...]] = ("name",)
71
71
  name: AttributeValue[str]
72
72
  type: AttributeValue[str] = "ipv4_acl"
73
- acl_entries: Optional[Dict[str, Ipv4AclEntryAttributes]] = None
73
+ acl_entries: Optional[Dict[str, Ipv4AclEntryAttributes]] = {}
74
74
 
75
75
  class Ipv6AclAttributes(ContainerEntry, BaseModel):
76
76
  identity_fields: ClassVar[tuple[str, ...]] = ("name",)
77
77
  name: AttributeValue[str]
78
78
  type: AttributeValue[str] = "ipv6_acl"
79
- acl_entries: Optional[Dict[str, Ipv6AclEntryAttributes]] = None
79
+ acl_entries: Optional[Dict[str, Ipv6AclEntryAttributes]] = {}
80
80
 
81
81
  class Acl(BaseModel):
82
- ipv4_acls: Optional[Dict[str, Ipv4AclAttributes]] = None
83
- ipv6_acls: Optional[Dict[str, Ipv6AclAttributes]] = None
82
+ ipv4_acls: Optional[Dict[str, Ipv4AclAttributes]] = {}
83
+ ipv6_acls: Optional[Dict[str, Ipv6AclAttributes]] = {}
@@ -16,32 +16,7 @@ from acex_devkit.models.logging import (
16
16
  )
17
17
  from acex_devkit.models.spanning_tree import SpanningTree
18
18
  from acex_devkit.models.acl_model import Acl
19
-
20
- class MetadataValueType(str, Enum):
21
- CONCRETE = "concrete"
22
- EXTERNALVALUE = "externalValue"
23
- REFERENCE = "reference"
24
-
25
- class Metadata(BaseModel):
26
- type: Optional[str] = "str"
27
- value_source: MetadataValueType = MetadataValueType.CONCRETE
28
-
29
- class Reference(ContainerEntry, BaseModel):
30
- identity_fields: ClassVar[tuple[str, ...]] = ("pointer",)
31
- pointer: str
32
- metadata: Metadata = Metadata(type="str", value_source="reference")
33
-
34
- class ReferenceTo(Reference):
35
- pointer: str
36
- metadata: Optional[Dict] = {}
37
-
38
- class ReferenceFrom(Reference):
39
- pointer: str
40
- metadata: Optional[Dict] = {}
41
-
42
- class RenderedReference(BaseModel):
43
- from_ptr: str
44
- to_ptr: str
19
+ from acex_devkit.models.reference import MetadataValueType, Metadata, Reference, ReferenceTo, ReferenceFrom, RenderedReference
45
20
 
46
21
  class SystemConfig(BaseModel):
47
22
  contact: Optional[AttributeValue[str]] = None
@@ -441,26 +416,36 @@ class SnmpPrivProtocol(str, Enum):
441
416
  AES256 = "AES256"
442
417
 
443
418
 
444
- class SnmpConfig(ContainerEntry, BaseModel):
445
- identity_fields: ClassVar[tuple[str, ...]] = ()
419
+ class SnmpConfigAttributes(ContainerEntry, BaseModel):
420
+ identity_fields: ClassVar[tuple[str, ...]] = ("name",)
421
+ name: AttributeValue[str]
446
422
  enabled: AttributeValue[bool] = AttributeValue(value=False)
447
423
  engine_id: Optional[AttributeValue[str]] = None
448
424
  location: Optional[AttributeValue[str]] = None
449
425
  contact: Optional[AttributeValue[str]] = None
450
426
 
451
427
 
452
- class SnmpCommunity(ContainerEntry, Augmentable):
428
+ class SnmpCommunityAttributes(ContainerEntry, Augmentable):
453
429
  identity_fields: ClassVar[tuple[str, ...]] = ("name",)
454
430
  name: AttributeValue[str]
455
431
  community: Optional[AttributeValue[str]] = None # Community string
456
- access: Optional[AttributeValue[SnmpAccess]] = AttributeValue(value=SnmpAccess.READ_ONLY)
457
- view: Optional[AttributeValue[str]] = None
458
- ipv4_acl: Optional[AttributeValue[str]] = None # Cisco and "liknande" vendors
459
- ipv6_acl: Optional[AttributeValue[str]] = None
460
- source_interface: Optional[Reference] = None
432
+ #access: Optional[AttributeValue[SnmpAccess]] = AttributeValue(value=SnmpAccess.READ_ONLY)
433
+ #view: Optional[Reference] = None
434
+ ipv4acl: Optional[Reference] = None # Cisco and similar vendors
435
+ ipv6acl: Optional[Reference] = None
436
+ #source_interface: Optional[Reference] = None
461
437
 
438
+ class SnmpGroupAttributes(ContainerEntry, BaseModel):
439
+ identity_fields: ClassVar[tuple[str, ...]] = ("name",)
440
+ name: AttributeValue[str]
441
+ access: Optional[AttributeValue[SnmpAccess]] = AttributeValue(value=SnmpAccess.READ_ONLY)
442
+ ipv4acl: Optional[Reference] = None # Cisco and similar vendors
443
+ ipv6acl: Optional[Reference] = None
444
+ #source_interface: Optional[Reference] = None
445
+ users: Optional[Dict[str, Reference]] = {} # Users that belong to this group. Only relevant for SNMPv3.
446
+ views: Optional[Dict[str, Reference]] = {} # Views that this group has access to.
462
447
 
463
- class SnmpUser(ContainerEntry, BaseModel):
448
+ class SnmpUserAttributes(ContainerEntry, BaseModel):
464
449
  identity_fields: ClassVar[tuple[str, ...]] = ("username",)
465
450
  username: AttributeValue[str]
466
451
  security_level: Optional[AttributeValue[SnmpSecurityLevel]] = AttributeValue(value=SnmpSecurityLevel.NO_AUTH_NO_PRIV)
@@ -469,15 +454,19 @@ class SnmpUser(ContainerEntry, BaseModel):
469
454
  priv_protocol: Optional[AttributeValue[SnmpPrivProtocol]] = None
470
455
  priv_password: Optional[AttributeValue[str]] = None
471
456
 
457
+ class SnmpViewAttributes(ContainerEntry, BaseModel):
458
+ identity_fields: ClassVar[tuple[str, ...]] = ("name",)
459
+ name: AttributeValue[str]
460
+ oids: Optional[Dict[str, SnmpViewOidAttributes]] = {}
472
461
 
473
- class SnmpView(ContainerEntry, BaseModel):
462
+ class SnmpViewOidAttributes(ContainerEntry, BaseModel):
474
463
  identity_fields: ClassVar[tuple[str, ...]] = ("name",)
475
464
  name: AttributeValue[str]
476
465
  oid: AttributeValue[str]
477
466
  included: Optional[AttributeValue[bool]] = AttributeValue(value=True)
467
+ view: Optional[AttributeValue[str]] = None
478
468
 
479
-
480
- class SnmpServer(ContainerEntry, BaseModel):
469
+ class SnmpServerAttributes(ContainerEntry, BaseModel):
481
470
  identity_fields: ClassVar[tuple[str, ...]] = ("address",)
482
471
  name: Optional[AttributeValue[str]] = None
483
472
  address: Optional[AttributeValue[str]] = None
@@ -489,6 +478,7 @@ class SnmpServer(ContainerEntry, BaseModel):
489
478
  security_level: Optional[AttributeValue[SnmpSecurityLevel]] = None
490
479
  source_interface: Optional[Reference] = None
491
480
  network_instance: Optional[AttributeValue[str]] = None
481
+ group: Optional[Reference] = None # Only relevant for SNMPv3.
492
482
 
493
483
  # ----------------------------
494
484
  # Enum-based trap groups
@@ -605,7 +595,7 @@ class TrapEventOptions(str, Enum):
605
595
  BULKSTAT_COLLECTION = "bulkstat_collection"
606
596
  BULKSTAT_TRANSFER = "bulkstat_transfer"
607
597
 
608
- class TrapEvent(ContainerEntry, BaseModel):
598
+ class TrapEventAttributes(ContainerEntry, BaseModel):
609
599
  identity_fields: ClassVar[tuple[str, ...]] = ("event_name",)
610
600
  name: Optional[AttributeValue[str]] = None
611
601
  event_name: Optional[AttributeValue[TrapEventOptions]] = None
@@ -613,12 +603,14 @@ class TrapEvent(ContainerEntry, BaseModel):
613
603
  #class SnmpTrap(BaseModel): ...
614
604
 
615
605
  class Snmp(BaseModel):
616
- config: Optional[Dict[str, SnmpConfig]] = {}
617
- communities: Optional[Dict[str, SnmpCommunity]] = {}
618
- users: Optional[Dict[str, SnmpUser]] = {}
619
- trap_servers: Optional[Dict[str, SnmpServer]] = {}
620
- trap_events: Optional[Dict[str, TrapEvent]] = {}
621
- views: Optional[Dict[str, SnmpView]] = {}
606
+ config: Optional[Dict[str, SnmpConfigAttributes]] = {}
607
+ communities: Optional[Dict[str, SnmpCommunityAttributes]] = {}
608
+ groups: Optional[Dict[str, SnmpGroupAttributes]] = {}
609
+ users: Optional[Dict[str, SnmpUserAttributes]] = {}
610
+ trap_servers: Optional[Dict[str, SnmpServerAttributes]] = {}
611
+ trap_events: Optional[Dict[str, TrapEventAttributes]] = {}
612
+ views: Optional[Dict[str, SnmpViewAttributes]] = {}
613
+
622
614
 
623
615
  # AAA
624
616
  class aaaBaseClass(ContainerEntry, BaseModel):
@@ -1,6 +1,7 @@
1
1
  from pydantic import BaseModel
2
2
  from acex_devkit.models.attribute_value import AttributeValue
3
3
  from acex_devkit.models.container_entry import ContainerEntry
4
+ from acex_devkit.models.reference import Reference
4
5
  from enum import Enum
5
6
  from typing import ClassVar, Optional, Dict
6
7
 
@@ -35,8 +36,6 @@ class LoggingFacility(str, Enum):
35
36
  CHANGELOG = "CHANGELOG"
36
37
  INTERACTIVE_COMMANDS = "INTERACTIVE_COMMANDS"
37
38
 
38
- class Reference(BaseModel): ...
39
-
40
39
  class LoggingConfig(BaseModel):
41
40
  rate_limit: Optional[AttributeValue[int]] = None
42
41
  severity: Optional[AttributeValue[LoggingSeverity]] = None
@@ -64,6 +63,10 @@ class VtyLine(ContainerEntry, BaseModel):
64
63
  line_number: Optional[AttributeValue[int]] = None
65
64
  logging_synchronous: Optional[AttributeValue[bool]] = None
66
65
  transport_input: Optional[AttributeValue[str]] = None # default is SSH. Mostly used by Cisco.
66
+ ipv4acl: Optional[Reference] = None # reference to an ACL object. Only used by Cisco.
67
+ ipv6acl: Optional[Reference] = None # reference to an ACL object. Only used by Cisco.
68
+ acl_direction: Optional[AttributeValue[str]] = None # direction of ACL, either 'in' or 'out'
69
+ acl_network_instance: Optional[AttributeValue[str]] = None # network instance where ACL is
67
70
 
68
71
  class FileLogging(ContainerEntry, BaseModel):
69
72
  identity_fields: ClassVar[tuple[str, ...]] = ("filename",)
@@ -81,4 +84,5 @@ class LoggingEvent(BaseModel):
81
84
 
82
85
 
83
86
  class LoggingEvents(BaseModel):
84
- events: Optional[Dict[str, LoggingEvent]] = None
87
+ events: Optional[Dict[str, LoggingEvent]] = None
88
+
@@ -0,0 +1,37 @@
1
+ from pydantic import BaseModel
2
+ from typing import Optional, Dict, ClassVar
3
+ from enum import Enum
4
+
5
+ from acex_devkit.models.container_entry import ContainerEntry
6
+
7
+
8
+ class MetadataValueType(str, Enum):
9
+ CONCRETE = "concrete"
10
+ EXTERNALVALUE = "externalValue"
11
+ REFERENCE = "reference"
12
+
13
+
14
+ class Metadata(BaseModel):
15
+ type: Optional[str] = "str"
16
+ value_source: MetadataValueType = MetadataValueType.CONCRETE
17
+
18
+
19
+ class Reference(ContainerEntry, BaseModel):
20
+ identity_fields: ClassVar[tuple[str, ...]] = ("pointer",)
21
+ pointer: str
22
+ metadata: Metadata = Metadata(type="str", value_source="reference")
23
+
24
+
25
+ class ReferenceTo(Reference):
26
+ pointer: str
27
+ metadata: Optional[Dict] = {}
28
+
29
+
30
+ class ReferenceFrom(Reference):
31
+ pointer: str
32
+ metadata: Optional[Dict] = {}
33
+
34
+
35
+ class RenderedReference(BaseModel):
36
+ from_ptr: str
37
+ to_ptr: str
File without changes