Create ietf-network-topology json
[oam.git] / code / network-generator / model / python / top.py
1 # Copyright 2023 highstreet technologies GmbH
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #     http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 #!/usr/bin/python
16
17 """
18 An abstract Class for all classes
19 """
20 import uuid
21 from abc import ABC
22 from model.python.type_definitions import (
23     AdministrativeState,
24     OperationalState,
25     UsageState,
26     Utilization,
27     LifeCycleState,
28     AlarmState,
29 )
30
31
32 # Define the ITop interface
33 class ITop:
34     def __init__(
35         self,
36         id: str = None,
37         name: str = None,
38         administrativeState: AdministrativeState = None,
39         operationalState: OperationalState = None,
40         lifeCycleState: LifeCycleState = None,
41         alarmState: AlarmState = None,
42         usageState: UsageState = None,
43         utilization: Utilization = None,
44     ):
45         self.id = id
46         self.name = name
47         self.administrativeState = administrativeState
48         self.operationalState = operationalState
49         self.lifeCycleState = lifeCycleState
50         self.alarmState = alarmState
51         self.usageState = usageState
52         self.utilization = utilization
53
54
55 # Define the Top class
56 class Top(ABC, ITop):
57     def __init__(self, data: [dict[str, dict] | None] = None):
58         self._id = data["id"] if data and "id" in data else str(uuid.uuid4())
59         self._name = (
60             data["name"]
61             if data and "name" in data
62             else " ".join(["Name", "of", self._id])
63         )
64         self._administrativeState = (
65             data["administrativeState"]
66             if data and "administrativeState" in data
67             else AdministrativeState.LOCKED
68         )
69         self._operationalState = (
70             data["operationalState"]
71             if data and "operationalState" in data
72             else OperationalState.DISABLED
73         )
74         self._lifeCycleState = (
75             data["lifeCycleState"]
76             if data and "lifeCycleState" in data
77             else LifeCycleState.PLANNED
78         )
79         self._alarmState = data["alarmState"] if data and "alarmState" in data else 0
80         self._usageState = (
81             data["usageState"] if data and "usageState" in data else UsageState.UNUSED
82         )
83         self._utilization = data["utilization"] if data and "utilization" in data else 0
84
85     @property
86     def id(self) -> str:
87         return self._id
88
89     @id.setter
90     def id(self, value: str):
91         self._id = value
92
93     @property
94     def name(self) -> str:
95         return self._name
96
97     @name.setter
98     def name(self, value: str):
99         self._name = value
100
101     @property
102     def administrativeState(self) -> AdministrativeState:
103         return self._administrativeState
104
105     @administrativeState.setter
106     def administrativeState(self, value: AdministrativeState):
107         self._administrativeState = value
108
109     @property
110     def operationalState(self) -> OperationalState:
111         return self._operationalState
112
113     @operationalState.setter
114     def operationalState(self, value: OperationalState):
115         self._operationalState = value
116
117     @property
118     def lifeCycleState(self) -> LifeCycleState:
119         return self._lifeCycleState
120
121     @lifeCycleState.setter
122     def lifeCycleState(self, value: LifeCycleState):
123         self._lifeCycleState = value
124
125     @property
126     def alarmState(self) -> AlarmState:
127         return self._alarmState
128
129     @alarmState.setter
130     def alarmState(self, value: AlarmState):
131         self._alarmState = value
132
133     @property
134     def usageState(self) -> UsageState:
135         return self._usageState
136
137     @usageState.setter
138     def usageState(self, value: UsageState):
139         self._usageState = value
140
141     @property
142     def utilization(self) -> Utilization:
143         return self._utilization
144
145     @utilization.setter
146     def utilization(self, value: Utilization):
147         self._utilization = value
148
149     def json(self) -> dict[str, dict]:
150         return {
151             "id": self.id,
152             "name": self.name,
153             "administrativeState": self.administrativeState.value,
154             "operationalState": self.operationalState.value,
155             "lifeCycleState": self.lifeCycleState.value,
156             "alarmState": self.alarmState,
157             "usageState": self.usageState.value,
158             "utilization": self.utilization,
159         }
160
161     def __str__(self) -> str:
162         return str(self.json())