def record_class_and_instance_string(self, record): from chroma_core.lib.storage_plugin.manager import storage_plugin_manager # Get the BaseStorageResource class and have it translate the alert_class klass = storage_plugin_manager.get_resource_class_by_id( record.resource_class_id) return klass._meta.label, record.to_resource().get_label()
def delete_attribute(self, attr_name): from chroma_core.lib.storage_plugin.manager import storage_plugin_manager resource_class = storage_plugin_manager.get_resource_class_by_id( self.resource_class_id) model_class = resource_class.attr_model_class(attr_name) try: model_class.objects.get(resource=self, key=attr_name).delete() except model_class.DoesNotExist: pass
def record_alert_message(self, record_id, alert_class): from chroma_core.lib.storage_plugin.manager import storage_plugin_manager # Get the StorageResourceRecord record = StorageResourceRecord.objects.get(pk=record_id) # Get the BaseStorageResource class and have it translate the alert_class klass = storage_plugin_manager.get_resource_class_by_id( record.resource_class_id) msg = "%s (%s %s)" % (klass.alert_message(alert_class), klass._meta.label, record.alias_or_name()) return msg
def to_resource(self): from chroma_core.lib.storage_plugin.manager import storage_plugin_manager klass = storage_plugin_manager.get_resource_class_by_id( self.resource_class_id) attr_model_to_keys = defaultdict(list) for attr, attr_props in klass._meta.storage_attributes.items(): attr_model_to_keys[attr_props.model_class].append(attr) storage_dict = {} for attr_model, keys in attr_model_to_keys.items(): for attr in attr_model.objects.filter(resource=self, key__in=keys): storage_dict[attr.key] = attr_model.decode(attr.value) resource = klass(**storage_dict) resource._handle = self.id resource._handle_global = True return resource
def update_attribute(self, key, val): from chroma_core.lib.storage_plugin.manager import storage_plugin_manager resource_class = storage_plugin_manager.get_resource_class_by_id(self.resource_class_id) # Try to update an existing record attr_model_class = resource_class.attr_model_class(key) updated = attr_model_class.objects.filter(resource=self, key=key).update(value=attr_model_class.encode(val)) # If there was no existing record, create one if updated == 0: from django.db import IntegrityError try: attr_model_class.objects.create(resource=self, key=key, value=attr_model_class.encode(val)) except IntegrityError: # Collided with another update, order undefined so let him win pass
def get_class(self): from chroma_core.lib.storage_plugin.manager import storage_plugin_manager return storage_plugin_manager.get_resource_class_by_id(self.pk)