# Copyright 2023 Canonical Ltd.
# Licensed under the Apache V2, see LICENCE file for details.
from __future__ import annotations
from . import model
from .client import client, overrides
[docs]def get_entity_delta(d: overrides.Delta):
return _delta_types[d.entity](d.deltas)
[docs]def get_entity_class(entity_type):
return _delta_types[entity_type].get_entity_class()
[docs]class EntityDelta(client.Delta):
data: dict[str, str]
[docs] def get_id(self) -> str:
return self.data["id"]
[docs] @classmethod
def get_entity_class(cls) -> type[model.ModelEntity]:
raise NotImplementedError()
[docs]class ActionDelta(EntityDelta):
[docs] @classmethod
def get_entity_class(cls):
from .action import Action
return Action
[docs]class ApplicationDelta(EntityDelta):
[docs] def get_id(self):
return self.data["name"]
[docs] @classmethod
def get_entity_class(cls):
from .application import Application
return Application
[docs]class AnnotationDelta(EntityDelta):
[docs] def get_id(self):
return self.data["tag"]
[docs] @classmethod
def get_entity_class(cls):
from .annotation import Annotation
return Annotation
[docs]class ModelDelta(EntityDelta):
[docs] def get_id(self):
return self.data["model-uuid"]
[docs] @classmethod
def get_entity_class(cls):
from .model import ModelInfo
return ModelInfo
[docs]class MachineDelta(EntityDelta):
[docs] @classmethod
def get_entity_class(cls):
from .machine import Machine
return Machine
[docs]class UnitDelta(EntityDelta):
[docs] def get_id(self):
return self.data["name"]
[docs] @classmethod
def get_entity_class(cls):
from .unit import Unit
return Unit
[docs]class RelationDelta(EntityDelta):
[docs] @classmethod
def get_entity_class(cls):
from .relation import Relation
return Relation
[docs]class RemoteApplicationDelta(EntityDelta):
[docs] def get_id(self):
return self.data["name"]
[docs] @classmethod
def get_entity_class(cls):
from .remoteapplication import RemoteApplication
return RemoteApplication
[docs]class CharmDelta(EntityDelta):
[docs] def get_id(self):
return self.data["charm-url"]
[docs] @classmethod
def get_entity_class(cls):
from .charm import Charm
return Charm
[docs]class ApplicationOfferDelta(EntityDelta):
[docs] def get_id(self):
return self.data["application-name"]
[docs] @classmethod
def get_entity_class(cls):
from .remoteapplication import ApplicationOffer
return ApplicationOffer
_delta_types = {
"action": ActionDelta,
"annotation": AnnotationDelta,
"application": ApplicationDelta,
"applicationOffer": ApplicationOfferDelta,
"charm": CharmDelta,
"machine": MachineDelta,
"model": ModelDelta,
"relation": RelationDelta,
"remoteApplication": RemoteApplicationDelta,
"unit": UnitDelta,
}