Fix type conflict in Top
[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, abstractmethod
22 from typing import Any
23 from model.python.type_definitions import (
24     AddressType,
25     AdministrativeState,
26     OperationalState,
27     UsageState,
28     Utilization,
29     LifeCycleState,
30     AlarmState,
31 )
32 from model.python.geo_location import GeoLocation
33
34
35 # Define the ITop interface
36 class ITop:
37     def __init__(
38         self,
39         id: str = None,
40         name: str = None,
41         administrativeState: AdministrativeState = None,
42         operationalState: OperationalState = None,
43         lifeCycleState: LifeCycleState = None,
44         alarmState: AlarmState = None,
45         usageState: UsageState = None,
46         utilization: Utilization = None,
47     ):
48         self.id = id
49         self.name = name
50         self.administrativeState = administrativeState
51         self.operationalState = operationalState
52         self.lifeCycleState = lifeCycleState
53         self.alarmState = alarmState
54         self.usageState = usageState
55         self.utilization = utilization
56
57
58 # Define the Top class
59 class Top(ABC, ITop):
60     def __init__(self, data: [dict[str, Any] | None] = None):
61         self._id = data["id"] if data and "id" in data else str(uuid.uuid4())
62         self._name = (
63             data["name"]
64             if data and "name" in data
65             else " ".join(["Name", "of", self._id])
66         )
67         self._administrativeState = (
68             data["administrativeState"]
69             if data and "administrativeState" in data
70             else AdministrativeState.LOCKED
71         )
72         self._operationalState = (
73             data["operationalState"]
74             if data and "operationalState" in data
75             else OperationalState.DISABLED
76         )
77         self._lifeCycleState = (
78             data["lifeCycleState"]
79             if data and "lifeCycleState" in data
80             else LifeCycleState.PLANNED
81         )
82         self._alarmState = data["alarmState"] if data and "alarmState" in data else 0
83         self._usageState = (
84             data["usageState"] if data and "usageState" in data else UsageState.UNUSED
85         )
86         self._utilization = data["utilization"] if data and "utilization" in data else 0
87
88     @property
89     def id(self) -> str:
90         return self._id
91
92     @id.setter
93     def id(self, value: str):
94         self._id = value
95
96     @property
97     def name(self) -> str:
98         return self._name
99
100     @name.setter
101     def name(self, value: str):
102         self._name = value
103
104     @property
105     def administrativeState(self) -> AdministrativeState:
106         return self._administrativeState
107
108     @administrativeState.setter
109     def administrativeState(self, value: AdministrativeState):
110         self._administrativeState = value
111
112     @property
113     def operationalState(self) -> OperationalState:
114         return self._operationalState
115
116     @operationalState.setter
117     def operationalState(self, value: OperationalState):
118         self._operationalState = value
119
120     @property
121     def lifeCycleState(self) -> LifeCycleState:
122         return self._lifeCycleState
123
124     @lifeCycleState.setter
125     def lifeCycleState(self, value: LifeCycleState):
126         self._lifeCycleState = value
127
128     @property
129     def alarmState(self) -> AlarmState:
130         return self._alarmState
131
132     @alarmState.setter
133     def alarmState(self, value: AlarmState):
134         self._alarmState = value
135
136     @property
137     def usageState(self) -> UsageState:
138         return self._usageState
139
140     @usageState.setter
141     def usageState(self, value: UsageState):
142         self._usageState = value
143
144     @property
145     def utilization(self) -> Utilization:
146         return self._utilization
147
148     @utilization.setter
149     def utilization(self, value: Utilization):
150         self._utilization = value
151
152     def json(self) -> dict[str, Any]:
153         return {
154             "id": self.id,
155             "name": self.name,
156             "administrativeState": self.administrativeState.value,
157             "operationalState": self.operationalState.value,
158             "lifeCycleState": self.lifeCycleState.value,
159             "alarmState": self.alarmState,
160             "usageState": self.usageState.value,
161             "utilization": self.utilization,
162         }
163
164     def __str__(self) -> str:
165         return str(self.json())