-# Copyright (C) 2021 Wind River Systems, Inc.\r
-#\r
-# Licensed under the Apache License, Version 2.0 (the "License");\r
-# you may not use this file except in compliance with the License.\r
-# You may obtain a copy of the License at\r
-#\r
-# http://www.apache.org/licenses/LICENSE-2.0\r
-#\r
-# Unless required by applicable law or agreed to in writing, software\r
-# distributed under the License is distributed on an "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-# See the License for the specific language governing permissions and\r
-# limitations under the License.\r
-\r
-# from dataclasses import dataclass\r
-# import datetime\r
-import json\r
-\r
-\r
-class MismatchedModel(Exception):\r
- pass\r
-\r
-\r
-class StxGenericModel:\r
- def __init__(self, api_response: dict = None) -> None:\r
- if api_response:\r
- self.id = api_response.uuid\r
- self.content = json.dumps(api_response.to_dict())\r
- self.updatetime = api_response.updated_at\r
- self.createtime = api_response.created_at\r
- self.name = api_response.name\r
-\r
- def is_outdated(self, newmodel) -> bool:\r
- return self.updatetime < newmodel.updatetime\r
-\r
- def update_by(self, newmodel) -> None:\r
- if self.id != newmodel.id:\r
- raise MismatchedModel("Mismatched model")\r
- self.name = newmodel.name\r
-\r
- self.content = newmodel.content\r
- self.createtime = newmodel.createtime\r
- self.updatetime = newmodel.updatetime\r
-\r
-\r
-class StxK8sClusterModel(StxGenericModel):\r
- def __init__(self, api_response: dict = None) -> None:\r
- super().__init__(api_response=api_response)\r
-\r
- def is_outdated(self, newmodel) -> bool:\r
- # never outdated since lack of such evidence\r
- return False\r
+# Copyright (C) 2021 Wind River Systems, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# from dataclasses import dataclass
+import datetime
+import json
+from o2common.domain.base import AgRoot
+
+from o2ims.domain.resource_type import ResourceTypeEnum, MismatchedModel
+from o2common.helper import o2logging
+logger = o2logging.get_logger(__name__)
+
+
+class StxGenericModel(AgRoot):
+ def __init__(self, type: ResourceTypeEnum,
+ api_response: dict = None, content_hash=None) -> None:
+ super().__init__()
+ if api_response:
+ self.id = str(api_response.uuid)
+ self.type = type
+ self.name = api_response.name
+ self.updatetime = datetime.datetime.strptime(
+ api_response.updated_at.split('.')[0], "%Y-%m-%dT%H:%M:%S") \
+ if api_response.updated_at else None
+ self.createtime = datetime.datetime.strptime(
+ api_response.created_at.split('.')[0], "%Y-%m-%dT%H:%M:%S") \
+ if api_response.created_at else None
+ self.filtered = getattr(api_response, 'filtered', None)
+ self.hash = content_hash or str(
+ hash((self.id, str(self.filtered)
+ if self.filtered else self.updatetime)))
+
+ def handle_non_serializable(obj):
+ return repr(obj)
+ self.content = json.dumps(
+ vars(api_response), default=handle_non_serializable)
+
+ if ResourceTypeEnum.RESOURCE_POOL == type:
+ self.res_pool_id = self.id
+
+ def is_outdated(self, newmodel) -> bool:
+ # return self.updatetime < newmodel.updatetime
+ # logger.warning("hash1: " + self.hash + " vs hash2: " + newmodel.hash)
+ return self.hash != newmodel.hash
+
+ def update_by(self, newmodel) -> None:
+ if self.id != newmodel.id:
+ raise MismatchedModel("Mismatched model")
+ self.name = newmodel.name
+ self.createtime = newmodel.createtime
+ self.updatetime = newmodel.updatetime
+ self.content = newmodel.content